1. 程式人生 > >SIFT算法系列之特徵點檢測

SIFT算法系列之特徵點檢測

特徵點檢測演算法簡述

  說到特徵(feature)可能包含許多種類:常用的影象領域的主要特徵有顏色特徵、紋理特徵、形狀特徵、空間關係特徵。其實不論哪種特徵,其特徵的描述或者表達的主要思路在於:通過特徵的提取表達來區分影象的資訊。特徵點可以理解為是影象中變化較大的資訊區域,具有獨特性。為什麼要把影象中的變化較大的區域提取出來作為特徵表述,其主要原因還是存在於模擬人眼觀察一幅影象時候最先觀察到的是整體輪廓或者變化顯著的部分割槽域。談及特徵點提取演算法的發展:近些年一直都在研究影象灰度畫素資訊之間的特徵點檢測方法(例如應用最廣泛的Harris角點檢測運算元)。SIFT運算元並沒有採用Harris角點檢測特徵點,主要原因在於Harris檢測運算元並沒有尺度不變效能。關於SIFT特徵檢測過程將在下面講述。

SIFT演算法特徵點檢測過程

  SIFT演算法特徵點檢測過程主要依賴於尺度空間完成時,通過各個相鄰尺度影象之間相減得到差分高斯金字塔影象,隨後進行Hessian矩陣檢測與泰勒展開定位特徵點精確位置。

圖1 相鄰尺度空間影象差分影象示意圖

  從上圖1可以看出經過不同尺度引數σ卷積運算後的影象(尺度引數差值為σ=2)直接做差分運算,得到右邊的差分高斯影象能夠很清晰的看出右邊的差分高斯影象主要輪廓和高頻資訊被保留了下來(邊緣、極值點等)。那麼作者為什麼要採用差分高斯策略?這裡其實主要在於差分高斯(DoG)近似於拉普拉斯高斯(LoG)函式。經過卷積運算後可以保留下高頻資訊,同時採用DoG
計算效率大大降低,不需要LoG的二階梯度求導運算。

圖2 LoG與DoG響應函式示意圖

  從圖2可以看出DoG的響應函式與LoG接近,同時在構建DoG時候不需要進行求導運算只需簡單的作差。同時,高斯函式線性可分(能夠將二維高斯卷積核函式分成水平、垂直兩個向量進行單獨運算進行加速)。因此,SIFT演算法中DoG步驟完成初步的特徵資訊篩選。

SIFT特徵點檢測

  DoG金字塔影象生成後,通過全搜尋中間層DoG影象(去除第一個和最後一個DoG影象)的畫素點,判斷當前畫素點的畫素值是否大於(或者小於)周圍8鄰域的畫素值。如果當前畫素點大於周圍8鄰域的畫素值,那麼當前畫素點的畫素值對比相同位置不同層次間(上下兩幅DoG影象相同座標位置)的周圍8鄰域值對比,如果都大於上下兩層共18個畫素值,那麼記錄當前畫素

的為極大值點。同理,當前畫素點為極小值點判決過程一樣。通過上述搜尋到的區域性極大值或極小值點具有尺度不變特性,同時記錄下當前畫素點的尺度σ的引數值。當局部極大值極小值提取出來後,下面就是要對鄰域的資料進行詳細的匹配來確定位置、尺度和主要的曲率值。具有對比度很低(對噪聲很敏感),或者在邊緣位置很差的區域性極值點需要剔除。所以,關於如何剔除點SIFT演算法採取泰勒展開式和Hessian矩陣進行特徵點剔除。

Hessian矩陣與泰勒展開式作用分別是什麼?

  泰勒展開式主要是對當前點附近進行曲線擬合來判決是否為最優極值點位置,如果存在偏移量(x,y,scale)>0.5那麼進行迭代擬合。SIFT演算法程式碼中迭代次數最大設定為5,通過奇異值分解Hessian矩陣提取主成分與原始位置矩陣偏導進行矩陣乘積運算獲取(x,y,scale)的偏移量,不斷迭代直至偏移量<0.5

  經過泰勒展開策略迭代搜尋鄰域極值點之後,就是對當前的特徵點進行是否為邊緣點進行判斷。SIFT演算法採用二階Hessian矩陣來進行判別。主要思想如下圖:

圖3 角點、邊緣區域判決方式

  Hessian矩陣主要是消除邊緣點提取沒有在最大最小極值抑制階段保留下來,其主要原因在於SIFT計算後續描述子匹配時邊緣資訊構建的區域性區域描述子在邊緣方向區分度不夠唯一。關於Hessian矩陣求取特徵值λ1λ2如何消除邊緣點(判斷是否邊緣區域)可以類似參考Harris角點對邊緣響應原理一致如下圖。

SIFT演算法特徵點實驗過程

下面先來看一下SIFT演算法特徵點檢測的流程圖:

圖4 特徵點檢測流程圖

  那麼,我們就來簡單敘述一下圖4的特徵點檢測過程。從圖4中我們可以看到,DoG影象金字塔是由高斯金字塔所生成,例如:(DoG中的①由高斯金字塔的①與②影象作差獲取,其它類似)。生成DoG金字塔之後,對DoG影象進行區域性極值點搜尋與判決(搜尋影象去除每塔中的第一張和最後一張[DoG中①與④])。如果在DoG上當前點座標大於周圍8鄰域畫素值,則進行相同位置上下兩層18各點進行比較,如果大於則儲存尺度不變點,否則繼續下一個點搜尋。(區域性極小值點判決方法類似)。判決出局部極值點之後,通過泰勒展開對當前畫素點進行亞畫素定位,迭代判決畫素點偏移量損失。亞畫素定位之後,通過Hessian矩陣進行邊緣點資訊剔除,最後經過Hessian矩陣刪除後的點就是SIFT提取的最終尺度不變點。
參考