Programming 5

Keypoint Feature Detection

Goal

作業環境

硬體規格:

CUP:12th Gen Intel(R) Core(TM) i5-12400   2.50 GHz

RAM:32G

 

軟體規格:

作業系統:Windows 10 專業版

C++ IDE:Visual Studio Community 2022 (64 位元) 版本 17.5.1

OpenCV:4.3.0

問題與解決方法

此程式使用的影像是我自行拍攝的影像,設備為 iPhone Xs 的內建相機 (並調整尺寸為500*375)

GFTT(Good Features to Track)

簡介:

GFTT 特徵點檢測算法的原理基於以下假設:在圖像的局部區域中,如果存在著明顯的邊緣、角點或紋理變化,則這些區域更容易被追蹤和匹配,因為它們在不同圖像之間的外觀變化較大。

GFTT 算法的主要步驟:

GFTT 的參數:

程式碼

程式碼解釋:

結果

更改參數

FASTFeatures from Accelerated Segment Test

簡介:

FAST 的原理是基於加速分割測試,通過對圖像的每個像素進行測試,判斷該像素是否為特徵點。並且該算法通過進行二進制測試來加速計算,從而實現高效率的特徵檢測,這使得FAST算法成為許多實時應用和資源受限場景中常用的特徵檢測算法。


FAST 算法的主要步驟:


FAST的參數:

程式碼

程式碼解釋:

結果

=false

SIFT(Scale-Invariant Feature Transform)

簡介:

David G. Lowe

原理與步驟

尺度空間構建:

極值點檢測:

關鍵點定位:

方向估計:

SIFT 的參數:

程式碼

程式碼解釋:

結果

查看 xfeatures2d.hpp 中發現 SIFT 的默認參數為:

結果分析:

結果分析:

SURF(Speeded-Up Robust Features)

簡介:


SURF 的原理和步驟:


SURF 的參數:

程式碼

程式碼解釋:

結果

結果分析:

BRISK(Binary Robust Invariant Scalable Keypoints)

簡介:

原理與步驟:

BRISK 的參數:

程式碼

程式碼解釋:

結果

thresh=60

octaves=5

patternScale=1.0

thresh=60

octaves=5

patternScale=2.0

結果分析:

ORB(Oriented FAST and Rotated BRIEF)

簡介:

ORB 的原理:

ORB 的參數:

nFeatures:要檢測的最大特徵點數量。

scaleFactor:圖像金字塔的縮放因子,用於生成不同尺度的圖像。

nLevels:圖像金字塔的層數,控制生成多少個尺度的圖像。

edgeThreshold:邊緣閾值,用於檢測關鍵點時過濾邊緣點。

firstLevel:圖像金字塔的起始層級。

WTA_K:BRIEF 描述子生成過程中每個像素的比較次數,通常為2或4。

scoreType:計算關鍵點的得分類型,可以是 HARRIS、FAST 或等效於 FAST 的 FASR。

patchSize:計算關鍵點得分時使用的區域大小。

fastThreshold:FAST 算法中用於判斷關鍵點的亮度差異閾值。

程式碼

程式碼解釋:

結果

nFeatures=75

scaleFactor=1.2

nLevels=8

nFeatures=175

scaleFactor=1.2

nLevels=3

結果分析:

額外補充

結論與心得

ReferenceComputer Vision 2023 - P5 (ykwang.tw)OpenCV 4 Computer Vision Application Programming Cookbook CH8, by D. M. Escrivá, R. Laganiere, Fourth Edition, Packt Publishing, 2019.[Book URL]  [GitHubCHG:Visual Studio 編譯 OpenCV 3 的擴充 Contrib 函式庫(Charlotte.HonG)ChatGPT