Mahotas - 标记区域的大小
标记区域的大小是指标记图像不同区域中存在的像素数。标记图像是指将唯一标签(值)分配给图像的不同区域(一组像素)的图像。
通常,图像有两个主要区域,即前景和背景。
每个区域的大小取决于图像中存在的区域总数。如果存在更多区域,则每个区域的大小将更小。
相反,如果存在较少区域,则每个区域的大小将更大。
Mahotas 中标记区域的大小
在 Mahotas 中,我们可以使用 mahotas.labeled.labeled_size() 函数来计算标记图像中每个区域的大小。该函数的工作方式如下 −
它首先计算图像中标记区域的数量。
然后,它遍历所有标记区域并计算每个区域中存在的像素总数。
遍历完所有区域后,该函数将返回每个区域的大小。
mahotas.labeled.labeled_size() 函数
mahotas.labeled.labeled_size() 函数将标记图像作为输入并返回一个列表,其中包含每个区域的大小(以像素为单位)。
我们可以遍历值列表以获取每个区域的大小。
语法
以下是 mahotas − 中 labeled_size() 函数的基本语法
mahotas.labeled.labeled_size(labeled)
其中,
labeled − 它是输入的带标签图像。
示例
在下面的示例中,我们使用 mh.labeled.labeled_size() 函数查找图像的带标签区域的大小。
import mahotas as mh import numpy as np import matplotlib.pyplot as mtplt # 加载图像 image = mh.imread('sea.bmp') # 标记图像 labeled, num_objects = mh.label(image) # 获取标记区域的大小 labeled_size = mh.labeled.labeled_size(labeled) # 打印标记区域的大小 for i, labeled_size in enumerate(labeled_size, 1): print(f"区域 {i} 的大小 = {labeled_size} 像素") # 为子图创建图形和轴 fig, axis = mtplt.subplots(1, 1) # 显示原始图像 axes.imshow(image) axes.set_title('Labeled Image') axes.set_axis_off() # 调整子图之间的间距 mtplt.tight_layout() # 显示图 mtplt.show()
输出
以下是上述代码的输出 −
区域 1 的大小 = 4263 像素 区域 2 的大小 = 2234457 像素
以下是获得的图像 −

灰度图像中的大小
我们还可以找到灰度图像中标记区域的大小。灰度图像是指只有一个−颜色通道的图像,其中每个像素由一个强度值表示。
像素的强度值决定了灰色的深浅。 0 将产生黑色像素,255 将产生白色像素,而任何其他值都将产生具有中间色调的像素。
在 mahotas 中,要获取灰度图像标记区域的大小,我们首先使用 colors.rgb2gray() 函数将输入的 RGB 图像转换为灰度图像。
然后,我们标记灰度图像并遍历每个区域以计算其大小。
示例
在下面提到的示例中,我们正在寻找灰度图像标记区域的大小。
import mahotas as mh import numpy as np import matplotlib.pyplot as mtplt # 加载图像 image = mh.imread('sun.png') # 将其转换为灰度图像 image = mh.colors.rgb2gray(image) # 标记图像 labeled, num_objects = mh.label(image) # 获取标记区域的大小 labeled_size = mh.labeled.labeled_size(labeled) # 打印标记区域的大小 for i, labeled_size in enumerate(labeled_size, 1): print(f"区域 {i} 的大小 = {labeled_size} 像素") # 为子图创建图形和轴 fig, axis = mtplt.subplots(1, 1) # 显示原始图像 axes.imshow(image, cmap='gray') axes.set_title('Original Image') axes.set_axis_off() # 调整间距子图 mtplt.tight_layout() # 显示图形 mtplt.show()
输出
上述代码的输出如下 −
区域 1 的大小 = 8 像素 区域 2 的大小 = 1079032 像素
生成的图像如下 −

随机布尔图像中的大小
除了灰度图像,我们还可以获取随机布尔图像中标记区域的大小。
随机布尔图像是指每个像素的值为 1 或 0 的图像,其中值为"1"的像素称为前景,值为"0"的像素称为背景。
在 mahotas 中,我们首先使用 np.zeros() 函数生成特定尺寸的随机布尔图像。
生成的随机图像最初将其所有像素值设置为 0(仅包含背景区域)。然后,我们将整数值分配给图像的几个部分以创建不同的区域。
然后,我们标记图像并遍历每个区域以获取其像素大小。
示例
在这里,我们获取随机生成的布尔图像的不同标签的大小。
import mahotas as mh import numpy as np import matplotlib.pyplot as mtplt # 创建随机图像 image = np.zeros((10,10), bool) # 创建区域 image[:2, :2] = 1 image[4:6, 4:6] = 1 image[8:, 8:] = 1 # 标记图像 labeled, num_objects = mh.label(image) # 获取标记区域的大小 labeled_size = mh.labeled.labeled_size(labeled) # 打印标记区域的大小 for i, labeled_size in enumerate(labeled_size, 1): print(f"区域 {i} 的大小 = {labeled_size} 像素") # 为子图创建图形和轴 fig, axis = mtplt.subplots(1, 1) # 显示原始图像 axes.imshow(image) axes.set_title('Original Image') axes.set_axis_off() # 调整子图之间的间距 mtplt.tight_layout() # 显示图形 mtplt.show()
输出
执行上述代码后,我们得到以下输出 −
区域 1 的大小 = 88 像素 区域 2 的大小 = 4 像素 区域 3 的大小 = 4 像素 区域 4 的大小 = 4 像素
得到的图像如下所示 −
