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)
# Performing erosion with a square kernel of size 3x3
eroded_image = mh.erode(image, Bc=mh.disk(3))
# Create a figure with subplots
fig, axes = plt.subplots(1, 2, figsize=(7,5 ))
# Display the original image
axes[0].imshow(image)
axes[0].set_title('Original Image')
axes[0].axis('off')
# Display the eroded image
axes[1].imshow(eroded_image, cmap='gray')
axes[1].set_title('Eroded Image')
axes[1].axis('off')
# Adjust the layout and display the plot
plt.tight_layout()
plt.show()

输出

执行上述代码后,我们得到如下输出:

Eroding Image

使用不同结构元素大小进行腐蚀

我们还可以使用不同的结构元素大小腐蚀图像以修改图像的不同方面。这些元素使用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)
# Performing erosion with the largest structuring element
largest_se = mh.disk(8)
eroded_image = mh.erode(image, Bc=largest_se)
# Performing additional erosions with smaller structuring elements
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)
# Displaying the eroded image
imshow(eroded_image)
show()

输出

获得的输出如下所示:

Erosion Structuring Element

使用圆形内核进行腐蚀

要创建圆形内核,我们可以使用Mahotas的disk()函数。通过指定所需的半径,此函数会生成一个表示圆形内核的NumPy数组。

准备好图像和圆形内核后,我们可以继续执行腐蚀。此操作将圆形内核应用于图像的每个像素,从而相应地缩小前景像素。

简单来说,它根据圆形内核定义的连通性缩小区域。

示例

现在,我们正在使用圆形内核膨胀图像:

import mahotas as mh
import numpy as np
from pylab import imshow, show
# Load image
image = mh.imread('sun.png', as_grey=True).astype(np.uint8)
# Circular kernel with radius 10
radius = 10
kernel = mh.disk(radius)
eroded_image = mh.erode(image, kernel)
# Display the eroded image
imshow(eroded_image)
show()

输出

以下是上述代码的输出:

Erosion circular-shaped kernel
广告
© . All rights reserved.