基于分水岭的连通物体图像分割

2024-10-01 04:47:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我在试着分离连接的物体。Python和分水岭算法(scipy实现)似乎很适合处理这个问题。在

这是我的图像和自动生成的分水岭种子点(阈值和距离变换图像的局部最大值):

seeds = myGenSeeds( image_grey )

enter image description here

到目前为止,一切顺利;每一个物体都有一颗种子。在

不过,当我管理分水岭时,事情就会崩溃:

^{pr2}$

enter image description here

中上部的星系团和中部的星系团都很难分开。在顶部簇中,一个对象淹没在另两个对象周围。在中心星团中,虽然它可能太小,在这里看不到,但中心种子淹没到只有几个像素。在

我有两个问题:

  1. 分水岭算法是这样分离对象的好选择吗?在
  2. 如果是这样的话,我是否需要做一些预处理以使图像更适合分水岭分割?在

Tags: 对象图像image算法距离阈值局部scipy
3条回答

分水岭算法是一种简单而鲁棒的分割算法。你的数据对这种分割算法来说似乎没问题。据我所见,不需要特殊的预处理。当然,你已经看到你自己,在某些情况下,它有点在边缘。在

分水岭经常被使用,但不考虑任何关于您想要识别的对象的特殊知识。这样可能会有更复杂的算法可用。在

分水岭算法可能还有更复杂的版本。这个名为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,这样山峰就会变成山谷,否则就不会有分水岭了!在

相关问题 更多 >