Mahotas 简明教程

Mahotas - Getting Image Moments

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

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

Getting Image moments in Mahotas

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

Mahotas 提供各种类型的矩,包括原始矩、中心矩、归一化矩和 Hu 矩。这些矩对于对象识别、图像对齐和形状分析等任务非常有用。

Using the mahotas.moments() Function

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

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

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

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

其中,

  1. p0 − 它是第一个维度的幂 (float)

  2. p1 − 它是第二个维度的幂 (float)

  3. image − 这是输入图像,它应该是二维矩阵

  4. 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

Getting Image Moments by Specifying Center of Mass

质心是对像素平均位置的度量,根据像素强度进行加权。通过指定质心,我们可以获得相对该特定位置的矩。

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

Example

在此处,我们通过指定质心配合度来获取图像矩 −

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

Getting Image moments by Disabling Float Conversion

通过禁用浮点转换,我们在矩形计算过程中保留输入图像的原始数据类型。这在处理特定图像格式时非常有用,例如灰度或二进制图像,其中像素值已为整数格式。

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

convert_to_float 参数被明确设置为 False。这确保输入图像在矩形计算期间不会转换为浮点表示。

Example

在以下示例中,我们通过禁用浮点转换来获取图像矩 −

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

Getting Higher Order Image Moments

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

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

Example

此处,我们尝试获取高阶图像矩 −

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