天天看點

圖像處理-常用特征點檢測方法以及特征描述子

HOG(histogram of gradient)

  • 具體可以移步之前的文章:https://blog.csdn.net/u012526003/article/details/79966607

sift(Scale-invariant feature transform)

  • sift是用于描述圖像中的局部特征,在空間尺度中尋找極值點,并且提取出其位置、尺度、旋轉不變量,是以具有尺度和旋轉不變的性質。

算法步驟

  • 建構尺度空間,使用高斯卷積核實作多尺度空間。

G(x,y,σ)=12πσ2e−(x2+y2)/2σ2 G ( x , y , σ ) = 1 2 π σ 2 e − ( x 2 + y 2 ) / 2 σ 2

σ σ 越大, 做卷積時,尺度空間越大,對應低分辨率下的粗糙尺度, σ σ 越小,對應越細的尺度空間,使用DoG尺度空間進行關鍵點的檢測,

D(x,y,σ)=(G(x,y,σ)−D(x,y,σ))∗I(x,y) D ( x , y , σ ) = ( G ( x , y , σ ) − D ( x , y , σ ) ) ∗ I ( x , y )

對于一幅圖像,建構其圖像金字塔,即對圖像進行降采樣等操作,每次降采樣生成一個octave。是以使得sift在任意尺度都有對應的特征點。

* 使用LoG近似DoG找到關鍵點:如果一個點在DoG尺度空間本層以及上下2層的6個領域中是最大值或者最小值時,則可以将該點視為圖像在該尺度下的一個特征點。極值點檢測可以使用NMS。

* 去除不好的特征點:主要是在上面檢測得到的特征點中,去除低對比度的特征點以及不穩定的邊緣響應點。

* 給特征點指派一個128維的方向參數:利用關鍵點鄰域像素的梯度方向分布特征為每個關鍵點指定方向參數,使算子具有旋轉不變性。

* 綜上,每個關鍵點都有3個資訊:位置、尺度以及方向,是以可以确定1個sift特征區域。将特征向量進行歸一化,可以進一步去除光照變化的影響。

sift比對

  • 給2張圖像,首先得到其特征點及sift特征,之後進行相似度比對,相似度最高或者門檻值大于特定值的可以認為比對成功,是以可以完成圖像關鍵點的比對。

參考連結

  • https://blog.csdn.net/v_JULY_v/article/details/6186942
  • https://blog.csdn.net/abcjennifer/article/details/7639681

surf

  • surf與sift的算法相似,隻是sift算法更加穩定,檢測得到的特征點更多,但是sift的算法複雜度也更大。surf的運算簡單,運算時間更短一些,在要求實時性的系統中,可以使用surf。
  • surf最大的特點是采用HARR特征以及積分圖像。

算法描述

  • surf是首先使用Hessian卷确定特征點候選點,然後使用NMS。主要流程如下
  • 對圖像進行高斯濾波,這是為了使得特征點具有尺度無關性。
  • 建構hessian矩陣:hessian矩陣的行列式為

    det(H)=∂2f∂x2∂2f∂y2−(∂2f∂x∂y)2 det ( H ) = ∂ 2 f ∂ x 2 ∂ 2 f ∂ y 2 − ( ∂ 2 f ∂ x ∂ y ) 2

det(H) d e t ( H ) 就是H矩陣的特征值,可以使用其符号将所有點分類。在圖像中,圖像像素值就是f,使用特定的卷積核計算二階偏導數,就可以得到H矩陣的3個元素。

* 尺度空間生成:sift中,是對圖像進行尺度變換,filter不變;surf中保持圖像大小不變,改變filter的尺度大小,提升特征點檢測過程的速度和精度。同時,同一個octave中的圖像用到的高斯模闆尺度也不相同,算法允許尺度空間多層圖像同時被處理,不需要進行二次抽樣。

* NMS初步确定特征點:對于得到的多尺度Hessian結果,将某一點及其26鄰域的hessian特征值進行比較,如果是極大值或者極小值,就将其保留下來,否則不視為特征點。

* 為了保證旋轉不變性,sift中是使用梯度直方圖統計,而surf中是統計特征點領域内的Harr小波特征,即統計特征點為中心的60度扇形内所有點在x和y方向的haar小波響應總和,形成新的适量,周遊整個圓形區域,選擇最長矢量的方向作為特征點的主方向。

* surf特征描述算子:在特征點周圍選取正方形框,這個框的方向是特征點的主方向,大小是20s(s是檢測到該特征所在的尺度)。将box分為16個子區域,每個子區域統計25個像素的水準和豎直方向的haar小波特征,這裡x和y都是相對于主方向而言。該子區域的haar小波特征為x方向值之和,x方向絕對值之和,y方向值之和,y方向絕對值之和。16個子區域最終可以形成1個 64×1 64 × 1 的特征描述子。

參考連結

  • https://blog.csdn.net/songzitea/article/details/16986423

fast(Features From Accelerated Segment Test)

  • fast是一種快速的特征點檢測方法,fast角點定義為:如果一個像素與它周圍足夠多的像素處于不同的區域,則該像素點有可能是特征點。主要步驟如下:
  • 選擇一個像素點 p p ,首先判斷它是否是特征點。
    • 設定合适的門檻值tt。
    • 在 p p 的周圍選16個像素點進行測試,如果這16個像素點中連續n個像素點的像素值都大于I(p)+tI(p)+t或者都小于 I(p)−t I ( p ) − t ,則将其視為特征點。n常取9或者12。
    • 上述方法比較慢,一種可以用于加速的方法是首先判斷鄰域4個邊的頂點(1,5,9,13)是否有3個或者以上的像素點滿足條件,有的話就繼續判斷,·否則該點不被視為特征點。
    • 上述步驟存在一些問題
      • 當 n<12 n < 12 時容易檢測出比較多的特征點。
      • 角點檢測的效果取決于實際問題以及角點的分布情況。
      • 沒有有效地利用角點檢測過程的資訊。(鄰域等資訊)
      • 有些部分可能會出現大量角點。
    • 上面的問題中,前面三個可以通過機器學習訓練的方法解決,後面可以通過NMS進行去除。

      *總結:fast相對于之前的sift或者surf,檢測特征點的速度要快很多。

    • 參考連結

      • https://blog.csdn.net/ssw_1990/article/details/70569871
      • http://www.cnblogs.com/ronny/p/4078710.html

      brief(Binary Robust Independent Elementary Features)

      • brief特征描述子中,每一位都是通過随機選取的2個點進行比較得來的結果。在計算brief之前,首先需要對圖像進行高斯濾波。它有幾個比較明顯的缺點。
        • 不具有旋轉不變性。
        • 不具有尺度不變性。
        • 對噪聲比較敏感。

      orb(ORientedBrief)

      • 針對brief的問題,orb做了一些改進。
      • 對旋轉不變性的問題:orb使用了fast算子用來進行特征點檢測,通過矩計算特征點的主方向,之後就可以沿着主方向提取brief算子。
      • 對噪聲敏感的問題:brief中使用的是pixel之間進行比較,而orb中是使用patch的像素和進行比較,可以使用積分圖加快運算速度。
      • orb沒有解決尺度不變性的問題,在一些實時處理視訊的應用中,可以使用啟發式的算法去解決尺度不變性的問題。
      • ORB是sift的100倍,是surf的10倍。

繼續閱讀