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 十字} (可选)** - 它是用于膨胀的结构元素。默认为 {3×3 十字}。

  • **out={np.empty_as(A)} (可选)** - 它提供一个输出数组来存储腐蚀操作的结果

示例

在以下示例中,我们通过缩减其像素强度来对图像执行条件腐蚀:

import mahotas as mh
import numpy as np
import matplotlib.pyplot as plt
image= mh.imread('nature.jpeg')
# Define the scaling factor
scale_factor = 0.5
# Scale down the intensity by multiplying with the scale factor
scaled_image = image * scale_factor
# Convert the scaled image to the appropriate data type
scaled_image = scaled_image.astype(np.uint8)
conditional_eroded_image = mh.cerode(image, scaled_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 conditional eroded image
axes[1].imshow(conditional_eroded_image, cmap='gray')
axes[1].set_title('Conditional Eroded Image')
axes[1].axis('off')
# Adjust the layout and display the plot
plt.tight_layout()
plt.show()

输出

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

Conditional Eroding Mahotas

使用结构元素

要在 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)
# Define the condition based on pixel intensity
condition = image > 0.5
# Define a structuring element for erosion
structuring_element = mh.disk(5)
conditional_eroded_image = mh.cerode(image, condition, structuring_element)
# 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 conditional eroded image
axes[1].imshow(conditional_eroded_image, cmap='gray')
axes[1].set_title('Conditional Eroded Image')
axes[1].axis('off')
# Adjust the layout and display the plot
plt.tight_layout()
plt.show()

输出

获得的输出如下所示:

Structuring Element Mahotas

使用自定义条件函数

我们还可以使用自定义条件函数对图像执行条件腐蚀。

为此,我们首先定义一个自定义条件函数,该函数确定哪些像素应该进行腐蚀。

接下来,选择一个结构元素来定义腐蚀操作的形状和大小。最后,执行条件腐蚀并检索腐蚀图像。

示例

现在,我们使用自定义条件函数膨胀图像:

import mahotas as mh
import numpy as np
import matplotlib.pyplot as plt
# Load image
image = mh.imread('sea.bmp', as_grey=True).astype(np.uint8)
# Define a custom condition function
def custom_condition(pixel_value):
   return pixel_value > 0.5
# Define a structuring element
structuring_element = mh.disk(5)
# Create a binary mask based on the custom condition function
condition = custom_condition(image)
# Perform conditional erosion
conditional_eroded_image = mh.cerode(image, condition, structuring_element)
# 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 conditional eroded image
axes[1].imshow(conditional_eroded_image, cmap='gray')
axes[1].set_title('Conditional Eroded Image')
axes[1].axis('off')
# Adjust the layout and display the plot
plt.tight_layout()
plt.show()

输出

以下是上述代码的输出:

Custom Condition Function Mahotas
广告