Mahotas - 腐蚀图像
在图像处理中,腐蚀图像是指缩小图像的像素。
腐蚀过程将去除图像边缘周围的像素。此操作扫描图像并检查特定像素邻域内的所有像素是否都是前景像素。如果是,则腐蚀或去除该像素。
在 Mahotas 中腐蚀图像
在 Mahotas 中,腐蚀图像是指去除图像中对象或区域边界的像素数。此操作通常用于修改图像中的形状和结构。
我们可以使用 erode() 函数在 mahotas 中腐蚀图像。它用于通过使用结构元素 B 来缩小元素 A。
结构元素是一个定义每个像素周围邻域的小矩阵或形状。它用于确定在侵蚀过程中应考虑哪些像素。
mahotas.erode() 函数
mahotas.erode() 函数将输入图像和结构元素作为参数,并返回一个新的 Numpy 数组。
输出像素的值确定为邻域中所有像素的最小值。如果任何邻域像素的值为 0,则将像素设置为 0。
erode() 函数逐个像素扫描图像,并检查结构元素定义的邻域。
如果任何相邻像素是对象的一部分,则侵蚀操作会将这些像素移除到对象的边界,使其变小。
语法
以下是 mahotas − 中 erode() 函数的基本语法
mahotas.erode(A, Bc={3x3 cross}, out={np.empty_as(A)})
其中,
A − 它是将执行侵蚀的输入图像。它应该是一个表示灰度图像的 NumPy 数组。
Bc(可选) − 它是用于侵蚀的结构元素。默认情况下,它设置为 3x3 十字形结构元素。
out(可选) −它指定用于存储结果的输出数组。
示例
以下是使用 erode() 函数腐蚀 mahotas 中图像的基本示例 −
import mahotas as mh import matplotlib.pyplot as plt import numpy as np image = mh.imread('nature.jpeg', as_grey=True).astype(np.uint8) # 使用大小为 3x3 的方形核进行侵蚀 eroded_image = mh.erode(image, Bc=mh.disk(3)) # 创建带有子图的图形 fig, axis = plt.subplots(1, 2, figsize=(7,5 )) # 显示原始图像 axes[0].imshow(image) axes[0].set_title('Original Image') axes[0].axis('off') # 显示侵蚀图像 axes[1].imshow(eroded_image, cmap='gray') axes[1].set_title('Eroded Image') axes[1].axis('off') # 调整布局并显示图 plt.tight_layout() plt.show()
输出
执行上述代码后,我们得到如下输出 −

使用不同结构元素大小进行腐蚀
我们还可以使用不同的结构元素大小腐蚀图像,以修改图像的不同方面。这些元素是使用 Mahotas disk() 函数以不同大小创建的。
通过为结构元素选择不同的半径或大小,我们可以实现不同的效果。首先,我们使用最大的结构元素进行腐蚀。然后,我们继续使用较小的结构元素进行额外的扩张。
每个腐蚀操作都会通过从边界移除像素来进一步缩小图像中的对象。
示例
在这里,我们尝试使用不同的结构元素大小腐蚀图像 −
import mahotas as mh import numpy as np from pylab import imshow, show image = mh.imread('nature.jpeg', as_grey=True).astype(np.uint8) # 使用最大的结构元素进行侵蚀 largest_se = mh.disk(8) eroded_image = mh.erode(image, Bc=largest_se) # 使用较小的结构元素进行额外的侵蚀 smaller_se_1 = mh.disk(2) smaller_se_2 = mh.disk(5) eroded_image = mh.erode(eroded_image, Bc=smaller_se_1) eroded_image = mh.erode(eroded_image, Bc=smaller_se_2) # 显示侵蚀图像 imshow(eroded_image) show()
输出
获得的输出如下所示 −

使用圆形内核进行侵蚀
要创建圆形− 形内核,我们可以使用 Mahotas 中的 disk() 函数。通过指定所需的半径,此函数会生成一个表示圆形内核的 NumPy 数组。
一旦我们准备好图像和圆形内核,我们就可以继续执行侵蚀。此操作将圆形内核应用于图像的每个像素,从而相应地缩小前景像素。
简单来说,它根据圆形内核定义的连接性缩小区域。
示例
现在,我们正在使用圆形形内核来扩大图像 −
import mahotas as mh import numpy as np from pylab import imshow, show # 加载图像 image = mh.imread('sun.png', as_grey=True).astype(np.uint8) # 半径为 10 的圆形内核 radius = 10 kernel = mh.disk(radius) eroded_image = mh.erode(image, kernel) # 显示侵蚀图像 imshow(eroded_image) show()
输出
以下是上述代码的输出 −
