Mahotas - 条件腐蚀图像
在上一章中,我们探讨了图像腐蚀的概念,这是一种将所有像素缩小到图像区域边界的操作。另一方面,条件腐蚀会根据某些条件缩小(删除)某些特定区域的像素。
条件可以基于图像像素的强度值或图像中的某些特定模式。
例如,让我们考虑一个灰度图像。您可以有条件地仅腐蚀那些满足特定强度阈值的像素,而不是腐蚀所有前景像素。
如果像素的强度低于预定义阈值,则应用腐蚀;否则,像素保持不变。
Mahotas 中的条件腐蚀图像
在 mahotas 中,条件腐蚀是传统腐蚀操作的扩展,它包含基于第二幅图像(通常称为"标记图像")的条件。
它允许您控制腐蚀过程,使得腐蚀仅发生在标记图像具有特定像素值的位置。
我们可以使用 cerode() 函数对 mahotas 中的图像执行条件腐蚀。此函数根据标记图像的像素值将腐蚀过程限制在特定区域。
mahotas.cerode() 函数
Mahotas 中的 cerode() 函数接受两个输入:输入图像和掩码(条件)数组。它根据提供的条件对输入图像执行条件侵蚀,并返回生成的侵蚀图像。
蒙版用于识别图像内的特定区域。它们充当过滤器,突出显示某些区域而忽略其他区域。
语法
以下是 mahotas − 中 cerode() 函数的基本语法
mahotas.cerode(f, g, Bc={3x3 cross}, out={np.empty_as(A)})
其中,
f − 它是要对其执行条件侵蚀的输入图像。
g −它是条件腐蚀期间要应用的蒙版。
Bc={3×3 cross}(可选) − 它是用于扩张的结构元素。默认值为 {3×3 cross}。
out={np.empty_as(A)}(可选) − 它提供了一个输出数组来存储腐蚀操作的结果
示例
在下面的示例中,我们通过缩小图像的像素强度对其进行条件腐蚀 −
import mahotas as mh
import numpy as np
import matplotlib.pyplot as plt
image= mh.imread('nature.jpeg')
# 定义缩放因子
scale_factor = 0.5
# 通过乘以缩放因子来缩小强度
scaled_image = image * scale_factor
# 将缩放后的图像转换为适当的数据类型
scaled_image = scaled_image.astype(np.uint8)
conditional_eroded_image = mh.cerode(image, scaled_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(conditional_eroded_image, cmap='gray')
axes[1].set_title('Conditional Eroded Image')
axes[1].axis('off')
# 调整布局并显示图
plt.tight_layout()
plt.show()
输出
执行上述代码后,我们得到以下输出 −
使用结构元素
要在 Mahotas 中使用结构元素执行条件侵蚀,首先,我们需要定义应用侵蚀的条件。例如,您可以根据像素强度指定条件或提供二进制掩码。
接下来,选择一个定义侵蚀邻域的结构元素。 Mahotas 提供了几个预定义的结构元素,例如圆盘和正方形,您可以根据所需的形状和大小进行选择。
最后,检索结果图像,该图像将仅包含满足条件的侵蚀效果。
示例
在这里,我们尝试使用结构元素对图像执行条件侵蚀 −
import mahotas as mh
import numpy as np
import matplotlib.pyplot as plt
image= mh.imread('nature.jpeg', as_grey = True).astype(np.uint8)
# 根据像素强度定义条件
condition = image > 0.5
# 定义侵蚀的结构元素
structuring_element = mh.disk(5)
conditional_eroded_image = mh.cerode(image, condition, structuring_element)
# 创建带有子图的图形
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(conditional_eroded_image, cmap='gray')
axes[1].set_title('Conditional Eroded Image')
axes[1].axis('off')
# 调整布局并显示图
plt.tight_layout()
plt.show()
输出
获得的输出如下所示 −
使用自定义条件函数
我们还可以使用自定义条件函数对图像执行条件侵蚀。
为此,我们首先定义一个自定义条件函数来确定哪些像素应该进行侵蚀。
接下来,选择一个结构元素来定义侵蚀操作的形状和大小。最后,执行条件侵蚀并检索侵蚀图像。
示例
现在,我们正在使用自定义条件函数扩大图像 −
import mahotas as mh
import numpy as np
import matplotlib.pyplot as plt
# 加载图像
image = mh.imread('sea.bmp', as_grey=True).astype(np.uint8)
# 定义自定义条件函数
def custom_condition(pixel_value):
return pixel_value > 0.5
# 定义结构元素
structuring_element = mh.disk(5)
# 根据自定义条件函数创建二进制掩码
condition = custom_condition(image)
# 执行条件侵蚀
conditional_eroded_image = mh.cerode(image, condition, structuring_element)
# 创建带有子图的图形
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(conditional_eroded_image, cmap='gray')
axes[1].set_title('Conditional Eroded Image')
axes[1].axis('off')
# 调整布局并显示plot
plt.tight_layout()
plt.show()
输出
以下是上述代码的输出 −

