ITK上的形态学分水岭标记过滤器
Morphological Watershed From Markers filter on ITK
我正在尝试使用ITK中的库创建一个用于图像分割的管道。但是,当我应用itkMorphologicalWatershedFromMarkersFilter时,结果是一个空白图像(只有1的二进制图像)。
有人知道如何正确应用此筛选器吗?
我的输入图像应该是图像的梯度,标记图像应该是在同一图像上应用分水岭滤波器的结果。
输入图像
标记图像
这是过滤器的声明和应用:
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
非常感谢!!
虽然不是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"图像过滤器对图像进行处理,该过滤器为每个"岛"提供一个唯一的编号。这是WatershedFromMarker过滤器的标记(或标签)图像的预期值。
我还将注意到,您的输入图像有一些边界线,您可能不希望将其作为输入。
相关文章:
- 带过滤器的现代迭代c++集合
- 如何将字符串添加到布谷鸟过滤器?
- 在事件过滤器之前发出对象的事件
- C++对开销较少的容器使用多个过滤器
- CBasePin 递增对拥有过滤器的引用.循环引用?
- Qt:事件过滤器在显示 QCompleter 时不接收按键
- 使用 Vivek 的 Vcam / 捕获源过滤器构建/链接错误
- Qt 中的去抖动事件过滤器
- QT 事件过滤器 mouseEvent->pos().x() 始终为零,但 mouseEvent->pos().y() 工作正常
- 如何使用C++获取/设置OBS中的垂直滚动过滤器属性?
- ZeroMQ (cppzmq) 订阅者,过滤器以相同的字符串开头
- 有没有办法查询邮件过滤器是否已经生效?
- 使用指针使用过滤器重写字符数组
- 如何优化此侵蚀过滤器代码?
- 编译自己的 FFMPEG 过滤器
- 显式检查提升::日志过滤器?
- C++编译新的警告过滤器
- 我们无法在 Windows 10 中设置自定义密码过滤器
- CUDA 盒子过滤器如何工作?
- ITK上的形态学分水岭标记过滤器