1. 程式人生 > >SURF特徵提取演算法原文翻譯與理解(上)

SURF特徵提取演算法原文翻譯與理解(上)

    SURF的優點以及與其他特徵提取演算法的比較前面總結過了,而且通過實際的使用發現演算法的穩定性著實很好,這裡分享一下對Speeded Up Robust Features原文的翻譯和理解,文章是去年翻譯的,那時候剛開始看特徵提取所以翻譯的比較細,才疏學淺,有的地方可能理解的不對,歡迎大家拍磚。分成兩部分,第一部分是特徵點的提取,第二部分是特徵點的描述,以及整個方法的總結。正文開始:

1.引言

    文章提出一種具有尺度和旋轉不變性特點的特徵點提取和描述方法,稱作SURF演算法。該演算法對比與當前的演算法具有相似甚至更好的可重複性、魯棒性,並且計算的更快。具體實現:先使用積分圖來計算卷積;然後使用Hessian響應來衡量某點是否為特徵點,並建立描述子來描述該特徵;以及對整個流程進行一定的優化。以上流程就得到了關於特徵提取、描述和匹配的一整套的步驟。本文最後附上使用通用評價集的實驗結果。

    在左右兩幅圖中尋找對應的點是個重要的環節。匹配點對的尋找可以分為三個步驟:1.找到興趣點,這些興趣點是有特色的(便於區分),評價一個尋找興趣點的演算法優劣的重要指標是它的可重複性;2.每個興趣點的鄰域點能使用特徵向量(描述子)來表達,這個特徵向量要對噪聲有魯棒性;3.特徵向量在不同影象中進行匹配,這個匹配一般是基於距離的,比如馬氏距離或歐氏距離,且特徵向量的維度和計算時間非常相關,維度小的特徵向量更好。

    目標是找到一種特徵的檢測和描述方法,這種方法要求計算速度快,但是還要保持效能效能。為了實現這個目標,就要在效能和速度之間取一個平衡,既降低描述子的維度,又要保證足夠的區分度。

2.現有研究

2.1興趣點檢測

    使用最廣泛的興趣點檢測運算元是Harris角點檢測運算元(Harris運算元對於L型角點檢測精度高,穩定性好,但是角點資訊有丟失和偏移的情況,且角點提取有聚簇現象),但其不具有尺度不變性。(尺度不變性的意義:當分析未知場景時,計算機無法預知物體的尺度,因此需要同時考慮影象在多尺度下的描述。比如在Harry特徵檢測人臉時,因為並不知道人臉的尺寸,所以需要生成一個不同大小的影象構成的金字塔,掃描其中的每一副影象來尋找可能的人臉。)後面這段研究現狀就不翻譯了,再翻譯就真是獻醜了。

    通過對現有的興趣點檢測演算法的比較,可以得到結論:1.Hessian矩陣相比於基於Harris的方法,具有更加穩定和可重複性更強的特點;2.使用一些近似方法,比如DoG等方法,可以提高速度,又不至於造成較大的精度損失,這就說明近似計算的可行性。

2.2特徵描述子

    SIFT運算元區分性比較好,但是它的描述子維度很高,因此匹配環節非常耗時,如果用在普通計算機實時性場合,難以滿足要求。有的研究採取措施降低匹配的耗時,但是會損失精度。

2.3本文的方法

    本文提出的方法基於Hessian矩陣,然後使用非常基礎的近似方法,然後使用積分圖來降低運算量。本方法的描述子是基於興趣點的鄰域內點的Harr-小波響應(下面會細講)。最後得到的特徵點的描述向量,維度是64,可以大大降低匹配時間。為了使文章的理論更自足,文章還將簡單的介紹積分圖的概念。

