Mahotas - Zernike 特征
Zernike 特征是一组数学值,用于描述图像中物体的形状。这些值反映了形状的具体细节,例如其圆度、对称性或某些图案的存在。
Zernike 特征具有一些特殊属性,使其可用于形状分析。例如,它们可以描述形状而不管其大小如何,这意味着即使形状旋转或缩放,特征仍保持不变。
此属性有助于识别不同条件下的物体。
Zernike 特征通过使用称为 Zernike 多项式的数学函数将形状分解为更小的部分来工作。这些多项式就像积木一样,通过组合它们,我们可以重新创建和表示物体的形状。
Mahotas 中的 Zernike 特征
要计算 mahotas 中的 Zernike 特征,我们可以使用 mahotas.features.zernike() 函数。
在 Mahotas 中,Zernike 特征通过执行以下步骤计算 −
步骤 1 − 生成一组 Zernike 多项式,它们是表示各种形状和轮廓的特殊数学函数。这些多项式充当分析物体形状的构建块。
步骤 2 − 通过将物体的形状投影到 Zernike 多项式上来计算 Zernike 矩。这些矩捕获了重要的形状特征。
步骤 3 −从计算出的矩中提取 Zernike 特征,这些特征代表了基本的形状信息。
mahotas.features.zernike() 函数
mahotas.features.zernike() 函数有三个参数:图像对象、Zernike 多项式的最大半径以及要计算的特征数量(度)。该函数返回图像的 Zernike 特征的 1−D 数组。
Zernike 矩的度是矩复杂度的度量。度越高,矩越复杂。
语法
以下是 mahotas.features.zernike() 函数的基本语法 −
mahotas.features.zernike(im, degree, radius, cm={center_of_mass(im)})
其中,
im − 它是将在其上计算 Zernike 矩的输入图像。
degree − 它指定要计算的 Zernike 矩的最大数量。
radius − 它定义将在其上计算 Zernike 矩的圆形区域的半径(以像素为单位)。以质心为中心的此半径定义的圆外的区域将被忽略。
cm(可选) −它指定图像的质心。默认情况下,使用图像的质心。
示例
以下是计算用于图像形状识别的 Zernike 特征的基本示例 −
import mahotas as mh # 加载形状图像 image1 = mh.imread('sun.png', as_grey=True) # 计算 Zernike 特征 features = mh.features.zernike(image1, degree=8, radius=10) # 打印用于形状识别的特征 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]
使用自定义质心
图像的质心是图像中质量均匀分布的点。自定义质心是图像中的一个点,不一定是图像的质心。
当您想使用不同的质心进行计算时,这可能很有用。
例如,您可能希望使用图像中对象的自定义质心来计算该对象的 Zernike 矩。
要在 mahotas 中使用自定义质心计算图像的 Zernike 矩,我们需要将 cm 参数传递给 mahotas.features.zernike() 函数。
cm 参数采用两个数字的元组,表示自定义质心的坐标。
示例
在这里,我们尝试使用自定义质心 − 来计算图像的 Zernike 特征;
import mahotas import numpy as np # 加载图像 image = mahotas.imread('nature.jpeg', as_grey = True) # 计算图像的质心 center_of_mass = np.array([100, 100]) # 使用自定义质心计算图像的 Zernike 特征 zernike_features = mahotas.features.zernike(image, degree= 5, radius = 5, cm=center_of_mass) # 打印 Zernike 特征 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]
计算多幅图像的 Zernike 特征
我们还可以计算不同格式的多幅图像的 Zernike 特征。以下是实现此目的的方法 −
创建一个空列表。
使用 for 循环遍历图像列表。
计算每幅图像的 Zernike 特征。
features.zernike() 函数返回 Zernike 矩向量,然后将其附加到 Zernike 特征列表中。
示例
现在,我们尝试计算不同格式的多幅图像的 Zernike 特征 −
import mahotas import numpy as np # 加载图像 images = [mahotas.imread('sun.png', as_grey = True), mahotas.imread('nature.jpeg', as_grey = True), mahotas.imread('tree.tiff', as_grey = True)] # 计算图像的 Zernike 特征 zernike_features = [] for image in images: zernike_features.append(mahotas.features.zernike(image, degree=2, radius = 2)) # 打印 Zernike 特征 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])]