sift(scale-invariant feature transform)是一種檢測區域性特徵的演算法,該演算法通過求一幅圖中的特徵點(interest points,or corner points)及其有關scale 和 orientation 的描述子得到特徵並進行影象特徵點匹配,獲得了良好效果,詳細解析如下:
sift特徵不只具有尺度不變性,即使改變旋轉角度,影象亮度或拍攝視角,仍然能夠得到好的檢測效果。整個演算法分為以下幾個部分:
1. 構建尺度空間
這是乙個初始化操作,尺度空間理論目的是模擬影象資料的多尺度特徵。
類似影象金字塔的建立,對於一幅影象i,建立其在不同尺度(scale)的影象,也成為子八度,這是為了scale-invariant,也就是在任何尺度都能夠有對應的特徵點,第乙個子八度的scale為原圖大小,後面每個scale為原圖的1/4,即長寬分別減半進行降取樣,構成下乙個子八度(高一層金字塔)。
由size
決定建幾個塔,每塔幾層影象(一般
3-5層)。
0塔的第
0層是原始影象(或你
double
後的影象
),往上每一層是對其下一層進行
laplacian
變換(高斯卷積,其中
sigma
值漸大,例如可以是
sigma, k*sigma, k*k*sigma…
),直觀上看來越往上越模糊。塔間的是降取樣關係,例如
1塔的第
0層可以由
0塔的第3層
down sample
得到,然後進行與
0塔類似的高斯卷積操作。
2. log近似dog找到關鍵點
使用laplacian of gaussian能夠很好地找到找到影象中的興趣點,但是需要大量的計算量,所以使用difference of gaussian影象的極大極小值近似尋找特徵點.dog運算元計算簡單,是尺度歸一化的log運算元的近似,有關dog尋找特徵點的介紹及方法詳見極值點檢測用的
non-maximal suppression。
3. 除去不好的特徵點
通過擬和三維二次函式以精確確定關鍵點的位置和尺度(達到亞畫素精度),同時去除低對比度的關鍵點和不穩定的邊緣響應點(因為dog運算元會產生較強的邊緣響應),以增強匹配穩定性、提高抗雜訊能力,在這裡使用近似harris corner檢測器。
邊緣響應的去除
乙個定義不好的高斯差分運算元的極值在橫跨邊緣的地方有較大的主曲率,而在垂直邊緣的方向有較小的主曲率。主曲率通過乙個2x2 的hessian矩陣h求出:
導數由取樣點相鄰差估計得到。
d的主曲率和h的特徵值成正比,令α為較大特徵值,β為較小的特徵值,則
令α=γβ,則
(r + 1)2/r的值在兩個特徵值相等的時候最小,隨著r的增大而增大,因此,為了檢測主曲率是否在某域值r下,只需檢測
在lowe的文章中,取r=10。
4. 給特徵點賦值乙個128維向量描述子
上一步中確定了每幅圖中的特徵點,為每個特徵點計算乙個方向,依照這個方向做進一步的計算,利用關鍵點鄰域畫素的梯度方向分布特性為每個關鍵點指定方向引數,使運算元具備旋轉不變性。
為(x,y)處梯度的模值和方向公式。其中l所用的尺度為每個關鍵點各自所在的尺度。
在實際計算時,我們在以關鍵點為中心的鄰域視窗內取樣,並用直方圖統計鄰域畫素的梯度方向。梯度直方圖的範圍是0~360度,其中每45度乙個柱,總共8個柱。
直方圖的峰值則代表了該關鍵點處鄰域梯度的主方向,即作為該關鍵點的方向。
由梯度方向直方圖確定主梯度方向
該步中將建立所有scale中特徵點的描述子(128維)
計算keypoint周圍的16*16的window中每乙個畫素的梯度,而且使用高斯下降函式降低遠離中心的權重。
在每個4*4的1/16象限中,通過加權梯度值加到直方圖8個方向區間中的乙個,計算出乙個梯度方向直方圖。
figure.16*16的圖中其中1/4的特徵點梯度方向及scale,右圖為其加權到8個主方向後的效果。
這樣就可以對每個feature形成乙個4*4*8=128維的描述子,每一維都可以表示4*4個格仔中乙個的scale/orientation.
5. 根據sift進行match
生成了a、b兩幅圖的描述子,(分別是k1*128維和k2*128維),就將兩圖中各個scale(所有scale)的描述子進行匹配,匹配上128維即可表示兩個特徵點match上了。
當兩幅影象的sift特徵向量生成後,下一步我們採用關鍵點特徵向量的歐式距離來作為兩幅影象中關鍵點的相似性判定度量。取影象1中的某個關鍵點,並找出其與影象2中歐式距離最近的前兩個關鍵點,在這兩個關鍵點中,如果最近的距離除以次近的距離少於某個比例閾值,則接受這一對匹配點。降低這個比例閾值,sift匹配點數目會減少,但更加穩定。
實驗結果:
SIFT特徵提取
原文獻 1 lowe d g.distinctive image features from scale invariant keypoints c international journal of computer vision.2004 91 110.不錯的部落格 2 sift可以用來提取區域性...
Sift特徵提取演算法
2004 年d.lowe 提出了乙個新的演算法 尺度不變特徵變換 sift 這個演算法可以幫助我們提取影象中的關鍵點並計算它們的描述符。sift演算法的特點就是,對於區域性特徵對旋轉 縮放 亮度變化保持不變。sift 演算法主要內容如下 1 尺度空間的極值檢測 2 特徵點定位 3 特徵方向賦值 4 ...
SIFT特徵提取 應用篇
1.呼叫方法 將檔案加入matlab目錄後,在主程式中有兩種操作 op1 尋找影象中的sift特徵 csharp view plain copy image,descrips,locs sift scene.pgm showkeys image,locs op2 對兩幅圖中的sift特徵進行匹配 c...