3.基於Hessian響應的特徵檢測運算元

    對於影象中某點X=(x,y),下面的公式H(X,σ)代表在X點的σ尺度下的Hessian矩陣。其中Hessian矩陣的四項分別代表高斯二階微分IxxIyyIxy與影象I的對應點進行卷積得到的結果。注意σ代表尺度係數,其含義下面還會講,一個點會有多個σ值下的Hessian矩陣。


    高斯濾波器可以用在不同尺度下的分析中,實踐中要求先對高斯二階微分進行離散化和截斷再使用。但是即使是用了高斯濾波器,當影象進行降取樣時,仍然會發生混淆的情況。高斯濾波器的另外一個問題是,當進行降取樣時,並不會出現新的特徵,因此,高斯濾波器的重要性就沒那麼明顯了,而它速度又不快,所以考慮使用另外的濾波器來近似這個高斯濾波器。而Lowe成功的使用DoG來近似LoG,這也給了作者啟發,作者使用更進一步的近似方法,即盒濾波器。

    如圖1的左邊的兩幅圖,是對高斯二階微分yy和xy離散化得到的LyyLxy,通過盒濾波器近似後得到右邊的結果記為DyyDxy,可以看出,把高斯二階微分濾波器使用盒濾波器來近似,也就是相當於把高斯濾波器進一步的只分成幾塊,這樣下一步可以使用積分圖進行快速計算,而後面的結果也證明,這麼做的檢測效果並沒有太大的損失,但時間大大提升了。

    這就是說Hessian矩陣的求法,本來是需要與高斯二階微分進行卷積,現在近似成與盒濾波器進行卷積。


    本來是根據Hessian矩陣的判別式來判斷某點是否為特徵點,現在Hessian已經做了近似,那麼Hessian的計算也就要做相應的變換推導,重新推導得到Hessian矩陣的行列式的公式為公式2,此時就需要根據盒濾波器得到的DxxDxyDyy。

    此外,filter響應還要根據濾波器的尺寸進行歸一化處理,以保證不同濾波器下Hessian矩陣的F範數相同。

    由於特徵點需要具有尺度不變性,所以要進行多尺度下的計算。多尺度計算常見的方式是影象金字塔。一般來說,大多數人的方法是使用同樣的濾波器對影象進行高斯平滑,然後對影象降取樣,得到金字塔中上一層的圖,然後不斷進行。但是SURF演算法為了使用盒子濾波器和積分影象,採用的方法是不改變影象大小,每次加大濾波器核的大小,這個措施保證了速度進一步提升。

    關於濾波器的尺寸的分多少情況,是先按組(也就是有幾組金字塔),每組內又分層,濾波器尺寸大小=(2ctave*interval+1)*3,其中octave是組號,interval是組內的層號,也就是第1組的第1層尺寸為9*9,第1組第2層尺寸為15*15;第2組第1層尺寸為15,第2組第2層尺寸為27,即每組的組內各層的尺寸間隔組加倍。

    改變了每層的濾波器的尺寸以後,對應的尺度係數s也要更改,該係數與高斯二階微分的係數σ是同一個。怎麼改呢,9*9對應s=1.2,則27*27對應s=1.2*3,成比例增加。也就是說,不同的層數下,濾波器的尺寸不同,σ也不同,這樣就生成不同的高斯濾波器。

    完成以上的步驟後,就可以求出Hessian矩陣的判別式,也叫Hessian響應。對於某個點,可以得到它在很多個層上面的Hessian響應值,那麼哪一個才能代表這個點呢?對於某一組,其內部分成幾層,也就是一個影象金字塔,如果某點的Hessian響應在其同層的8鄰域點以及上一層和下一層的各9個點,即一共26個三維鄰域點內,屬於最大或者最小,那麼該點就是該區域內的特徵點。(這一點論文裡面沒寫,我是參考《OpenCV程式設計入門》自己理解的,不知道對不對)。

    最後,對於得到的Hessian響應,當達到設定的閾值時,就確定這個點為特徵點,這就完成了特徵點的檢測,接下來的步驟就是特徵點的描述。