python 中的 imextendedmin 和 imimposemin 函数用于距离变换的分水岭种子

imextendedmin and imimposemin functions in python for watershed seeds from distance transform

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

我有 attached 这些函数在 matlab 中完成的示例,其中白色区域是种子。有没有什么方法可以在 python 中实现这一点,既可以使用现有函数,也可以自己编写代码?

Matlab 文档学分 Soille, P. 形态图像分析:原理和应用。 Springer-Verlag,1999 大部分是图像形态学方面的东西。尝试翻译这些功能时,这真是一本好书。

imextendedmax():

imextendedmin()得到H-minima变换的区域最小值,其中H-minima变换只是以(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() 使用带有 1s 的二值图对图像进行最小值强加,您要在其中强加最小值。我在下面详述的函数适用于由从 0 到无穷大的整数组成的图像。要用形态学做到这一点,我们需要将二值图变成一个标记,最小值为 0,其他地方的图像值为最大。接下来,我们通过取 (image+1) 和标记(image + 1 允许您在图像已经为 0 的地方施加最小值)的元素最小值来创建掩码。最终结果是通过从标记中腐蚀掩模来重建的。

import numpy as np
import skimage.morphology as morph

def imposemin(img, minima):
    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