sift特徵點我看了不下六次,每次都看一半就不看了,現在還是半懂不懂,當然和我個人數學水平、知識積累、懶惰的個性有關。
不過sift確實包含了很多內容,如高斯金字塔、dog、矩陣求導以及黑塞矩陣,要求較深的矩陣知識和影象處理知識,如果是初學者我建議先不要看sift特徵,一方面確實是浪費時間,另一方面是必須要有一定的程式設計能力、高等數學知識和影象處理理解,才能明白sift的深層含義。
黑塞矩陣和拉普拉斯運算元
拉普拉斯運算元是橢圓形運算元,具有旋轉不變性,也稱為散度,在數字影象上,這個值的正負關係到函式的梯度是增加還是減少,是各方向梯度的總和,說明了影象一階導數上的變化快慢,本身是影象二階導數。
注意他並沒有指明方向,也就說某個方向的梯度也許是增加,但另乙個方向的梯度或許是下降,然而總的梯度是上公升的。
關於拉普拉斯的問題建議看一下這篇文章:
黑塞矩陣包含了拉普拉斯運算元,他的特徵值說明了變化最快和最慢的兩個方向,也就是所說的主曲率方向,其實還是在說影象一階導數變化快慢的問題,不過指定了兩個變化方向。
關於黑塞矩陣建議看一下這篇文章寫得不錯:
sift特徵
就是尺度旋轉不變性。
如何實現尺度不變性?答案是高斯金字塔。
如何實現旋轉不變性?答案是特徵描述及dog。
高斯金字塔就是降取樣的過程,方差越大,物體就越模糊。沒什麼好說的。
dog是簡化的拉普拉斯運算元,我們只想把影象一階導數上區域性變化最快的點(也就是梯度變化最快的點)作為特徵點,這個問題必須要對影象二次求導,dog簡化了二次求導的問題,也能得到這種特徵點。
sift給出的分層搜尋區域性極大dog特徵點有乙個問題,就是該值有可能只是極小範圍內的某乙個較大值,首先要得到他的極大值,這樣才算合格。
所以sift用泰勒公式擬合了小範圍內的dog函式,求取了附近的極大值,並做了閾值比較。
黑塞矩陣消除邊緣響應,依靠特徵值比率剔除一些特徵點,這些特徵點一般化是邊緣點劇烈變化的點,至於為什麼篩選這些點。我不知道,可能劇烈的邊緣影響匹配。
生成特徵描述,比較簡單,不寫感悟了。
最後可以用歐式距離實現匹配,匹配結果不滿意就有ransac(搞個單應矩陣)或者最近鄰點比次近鄰點改善結果。
opencv 特徵點檢測 sift和surf
關於在opecv中使用,sift和surf進行特徵點檢測,主要分為三步 一.新增lib檔案。在opencv新版本中,上述了兩個演算法寫到了non free中,需要新增opencv nonfree244d.lib debug時新增 或opencv nonfree244.lib release時添 加 ...
SIFT演算法系列之特徵點檢測
特徵點檢測演算法簡述 說到特徵 feature 可能包含許多種類 常用的影象領域的主要特徵有顏色特徵 紋理特徵 形狀特徵 空間關係特徵。其實不論哪種特徵,其特徵的描述或者表達的主要思路在於 通過特徵的提取表達來區分影象的資訊。特徵點可以理解為是影象中變化較大的資訊區域,具有獨特性。為什麼要把影象中的...
SIFT特徵檢測與RANSAC過濾
function siftdetect.cpp brief 對sift特徵檢測和匹配進行測試,並實現ransac演算法進行過濾錯配點 author ltc date 11 20 saturday,28 november,2015 include include includeusing namesp...