我正在尝试分离连接的对象。 Python 和分水岭算法(scipy 实现)似乎很适合处理这个问题。
这是我的图像和自动生成的分水岭种子点(阈值和距离变换图像的局部最大值):
seeds = myGenSeeds( image_grey )
到目前为止,还不错;每个对象都有一个种子。
不过,当我运行分水岭时,事情就崩溃了:
segmented = ndimage.measurements.watershed_ift( 255 - image_grey, seeds)`
中上集群和中心集群都分离得很差。在顶部的集群中,一个物体淹没在另外两个周围。在中心簇中,虽然它可能太小而无法在这里看到,但中心种子仅淹没了几个像素。
我有两个问题:
- 分水岭算法是分离此类对象的好选择吗?
- 如果是这样,我是否需要进行某种预处理以使图像更适合分水岭分割?
最佳答案
我找到这个帖子是因为我在使用 watershed_ift
时遇到了同样的问题。我建议只使用 skimage.morphology
中的 watershed
函数。它接受浮点输入,因此您不会丢失灰度图像的分辨率,它实际上淹没了整个盆地,而 ift
方法似乎只淹没了标记所在的等值。
编辑: 一定要将距离变换乘以 -1,这样峰就变成了谷,否则你不会得到任何分水岭!
关于python - 具有分水岭的连通对象的图像分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19385264/