Mahotas - 加速魯棒特徵



加速魯棒特徵 (SURF) 是一種用於檢測影像中顯著特徵(關鍵點)的演算法。SURF 透過分析影像在多個尺度上的強度變化來識別關鍵點。

它為這些點分配方向並生成描述符,這些描述符捕獲了它們的獨特特徵。

描述符是在關鍵點周圍區域性區域內的模式中計算的。這些描述符隨後可用於各種應用。

SURF 使用兩種主要技術 - surf 密集和 surf 積分。這兩種技術在接下來的章節中進行了詳細討論。

SURF Surf

SURF surf 是一種結合了影像關鍵點檢測和描述的技術。它生成描述符以編碼這些關鍵點的屬性。該函式以影像作為輸入,並返回一組 SURF 描述符。

語法

以下是 mahotas 中 surf.surf() 函式的基本語法 -

mahotas.features.surf.surf(f, nr_octaves=4, nr_scales=6, initial_step_size=1,
threshold=0.1, max_points=1024, descriptor_only=False)

其中,

  • f - 輸入影像。

  • nr_octaves(可選) - 定義 SURF 演算法中使用的八度數。一個八度表示不同解析度級別的影像(預設值為 4)。

  • nr_scales(可選) - 確定每個八度音階的尺度數。這些尺度用於檢測不同細節級別的特徵(預設值為 6)。

  • initial_step_size(可選) - 確定連續尺度之間的初始步長。較小的步長允許檢測詳細的特徵(預設值為 1)。

  • threshold(可選) - 用於過濾掉弱 SURF 特徵的閾值(預設值為 0.1)。

  • max_points(可選) - 定義將返回的 SURF 點的最大數量(預設值為 1024)。

  • descriptor_only(可選) - 一個標誌,用於確定是否僅返回描述符或描述符和關鍵點。設定為 True 時,將僅返回檢測到的特徵的描述符。

    如果設定為 False,則將返回關鍵點和描述符(預設值為 False)。

我們可以在下面看到 surf 影像 -

Surf

SURF 密集

SURF 密集是 SURF 演算法使用的一種技術。在 SURF 密集中,關鍵點在影像上密集取樣。

換句話說,SURF 密集不是搜尋特定的興趣點,而是為影像中的畫素網格計算描述符。這有助於捕獲有關整個影像的資訊。

在下圖中,我們可以看到 SURF 密集影像 -

Surf Dense

SURF 積分

SURF 積分技術透過利用積分影像來提高 SURF 演算法的計算效率。積分影像預先計算影像特定區域直至畫素強度的累積和。

這種預先計算消除了冗餘計算,從而能夠更快、更有效地進行特徵檢測和描述。

因此,SURF 演算法非常適合即時應用和處理大規模資料集。

以下是 SURF 積分的影像 -

Surf Integral Technique

示例

在下面的示例中,我們對影像執行了不同的 SURF 函式,如上所述 -

import mahotas as mh
from mahotas.features import surf
import numpy as np
import matplotlib.pyplot as mtplt
image = mh.imread('tree.tiff', as_grey=True)
# SURF dense
surf_dense = surf.dense(image, 100)
mtplt.imshow(surf_dense)
mtplt.title('SURF Dense Image')
mtplt.axis('off')
mtplt.show()
# SURF integral
surf_integral = surf.integral(image)
mtplt.imshow(surf_integral)
mtplt.title('SURF Integral Image')
mtplt.axis('off')
mtplt.show()
# SURF surf
surf_surf = surf.surf(image)
mtplt.imshow(surf_surf)
mtplt.title('SURF Surf Image')
mtplt.axis('off')
mtplt.show()

輸出

獲得的輸出如下所示 -

SURF 密集影像

Surf Dense1

SURF 積分影像

Surf Integral Image

SURF Surf 影像

Surf Image1

我們將在後面的章節中詳細討論 SURF 密集和 SURF 積分技術。

廣告