Mahotas - 条件膨胀图像



在上一章中,我们探讨了图像膨胀的概念,这是一种用于将图像中区域的所有像素扩展到边界的操作。另一方面,条件膨胀根据某些条件扩展特定区域的像素。

条件可以基于图像像素的强度值或图像中的某些特定模式。

例如,让我们考虑一个灰度图像。您可以有条件地仅膨胀满足特定强度阈值的像素,而不是膨胀所有前景像素。

如果像素的强度高于预定义的阈值,则应用膨胀;否则,像素保持不变。

在Mahotas中进行条件膨胀图像

在Mahotas中,条件膨胀是传统膨胀操作的扩展,它包含基于第二张图像(通常称为“标记图像”)的条件。

它允许您控制膨胀过程,以便膨胀仅在标记图像具有特定像素值的位置发生。

我们可以使用cdilate()函数在Mahotas中对图像执行条件膨胀。此函数根据标记图像的像素值将膨胀过程限制在特定区域。

mahotas.cdilate()函数

Mahotas中的cdilate()函数接受两个输入——输入图像和掩码(条件)数组。它根据提供的条件对输入图像执行条件膨胀,并返回生成的膨胀图像。

掩码用于识别图像内的特定区域。它们充当过滤器,突出显示某些区域,而忽略其他区域。

语法

以下是cdilate()函数的基本语法:

mahotas.cdilate(f, g, Bc={3x3 cross}, n=1)

其中,

  • f - 它是将执行条件膨胀的输入图像。

  • g - 它是条件膨胀期间要应用的掩码。

  • Bc = {3×3十字} (可选) - 它是用于膨胀的结构元素。默认为{3×3十字}。

  • n - 它是膨胀操作的迭代次数。默认情况下,它设置为1,表示单次迭代。

示例

在下面的示例中,我们通过放大像素强度来对图像执行条件膨胀:

import mahotas as mh
import numpy as np
import matplotlib.pyplot as plt
image= mh.imread('nature.jpeg')
g = image * 2
conditional_dilated_image = mh.cdilate(image, g)
# 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 dilated image
axes[1].imshow(conditional_dilated_image, cmap='gray')
axes[1].set_title('Conditional Dilated Image')
axes[1].axis('off')
# Adjust the layout and display the plot
plt.tight_layout()
plt.show()

输出

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

Dilating Image 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 > 100
# Define a structuring element for dilation
structuring_element = mh.disk(5)
conditional_dilated_image = mh.cdilate(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 dilated image
axes[1].imshow(conditional_dilated_image, cmap='gray')
axes[1].set_title('Conditional Dilated Image')
axes[1].axis('off')
# Adjust the layout and display the plot
plt.tight_layout()
plt.show()

输出

获得的输出如下所示:

Using Structuring Element

使用自定义条件函数

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

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

接下来,选择一个结构元素来定义膨胀操作的形状和大小。

最后,执行条件膨胀并检索膨胀后的图像。

示例

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

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 > 100
# 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 dilation
conditional_dilated_image = mh.cdilate(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 dilated image
axes[1].imshow(conditional_dilated_image, cmap='gray')
axes[1].set_title('Conditional Dilated Image')
axes[1].axis('off')
# Adjust the layout and display the plot
plt.tight_layout()
plt.show()

输出

以下是上述代码的输出:

Custom Condition Function
广告