1. 程式人生 > >影象處理——ORB演算法

影象處理——ORB演算法

本文主要由jason來自星星的博文https://www.cnblogs.com/zjiaxing/p/5616653.html整理而得,在此表示感謝!

一、構造尺度金字塔

   金字塔共n層,與SIFT不同,每層僅有一副影象;

   第s層的尺度為,Fator初始尺度(預設為1.2),原圖在第0層;

   第s層影象大小:

                              

二、特徵點的檢測

在不同尺度上採用Fast檢測特徵點;在每一層上按公式計算需要提取的特徵點數n,在本層上按Fast角點響應值排序,提取前2n個特徵點,然後根據Harris   角點響應值排序, 取前n個特徵點,作為本層的特徵點。

影象的特徵點可以簡單的理解為影象中比較顯著顯著的點,如輪廓點,較暗區域中的亮點,較亮區域中的暗點等。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-9、FAST-10、FAST-11、FAST-12,大家使用比較多的是FAST-9和FAST-12。



三、計算特徵描述子


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


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


3.定義操作T


4.分別對已選取的點對進行T操作,將得到的結果進行組合。
假如:

則最終的描述子為:1011

5.實際的特徵描述子計算過程

    旋轉每個特徵點的Patch到主方向,採用上述步驟3的選取的最優的256對特徵點做τ測試,構成256維描述子,佔32個位元組;

                   ,,n=256

四、計算主方向

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

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


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

定義矩的計算公式,x,y∈[-R,R]:

                                 


               質心位置:

               主方向:

                                  

我們知道圓心是固定的而且隨著物體的旋轉而旋轉。當我們以PQ作為座標軸時,在不同的旋轉角度下,我們以同一取點模式取出來的點是一致的。這就解決了旋轉一致性的問題。
BRIEF中,採用了9x9的高斯運算元進行濾波,可以一定程度上解決噪聲敏感問題,但一個濾波顯然是不夠的。ORB中提出,利用積分影象來解決:在31x31的視窗中,產生一對隨機點後,以隨機點為中心,取5x5的子視窗,比較兩個子視窗內的畫素和的大小進行二進位制編碼,而非僅僅由兩個隨機點決定二進位制編碼。(這一步可有積分影象完成)
五、採用漢明距離做特徵點匹配

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

1011101 與 1001001 之間的漢明距離是 2。
2143896 與 2233796 之間的漢明距離是 3。
"toned" 與 "roses" 之間的漢明距離是 3。
給予兩個任何的字碼,10001001和10110001,即可決定有多少個相對位是不一樣的。在此例中,有三個位不同。要決定有多少個位不同,只需將xor運算加諸於兩個字碼就可以,並在結果中計算有多個為1的位。例如:
10001001
Xor 10110001
00111000
兩個字碼中不同位值的數目稱為漢明距離(Hamming distance) 。

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的相似度。而異或操作可以借組硬體完成,具有很高的效率,加快了匹配的速度。

相關推薦

影象處理——ORB演算法

本文主要由jason來自星星的博文https://www.cnblogs.com/zjiaxing/p/5616653.html整理而得,在此表示感謝! 一、構造尺度金字塔    金字塔共n層,與SIFT不同,每層僅有一副影象;    第s層的尺度為,Fato

影象處理OpenCV演算法04

