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) # 创建带有子图的图形 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(opened_image, cmap='gray') axes[1].set_title('Opened Image') axes[1].axis('off') # 调整布局并显示图 plt.tight_layout() plt.show()
输出
执行上述代码后,我们得到以下输出 −

使用随机二进制图像
我们还可以通过创建随机二进制图像对图像执行开运算。为此,我们首先使用 NumPy 创建一个随机二进制图像,其中像素为 0(背景)或 1(前景)。
一旦我们有了二进制图像,我们就可以继续使用结构元素执行形态学开运算。它将定义腐蚀和膨胀操作的邻域的形状和大小。
此外,我们创建一个与输入图像形状相同的空数组来存储结果。最后,我们得到了结果开运算图像。
示例
在这里,我们尝试通过创建随机二进制图像对图像执行开运算 −
import mahotas as mh import numpy as np from pylab import imshow, show # 创建随机二值图像 image = np.random.randint(0, 2, size=(100, 50), dtype=np.bool_) Bc=np.ones((3,3)) # 使用 3x3 交叉结构元素执行形态学开运算 result = mh.open(image, Bc, out=np.empty_like(image)) # 显示结果 imshow(result) show()
输出
生成的输出如下所示 −

使用灰度图像
我们还可以在 mahotas 中对灰度图像执行开运算。为了实现这一点,我们只需在读取图像时传递 as_grey=True 参数,确保图像以灰度图像的形式加载。接下来,我们将对灰度图像执行形态学开运算。
示例
现在,我们在 mahotas − 中对灰度图像执行开运算;
import mahotas as mh import numpy as np from pylab import imshow, show # 创建灰度图像 image = mh.imread('nature.jpeg', as_grey = True).astype(np.uint8) Bc=np.ones((20,15)) # 使用 3x3 交叉结构元素执行形态学打开 result = mh.open(image, Bc, out=np.empty_like(image)) # 显示结果 imshow(result) show()
输出
以下是上述代码的输出 −
