Mahotas - 获取图像矩



图像矩是用于描述图像各种属性的统计量度。它提供有关图像中物体的形状、位置、方向和强度信息。

一般来说,图像矩是通过将像素强度与其对应的空间坐标的乘积相加来计算的。这些矩可用于导出有用的特征,例如图像中物体的质心(平均位置)、面积、方向和比例。高阶矩可以捕捉更复杂的形状特征。

在 Mahotas 中获取图像矩

在 Mahotas 的上下文中,图像矩使用 **mahotas.moments()** 函数计算。此函数以图像作为输入,并返回一组表征图像的矩。

Mahotas 提供各种类型的矩,包括原始矩、中心矩、归一化矩和 Hu 矩。这些矩可用于诸如目标识别、图像对齐和形状分析之类的任务。

使用 mahotas.moments() 函数

mahotas.moments() 函数用于获取图像或感兴趣区域 (ROI) 的矩。此函数以图像对象作为输入,并返回包含计算出的矩的 NumPy 数组。

NumPy 数组就像一个数据表,其中每个值都以网格形式排列,您可以轻松地对整个网格或特定部分进行计算。

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

mahotas.moments(image, p0, p1, cm=(0, 0), convert_to_float=True)

其中,

  • **p0** - 它是第一维的幂 (浮点数)

  • **p1** - 它是第二维的幂 (浮点数)

  • **image** - 它是输入图像,应为二维数组

  • **cm** - 它是质心,默认为 (0,0)。

示例

在下面给出的示例中,我们使用 moments() 函数来获取图像矩:

import mahotas as mh
import numpy as np
from pylab import imshow, show
image = mh.imread('sun.png')
# extracting the first channel (0th index) of the image array using slicing
cimage=image[:,:,0]
p0=5.5
p1=5.5
moment = mh.moments(cimage,p0,p1)
print(moment)
输出

以下是上述代码的输出:

2.971238276705602e+39

通过指定质心来获取图像矩

质心是像素平均位置的度量,以其强度为权重。通过指定质心,我们可以获得相对于该特定位置的矩。

我们可以通过将 **'cm'** 参数传递给 moments() 函数来指定质心以获取图像矩。通过设置质心,我们可以移动坐标系并获得相对于图像中特定位置的矩。

示例

在这里,我们通过指定质心坐标来获取图像矩:

import mahotas as mh
image = mh.imread('nature.jpeg', as_grey = True)
moments = mh.moments(image, p0=1, p1=0, cm=(100, 100))
print(moments)

输出

执行上述代码后,我们得到以下输出:

40074427849.0

通过禁用浮点数转换来获取图像矩

通过禁用浮点数转换,我们在矩计算过程中保留输入图像的原始数据类型。当我们使用特定图像格式(例如灰度或二值图像)时,这很有用,在这些图像中,像素值已经是整数格式。

我们可以通过将 **'convert_to_float'** 参数传递给 moments() 函数,在 Mahotas 中禁用在图像矩计算期间将输入图像转换为浮点数表示。

**convert_to_float** 参数显式设置为 False。这确保在矩计算期间不将输入图像转换为浮点数表示。

示例

在下面的示例中,我们通过禁用浮点数转换来获取图像矩:

import mahotas as mh
image = mh.imread('tree.tiff', as_grey = True)
moments = mh.moments(image, p0=2, p1=0, cm=(0, 0), convert_to_float=False)
print(moments)

输出

上述代码的输出如下:

11029976739711.432

获取高阶图像矩

高阶图像矩提供了图像像素分布、对称性和形状特征的更详细信息。这些矩帮助我们捕捉低阶矩可能忽略的复杂模式和变化。

我们可以通过使用 **'p0'** 和 **'p1'** 参数指定所需的矩阶来在 Mahotas 中获取高阶图像矩,其中较高的值表示较高的阶数。

示例

在这里,我们尝试获取高阶图像矩:

import mahotas as mh
image = mh.imread('sea.bmp', as_grey = True)
moments = mh.moments(image, p0=3, p1=3, cm=(10, 10))
print(moments)

输出

上述代码的输出如下:

2.3690172519584466e+24
广告