尺度不變特徵變換匹配算法詳解
Scale Invarian Feature Transform
本文大量引用了文章 : https://blog.csdn.net/zddblog/article/details/7521424 ,十分感謝
數學常識鏈接庫 :
拉格朗日乘子法 : https://www.matongxue.com/tags/47/
泰勒公式 : https://www.zhihu.com/question/21149770/answer/219143281
以及 https://blog.csdn.net/xm961217/article/details/101021153
泰勒近似 : https://www.zhihu.com/question/52124268
子像素插值 : https://www.cnblogs.com/ronny/p/4028776.html
差分 : https://zhuanlan.zhihu.com/p/46699931
1. 介紹
SIFT 算法主要是對局部特徵進行提取的算法 ,不受亮度 ,旋轉 ,縮放的影響 ,對放射變換,透視變換 ,視角變換也有一定的穩定性 。
只需要檢測到三個 SIFT 特徵點 ,就可以檢測物體 。
2. 實現步驟
① 尺度空間極值檢測
② 關鍵點定位
③ 方向確定
④ 關鍵點描述
注意 :尺度空間爲 觀察物體的窗口大小
而 SIFT 對圖片所做的高斯模糊處理 ,是採取了對高斯模糊分離的辦法 ,將矩陣分爲一行與一列 ,將會使高斯模糊的 時間複雜度從 O(n * m * M * N) 降低到 O( n * M *N ) + O(m * M * N) ,在邊緣上的一維矩陣會忽略圖片外的因素 。
並消除黑邊問題 。
由 來決定尺度空間的大小 。值越小表示被平滑的空間越小 ,越注重細節 ,值越大表示平滑的空間越大 ,越注重大輪廓 。
尺度空間實現時用高斯金字塔來表示 ,
3. 高斯金字塔的構建
1. 對圖片做不同尺度的高斯模糊處理
2. 對圖片進行降採樣 (隔點採樣)
圖像的金字塔模型是指,將原始圖像不斷縮小 ,從大到小 ,從下到上 ,構成金字塔 。
一般上一層比下一層長和寬各縮小一倍 。
而在特徵提取函數上 ,尺度歸一化的高斯拉普拉斯函數 與 高斯差分函數(DOG) 十分的近似 ,但 DOG 函數更加的高效 ,簡潔 。
因此引用 DOG 來進行極值的檢測
在高斯金字塔中通過上下相鄰的圖像相減 ,得到高斯差分圖像 ,(注意:這裏是對每一層中大小相同的圖片 ,但使用了不同的參數做了高斯模糊)
4. 極值點檢測(關鍵點的初步檢測)
關鍵點的檢測是在相同尺寸之間的圖像之間比較得到 ,每個像素點要和他相鄰的點比較 ,( 8 鄰域 + 9 * 2 =26 個像素) ,看是不是比他的鄰域與尺度域的點大或者小 ,確保在 尺度空間和二維空間上都能檢測到極值點 。
這樣就能找到大部分極值點 ,包括響應弱的極值點 。
(注意 : 由於要在相鄰尺度進行比較,如每組含4層的高斯差分金子塔,只能在中間兩層中進行兩個尺度的極值點檢測,其它尺度則只能在不同組中進行。爲了在每組中檢測S個尺度的極值點,則DOG金字塔每組需S+2層圖像,而DOG金字塔由高斯金字塔相鄰兩層相減得到,則高斯金字塔每組需S+3層圖像,實際計算時S在3到5之間。)
5. 構建尺度空間所需要的參數
在最開始建立高斯金字塔時,要預先模糊輸入圖像來作爲第0個組的第0層的圖像,這時相當於丟棄了最高的空域的採樣率。因此通常的做法是先將圖像的尺度擴大一倍來生成第-1組。我們假定初始的輸入圖像爲了抗擊混淆現象,已經對其進行的高斯模糊,如果輸入圖像的尺寸用雙線性插值擴大一倍,那麼相當於。
—尺度空間座標
O—組(octave)數
S— 組內層數
在上述尺度空間中,O和S,的關係如下:
(3-5)
其中是基準層尺度,o爲組octave的索引,s爲組內層的索引。關鍵點的尺度座標就是按關鍵點所在的組和組內的層,利用公式(3-5)計算而來。
取式(3-4)中的k爲組內總層數的倒數,即
(3-6)
在構建高斯金字塔時,組內每層的尺度座標按如下公式計算:
(3-7)
其中初始尺度,lowe取,s爲組內的層索引,不同組相同層的組內尺度座標相同。組內下一層圖像是由前一層圖像按進行高斯模糊所得。式(3-7)用於一次生成組內不同尺度的高斯圖像,而在計算組內某一層圖像的尺度時,直接使用如下公式進行計算:
(3-8)
該組內尺度在方向分配和特徵描述時確定採樣窗口的大小。
由上,式(3-4)可記爲
(3-9)
圖3.5爲構建DOG金字塔的示意圖,原圖採用128*128的jobs圖像,擴大一倍後構建金字塔。
6. 關鍵點精確定位
以上方法檢測到的極值點是離散空間的極值點,以下通過擬合三維二次函數來精確確定關鍵點的位置和尺度,同時去除低對比度的關鍵點和不穩定的邊緣響應點(因爲DoG算子會產生較強的邊緣響應),以增強匹配穩定性、提高抗噪聲能力。
而離散空間的極值點與連續空間的極值點是不一樣的 ,獲取連續空間的極值點的方法叫做 子像素插值(Sub-pixel Interpolation)