python - 具有分水岭的连通对象的图像分割

标签 python image-processing scipy watershed

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

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

seeds = myGenSeeds( image_grey )

enter image description here

到目前为止,还不错;每个对象都有一个种子。

不过,当我运行分水岭时,事情就崩溃了:

segmented = ndimage.measurements.watershed_ift( 255 - image_grey, seeds)`

enter image description here

中上集群和中心集群都分离得很差。在顶部的集群中,一个物体淹没在另外两个周围。在中心簇中,虽然它可能太小而无法在这里看到,但中心种子仅淹没了几个像素。

我有两个问题:

  1. 分水岭算法是分离此类对象的好选择吗?
  2. 如果是这样,我是否需要进行某种预处理以使图像更适合分水岭分割?

最佳答案

我找到这个帖子是因为我在使用 watershed_ift 时遇到了同样的问题。我建议只使用 skimage.morphology 中的 watershed 函数。它接受浮点输入,因此您不会丢失灰度图像的分辨率,它实际上淹没了整个盆地,而 ift 方法似乎只淹没了标记所在的等值。

编辑: 一定要将距离变换乘以 -1,这样峰就变成了谷,否则你不会得到任何分水岭!

关于python - 具有分水岭的连通对象的图像分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19385264/

相关文章:

python - 将字符串放在Python中的字符串旁边

java - 如何将 C++ 变量传递给处理脚本?

python - 使用 BLAS 实现更快的 python 内积

python 用 pandas 绘图

c++ - OpenCv:翻译图像,将像素环绕边缘 (C++)

image - 如何检测 jpg jpeg 图像文件是否损坏(不完整)?

python - 寻找插值函数的最小值。

python - 双向插值的替代方法

python - 百分等级计算

python - Pandas:根据多个其他列中的值填充空值