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



在matlab中,我可以使用图像处理工具箱中的这些函数来"干净";一种距离变换和种子定位的分水岭算法。我为python找到的教程包括对距离变换进行阈值处理以获得种子,这在我的情况下并不奏效,因为我的所有功能都不是相同的大小,距离变换的强度取决于与背景的绝对距离。

我附上了一个在matlab中实现这些函数的例子,其中白色区域是种子。有没有一种方法可以在python中实现这一点,要么使用现有的函数,要么自己编码?

Matlab文档学分Soille,p.形态学图像分析:原理和应用。Springer Verlag,1999年的大部分图像形态学内容。当试图翻译这些函数时,这是一本非常好的读物。

timeextendedmax((:

imextendedmin()得到H-极小变换的区域极小值,其中H-极小变换只是通过使用(图像+H(作为标记对图像进行侵蚀来进行形态学重建。Scikit图像拥有实现这一目标所需的所有形态学工具:

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结果:CCD_ 2开启";glass.png";此函数的结果:python版本

imimposemin((

imimposemin()使用具有1的二进制映射在图像上进行最小值强加,其中您想要施加最小值。下面我详细介绍的函数适用于由0到无穷大的整数组成的图像。要用形态学做到这一点,我们需要将二进制映射变成一个最小值为0、其他地方可能的最大图像值为0的标记。接下来,我们通过取(图像+1(和标记(图像+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结果:CCD_ 4开启";glass.png";(左侧图像叠加了标记(此函数的结果:python版本

最新更新