Mahotas - 图像膨胀



在图像处理中,图像膨胀是指扩展图像的像素。

膨胀过程会在图像边缘添加像素。这是因为算法查看图像中的每个像素并检查其相邻像素。

如果任何相邻像素是物体的一部分,它会将这些像素添加到物体的边界。

在 Mahotas 中膨胀图像

在 Mahotas 中膨胀图像是指向图像中区域的边界添加像素数。此操作通常用于增强或修改图像中的形状和结构。

我们可以使用dilate()函数在 mahotas 中膨胀图像。它用于使用结构元素 B 扩展元素 A。

结构元素是一个小的矩阵或形状,定义每个像素周围的邻域。它用于确定在膨胀过程中应考虑哪些像素。

mahotas.dilate() 函数

mahotas.dilate() 函数将输入图像和结构元素作为参数,并返回一个新的 NumPy 数组。

输出像素的值由邻域中所有像素的最大值确定。如果任何相邻像素的值为 1,则输出像素设置为 1。

dilate() 函数逐像素扫描图像,并检查由结构元素定义的邻域。

如果任何相邻像素是物体的一部分,膨胀操作会将这些像素添加到物体的边界,使其变大。

语法

以下是 mahotas 中 dilate() 函数的基本语法:

mahotas.dilate(A, Bc=None, out=None, output=None)

其中,

  • A − 它是将对其执行膨胀的输入图像。它可以是表示灰度或二值图像数据的二维或三维 NumPy 数组。

  • Bc (可选) − 它是用于膨胀的结构元素。默认为 None。

  • out (已弃用) / output (可选) − 它指定用于存储结果的输出数组。如果未提供,则创建一个新数组并将其作为输出返回。

示例

以下是使用 dilate() 函数在 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 dilation with a square kernel of size 3x3
dilated_image = mh.dilate(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 dilated image
axes[1].imshow(dilated_image, cmap='gray')
axes[1].set_title('Dilated Image')
axes[1].axis('off')
# Adjust the layout and display the plot
plt.tight_layout()
plt.show()

输出

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

Dilating 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 dilation with the largest structuring element
largest_se = mh.disk(8)
dilated_image = mh.dilate(image, Bc=largest_se)
# Performing additional dilations with smaller structuring elements
smaller_se_1 = mh.disk(2)
smaller_se_2 = mh.disk(5)
dilated_image = mh.dilate(dilated_image, Bc=smaller_se_1)
dilated_image = mh.dilate(dilated_image, Bc=smaller_se_2)
# Displaying the dilated image
imshow(dilated_image)
show()

输出

获得的输出如下所示:

Structuring Element Sizes

使用圆形内核进行膨胀

要创建圆形内核,我们可以使用 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 5
radius = 5
kernel = mh.disk(radius)
dilated_image = mh.dilate(image, kernel)
# Display the dilated image
imshow(dilated_image)
show()

输出

以下是上述代码的输出:

Circular-shaped Kernel
广告