Mahotas - 图像的闭合过程
闭合过程与打开过程相反。在此过程中,首先执行膨胀操作,然后执行腐蚀操作。膨胀检查每个像素及其相邻像素。
如果任何相邻像素为白色,则中心像素也会变为白色。此步骤有助于扩大或加厚图像,并可以填补小间隙或孔洞。
膨胀后,腐蚀检查每个像素及其相邻像素。如果任何相邻像素为黑色,则中心像素也会变为黑色。此步骤有助于缩小或移除不需要的细节,例如细小的突起和内部噪声。
闭合操作可有效闭合二值图像中的小孔或间隙,并平滑或消除小的前景区域。
Mahotas 中的图像闭合过程
要在 Mahotas 中执行闭合过程,我们使用 mahotas.close() 函数。此方法允许顺序应用膨胀和腐蚀操作。
膨胀通过将每个像素替换为其邻域中的最大值来扩展剩余结构,同时保留其关键特征。
随后,腐蚀通过考虑每个像素的邻域并将其替换为最小值来降低噪声并消除小结构。
mahotas.close() 函数
Mahotas 中的 close() 函数采用两个主要参数:二值图像和结构元素(内核)。该函数首先对输入的二进制图像应用膨胀操作。然后对膨胀后的图像应用腐蚀操作。
close() 函数返回执行膨胀和腐蚀操作后得到的闭合图像。
语法
以下是 mahotas − 中 close() 函数的基本语法
mahotas.close(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') closed_image = mh.close(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(closed_image, cmap='gray') axes[1].set_title('Closed 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.close(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.close(image, Bc, out=np.empty_like(image)) # 显示结果 imshow(result) show()
输出
以下是上述代码的输出 −
