Mahotas - 删除边界标记



删除边界标记是指删除标记图像中的边界区域。标记图像由分配了唯一标签的不同区域组成。

标记图像的边界区域是指存在于图像边缘(边界)的区域。

边界区域通常使图像分析变得困难,并且在某些情况下代表着显著的噪声。

因此,删除边界区域对于提高图像分割算法的精度和减小图像整体大小非常重要。

在Mahotas中删除边界标记

在Mahotas中,我们可以使用`mahotas.labeled.remove_bordering()`函数从图像中删除边界标签。它分析图像以检查是否存在任何边界标签。如果找到边界标签,它将确定与该边界标签关联的值。

然后将边界标签的值更新为0,以将其从图像中删除。由于值0与背景相关联,因此所有边界标签都成为背景的一部分。

有时,边界标签可能远离图像边界。如果我们想保留这些边界标签,我们需要指定边界区域与边界之间的最小距离。超过此距离的任何边界区域都将被该函数保留。

`mahotas.labeled.remove_bordering()`函数

`mahotas.labeled.remove_bordering()`函数将标记图像作为输入,并返回不包含任何边界区域的标记图像作为输出。

该函数删除所有大小的边界,因此输出图像比输入图像占用更少的空间。

语法

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

mahotas.labeled.remove_bordering(labeled, rsize=1, out={np.empty_like(im)})

其中,

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

  • **rsize (可选)** - 它确定区域必须与图像边界保持的最小距离,以避免被移除(默认为1)。

  • **out (可选)** - 指定存储输出图像的位置(默认为与labeled大小相同的数组)。

示例

在下面的示例中,我们使用`mh.labeled.remove_bordering()`函数从图像中删除边界区域。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# Loading the image
image = mh.imread('nature.jpeg')
# Converting it to grayscale
image = mh.colors.rgb2gray(image)
# Applying gaussian filtering
image = mh.gaussian_filter(image, 4)
# Thresholding the image
image = image > image.mean()
# Labeling the image
labeled, num_objects = mh.label(image)
# Removing bordering labels
remove_border = mh.labeled.remove_bordering(labeled)
# Creating a figure and axes for subplots
fig, axes = mtplt.subplots(1, 2)
# Displaying the original image
axes[0].imshow(image)
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# Displaying the image without borders
axes[1].imshow(remove_border)
axes[1].set_title('Border Removed Image')
axes[1].set_axis_off()
# Adjusting spacing between subplots
mtplt.tight_layout()
# Showing the figures
mtplt.show()
输出

以下是上述代码的输出:

Removing Bordered Labeled

删除特定距离的区域

我们还可以删除距离图像边界特定距离的边界区域。这允许我们删除任何可能由于其靠近图像边界而被视为边界区域的区域。

在Mahotas中,`rsize`参数决定边界区域必须远离多远才能保留在图像中。我们需要为此参数设置一个整数值,然后将其传递给`mh.labeled.remove_bordering()`函数。

例如,假设我们将`rsize`的值设置为“200”。然后,只有至少距离图像边界200像素的边界区域将被保留。

示例

在下面提到的示例中,我们删除了距离图像边界特定距离的边界区域。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# Loading the image
image = mh.imread('sun.png')
# Converting it to grayscale
image = mh.colors.rgb2gray(image)
# Applying gaussian filtering
image = mh.gaussian_filter(image, 4)
# Thresholding the image
image = image > image.mean()
# Labeling the image
labeled, num_objects = mh.label(image)
# Removing bordering labels
remove_border = mh.labeled.remove_bordering(labeled, rsize=200)
# Creating a figure and axes for subplots
fig, axes = mtplt.subplots(1, 2)
# Displaying the original image
axes[0].imshow(image)
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# Displaying the image without borders
axes[1].imshow(remove_border)
axes[1].set_title('Border Removed Image')
axes[1].set_axis_off()
# Adjusting spacing between subplots
mtplt.tight_layout()
# Showing the figures
mtplt.show()

输出

上述代码的输出如下:

Removing Bordered Labeled

从图像的特定部分删除区域

另一种删除边界区域的方法是从图像的特定部分删除它们。

图像的特定部分是指通过裁剪较大的图像获得的较小图像的一小部分。

在Mahotas中,要从图像的特定部分删除区域,我们首先从原始图像中识别感兴趣的区域。

然后,我们裁剪图像的已识别部分。然后,我们从这部分删除边界区域。

例如,如果我们将值指定为`[:800, :800]`,则该区域将从0像素开始,在垂直(y轴)和水平(x轴)方向上都延伸到800像素。

示例

在这里,我们从图像的特定部分删除边界区域。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# Loading the image
image = mh.imread('tree.tiff')
# Converting it to grayscale
image = mh.colors.rgb2gray(image)
image = image[:800, :800]
# Applying gaussian filtering
image = mh.gaussian_filter(image, 4)
# Thresholding the image
image = image > image.mean()
# Labeling the image
labeled, num_objects = mh.label(image)
# Removing bordering labels
remove_border = mh.labeled.remove_bordering(labeled)
# Creating a figure and axes for subplots
fig, axes = mtplt.subplots(1, 2)
# Displaying the original image
axes[0].imshow(image)
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# Displaying the image without borders
axes[1].imshow(remove_border)
axes[1].set_title('Border Removed Image')
axes[1].set_axis_off()
# Adjusting spacing between subplots
mtplt.tight_layout()
# Showing the figures
mtplt.show()

输出

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

Removing Bordered Regions
广告