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
在 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