ITK 上标记过滤器的形态学分水岭
Morphological Watershed From Markers filter on ITK
我正在尝试使用 ITK 中的库创建图像分割管道。但是,当我应用 itkMorphologicalWatershedFromMarkersFilter 时,结果是一个空白图像(只有 1 的二进制图像)。
有谁知道如何正确应用这个过滤器?
我的输入图像应该是图像的梯度,标记图像应该是对同一图像应用分水岭过滤器的结果。
输入image
标记image
这是过滤器的声明和应用:
typedef itk::MorphologicalWatershedFromMarkersImageFilter < OutputImageType, OutputImageType >
MorphologicalWatershedFromMarkersImageFilterType;
MorphologicalWatershedFromMarkersImageFilterType::Pointer CwatershedFilter
= MorphologicalWatershedFromMarkersImageFilterType::New();
CwatershedFilter->SetInput1(reader1->GetOutput());
CwatershedFilter->SetMarkerImage(reader2->GetOutput());
CwatershedFilter->SetMarkWatershedLine(true);
try{
CwatershedFilter->Update();
}
catch (itk::ExceptionObject & error)
{
std::cerr << "Error: " << error << std::endl;
getchar();
return EXIT_FAILURE;
}
此外,这是此过滤器文档的 link,来自 itk.org:
非常感谢!!
虽然不是 C++ ITK,但有一个 SimpleITK Notebooks 演示了它的用法:
http://insightsoftwareconsortium.github.io/SimpleITK-Notebooks/32_Watersheds_Segmentation.html
您的标记图像只是二进制图像,而不是标签图像。我的意思是你的图像只有 0 和 1(或 255)。在链接示例中注意以下内容:
min_img = sitk.RegionalMinima(feature_img, backgroundValue=0, foregroundValue=1.0, fullyConnected=False, flatIsMinima=True)
marker_img = sitk.ConnectedComponent(min_img, fullyConnected=False)
"min_img" 是二值图像,但随后用 "ConnectedComponent" 图像过滤器处理了图像,这给每个 "island" 一个唯一的数字。这是 WatershedFromMarker 过滤器的标记(或标签)图像的预期结果。
我还会注意到您的输入图像有一些边界线,您可能不希望将其作为输入。
我正在尝试使用 ITK 中的库创建图像分割管道。但是,当我应用 itkMorphologicalWatershedFromMarkersFilter 时,结果是一个空白图像(只有 1 的二进制图像)。
有谁知道如何正确应用这个过滤器?
我的输入图像应该是图像的梯度,标记图像应该是对同一图像应用分水岭过滤器的结果。
输入image
标记image
这是过滤器的声明和应用:
typedef itk::MorphologicalWatershedFromMarkersImageFilter < OutputImageType, OutputImageType >
MorphologicalWatershedFromMarkersImageFilterType;
MorphologicalWatershedFromMarkersImageFilterType::Pointer CwatershedFilter
= MorphologicalWatershedFromMarkersImageFilterType::New();
CwatershedFilter->SetInput1(reader1->GetOutput());
CwatershedFilter->SetMarkerImage(reader2->GetOutput());
CwatershedFilter->SetMarkWatershedLine(true);
try{
CwatershedFilter->Update();
}
catch (itk::ExceptionObject & error)
{
std::cerr << "Error: " << error << std::endl;
getchar();
return EXIT_FAILURE;
}
此外,这是此过滤器文档的 link,来自 itk.org:
非常感谢!!
虽然不是 C++ ITK,但有一个 SimpleITK Notebooks 演示了它的用法:
http://insightsoftwareconsortium.github.io/SimpleITK-Notebooks/32_Watersheds_Segmentation.html
您的标记图像只是二进制图像,而不是标签图像。我的意思是你的图像只有 0 和 1(或 255)。在链接示例中注意以下内容:
min_img = sitk.RegionalMinima(feature_img, backgroundValue=0, foregroundValue=1.0, fullyConnected=False, flatIsMinima=True)
marker_img = sitk.ConnectedComponent(min_img, fullyConnected=False)
"min_img" 是二值图像,但随后用 "ConnectedComponent" 图像过滤器处理了图像,这给每个 "island" 一个唯一的数字。这是 WatershedFromMarker 过滤器的标记(或标签)图像的预期结果。
我还会注意到您的输入图像有一些边界线,您可能不希望将其作为输入。