我在试着分离连接的物体。Python和分水岭算法(scipy实现)似乎很适合处理这个问题。在
这是我的图像和自动生成的分水岭种子点(阈值和距离变换图像的局部最大值):
seeds = myGenSeeds( image_grey )
到目前为止,一切顺利;每一个物体都有一颗种子。在
不过,当我管理分水岭时,事情就会崩溃:
^{pr2}$中上部的星系团和中部的星系团都很难分开。在顶部簇中,一个对象淹没在另两个对象周围。在中心星团中,虽然它可能太小,在这里看不到,但中心种子淹没到只有几个像素。在
我有两个问题:
分水岭算法是一种简单而鲁棒的分割算法。你的数据对这种分割算法来说似乎没问题。据我所见,不需要特殊的预处理。当然,你已经看到你自己,在某些情况下,它有点在边缘。在
分水岭经常被使用,但不考虑任何关于您想要识别的对象的特殊知识。这样可能会有更复杂的算法可用。在
分水岭算法可能还有更复杂的版本。这个名为Watershed 2.0的Python模块有参数(与scipy版本不同)。我会稍微调整一下参数,看看结果是否可以改进。在
Ilastik是一种常用于自动分割的工具。它包含半自动学习(基本上你通过举例来训练它,并从中学习重要的特性)。在
您应该在距离变换步骤之后应用多级阈值方法。将距离转换图像转换为灰度图像后,对象的中心将在生成的灰度图像中具有最高像素值。在这里,您可以找到从阈值的最高值开始的对象的中心。看这张纸https://www.researchgate.net/publication/303703322_A_Multi-level_Thresholding_Based_Segmentation_Method_for_Microscopic_Fluorescence_In_Situ_Hybridization_FISH_Images
我找到这个线程是因为我对
watershed_ift
有相同的问题。我建议只在skimage.morphology
中使用watershed
函数。它接受浮点输入,因此不会丢失灰度图像的分辨率,而且它实际上会淹没整个盆地,而ift
方法似乎只会淹没标记所在的等值线。在编辑: 一定要将距离变换乘以-1,这样山峰就会变成山谷,否则就不会有分水岭了!在
相关问题 更多 >
编程相关推荐