【问题标题】:Image segmentation of connected objects with watershed具有分水岭的连接对象的图像分割
【发布时间】:2013-10-23 11:54:14
【问题描述】:

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

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

seeds = myGenSeeds( image_grey )

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

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

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

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

我有两个问题:

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

【问题讨论】:

    标签: python image-processing scipy watershed


    【解决方案1】:

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

    编辑: 请务必将您的距离变换乘以 -1,这样山峰就会变成山谷,否则您将不会得到任何分水岭!

    【讨论】:

      【解决方案2】:

      分水岭算法是一种简单而鲁棒的分割算法。对于这种分割算法,您的数据似乎没问题。据我所知,不需要特殊的预处理。当然,你已经看到自己,万一它有点濒临灭绝。

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

      还可能有更复杂的分水岭算法版本可用。这个名为 Watershed 2.0 的 Python 模块有参数(与 scipy 版本不同)。我会稍微调整一下参数,看看结果是否可以改善。

      Ilastik是一个常用于自动切分的工具。它结合了半自动学习(基本上你通过举例来训练它,它从中学习重要的特征)。

      【讨论】:

        【解决方案3】:

        您应该在距离变换步骤之后应用多级阈值方法。将距离转换图像转换为灰度图像后,对象的中心将在生成的灰度图像中具有最高像素值。在这里,您可以从阈值的最大值开始找到对象的中心。看这篇论文https://www.researchgate.net/publication/303703322_A_Multi-level_Thresholding_Based_Segmentation_Method_for_Microscopic_Fluorescence_In_Situ_Hybridization_FISH_Images

        【讨论】:

          猜你喜欢
          • 2019-08-06
          • 2020-06-14
          • 1970-01-01
          • 2019-04-22
          • 1970-01-01
          • 2022-07-19
          • 2012-07-11
          • 2020-07-27
          相关资源
          最近更新 更多