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])]
廣告