Mahotas - 查找图像平均值
当我们谈论查找图像平均值时,我们指的是计算图像中所有像素的平均强度值。
数字图像中的每个像素都由与其强度或颜色信息相对应的数值表示。
强度值的范围取决于图像的颜色深度,例如灰度图像为 8−bit(0−255),彩色图像为 24−bit(每个颜色通道为 0−255)。
查找图像平均值涉及将图像中所有像素的强度值相加,然后除以总像素数。
此过程提供一个表示图像平均强度的单个值。它可以被解释为图像的整体亮度或强度级别。
在 Mahotas 中查找图像平均值
我们可以使用 mahotas.mean() 函数在 Mahotas 中查找图像平均值。此函数接受一个图像数组并返回其平均值。
众所周知,Mahotas 一次只能找到一个通道的平均值,因此我们需要将彩色图像转换为单个通道以找到该通道的平均值。
mean 函数返回一个标量值,表示图像中所有像素的平均值。
语法
以下是 mean 函数 − 的基本语法
Image_name.mean()
示例
在下面的例子中,我们找到图像的平均值并以平均强度显示图像 −
import mahotas as mh import numpy as np from pylab import imshow, show import matplotlib.pyplot as plt image = mh.imread('nature.jpeg', as_grey = True) find_mean = image.mean() print("图像的平均值是:", find_mean) imshow(image,cmap='gray') show()
输出
图像的平均值是:134.99541438411237
显示的图像如下所示 −

每个通道的图像平均值
我们还可以使用 Mahotas 找到 RGB 图像中每个通道的平均值。首先,计算整个图像的平均值,然后使用数组切片分别计算每个通道的平均值。
切片 image[:, :, 0] 对应于通道 0(红色),image[:, :, 1] 对应于通道 1(绿色),image[:, :, 2] 对应于通道 2(蓝色)。它使用 mean() 函数计算每个通道的平均值并打印结果。
示例
在此示例中,我们尝试找到图像各个通道的平均值 −
import mahotas as mh import numpy as np image = mh.imread('sun.png') # 计算整个图像的平均值 print("图像的平均值:{0}".format(image.mean())) # 计算通道 0(红色)的平均值 img0 = image[:, :, 0] print('通道 0 的平均值:{0}'.format(img0.mean())) # 计算通道 1(绿色)的平均值 img1 = image[:, :, 1] print('通道 1 的平均值:{0}'.format(img1.mean())) # 计算通道 2(蓝色)的平均值 img2 = image[:, :, 2] print('通道 2 的平均值: {0}'.format(img2.mean()))
输出
执行上述代码后,我们得到如下所示的输出 −
图像的平均值:105.32921300415184 通道 0 的平均值:126.04734671559905 通道 1 的平均值:106.04269535883749 通道 2 的平均值:83.89759693801898
查找图像中 ROI 的平均值
我们可以使用图像数组上的切片操作来查找图像中感兴趣区域 (ROI) 的平均值。之后,计算 ROI 内所有通道的平均值(如果图像是彩色的)或灰度值的平均值(如果图像是灰度的)。
以下是定义图像 ROI 的语法 −
image[start_row:end_row, start_column:end_column]
其中,'start_row' 和 'end_row' 表示行的范围,'start_column' 和 'end_column' 表示定义 ROI 的列的范围。
因此,为了指定图像内的感兴趣区域,我们选择行和列的子集。
示例
在这里,我们正在求出图像感兴趣区域的平均值 −
import mahotas as mh import numpy as np image = mh.imread('tree.tiff') # 定义特定感兴趣区域 roi = image[100:300, 200:400] roi_mean = np.mean(roi) print("图像的平均值是:", roi_mean)
输出
上述代码的输出如下 −
图像的平均值是:98.556925