Mahotas - 形态学运算符



形态学运算符是一组图像处理技术,有助于修改图像中物体的形状、大小和空间关系。它们就像用于重塑或操纵图像中物体的工具。

想象一下,您有一张包含各种物体(如圆形、正方形和线条)的图片。形态学运算符允许您以不同的方式更改这些物体的外观。

例如,您可以使它们更大或更小、平滑其边缘、去除微小细节或填充间隙。

为了实现这些转换,形态学运算符使用数学运算,这些运算涉及使用称为结构元素的特殊模式扫描图像。此结构元素定义了在操作期间将考虑的每个像素周围邻域的形状和大小。

Mahotas 和形态学运算符

Mahotas 提供了一套全面的形态学运算符,可应用于二值、灰度或多通道图像。这些运算符使用优化的算法高效地实现,使其适用于具有大规模数据集的实际应用。

让我们看看在 mahotas 中可以执行的一些形态学操作:

膨胀

膨胀是一种形态学运算,它扩展图像中物体边界上的像素。它涉及使用结构元素扫描图像,并用结构元素定义的相应邻域内的最大值替换每个像素。

让我们看看下面原始图像以及膨胀后的图像:

Dilation Image

腐蚀

腐蚀是一种基本的形态学运算符,它会收缩或腐蚀图像中物体边界上的像素。

以下是腐蚀后的图像及其原始图像:

Erosion Image

开运算

开运算是先腐蚀后膨胀的组合。它去除小物体并填充前景中的小孔,同时保留较大物体的整体形状和连通性。

让我们看看在 mahotas 中的开运算后的图像:

Opening Image

闭运算

闭运算是开运算的反向操作,包括先膨胀后腐蚀。它填充前景中的小间隙和孔洞,确保物体的连通性。

现在,让我们看看在 mahotas 中的闭运算后的图像:

Closing Image

条件腐蚀

条件腐蚀是一种形态学运算,它根据用户定义的条件保留图像中的结构。它根据称为标记图像的第二幅图像指定的条件选择性地腐蚀图像区域。

该运算仅在标记图像具有非零值的地方腐蚀图像。

下图显示了条件腐蚀:

Conditional Erosion Image

条件膨胀

条件膨胀类似于条件腐蚀,但操作方式相反。它根据标记图像指定的条件选择性地膨胀图像区域。

该运算仅在标记图像具有非零值的地方膨胀图像。

下图显示了条件膨胀:

Conditional Dilation Image

区域最大值

区域最大值是图像中在其邻域内具有最高强度的点。它们代表图像中的局部峰值或显着特征。

Mahotas 中的区域最大值运算符识别这些局部最大值,并将它们标记为前景像素。

下图表示区域最大值:

Regional Maxima Image

区域最小值

区域最小值是图像中在其邻域内具有最低强度的点。它们代表图像中的局部盆地或凹陷。

Mahotas 中的区域最小值运算符识别这些局部最小值,并将它们标记为背景像素。

下图表示区域最小值:

Regional Minima Image

示例

在以下示例中,我们尝试执行所有上述解释的形态学运算:

import mahotas as mh
import matplotlib.pyplot as plt
import numpy as np
image = mh.imread('nature.jpeg', as_grey=True).astype(np.uint8)
# Dilation
dilated_image = mh.dilate(image, Bc=mh.disk(8))
plt.title("Dilated Image")
plt.imshow(dilated_image)
plt.show()
# Erosion
plt.title("Eroded Image")
eroded_image = mh.erode(image, Bc=mh.disk(8))
plt.imshow(eroded_image)
plt.show()
# Opening
plt.title("Opened Image")
opened_image = mh.open(image)
plt.imshow(opened_image)
plt.show()
# Closing
plt.title("Closed Image")
closed_image = mh.close(image)
plt.imshow(closed_image)
plt.show()
# Conditional Dilation
plt.title("Conditional Dilation")
g = image * 6
cdilated_image = mh.cdilate(image, g)
plt.imshow(cdilated_image)
plt.show()
# Conditional Erosion
plt.title("Conditional Erosion")
scaled_image = image * 0.5
scaled_image = scaled_image.astype(np.uint8)
ceroded_image = mh.cerode(image, scaled_image)
plt.imshow(ceroded_image)
plt.show()
# Regional Maxima
plt.title("Regional Maxima")
regional_maxima = mh.regmax(image)
plt.imshow(regional_maxima)
plt.show()
# Regional Minima
plt.title("Regional Minima")
regional_minima = mh.regmin(image)
plt.imshow(regional_minima)
plt.show()

输出

获得的输出如下所示:

膨胀

Dilation Image1

腐蚀

Erosion Image1

开运算后的图像

Opened Image

闭运算后的图像

Closed Image

条件膨胀

Conditional Dilation Image1

条件腐蚀

Conditional Erosion Image1

区域最大值

Regional Maxima Image1

区域最小值

Regional Minima Image1

我们将在本节的其余章节中详细讨论所有形态学运算符。

广告