连通对象的图像分割与分水岭算法

6

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

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

seeds = myGenSeeds( image_grey )

这里输入图像描述

到目前为止,每个对象都有一个种子,一切都很顺利。

然而,当我运行分水岭时,问题就出现了:

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

输入图像描述

顶部中间的簇和中心簇都未分离。在顶部簇中,一个对象围绕其他两个对象浸泡。在中心簇中,虽然可能在这里看起来太小,但中心种子只覆盖了少量像素。

我有两个问题:

  1. 分水岭算法是否是分离这样的对象的好选择?
  2. 如果是,请问我需要进行某种预处理才能使图像更适合分水岭分割?
3个回答

2
我发现这个帖子是因为我也遇到了与“watershed_ift”相同的问题。我建议只使用“skimage.morphology”中的“watershed”函数。它接受浮点输入,因此您不会在灰度图像上失去分辨率,并且它实际上会淹没整个流域,而“ift”方法似乎只会淹没标记所在的等值线。
编辑:一定要将距离变换乘以-1,使峰值变成山谷,否则您将得不到任何分水岭!

1
分水岭算法是一种简单而强大的分割算法。就我所看到的数据而言,它似乎适用于这种类型的分割算法,不需要特殊的预处理。当然,你已经发现在某些情况下可能会有点困难。
分水岭通常被使用,但它并不考虑你想要识别的对象的任何特殊知识。因此可能存在更复杂的算法可供选择。
此外,可能还有更复杂的分水岭算法版本可供选择。这个名为Watershed 2.0的Python模块具有参数(与scipy版本不同)。我会微调参数,看看结果是否可以改善。 Ilastik 是一个常用于自动分割的工具。它包含半自动学习(基本上你通过给出示例来训练它,并从中学习重要特征)。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接