【问题标题】:imextendedmin and imimposemin functions in python for watershed seeds from distance transformpython中的imextendedmin和imimposemin函数用于距离变换的分水岭种子
【发布时间】:2022-01-12 00:12:29
【问题描述】:

在 matlab 中,我可以使用图像处理工具箱中的这些函数来“清理”距离变换并定位分水岭算法的种子。我为 python 找到的教程包括对距离变换进行阈值化以获取种子,这在我的情况下效果不佳,因为并非所有特征的大小都相同,并且距离变换的强度取决于与背景的绝对距离。

我有 attached 一个例子,说明这些函数在 matlab 中完成的工作,其中白色区域是种子。有没有办法在 python 中实现这一点,无论是使用现有函数还是自己编写代码?

【问题讨论】:

    标签: python image matlab opencv


    【解决方案1】:

    Matlab 文档出处 Soille, P. 形态图像分析:原理和应用。 Springer-Verlag, 1999 用于大部分图像形态学资料。尝试翻译这些函数时,这是一本非常好的读物。

    imextendedmax():

    imextendedmin()得到H-极小值变换的区域极小值,其中H-极小值变换就是以(image + H)为标记对图像进行侵蚀的形态重建。 Scikit-image 具有执行此操作所需的所有形态学工具:

    import skimage.morphology as morph
    
    def extendedmin(img, H):
        mask = img.copy() 
        marker = mask + h  
        hmin =  morph.reconstruction(marker, mask, method='erosion')
        return morph.local_minima(hmin)
    

    Matlab 结果: imextendedmin() on "glass.png" 这个函数的结果: python version

    imimposemin()

    imimposemin() 使用带有 1 的二进制映射对图像进行最小值施加,您要在其中施加最小值。我在下面详细介绍的函数适用于由 0 到无穷大的整数组成的图像。为了用形态学做到这一点,我们需要将二进制图转换为一个标记,在最小值处为 0,在其他位置处可能的图像值最大。接下来,我们通过获取 (image+1) 和标记 (image + 1 允许您在图像已经为 0 的地方施加最小值) 的元素最小值来创建掩码。最终结果是通过对标记的掩码进行侵蚀来重建的。

    import numpy as np
    import skimage.morphology as morph
    
    def imposemin(img, map):
        marker = np.full(img.shape, np.inf)
        marker[minima == 1] = 0
        mask = np.minimum((img + 1), marker)
        return morph.reconstruction(marker, mask, method='erosion')
    

    Matlab 结果: imimposemin() on "glass.png" (left image has the marker superimposed) 这个函数的结果: python version

    【讨论】:

      猜你喜欢
      • 2014-09-12
      • 2019-01-21
      • 1970-01-01
      • 1970-01-01
      • 2015-03-27
      • 2016-07-16
      • 2017-08-30
      • 1970-01-01
      • 2013-10-16
      相关资源
      最近更新 更多