ORB特徵點檢測與匹配

2021-08-02 17:12:05 字數 3459 閱讀 3953



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

特徵點的檢測

影象的特徵點可以簡單的理解為影象中比較顯著顯著的點,如輪廓點,較暗區域中的亮點,較亮區域中的暗點等。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

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

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

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

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的位。例如:

10001001

xor 10110001

00111000

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

ORB特徵點檢測

這篇文章我們將介紹一種新的具有區域性不變性的特徵 orb特徵,從它的名字中可以看出它是對fast特徵點與breif特徵描述子的一種結合與改進,這個演算法是由ethan rublee,vincent rabaud,kurt konolige以及gary r.bradski在2011年一篇名為 orb ...

ORB特徵點檢測

這篇文章我們將介紹一種新的具有區域性不變性的特徵 orb特徵,從它的名字中可以看出它是對fast特徵點與breif特徵描述子的一種結合與改進,這個演算法是由ethan rublee,vincent rabaud,kurt konolige以及gary r.bradski在2011年一篇名為 orb ...

python opencv特徵點檢測和匹配教程

import cv2 import numpy as np import random import os import matplotlib.pyplot as plt from timeit import default timer as timer 從影象資料夾中獲取所有的影象 imgdir ...