Mahotas - 过滤区域
过滤区域是指根据某些标准排除标记图像的特定区域。过滤区域的常用标准是基于其大小。通过指定大小限制,可以排除太小或太大的区域以获得干净的输出图像。
过滤区域的另一个标准是检查区域是否有边界。通过应用这些过滤器,我们可以有选择地删除或保留图像中感兴趣的区域。
Mahotas 中的过滤区域
在 Mahotas 中,我们可以使用 labeled.filter_labeled() 函数转换标记图像的过滤区域。此函数将过滤器应用于图像的选定区域,同时保持其他区域不变。
使用 mahotas.labeled.filter_labeled() 函数
mahotas.labeled.filter_labeled() 函数将标记图像作为输入,并根据某些属性删除不需要的区域。它根据图像的标签识别区域。
生成的图像仅包含符合过滤条件的区域。
语法
以下是 mahotas &minus 中 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 # 加载图像 image_rgb = mh.imread('tree.tiff') image = image_rgb[:,:,0] # 应用高斯滤波 image = mh.gaussian_filter(image, 4) image = (image > image.mean()) # 将其转换为带标签的图像 labeled, num_objects = mh.label(image) # 应用过滤器 filtered_image, num_objects = mh.labeled.filter_labeled(labeled, remove_bordering=True) # 为子图创建图形和轴 fig, axis = mtplt.subplots(1, 2) # 显示原始 RGB 图像 axes[0].imshow(image_rgb) axes[0].set_title('RGB Image') axes[0].set_axis_off() # 显示过滤后的图像 axes[1].imshow(filtered_image) axes[1].set_title('Filtered Image') axes[1].set_axis_off() # 调整子图之间的间距 mtplt.tight_layout() # 显示图形 mtplt.show()
输出
以下是上述代码的输出 −

对特定大小的区域进行过滤
我们还可以过滤图像中特定大小的区域。通过这种方式,我们可以从标记图像中删除不属于特定尺寸限制的区域(太小或太大的区域)。
在 mahatos 中,我们可以通过在 labeled.filter_label() 函数中为可选参数 min_size 和 max_size 指定值来实现这一点。
示例
以下示例显示过滤标记图像以删除特定大小的区域。
import mahotas as mh import numpy as np import matplotlib.pyplot as mtplt # 加载图像 image_rgb = mh.imread('tree.tiff') image = image_rgb[:,:,0] # 应用高斯滤波 image = mh.gaussian_filter(image, 4) image = (image > image.mean()) # 转换为带标签的图像 labeled, num_objects = mh.label(image) # 应用过滤器 filtered_image, num_objects = mh.labeled.filter_labeled(labeled, min_size=10, max_size=50000) # 为子图创建图形和轴 fig, axis = mtplt.subplots(1, 2) # 显示原始 RGB 图像 axes[0].imshow(image_rgb) axes[0].set_title('RGB Image') axes[0].set_axis_off() # 显示过滤后的图像 axes[1].imshow(filtered_image) axes[1].set_title('Filtered Image') axes[1].set_axis_off() # 调整子图之间的间距 mtplt.tight_layout() # 显示图形 mtplt.show()
输出
上述代码的输出如下 −

过滤边界区域和特定大小的区域
我们可以过滤图像中的边界区域以及特定大小的区域。在此,我们删除了接触边界的区域和不在特定大小限制内的区域。
在 mahotas 中,我们可以通过在 labeled.filter_label() 函数中为可选参数 min_size 和 max_size 指定值并将可选参数 remove_bordering 设置为 True 来实现此目的。
示例
在此示例中,应用过滤器来删除标记图像的边界区域和特定大小的区域。
import mahotas as mh import numpy as np import matplotlib.pyplot as mtplt # 加载图像 image_rgb = mh.imread('tree.tiff') image = image_rgb[:,:,0] # 应用高斯滤波 image = mh.gaussian_filter(image, 4) image = (image > image.mean()) # 将其转换为带标签的图像 labeled, num_objects = mh.label(image) # 应用过滤器 filtered_image, num_objects = mh.labeled.filter_labeled(labeled, remove_bordering=True, min_size=1000, max_size=50000) # 为子图创建图形和轴 fig, axis = mtplt.subplots(1, 2) # 显示原始 RGB 图像 axes[0].imshow(image_rgb) axes[0].set_title('RGB Image') axes[0].set_axis_off() # 显示过滤后的图像 axes[1].imshow(filtered_image) axes[1].set_title('Filtered Image') axes[1].set_axis_off() # 调整子图之间的间距 mtplt.tight_layout() # 显示图形 mtplt.show()
输出
生成的输出如下所示 −
