来自标记的形态分水岭过滤ITK

时间:2016-03-29 18:38:11

标签: c++ image-processing image-segmentation itk watershed

我正在尝试使用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;
}

此外,这是此过滤器文档的链接,来自itk.org:

http://www.itk.org/Doxygen48/html/classitk_1_1MorphologicalWatershedFromMarkersImageFilter.html#a20e3b8de42219606ba759e822be0aaa2

非常感谢!!

1 个答案:

答案 0 :(得分:0)

虽然不是C ++ ITK,但有一个SimpleITK笔记本可以证明它的用法:

http://insightsoftwareconsortium.github.io/SimpleITK-Notebooks/32_Watersheds_Segmentation.html

您的标记图像只是二进制,而不是标签图像。我的意思是你的图像只有0和1(或255)。在链接的示例中,请注意以下内容:

import

&#34; min_img&#34;是二进制图像,但随后使用&#34; ConnectedComponent&#34;处理图像。图像过滤器,它给每个&#34;岛&#34;一个独特的号码。这是WatershedFromMarker过滤器的标记(或标签)图像的预期结果。

我还会注意到您的输入图像有一些边界线,您可能不希望这些边界线作为输入。