Mahotas 简明教程

Mahotas - Morphological Operators

形态学算子是一组图像处理技术,有助于修改图像中对象的形状、大小和空间关系。它们就像用于对图像内的对象进行重新整形或处理的工具。

想象一下,你有一幅包含各种对象(例如圆形、方形和线段)的图片。形态学算子允许你以不同的方式更改这些对象的形状。

例如,你可以放大或缩小它们,平滑其边缘,移除细小的细节或填补缝隙。

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

Mahotas and Morphological Operators

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

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

Dilation

膨胀是一种形态学操作,可扩展图像中对象边界上的像素。它涉及使用结构元素扫描图像,并用结构元素定义的对应邻域中最大值替换每个像素。

让我们看看下方的膨胀图像和原始图像 −

dilation image

Erosion

腐蚀是一种基础形态学算子,可收缩或腐蚀图像中对象边界上的像素。

以下是腐蚀图像及其原始图像 −

erosion image

Opening

开运算是一个腐蚀操作,后跟一个膨胀操作。它移除了小的对象,并填补了前景中的小孔,同时保留较大对象的整体形状和连通性。

让我们看看 mahotas 中的开运算图像 −

opening image

Closing

闭运算与开运算相反,由膨胀操作后跟一个腐蚀操作组成。它填补了前景中的小间隙和小孔,确保了对象的连通性。

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

closing image

Conditional Erosion

条件腐蚀是一种形态学操作,根据用户定义的条件保留图像中的结构。它有选择地腐蚀图像的区域,所述区域基于第二个称为标记图像的图像指定的条件。

这项操作仅在标记图像具有非零值的位置侵蚀图像。

下图显示条件侵蚀 −

conditional erosion image

Conditional Dilation

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

这项操作仅在标记图像具有非零值的位置膨胀图像。

下图显示条件膨胀 −

conditional dilation image

Regional Maxima

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

Mahotas 中的区域最大值操作符识别这些局部最大值并将其标记为前景像素。

下图显示区域最大值 −

regional maxima image

Regional Minima

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

Mahotas 中的区域最小值操作符识别这些局部最小值并将其标记为背景像素。

下图显示区域最小值 −

regional minima image

Example

在以下示例中,我们要执行上述所有形态学操作 −

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:

dilation image1

Erosion:

erosion image1

Opened Image:

opened image

Closed Image:

closed image

Conditional Dilation:

conditional dilation image1

Conditional Erosion:

conditional erosion image1

Regional Maxima:

regional maxima image1

Regional Minima:

regional minima image1

我们将在此部分的剩余章节中详细讨论所有形态学算子。