Я работаю над изображениями DICOM (КТ) и хотел бы выделить на моем снимке некоторые структуры, представляющие интерес, такие как человеческие органы (например, аорта, см. прилагаемое изображение). Пишу на С++ с помощью ITK и VTK.
Предположим, что эти органы имеют определенную интенсивность яркости, поэтому я могу автоматически идентифицировать их с помощью алгоритма увеличения области (код ниже). Для этого я предварительно вычислил некоторые пороговые значения, основанные на средних значениях и стандартных отклонениях вокселей, принадлежащих органу.
Как я могу оставить на изображении только аорту с помощью функций ITK/VTK? Я думаю, мне нужен фильтр, который будет делать прямо противоположное 1MaskImageFilter.html" rel="nofollow noreferrer">фильтр изображения маски ITK.
Пожалуйста, найдите (псевдо) код, соответствующий выделению органов ниже. Я вычислил расширение в 5 вокселей в результате наращивания области, чтобы убедиться, что он включает все воксели органа и чтобы после обрезки был достаточный запас вокруг органа.
typedef short InputPixelType;
typedef unsigned char OutputPixelType;
const int Dimension = 3;
typedef itk::Image< InputPixelType, Dimension > InputImageType;
typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
// Region growing
typedef itk::ConnectedThresholdImageFilter< InputImagetype,
OutputImagetype > ConnectedFilterType;
ConnectedFilterType::Pointer connectedThreshold = ConnectedFilterType::New();
connectedThreshold->SetInput(input);
connectedThreshold->SetUpper(upperThreshold);
connectedThreshold->SetLower(lowerThreshold);
//Initializing seed
InternalImagetype::IndexType index;
index[0] = seed_x;
index[1] = seed_y;
connectedThreshold->SetSeed(index);
// Dilate the resulting region-growing of 5 voxels for safety
typedef itk::BinaryBallStructuringElement< OutputImageType,
Dimension > StructuringElementType;
typedef itk::BinaryDilateImageFilter< OutputImageType,
OutputImageType, StruturingElementType > DilateFilterType;
StructuringElementType structuringElement;
structuringElement.SetRadius(5);
structuringElement.CreateStructuringElement();
DilateFilterType::Pointer dilateFilter = DilateFilterType::New();
dilateFilter->SetInput(connectedThreshold->GetOutput());
dilatefilter->SetKernel(structuringElement);
// Saving the results of the RG+dilation
typedef itk::ImageFileWriter< OutputImageType > WriterType;
WriterType::Pointer writer = WriterType::New();
writer->SetInput(dilateFilter->GetOutput());
writer->SetFileName("organ-segmented-with-dilation.mhd");
try {
writer->Update();
} catch(itk::ExceptionObject& err) {
std::cerr << "Exception caught! " << err.what() << std::endl;
return EXIT_FAILURE;
}
// What to do next to crop the input image with this region-growing?
Любая помощь или замечание приветствуется.