8、邊緣檢測       大多數邊緣檢測運算元是基於方向差分卷積核求卷積的方法,通常有四種方式來衡量最後輸出的邊緣強度。(1)取對應位置絕對值的和:    ,(2)取對應位置平方和的開方:,(3)取對應位置絕對值的最大值:,(4

影象處理OpenCV演算法03

6、閾值分割       閾值分割主要是根據灰度值資訊提取前景,所以對前景物體有較強對比度的影象的分割特別有用。在OpenCV中通過呼叫cv2.threshold()實現閾值分割。         全閾值分割:將灰度值大於t

影象處理OpenCV演算法02

        5、影象濾波(平滑)         影象濾波(平滑),即在儘量保留影象細節特徵的條件下對目標影象的噪聲進行抑制,是影象預

影象處理OpenCV演算法01

OpenCV演算法           1、影象的基本操作讀取、顯示、儲存:通過呼叫OpenCV中的cv2.imread(),cv2.imshow(),cv2.write()分別實現。   &

影象處理經典演算法及OpenCV程式

基於opencv的use攝像頭視訊採集程式 準備工作:你得把opencv庫裝到電腦上,並把各種標頭檔案,原始檔,lib庫都連到vc上,然後設定一下系統環境變數

影象處理——分水嶺演算法

首先感謝以下兩位的博文幫助我的理解: (1)邁克老狼2012   https://www.cnblogs.com/mikewolf2002/p/3304118.html (2)-牧野-              http://blog.csdn.net/dcrmg

[數字影象處理]模糊演算法用於影象增強

function [W1,W2,W3,W4,B] = Fuzzy_Knowledge_Filters(Intensity) for x = 1:1:3 for y = 1:1:3 if((Intensity(x,y) <= 0.2) &&(Intensity(x,y

影象處理基本演算法 車牌識別與定位

       進行車牌識別和定位首先要了解車牌的特徵以及分類。 車牌主要包括以下幾種: 藍牌白字:普通小型車(其中包括政府機關專用號段、政法部門警車以外的行政用車)的牌照 黃牌黑字:大型車輛、摩托車、駕校教練車牌照 黑牌白字:涉外車輛牌照,式樣和藍牌基本相同 白牌:政法部門(公安、法院、檢察院、

影象處理-基本演算法之對數變換

對數變換實現了影象灰度擴充套件和壓縮的功能。它擴充套件低灰度值而壓縮高灰度值,讓影象的灰度分佈更加符合人的視覺特徵。     程式碼如下: [cpp] view plaincopyprint? /******

影象處理——SURF演算法

(2)斑點檢測     斑點:與周圍有著顏色和灰度差別的區域。     在一個一維訊號中,讓它和高斯二階導數進行卷積,也就是拉普拉斯變換,那麼在訊號的邊緣處就會出現過零點,如下圖所示:     高斯拉普拉斯Log探測器的響應值就是在衡量影象的相似性,如下圖是一個影象的高斯拉普

影象處理.surf,演算法,影象處理

在對surf編碼完成之後,對surf進行改進。將影象在鄰域內相交的特徵點連線起來。 兩兩比較特徵點的半徑(scale)之和r與其距離d的大小。若d小於r,說明這個特徵點有交集,連線兩個特徵點,否則,沒有交集。 加入的程式碼如下: void getPointRelation(

影象處理常用演算法(基礎)

Roberts邊緣運算元是一個2x2的模板,採用的是對角方向相鄰的兩個畫素之差。從影象處理的實際效果來看,邊緣定位較準,對噪聲敏感。適用於邊緣明顯且噪聲較少的影象分割。Roberts邊緣檢測運算元是一種利用區域性差分運算元尋找邊緣的運算元,Robert運算元影象處理後結果邊緣不是很平滑。經分析,由於Robe

影象處理常用演算法(C++/OPENCV)

//新增椒鹽噪聲 void salt(Mat& src,int number) { for (int i = 0; i < number; i++) { int r = stati

影象處理DOG 演算法,python結合cv2實現

DoG (Difference of Gaussian)是灰度影象增強和角點檢測的方法 #coding=utf-8 import cv2 import numpy as np def getExtrema(A, B, C, thresh):

影象處理常用演算法總結

1、濾波(平滑、降噪) 2、增強 3、邊緣銳化 4、紋理分析(去骨架、連通性) 5、影象分割(灰度、顏色、頻譜特徵、紋理特徵、空間特徵) 6、變換(空域和頻域、幾何變換、色度變換) 7、幾何形態分析(Blob分析) (形狀、大小、長度、面積、邊緣、圓形度位置、方向、數量、連

影象處理中的增強演算法---灰級窗切片增強

灰級窗切片增強--相比較X光更適合於CT,程式如下: import cv2 import numpy as np I = cv2.imread('*.png',0) h, w = I.shape fa = 40 fb = 160 k = 255/(160-45) J = np.zeros((h,

影象處理之積分圖應用四(基於區域性均值的影象二值化演算法

影象處理之積分圖應用四(基於區域性均值的影象二值化演算法) 基本原理 均值法,選擇的閾值是區域性範圍內畫素的灰度均值(gray mean),該方法的一個變種是用常量C減去均值Mean,然後根據均值實現如下操作: pixel = (pixel > (mean - c)) ? ob

影象處理之積分圖應用三(基於NCC快速相似度匹配演算法

影象處理之積分圖應用三(基於NCC快速相似度匹配演算法) 基於Normalized cross correlation(NCC)用來比較兩幅影象的相似程度已經是一個常見的影象處理手段。在工業生產環節檢測、監控領域對物件檢測與識別均有應用。NCC演算法可以有效降低光照對影象比較結果的影響。而

影象處理之積分圖應用二(快速邊緣保留濾波演算法)

影象處理之積分圖應用二(快速邊緣保留濾波演算法) 一:基本原理 傳統的影象邊緣保留濾波演算法-如高斯雙邊模糊、Mean-Shift模糊等計算複雜、效率比較低,雖然有各種手段優化或者快速計算方法,當時演算法相對一般碼農來說理解起來比較費勁,不是一個的選擇,而通過積分影象實現區域性均方差