Mahotas - 区域过滤



区域过滤指的是根据某些条件排除标记图像的特定区域。基于区域大小是常用的区域过滤条件。通过指定大小限制,可以排除过小或过大的区域,从而获得干净的输出图像。

另一个区域过滤标准是检查区域是否为边界。通过应用这些过滤器,我们可以选择性地移除或保留图像中感兴趣的区域。

在 Mahotas 中进行区域过滤

在 Mahotas 中,我们可以使用labeled.filter_labeled() 函数转换标记图像的过滤器区域。此函数将过滤器应用于图像的选定区域,同时保持其他区域不变。

使用 mahotas.labeled.filter_labeled() 函数

mahotas.labeled.filter_labeled() 函数以标记图像作为输入,并根据某些属性移除不需要的区域。它根据图像的标签识别区域。

结果图像仅包含与过滤器条件匹配的区域。

语法

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

mahotas.labeled.filter_labeled(labeled, remove_bordering=False, min_size=None,
max_size=None)

其中,

  • labeled - 它是一个数组。

  • remove_bordering (可选) - 它定义是否移除接触边界的区域。

  • min_size (可选) - 这是需要保留的区域的最小大小(默认情况下没有最小值)。

  • max_size (可选) - 这是需要保留的区域的最大大小(默认情况下没有最大值)。

示例

在以下示例中,我们正在过滤标记图像以移除边界像素。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# Loading the image
image_rgb = mh.imread('tree.tiff')
image = image_rgb[:,:,0]
# Applying gaussian filtering
image = mh.gaussian_filter(image, 4)
image = (image > image.mean())
# Converting it to a labeled image
labeled, num_objects = mh.label(image)
# Applying filters
filtered_image, num_objects = mh.labeled.filter_labeled(labeled,
remove_bordering=True)
# Creating a figure and axes for subplots
fig, axes = mtplt.subplots(1, 2)
# Displaying the original RGB image
axes[0].imshow(image_rgb)
axes[0].set_title('RGB Image')
axes[0].set_axis_off()
# Displaying the filtered image
axes[1].imshow(filtered_image)
axes[1].set_title('Filtered Image')
axes[1].set_axis_off()
# Adjusting spacing between subplots
mtplt.tight_layout()
# Showing the figures
mtplt.show()
输出

以下是上述代码的输出:

Filter Regions Image

特定大小区域的过滤

我们还可以过滤图像中特定大小的区域。通过这种方式,我们可以从标记图像中移除不符合特定大小限制的区域(过小或过大的区域)。

在 mahotas 中,我们可以通过在 labeled.filter_label() 函数中为可选参数min_sizemax_size 指定值来实现此目的。

示例

以下示例显示了过滤标记图像以移除特定大小区域。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# Loading the image
image_rgb = mh.imread('tree.tiff')
image = image_rgb[:,:,0]
# Applying gaussian filtering
image = mh.gaussian_filter(image, 4)
image = (image > image.mean())
# Converting to a labeled image
labeled, num_objects = mh.label(image)
# Applying filters
filtered_image, num_objects = mh.labeled.filter_labeled(labeled, min_size=10,
max_size=50000)
# Create a figure and axes for subplots
fig, axes = mtplt.subplots(1, 2)
# Displaying the original RGB image
axes[0].imshow(image_rgb)
axes[0].set_title('RGB Image')
axes[0].set_axis_off()
# Displaying the filtered image
axes[1].imshow(filtered_image)
axes[1].set_title('Filtered Image')
axes[1].set_axis_off()
# Adjusting spacing between subplots
mtplt.tight_layout()
# Showing the figures
mtplt.show()

输出

上述代码的输出如下:

Filter Regions Image1

边界区域和特定大小区域的过滤

我们可以过滤图像中的边界区域以及特定大小的区域。在此,我们移除接触边界的区域以及不符合特定大小限制的区域。

在 mahotas 中,我们可以通过为可选参数min_sizemax_size 指定值,并将可选参数remove_bordering 设置为True 来实现此目的,这些参数都在 labeled.filter_label() 函数中。

示例

在此示例中,应用过滤器以移除标记图像的边界区域和特定大小的区域。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# Loading the image
image_rgb = mh.imread('tree.tiff')
image = image_rgb[:,:,0]
# Applying gaussian filtering
image = mh.gaussian_filter(image, 4)
image = (image > image.mean())
# Converting it to a labeled image
labeled, num_objects = mh.label(image)
# Applying filters
filtered_image, num_objects = mh.labeled.filter_labeled(labeled,
remove_bordering=True, min_size=1000, max_size=50000)
# Creating a figure and axes for subplots
fig, axes = mtplt.subplots(1, 2)
# Displaying the original RGB image
axes[0].imshow(image_rgb)
axes[0].set_title('RGB Image')
axes[0].set_axis_off()
# Displaying the filtered image
axes[1].imshow(filtered_image)
axes[1].set_title('Filtered Image')
axes[1].set_axis_off()
# Adjusting spacing between subplots
mtplt.tight_layout()
# Showing the figures
mtplt.show()

输出

产生的输出如下所示:

Filter Regions Image2
广告