影象特徵點提取及描述子彙總:FIST、SURF、FAST、BRIEF、ORB、BRISK、FREAK
SIFT特徵提取及描述子
1 特徵提取
1.1 構建尺度空間
1.2 選取特徵點
一個點如果在DOG尺度空間本層以及上下兩層的26個領域中是最大或最小值時,就認為該點是影象在該尺度下的一個特徵點
1.3 去除不好的特徵點
2 特徵描述子
用直方圖統計特徵點領域內的畫素梯度方向,取直方圖bin值最大的以及超過最大bin值80%的那些方向做為特徵點的主方向。論文中是45°為一個柱狀圖,並且使用了高斯函式平滑曲線。
再將特徵點領域內的影象旋轉,使特徵方向與X軸方向平行,保證旋轉不變性。選取特徵點周圍16*16區域,劃分為4*4=16塊,求取每一塊在8個方向上的梯度,這樣就得到了4*4*8=128維的SIFT描述子。
3 描述子特點
對旋轉、尺度縮放、亮度變化保持不變性,對視角變化、仿射變換、噪聲也保持一定程度的穩定性。
旋轉不變性:取描述子的時候講特徵點周圍旋轉到了X軸方向;
尺寸無關性:構建尺度空間的時候,構建了不同尺度縮放下的圖片,在求取特徵點的時候,在多種尺度空間下進行了檢測;
亮度變化抗性:將描述子中各個維度的歸一化,可以減小亮度變化的影響。
SURF特徵提取及描述子
SURF與SIFT有很多相似的地方:建立金字塔形的尺度空間、通過層間差異尋找特徵點、特徵描述子基於特徵點鄰域內的梯度。
1 特徵提取
(參考http://blog.csdn.net/chlele0105/article/details/12955359)
1.1 構件尺度空間
Sift採用的是DOG影象,而surf採用的是Hessian矩陣行列式近似值影象。Hessian矩陣構造前,需要對其進行高斯濾波,以達到尺寸無關性。使用積分影象計算每個點的Hessian矩陣,節省了大量時間。
在surf中,圖片的大小是一直不變的,不同的octave層得到的待檢測圖片是改變高斯模糊尺寸大小得到的,同一個octave中的圖片用到的高斯模板尺度也不同。Surf採用這種方法節省了降取樣過程,其處理速度自然也就提上去了。
1.2 初選特徵點
類似SIFT特徵提取:一個點如果在尺度空間本層以及上下兩層的26個領域中是最大或最小值時,就認為該點是影象在該尺度下的一個特徵點。
1.3 排除特徵不明顯點
和sift演算法中的類似,採用3維線性插值法得到亞畫素級的特徵點,同時也去掉那些值小於一定閾值的點。
2 特徵描述子
2.1 確定特徵點方向
選取特徵點鄰域,如特徵點周圍半徑6s圓形區域(s為特徵點所在層的尺寸度量),計算60°扇形在水平方向和豎直方向的haar小波特徵,在以一定角度轉動扇形,最終選擇最大值的方向作為特徵點方向。
2.2 特徵描述子
確定特徵點方向之後先選擇影象。在特徵點周圍選取邊長為20s的正方形,然後把該框分為16個子區域,每個子區域統計25個畫素的水平方向和垂直方向的haar小波特徵,這裡的水平和垂直方向都是相對主方向而言的。該haar小波特徵為水平方向值之和,水平方向絕對值之和,垂直方向之和,垂直方向絕對值之和。一共有4*4*4=64維特徵描述子。
Harris角點檢測
Agast角點檢測
FAST特徵提取
FAST只是一種特徵點檢測方法,需要結合其他的特徵點描述子一起使用。FAST特徵檢測演算法來源於corner的定義,這個定義基於特徵點周圍的影象灰度值,檢測候選特徵點周圍一圈的畫素值,如果候選點周圍領域內有足夠多的畫素點與該候選點的灰度值差別夠大,則認為該候選點為一個特徵點。
通常需要與中心點灰度值大於閾值的量大於圓周的3/4才能當做特徵點。為了加快計算,先計算圓心點與圓周上相隔90°的四個點,需要3個與圓心點灰度值大於閾值才繼續計算,否則直接排除。
FAST演算法優點在於計算高效,但是缺點也明顯:檢測結果不是最優、角點容易擠在一起。
BRIEF特徵描述子
BRIEF是2010提出的一種二進位制的特徵描述子。其沒有提出特徵點選取方法,可以使用SIFT、SURF提出出來的特徵點。
1 描述子生成
它需要先用高斯濾波平滑影象,然後在特徵點周圍選擇一個Patch(通常為正方形),在這個Patch內通過一種選定的方法來挑選出來nd個點對。然後對於每一個點對(p,q),我們來比較這兩個點的亮度值,如果I(p)>I(q)則這個點對生成了二值串中一個的值為1,否則生成0,這樣就構成了特徵描述子。
點對選擇方式(在SxS鄰域內):在影象塊內平均取樣;p和q都符合(0,S^2/25)的高斯分佈;p符合(0,S^2/25)的高斯分佈,而qq符合(0,S^2/100)的高斯分佈;在空間量化極座標下的離散位置隨機取樣;把p固定為(0,0),qq在周圍平均取樣。
2 描述子特點
拋棄了傳統的用梯度直方圖描述區域的方法,改用檢測隨機響應,大大加快了描述子建立速度;生成的二進位制描述子便於高速匹配(計算Hamming距離只需通過異或操作加上統計二進位制編碼中“1”的個數的操作,這些通過底層的運算即可實現),但是不具備旋轉不變(30°以內較好),尺度不變,對噪聲也比較敏感。