首页 文章

分水岭连通物的图像分割

提问于
浏览
6

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

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

seeds = myGenSeeds( image_grey )

enter image description here

到现在为止还挺好;每个物体都有种子 .

当我运行分水岭时,情况会崩溃:

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

enter image description here

中上层集群和中心集群都很难分开 . 在顶部群集中,一个对象充斥着另外两个对象 . 在中心群集中,尽管它可能太小而无法在此处看到,但是中心种子只能淹没到几个像素 .

我有两个问题:

  • 分水岭算法是否是分离此类对象的不错选择?

  • 如果是这样,是否有某种预处理方法可以让图像更适合分水岭分割?

3 回答

  • 0

    分水岭算法是一种简单而稳健的分割算法 . 您的数据似乎可以用于那种分段算法 . 据我所知,不需要特殊的预处理 . 当然,你已经看到了自己已经存在的情况,它有点濒临边缘 .

    通常使用分水岭,但不会考虑您想要识别的对象的任何特殊知识 . 通过这种方式,可能会有更复杂的算法 .

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

    Ilastik是一种常用于自动分割的工具 . 它结合了半自动学习(基本上你通过提供示例来训练它,并从中学习重要的功能) .

  • 1

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

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

  • 0

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

相关问题