OpenCV(22)SIFT尺度不变特征变换(纯理论)
SIFT算法(純理論)
1、引言
????????前面介紹了Harris和Shi-Tomasi角點檢測算法,這兩種算法具有旋轉不變性,但不具有尺度不變性。以下圖為例,在左側小圖中可以檢測到角點,但是圖像被放大后,在使用同樣的窗口,就檢測不到角點了。
????????
2、原理
????????尺度不變特征轉換即SIFT(Scale-invariant featuretransform)。它用來偵測與描述影像中的局部性特征,它在空間尺度中尋找極值點,并提取出其位置、尺度、旋轉不變量,此算法由David Lowe在1999年所發表,2004年完善總結。應用范圍包含物體辨識、機器人地圖感知與導航、影像縫合、3D模型建立、手勢辨識、影像追蹤和動作比對等領域。
????????SIFT算法的實質是在不同的尺度空間上查找關鍵點(特征點),并計算出關鍵點的方向。SIFT所查找到的關鍵點是一些十分突出,不會因光照,仿射變換和噪音等因素而變化的點,如角點、邊緣點、暗區的亮點及亮區的暗點等。
3、步驟
1、尺度空間極值檢測︰搜索所有尺度上的圖像位置。通過高斯差分函數來識別潛在的對于尺度和旋轉不變的關鍵點。
2、關鍵點定位︰在每個候選的位置上,通過一個擬合精細的模型來確定位置和尺度。關鍵點的選擇依據于它們的穩定程度。
3、關鍵點方向確定︰基于圖像局部的梯度方向,分配給每個關鍵點位置一個或多個方向。所有后面的對圖像數據的操作都相對于關鍵點的方向、尺度和位置進行變換,從而保證了對于這些變換的不變性。
4、關鍵點描述︰在每個關鍵點周圍的鄰域內,在選定的尺度上測量圖像局部的梯度。這些梯度作為關鍵點的描述符,它允許比較大的局部形狀的變形或光照變化。?5、關鍵點匹配。舍棄一些次關鍵點。
1、尺度空間極值檢測
???
?從上圖可以明顯看出,我們不能使用相同的窗口來檢測具有不同比例的關鍵點。即便小拐角可以。但是要檢測更大的拐角,我們將需要更大的窗口。為此,使用了比例空間濾波。找到具有各種σ值的圖像的高斯拉普拉斯算子。LoG用作斑點檢測器,可檢測由于σ的變化而導致的各種大小的斑點。簡而言之,σ用作縮放參數。上圖中,低σ的高斯核對于較小的拐角給出較高的值,而高σ的高斯核對于較大的拐角而言非常合適。因此,我們可以找到整個尺度和空間上的局部最大值,這給了我們(x,y,σ)值的列表,這意味著在(x,y)在σ尺度上有一個潛在的關鍵點。
????????因此SIFT算法使用的是高斯差值,它是LoG的近似值。高斯差是作為具有兩個不同σ的圖像的高斯模糊差而獲得的,設為σ和kσ。此過程是針對高斯金字塔中圖像的不同八度完成的。如下圖所示:
?一旦找到該DoG,便會在圖像上搜索比例和空間上的局部極值。
例如,將圖像中的一個像素與其8個相鄰像素以及下一個比例的9個像素和前一個比例的9個像素進行比較。如果是局部極值,則可能是關鍵點。從根本上說,關鍵點是最好的代表。如下圖所示:
?對于不同的參數,本文給出了一些經驗數據,可以概括為:octaves=4,縮放尺度=5,初始σ=1.6,k=2等作為最佳值。
2、關鍵點定位
????????
????????一旦找到潛在的關鍵點位置,就必須對其進行優化以獲取更準確的結果。他們使用了標度空間的泰勒級數展開來獲得更精確的極值位置,如果該極值處的強度小于閾值(根據論文為0.03),則將其拒絕。在OpenCV DoG中,此閾值稱為**ContrastThreshold**,它對邊緣的響應較高,因此也需要刪除邊緣。
????????為此,使用類似于Harris拐角檢測器的概念。他們使用2x2的Hessian矩陣(H)計算主曲率。從哈里斯拐角檢測器我們知道,對于邊緣,一個特征值大于另一個特征值。因此,這里他們使用了一個簡單的函數。如果該比率大于一個閾值(在OpenCV中稱為**edgeThreshold**),則該關鍵點將被丟棄。
????????因此,它消除了任何低對比度的關鍵點和邊緣關鍵點,剩下的就是很可能的目標點。
3、方向分配
????????現在,將方向分配給每個關鍵點,以實現圖像旋轉的不變性。根據比例在關鍵點位置附近采取鄰域,并在該區域中計算梯度大小和方向。創建了一個具有36個覆蓋360度的bin的方向直方圖(通過梯度幅度和σ等于關鍵點比例的1:5的高斯加權圓窗加權)。提取直方圖中的最高峰,并且將其超過80%的任何峰也視為計算方向。它創建的位置和比例相同但方向不同的關鍵點。它有助于匹配的穩定性。
4、關鍵點描述
????????現在創建了關鍵點描述符。在關鍵點周圍采用了16x16的鄰域。它分為16個4x4大小的子塊。對于每個子塊,創建8 bin方向直方圖。因此共有128個bin值可用。它被表示為形成關鍵點描述符的向量。除此之外,還采取了幾種措施來實現針對照明變化,旋轉等的魯棒性。
5、關鍵點匹配
????????通過識別兩個圖像的最近鄰,可以匹配兩個圖像之間的關鍵點。但是在某些情況下,第二個最接近的匹配可能非常接近第一個,它可能是由于噪音或其他原因而發生的。在那種情況下,采用最接近距離與第二最接近距離之比。如果大于0.8,將被拒絕。
參考資料
https://www.bilibili.com/video/BV1Fo4y1d7JL?p=49&spm_id_from=pageDriver
http://woshicver.com/Sixth/5_4_SIFT%EF%BC%88%E5%B0%BA%E5%BA%A6%E4%B8%8D%E5%8F%98%E7%89%B9%E5%BE%81%E5%8F%98%E6%8D%A2%EF%BC%89%E7%AE%80%E4%BB%8B/
https://blog.csdn.net/molihong28/article/details/89296677?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162933950516780255232704%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162933950516780255232704&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-89296677.ecpm_v1_rank_v29&utm_term=sift%E7%AE%97%E6%B3%95&spm=1018.2226.3001.4187
https://blog.csdn.net/qq_37374643/article/details/88606351?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162933950516780255232704%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162933950516780255232704&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-3-88606351.ecpm_v1_rank_v29&utm_term=sift%E7%AE%97%E6%B3%95&spm=1018.2226.3001.4187
https://www.bilibili.com/video/BV1Fo4y1d7JL?p=56&spm_id_from=pageDriver
總結
以上是生活随笔為你收集整理的OpenCV(22)SIFT尺度不变特征变换(纯理论)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV(二十)模板匹配
- 下一篇: OpenCV(24)角点检测3 -- O