Python 基于分水岭的连通物体图像分割
我正在尝试分离连接的对象。Python和分水岭算法(scipy实现)似乎非常适合处理这个问题 这是我的图像和自动生成的分水岭种子点(阈值图像和距离变换图像的局部最大值): 到目前为止,一切顺利;每个物体都有一颗种子 但是,当我运行分水岭时,事情就崩溃了:Python 基于分水岭的连通物体图像分割,python,image-processing,scipy,watershed,Python,Image Processing,Scipy,Watershed,我正在尝试分离连接的对象。Python和分水岭算法(scipy实现)似乎非常适合处理这个问题 这是我的图像和自动生成的分水岭种子点(阈值图像和距离变换图像的局部最大值): 到目前为止,一切顺利;每个物体都有一颗种子 但是,当我运行分水岭时,事情就崩溃了: segmented = ndimage.measurements.watershed_ift( 255 - image_grey, seeds)` 顶部中间的仪表盘和中心仪表盘分离不良。在顶部簇中,一个对象淹没在另两个对象周围。在中心簇中
segmented = ndimage.measurements.watershed_ift( 255 - image_grey, seeds)`
顶部中间的仪表盘和中心仪表盘分离不良。在顶部簇中,一个对象淹没在另两个对象周围。在中心簇中,虽然它可能太小而无法在这里看到,但中心种子仅淹没到几个像素
我有两个问题:
分水岭算法是一种简单而健壮的分割算法。您的数据似乎适合这种分割算法。据我所知,不需要特殊的预处理。当然,你已经看到了自己,在这种情况下,它有点接近 通常使用“分水岭”,但不考虑有关要识别的对象的任何特殊知识。这样可能会有更复杂的算法可用 此外,可能还有更复杂的分水岭算法版本可用。这个名为的Python模块具有参数(与scipy版本不同)。我会稍微调整一下参数,看看结果是否可以改善
是一种经常用于自动分割的工具。它结合了半自动学习(基本上是通过举例对其进行训练,并从中学习重要特征)。在距离变换步骤后,应应用多级阈值方法。将距离转换图像转换为灰度图像后,对象的中心将在生成的灰度图像中具有最高的像素值。在这里,您可以从阈值的最高值开始查找对象的中心。看这篇文章我发现了这条线索,因为我在
分水岭_\u ift
上遇到了同样的问题。我建议只使用skimage.morphics
中的流域
函数。它接受浮点输入,因此不会丢失灰度图像的分辨率,并且实际上会淹没整个盆地,而ift
方法似乎只淹没标记所在的等值线
编辑:
一定要将距离变换乘以-1,这样山峰就变成了山谷,否则你就得不到任何分水岭了
segmented = ndimage.measurements.watershed_ift( 255 - image_grey, seeds)`