Mahotas - 获取标签边界



获取标签边界是指提取标记图像的边界像素。边界可以定义为像素位于图像边缘的区域。边界表示图像不同区域之间的过渡。

获取标签边界涉及识别标记图像中的边界区域并将它们与背景分离。

由于标记图像仅包含前景像素和背景像素,因此边界很容易识别,因为它们位于背景区域的旁边。

在 Mahotas 中获取标签边界

在 Mahotas 中,我们可以使用`**mahotas.labeled.borders()**` 函数来获取标签的边界。它分析标记图像的相邻像素并考虑连接模式以获取边界。

`mahotas.labeled.borders()` 函数

`mahotas.labeled.borders()` 函数以标记图像作为输入,并返回一个带有突出显示边界的图像。

在结果图像中,边界像素的值为 1,并且是前景的一部分。

语法

以下是 Mahotas 中 `borders()` 函数的基本语法:

mahotas.labeled.borders(labeled, Bc={3x3 cross}, out={np.zeros(labeled.shape,
bool)})

其中:

  • `**labeled**` - 输入的标记图像。

  • `**Bc (可选)**` - 用于连接的结构元素。

  • `**out (可选)**` - 输出数组(默认为与 `labeled` 形状相同的新的数组)。

示例

在下面的示例中,我们使用 `mh.labeled.borders()` 函数获取标签的边界。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# Loading the image
image = mh.imread('nature.jpeg', as_grey=True)
# Applying thresholding
image = image > image.mean()
# Converting it to a labeled image
labeled, num_objects = mh.label(image)
# Geting border of labels
borders = mh.labeled.borders(labeled)
# Creating a figure and axes for subplots
fig, axes = mtplt.subplots(1, 2)
# Displaying the labeled image
axes[0].imshow(labeled)
axes[0].set_title('Labeled Image')
axes[0].set_axis_off()
# Displaying the borders
axes[1].imshow(borders)
axes[1].set_title('Border Labels')
axes[1].set_axis_off()
# Adjusting spacing between subplots
mtplt.tight_layout()
# Showing the figures
mtplt.show()
输出

以下是上述代码的输出:

Border Labels

使用自定义结构元素获取边界

我们还可以使用自定义结构元素来获取标签的边界。结构元素是一个仅包含 1 和 0 的数组。它用于定义相邻像素的连接结构。

包含在连接分析中的像素值为 1,而被排除的像素值为 0。

在 Mahotas 中,我们使用 `mh.disk()` 函数创建一个自定义结构元素。然后,我们将此自定义结构元素设置为 `borders()` 函数中的 `Bc` 参数以获取标签的边界。

示例

这里,我们使用自定义结构元素获取标签的边界。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# Loading the image
image = mh.imread('sea.bmp', as_grey=True)
# Applying thresholding
image = image > image.mean()
# Converting it to a labeled image
labeled, num_objects = mh.label(image)
# Geting border of labels
borders = mh.labeled.borders(labeled, mh.disk(5))
# Creating a figure and axes for subplots
fig, axes = mtplt.subplots(1, 2)
# Displaying the labeled image
axes[0].imshow(labeled)
axes[0].set_title('Labeled Image')
axes[0].set_axis_off()
# Displaying the borders
axes[1].imshow(borders)
axes[1].set_title('Border Labels')
axes[1].set_axis_off()
# Adjusting spacing between subplots
mtplt.tight_layout()
# Showing the figures
mtplt.show()

输出

上述代码的输出如下:

Border Labels Element
广告