图像处理之特征描述与匹配
本節中主要介紹以下兩點:
- BRIEF算法介紹
- ORB介紹
一、BRIEF(二進制的魯棒獨立基本特征)的原理介紹
**BRIEF提供了一種直接查找二進制字符串而無需查找描述符的快捷方式。**它需要平滑的圖像補丁,并以獨特的方式(在紙上展示)選擇一組nd(x,y)n_d(x,y)nd?(x,y)位置對。然后,在這些位置對上進行一些像素強度比較。例如,令第一位置對為ppp和qqq。如果I(p)<I(q)I(p)<I(q)I(p)<I(q),則結果為1,否則為0。將其應用于所有ndn_dnd?個位置對以獲得ndn_dnd?維位串。
該ndn_dnd?可以是128、256或512。OpenCV支持所有這些,但默認情況下將是256(OpenCV以字節為單位表示,因此值將為16、32和64)。因此,一旦獲得此信息,就可以使用漢明距離來匹配這些描述符。
重要的一點是,BRIEF是特征描述符,它不提供任何查找特征的方法。因此,您將不得不使用任何其他特征檢測器,例如SIFT,SURF等。本文建議使用CenSurE,它是一種快速檢測器,并且BIM對于CenSurE點的工作原理甚至比對SURF點的工作要好一些。
簡而言之,BRIEF是一種更快的方法特征描述符計算和匹配。除了平面內旋轉較大的情況,它將提供很高的識別率。
OpenCV中的BRIEF
下面的代碼顯示了借助CenSurE檢測器對Brief描述符的計算。(在OpenCV中,CenSurE檢測器稱為STAR檢測器)注意,您需要使用opencv contrib)才能使用它。
import numpy as np import cv2 as cv from matplotlib import pyplot as plt img = cv.imread('simple.jpg',0) # 初始化FAST檢測器 star = cv.xfeatures2d.StarDetector_create() # 初始化BRIEF提取器 brief = cv.xfeatures2d.BriefDescriptorExtractor_create() # 找到STAR的關鍵點 kp = star.detect(img,None) # 計算BRIEF的描述符 kp, des = brief.compute(img, kp) print( brief.descriptorSize() ) print( des.shape )函數brief.getDescriptorSize()給出以字節為單位的ndn_dnd?大小。默認情況下為32。下一個是匹配項。
二、ORB(面向快速和旋轉的BRIEF)
ORB基本上是FAST關鍵點檢測器和Brief描述符的融合,并進行了許多修改以增強性能。首先,它使用FAST查找關鍵點,然后應用Harris角測度在其中找到前N個點。它還使用金字塔生成多尺度特征。但是一個問題是,FAST無法計算方向。那么旋轉不變性呢?作者提出以下修改。
它計算角點位于中心的貼片的強度加權質心。從此角點到質心的矢量方向確定了方向。為了改善旋轉不變性,使用x和y計算矩,它們應該在半徑rrr的圓形區域中,其中rrr是斑塊的大小。
現在,對于描述符,ORB使用Brief描述符。但是我們已經看到,BRIEF的旋轉性能很差。因此,ORB所做的就是根據關鍵點的方向“引導” BRIEF。對于位置(xi,yi)(x_i,y_i)(xi?,yi?)上n個二進制測試的任何特征集,定義一個2×n2×n2×n矩陣S,其中包含這些像素的坐標。然后使用面片的方向θθθ,找到其旋轉矩陣并旋轉SSS以獲得轉向(旋轉)版本SθS_θSθ?。
ORB將角度離散化為2π30\frac{2π}{30}302π?(12度)的增量,并構造了預先計算的Brief模式的查找表。只要關鍵點方向θθθ在各個視圖中一致,就將使用正確的點集SθS_θSθ?來計算其描述符。
BRIEF具有一個重要的特性,即每個位特征具有較大的方差,且均值接近0.5。但是,一旦沿關鍵點方向定向,它就會失去此屬性,變得更加分散。高方差使功能更具區分性,因為它對輸入的響應不同。另一個理想的特性是使測試不相關,因為從那時起每個測試都會對結果有所貢獻。為了解決所有這些問題,ORB在所有可能的二進制測試中進行貪婪搜索,以找到方差高且均值接近0.5且不相關的測試。結果稱為rBRIEF。
對于描述符匹配,使用了對傳統LSH進行改進的多探針LSH。該論文說,ORB比SURF快得多,而SIFT和ORB描述符比SURF更好。在全景拼接等低功耗設備中,ORB是一個不錯的選擇。
OpenCV中的ORB
與往常一樣,我們必須使用函數cv.ORB()或使用feature2d通用接口來創建ORB對象。它具有許多可選參數。最有用的是nFeatures,它表示要保留的最大特征數(默認為500),scoreType表示是對特征進行排名的Harris分數還是FAST分數(默認為Harris分數)等。另一個參數WTA_K決定點數產生定向的BRIEF描述符的每個元素。默認情況下為兩個,即一次選擇兩個點。在這種情況下,為了匹配,將使用NORM_HAMMING距離。如果WTA_K為3或4,則需要3或4個點來生成Brief描述符,則匹配距離由NORM_HAMMING2定義。 下面是顯示ORB用法的簡單代碼。
import numpy as np import cv2 as cv from matplotlib import pyplot as plt img = cv.imread('simple.jpg',0) # 初始化ORB檢測器 orb = cv.ORB_create() # 用ORB尋找關鍵點 kp = orb.detect(img,None) # 用ORB計算描述符 kp, des = orb.compute(img, kp) # 僅繪制關鍵點的位置,而不繪制大小和方向 img2 = cv.drawKeypoints(img, kp, None, color=(0,255,0), flags=0) plt.imshow(img2), plt.show()查看結果:
總結
以上是生活随笔為你收集整理的图像处理之特征描述与匹配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 限时免费!Cell旗下 Heliyon
- 下一篇: 高薪招聘生物信息工程师-中国科学院深圳先