ORB特徵提取與匹配

ORB特徵是目前最優秀的特徵提取與匹配算法之一,下面具體講解一下:html

 【轉載自 https://www.cnblogs.com/zjiaxing/p/5616653.html】算法

特徵點的檢測性能


圖像的特徵點能夠簡單的理解爲圖像中比較顯著顯著的點,如輪廓點,較暗區域中的亮點,較亮區域中的暗點等。ORB採用FAST(features from accelerated segment test)算法來檢測特徵點。這個定義基於特徵點周圍的圖像灰度值,檢測候選特徵點周圍一圈的像素值,若是候選點周圍領域內有足夠多的像素點與該候選點的灰度值差異夠大,則認爲該候選點爲一個特徵點。
測試


其中I(x)爲圓周上任意一點的灰度,I(p)爲圓心的灰度,Ed爲灰度值差得閾值,若是N大於給定閾值,通常爲周圍圓圈點的四分之三,則認爲p是一個特徵點。
爲了得到更快的結果,還採用了額外的加速辦法。若是測試了候選點周圍每隔90度角的4個點,應該至少有3個和候選點的灰度值差足夠大,不然則不用再計算其餘點,直接認爲該候選點不是特徵點。候選點周圍的圓的選取半徑是一個很重要的參數,這裏爲了簡單高效,採用半徑爲3,共有16個周邊像素須要比較。爲了提升比較的效率,一般只使用N個周邊像素來比較,也就是你們常常說的FAST-N。不少文獻推薦FAST-9,做者的主頁上有FAST-九、FAST-十、FAST-十一、FAST-12,你們使用比較多的是FAST-9和FAST-12。
編碼

 


計算特徵描述子3d


獲得特徵點後咱們須要以某種方式描述這些特徵點的屬性。這些屬性的輸出咱們稱之爲該特徵點的描述子(Feature DescritorS).ORB採用BRIEF算法來計算一個特徵點的描述子。
BRIEF算法的核心思想是在關鍵點P的周圍以必定模式選取N個點對,把這N個點對的比較結果組合起來做爲描述子。htm

 


步驟:
1.以關鍵點P爲圓心,以d爲半徑作圓O。
2.在圓O內某一模式選取N個點對。這裏爲方便說明,N=4,實際應用中N能夠取512.
假設當前選取的4個點對如上圖所示分別標記爲:
blog


3.定義操做T
圖片

 


4.分別對已選取的點對進行T操做,將獲得的結果進行組合。
假如:
字符串

 

則最終的描述子爲:1011


理想的特徵點描述子應該具有的屬性:
在現實生活中,咱們從不一樣的距離,不一樣的方向、角度,不一樣的光照條件下觀察一個物體時,物體的大小,形狀,明暗都會有所不一樣。但咱們的大腦依然能夠判斷它是同一件物體。理想的特徵描述子應該具有這些性質。即,在大小、方向、明暗不一樣的圖像中,同一特徵點應具備足夠類似的描述子,稱之爲描述子的可復現性。
當以某種理想的方式分別計算描述子時,應該得出一樣的結果。即描述子應該對光照(亮度)不敏感,具有尺度一致性(大小 ),旋轉一致性(角度)等。
ORB並無解決尺度一致性問題,在OpenCV的ORB實現中採用了圖像金字塔來改善這方面的性能。ORB主要解決BRIEF描述子不具有旋轉不變性的問題。

回顧一下BRIEF描述子的計算過程:
在當前關鍵點P周圍以必定模式選取N個點對,組合這N個點對的T操做的結果就爲最終的描述子。當咱們選取點對的時候,是以當前關鍵點爲原點,以水平方向爲X軸,以垂直方向爲Y軸創建座標系。當圖片發生旋轉時,座標系不變,一樣的取點模式取出來的點卻不同,計算獲得的描述子也不同,這是不符合咱們要求的。所以咱們須要從新創建座標系,使新的座標系能夠跟隨圖片的旋轉而旋轉。這樣咱們以相同的取點模式取出來的點將具備一致性。
打個比方,我有一個印章,上面刻着一些直線。用這個印章在一張圖片上蓋一個章子,圖片上分處直線2頭的點將被取出來。印章不變更的狀況下,轉動下圖片,再蓋一個章子,但此次取出來的點對就和以前的不同。爲了使2次取出來的點同樣,我須要將章子也旋轉同一個角度再蓋章。(取點模式能夠認爲是章子上直線的分佈狀況)
ORB在計算BRIEF描述子時創建的座標系是以關鍵點爲圓心,以關鍵點和取點區域的形心的連線爲X軸創建2維座標系。

 


P爲關鍵點。圓內爲取點區域,每一個小格子表明一個像素。如今咱們把這塊圓心區域看作一塊木板,木板上每一個點的質量等於其對應的像素值。根據積分學的知識咱們能夠求出這個密度不均勻木板的質心Q。計算公式以下。其中R爲圓的半徑。


咱們知道圓心是固定的並且隨着物體的旋轉而旋轉。當咱們以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的位。例如:10001001Xor 1011000100111000兩個字碼中不一樣位值的數目稱爲漢明距離(Hamming distance) 。

相關文章
相關標籤/搜索