Mahotas - 泽尼克特征



泽尼克特征是一组描述图像中物体形状的数学值。这些值反映了形状的特定细节,例如其圆度、对称性或某些图案的存在。

泽尼克特征具有一些使其对形状分析有用的特殊属性。例如,它们可以描述形状与其大小无关,这意味着即使形状旋转或缩放,特征也保持不变。

此属性有助于在不同条件下识别物体。

泽尼克特征通过使用称为泽尼克多项式的数学函数将形状分解成更小的片段来工作。这些多项式充当构建块,通过组合它们,我们可以重建和表示物体的形状。

Mahotas 中的泽尼克特征

要计算 mahotas 中的泽尼克特征,我们可以使用 **mahotas.features.zernike()** 函数。

在 Mahotas 中,泽尼克特征通过执行以下步骤计算 -

**步骤 1** - 生成一组泽尼克多项式,这些多项式是表示各种形状和轮廓的特殊数学函数。这些多项式充当分析物体形状的构建块。

**步骤 2** - 通过将物体的形状投影到泽尼克多项式上计算泽尼克矩。这些矩捕获重要的形状特征。

**步骤 3** - 从计算出的矩中提取泽尼克特征,这些特征表示基本的形状信息。

mahotas.features.zernike() 函数

mahotas.features.zernike() 函数接受三个参数:图像对象、泽尼克多项式的最大半径以及要计算的特征(度)数。该函数返回图像的泽尼克特征的一维数组。

泽尼克矩的度数是衡量矩复杂程度的指标。度数越高,矩越复杂。

语法

以下是 mahotas.features.zernike() 函数的基本语法 -

mahotas.features.zernike(im, degree, radius, cm={center_of_mass(im)})

其中,

  • **im** - 它是将对其计算泽尼克矩的输入图像。

  • **degree** - 它指定要计算的泽尼克矩的最大数量。

  • **radius** - 它定义了圆形区域的半径(以像素为单位),泽尼克矩将在其上计算。此半径定义的圆形区域(以质心为中心)之外的区域将被忽略。

  • **cm(可选)** - 它指定图像的质心。默认情况下,使用图像的质心。

示例

以下是计算图像形状识别的泽尼克特征的基本示例 -

import mahotas as mh
# Load images of shapes
image1 = mh.imread('sun.png', as_grey=True)
# Compute Zernike features
features = mh.features.zernike(image1, degree=8, radius=10)
# Printing the features for shape recognition
print(features)
输出

执行上述代码后,我们得到如下输出 -

[0.31830989 0.00534998 0.00281258 0.0057374  0.01057919 0.00429721
 0.00178094 0.00918145 0.02209622 0.01597089 0.00729495 0.00831211
 0.00364554 0.01171028 0.02789188 0.01186194 0.02081316 0.01146935
 0.01319499 0.03367388 0.01580632 0.01314671 0.02947629 0.01304526
 0.00600012]

使用自定义质心

图像的质心是图像中质量均匀分布的点。自定义质心是图像中不一定为图像质心的点。

这在您希望对计算使用不同的质心时很有用。

例如,您可能希望使用图像中物体的自定义质心来计算物体的泽尼克矩。

要在 mahotas 中使用自定义质心计算图像的泽尼克矩,我们需要将 **cm** 参数传递给 mahotas.features.zernike() 函数。

cm 参数采用一个包含两个数字的元组,表示自定义质心的坐标。

示例

在这里,我们尝试使用自定义质心计算图像的泽尼克特征 -

import mahotas
import numpy as np
# Load the image
image = mahotas.imread('nature.jpeg', as_grey = True)
# Calculate the center of mass of the image
center_of_mass = np.array([100, 100])
# Calculate the Zernike features of the image, using the custom center of mass
zernike_features = mahotas.features.zernike(image, degree= 5, radius = 5,
cm=center_of_mass)
# Print the Zernike features
print(zernike_features)

输出

以下是上述代码的输出 -

[3.18309886e-01 3.55572603e-04 3.73132619e-02 5.98944983e-04
3.23622041e-04  1.72293481e-04 9.16757235e-02 3.35704966e-04
7.09426259e-02  1.17847972e-04 2.12625026e-04 3.06537827e-04]

计算多个图像的泽尼克特征

我们还可以以不同的格式计算多个图像的泽尼克特征。以下是实现此目的的方法 -

  • 创建一个空列表。

  • 使用 for 循环迭代图像列表。

  • 计算每个图像的泽尼克特征。

features.zernike() 函数返回一个泽尼克矩向量,然后将其追加到泽尼克特征列表中。

示例

现在,我们尝试一起计算不同格式的多个图像的泽尼克特征 -

import mahotas
import numpy as np
# Load the images
images = [mahotas.imread('sun.png', as_grey = True),
mahotas.imread('nature.jpeg', as_grey = True), mahotas.imread('tree.tiff',
as_grey = True)]
# Calculate the Zernike features of the images
zernike_features = []
for image in images:
   zernike_features.append(mahotas.features.zernike(image, degree=2, radius =
2))
# Print the Zernike features
print(zernike_features)

输出

上述代码的输出如下 -

[array([0.31830989, 0.05692079, 0.10311168, 0.01087613]), array([0.31830989, 0.02542476, 0.11556386, 0.01648607]), array([0.31830989, 0.12487805, 0.07212079, 0.03351757])]
广告