Mahotas - 标记最大值数组



标记最大值数组指的是一个数组,它存储 标记图像 中每个区域的最大强度值。为了找到一个区域的最大强度值,需要检查该区域中的每个像素。然后,选择最亮像素的强度值作为最大强度值。简单来说,标记最大值数组用于查找图像中最亮的区域。

例如,假设我们有一个包含三个像素的区域。这三个像素的强度值分别为0.5、0.2和0.8。那么该区域的最大强度值将为0.8。

Mahotas中的标记最大值数组

在Mahotas中,我们可以使用mahotas.labeled.labeled_max()函数来创建一个标记最大值数组。该函数迭代地搜索区域中最亮的像素。然后,它将最亮像素的强度值存储在一个数组中。

生成的数组是一个标记最大值数组,包含图像每个区域的最大强度值。

mahotas.labeled.labeled_max()函数

mahotas.labeled.labeled_max()函数接受图像和标记图像作为输入。它返回一个数组,其中包含每个标记区域的最大强度值。

语法

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

mahotas.labeled.labeled_max(array, labeled, minlength=None)

其中,

  • array - 输入图像。

  • labeled - 标记图像。

  • minlength (可选) - 指定输出数组中要包含的最小区域数(默认为None)。

示例

在下面的示例中,我们使用labeled_max()函数在标记图像中查找标记最大值数组。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# Loading the images
image = mh.imread('sea.bmp')
# Converting it to grayscale
image = mh.colors.rgb2gray(image).astype(np.uint8)
# Applying thresholding
threshold = mh.thresholding.rc(image)
threshold_image = image > threshold
# Labeling the image
label, num_objects = mh.label(threshold_image)
# Getting the labeled max array
labeled_max = mh.labeled.labeled_max(image, label)
# Printing the labeled max array
print('Labeled max array:', labeled_max)
# Creating a figure and axes for subplots
fig, axes = mtplt.subplots(1, 2)
# Displaying the original image
axes[0].imshow(image, cmap='gray')
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# Displaying the labeled image
axes[1].imshow(label, cmap='gray')
axes[1].set_title('Labeled Image')
axes[1].set_axis_off()
# Adjusting spacing between subplots
mtplt.tight_layout()
# Showing the figures
mtplt.show()
输出

以下是上述代码的输出:

Labeled max array: [107 111 129 ... 141 119 109]

获得的图像是:

Labeled Max Array

随机布尔图像的标记最大值数组

我们还可以找到随机布尔图像的标记最大值数组。随机布尔图像指的是每个像素的值为0或1的图像。“1”表示前景像素,“0”表示背景像素。

在Mahotas中,要查找随机布尔图像的标记最大值数组,我们首先需要使用np.zeros()函数生成特定大小的随机布尔图像。

此图像最初仅包含背景像素。然后,我们将整数值分配给图像的几个部分以创建不同的区域。

然后,我们使用labeled_max()函数查找图像的标记最大值数组。

示例

在下面提到的示例中,我们正在查找随机布尔图像的标记最大值数组。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# Creating a random image
image = np.zeros((10, 10), bool)
# Assigning values to the regions
image[:2, :2] = 1
image[4:6, 4:6] = 1
image[8:, 8:] = 1
# Labeling the image
label, num_objects = mh.label(image)
# Random sampling
random_sample = np.random.random_sample(image.shape)
# Getting the labeled max array
labeled_max = mh.labeled.labeled_max(random_sample, label)
# Printing the labeled max array
print('Labeled max array')
for i, intensity in enumerate(labeled_max):
   print('Region', i, ':', intensity)
# 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 labeled image
axes[1].imshow(label)
axes[1].set_title('Labeled Image')
axes[1].set_axis_off()
# Adjusting spacing between subplots
mtplt.tight_layout()
# Showing the figures
mtplt.show()

输出

上述代码的输出如下:

Labeled max array
Region 0 : 0.9950607583625318
Region 1 : 0.8626363785944107
Region 2 : 0.6343883551171169
Region 3 : 0.8162320509314726

我们得到以下输出图像:

Labeled Max Array1
广告