天天看點

ORB特征提取與比對

ORB特征是目前最優秀的特征提取與比對算法之一,下面具體講解一下:

特征點的檢測

圖像的特征點可以簡單的了解為圖像中比較顯著顯著的點,如輪廓點,較暗區域中的亮點,較亮區域中的暗點等。ORB采用FAST(features from accelerated segment test)算法來檢測特征點。這個定義基于特征點周圍的圖像灰階值,檢測候選特征點周圍一圈的像素值,如果候選點周圍領域内有足夠多的像素點與該候選點的灰階值差别夠大,則認為該候選點為一個特征點。

ORB特征提取與比對

其中I(x)為圓周上任意一點的灰階,I(p)為圓心的灰階,Ed為灰階值差得門檻值,如果N大于給定門檻值,一般為周圍圓圈點的四分之三,則認為p是一個特征點。

為了獲得更快的結果,還采用了額外的加速辦法。如果測試了候選點周圍每隔90度角的4個點,應該至少有3個和候選點的灰階值差足夠大,否則則不用再計算其他點,直接認為該候選點不是特征點。候選點周圍的圓的選取半徑是一個很重要的參數,這裡為了簡單高效,采用半徑為3,共有16個周邊像素需要比較。為了提高比較的效率,通常隻使用N個周邊像素來比較,也就是大家經常說的FAST-N。很多文獻推薦FAST-9,作者的首頁上有FAST-9、FAST-10、FAST-11、FAST-12,大家使用比較多的是FAST-9和FAST-12。

ORB特征提取與比對

計算特征描述子

得到特征點後我們需要以某種方式描述這些特征點的屬性。這些屬性的輸出我們稱之為該特征點的描述子(Feature DescritorS).ORB采用BRIEF算法來計算一個特征點的描述子。

BRIEF算法的核心思想是在關鍵點P的周圍以一定模式選取N個點對,把這N個點對的比較結果組合起來作為描述子。

ORB特征提取與比對

步驟:

1.以關鍵點P為圓心,以d為半徑做圓O。

2.在圓O内某一模式選取N個點對。這裡為友善說明,N=4,實際應用中N可以取512.

假設目前選取的4個點對如上圖所示分别标記為:

ORB特征提取與比對

3.定義操作T

ORB特征提取與比對

4.分别對已選取的點對進行T操作,将得到的結果進行組合。

假如:

ORB特征提取與比對

則最終的描述子為:1011

理想的特征點描述子應該具備的屬性:

在現實生活中,我們從不同的距離,不同的方向、角度,不同的光照條件下觀察一個物體時,物體的大小,形狀,明暗都會有所不同。但我們的大腦依然可以判斷它是同一件物體。理想的特征描述子應該具備這些性質。即,在大小、方向、明暗不同的圖像中,同一特征點應具有足夠相似的描述子,稱之為描述子的可複現性。

當以某種理想的方式分别計算描述子時,應該得出同樣的結果。即描述子應該對光照(亮度)不敏感,具備尺度一緻性(大小 ),旋轉一緻性(角度)等。

ORB并沒有解決尺度一緻性問題,在OpenCV的ORB實作中采用了圖像金字塔來改善這方面的性能。ORB主要解決BRIEF描述子不具備旋轉不變性的問題。

回顧一下BRIEF描述子的計算過程:

在目前關鍵點P周圍以一定模式選取N個點對,組合這N個點對的T操作的結果就為最終的描述子。當我們選取點對的時候,是以目前關鍵點為原點,以水準方向為X軸,以垂直方向為Y軸建立坐标系。當圖檔發生旋轉時,坐标系不變,同樣的取點模式取出來的點卻不一樣,計算得到的描述子也不一樣,這是不符合我們要求的。是以我們需要重建立立坐标系,使新的坐标系可以跟随圖檔的旋轉而旋轉。這樣我們以相同的取點模式取出來的點将具有一緻性。

打個比方,我有一個印章,上面刻着一些直線。用這個印章在一張圖檔上蓋一個章子,圖檔上分處直線2頭的點将被取出來。印章不變動的情況下,轉動下圖檔,再蓋一個章子,但這次取出來的點對就和之前的不一樣。為了使2次取出來的點一樣,我需要将章子也旋轉同一個角度再蓋章。(取點模式可以認為是章子上直線的分布情況)

ORB在計算BRIEF描述子時建立的坐标系是以關鍵點為圓心,以關鍵點和取點區域的形心的連線為X軸建立2維坐标系。

ORB特征提取與比對

P為關鍵點。圓内為取點區域,每個小格子代表一個像素。現在我們把這塊圓心區域看做一塊木闆,木闆上每個點的品質等于其對應的像素值。根據積分學的知識我們可以求出這個密度不均勻木闆的質心Q。計算公式如下。其中R為圓的半徑。

ORB特征提取與比對
ORB特征提取與比對

我們知道圓心是固定的而且随着物體的旋轉而旋轉。當我們以PQ作為坐标軸時,在不同的旋轉角度下,我們以同一取點模式取出來的點是一緻的。這就解決了旋轉一緻性的問題。

BRIEF中,采用了9x9的高斯算子進行濾波,可以一定程度上解決噪聲敏感問題,但一個濾波顯然是不夠的。ORB中提出,利用積分圖像來解決:在31x31的視窗中,産生一對随機點後,以随機點為中心,取5x5的子視窗,比較兩個子視窗内的像素和的大小進行二進制編碼,而非僅僅由兩個随機點決定二進制編碼。(這一步可有積分圖像完成)

特征點的比對

ORB算法最大的特點就是計算速度快 。 這首先得益于使用FAST檢測特征點,FAST的檢測速度正如它的名字一樣是出了名的快。再次是使用BRIEF算法計算描述子,該描述子特有的2進制串的表現形式不僅節約了存儲空間,而且大大縮短了比對的時間。

例如特征點A、B的描述子如下。

A:10101011

B:10101010

我們設定一個門檻值,比如80%。當A和B的描述子的相似度大于90%時,我們判斷A,B是相同的特征點,即這2個點比對成功。在這個例子中A,B隻有最後一位不同,相似度為87.5%,大于80%。則A和B是比對的。

我們将A和B進行異或操作就可以輕松計算出A和B的相似度。而異或操作可以借組硬體完成,具有很高的效率,加快了比對的速度。

漢明距離:

漢明距離是以理查德•衛斯裡•漢明的名字命名的。在資訊論中,兩個等長字元串之間的漢明距離是兩個字元串對應位置的不同字元的個數。換句話說,它就是将一個字元串變換成另外一個字元串所需要替換的字元個數。例如:

1011101 與 1001001 之間的漢明距離是 2。

2143896 與 2233796 之間的漢明距離是 3。

"toned" 與 "roses" 之間的漢明距離是 3。

給予兩個任何的字碼,10001001和10110001,即可決定有多少個相對位是不一樣的。在此例中,有三個位不同。要決定有多少個位不同,隻需将xor運算加諸于兩個字碼就可以,并在結果中計算有多個為1的位。例如:

10001001

Xor 10110001

00111000

兩個字碼中不同位值的數目稱為漢明距離(Hamming distance) 。