Mahotas - 图像开运算



开运算是在图像处理中使用的两步过程。首先,执行腐蚀操作,然后执行膨胀操作。

腐蚀通过检查每个像素及其相邻像素来缩小或去除不需要的细节。如果任何相邻像素为黑色,则中心像素也变为黑色。

此步骤有助于消除细小的凸起和内部噪声。凸起是从表面向外延伸的细长结构。

腐蚀后,执行膨胀以扩展或增厚图像。它查看每个像素及其邻居,如果任何相邻像素为白色,则中心像素变为白色。

开运算有效地去除了小的细节和噪声,同时保留了图像的主要结构。

Mahotas 中的图像开运算

要在 Mahotas 中执行开运算,我们使用 mahotas.open() 函数。此方法允许顺序应用腐蚀和膨胀操作。

腐蚀通过考虑每个像素的邻域并将其替换为最小值来减少噪声并消除小的结构。

随后,膨胀通过用其邻域中的最大值替换每个像素来扩展剩余的结构,同时保留其关键特征。

mahotas.open() 函数

Mahotas 中的 open() 函数有两个主要参数 - 二值图像和结构元素(内核)。该函数首先对输入二值图像应用腐蚀操作。然后,它对腐蚀后的图像应用膨胀操作。

在执行腐蚀和膨胀操作后,open() 函数返回生成的开运算后的图像。

语法

以下是 mahotas 中 open() 函数的基本语法 -

mahotas.open(f, Bc={3x3 cross}, out={np.empty_like(f)})

其中,

  • f − 它是由 NumPy 数组表示的输入二值图像。

  • Bc − 它是在腐蚀和膨胀操作中使用的结构元素。默认为 3x3 十字形结构元素。

  • out − 它是输出数组。结果将存储在一个与输入图像 f 形状和数据类型相同的新的数组中。

示例

在下面的示例中,我们对图像执行开运算 -

import mahotas as mh
import numpy as np
import matplotlib.pyplot as plt
image = mh.imread('sun.png')
opened_image = mh.open(image)
# 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 opened image
axes[1].imshow(opened_image, cmap='gray')
axes[1].set_title('Opened Image')
axes[1].axis('off')
# Adjust the layout and display the plot
plt.tight_layout()
plt.show()

输出

执行上述代码后,我们得到以下输出 -

Opening Process Image

使用随机二值图像

我们还可以通过创建随机二值图像来对图像执行开运算。为此,我们首先使用 NumPy 创建一个随机二值图像,其中像素要么为 0(背景),要么为 1(前景)。

获得二值图像后,我们可以通过使用结构元素进行形态学开运算。它将定义腐蚀和膨胀操作的邻域的形状和大小。

此外,我们创建了一个与输入图像形状相同的空数组来存储结果。最后,我们得到最终的开运算后的图像。

示例

在这里,我们尝试通过创建一个随机二值图像来对图像执行开运算 -

import mahotas as mh
import numpy as np
from pylab import imshow, show
# Create a random binary image
image = np.random.randint(0, 2, size=(100, 50), dtype=np.bool_)
Bc=np.ones((3,3))
# Perform morphological opening with a 3x3 cross structuring element
result = mh.open(image, Bc, out=np.empty_like(image))
# Show the result
imshow(result)
show()

输出

生成的输出如下所示 -

Random Binary Image

使用灰度图像

我们还可以在 mahotas 中对灰度图像执行开运算。为此,我们在读取图像时只需传递 as_grey=True 参数,确保图像以灰度图像加载。接下来,我们将对灰度图像执行形态学开运算。

示例

现在,我们在 mahotas 中对灰度图像执行开运算 -

import mahotas as mh
import numpy as np
from pylab import imshow, show
# Create a grayscale image
image = mh.imread('nature.jpeg', as_grey = True).astype(np.uint8)
Bc=np.ones((20,15))
# Perform morphological opening with a 3x3 cross structuring element
result = mh.open(image, Bc, out=np.empty_like(image))
# Show the result
imshow(result)
show()

输出

以下是上述代码的输出 -

Using Grayscale Image
广告