目標
在本章中,算法
- 咱們將看到BRIEF算法的基礎知識
理論
咱們知道SIFT使用128維矢量做爲描述符。因爲它使用浮點數,所以基本上須要512個字節。一樣,SURF最少也須要256個字節(用於64像素)。爲數千個功能部件建立這樣的向量會佔用大量內存,這對於資源受限的應用程序尤爲是嵌入式系統而言是不可行的。內存越大,匹配所需的時間越長。
可是實際匹配可能不須要全部這些尺寸。咱們可使用PCA,LDA等幾種方法對其進行壓縮。甚至使用LSH(局部敏感哈希)進行哈希的其餘方法也能夠將這些SIFT描述符中的浮點數轉換爲二進制字符串。這些二進制字符串用於使用漢明距離匹配要素。這提供了更快的速度,由於查找漢明距離僅是應用XOR和位數,這在具備SSE指令的現代CPU中很是快。可是在這裏,咱們須要先找到描述符,而後才能夠應用散列,這不能解決咱們最初的內存問題。
如今介紹BRIEF。它提供了一種直接查找二進制字符串而無需查找描述符的快捷方式。它須要平滑的圖像補丁,並以獨特的方式(在紙上展現)選擇一組圖片位置對。而後,在這些位置對上進行一些像素強度比較。例如,令第一位置對爲p和q。若是圖片,則結果爲1,不然爲0。將其應用於全部圖片個位置對以得到圖片維位串。
該圖片能夠是12八、256或512。OpenCV支持全部這些,但默認狀況下將是以256(OpenCV以字節爲單位表示,所以值將爲1六、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)ide
初始化FAST檢測器
star = cv.xfeatures2d.StarDetector_create()函數
初始化BRIEF提取器
brief = cv.xfeatures2d.BriefDescriptorExtractor_create()code
找到STAR的關鍵點
kp = star.detect(img,None)圖片
計算BRIEF的描述符
kp, des = brief.compute(img, kp)
print( brief.descriptorSize() )
print( des.shape )ip
函數brief.getDescriptorSize()給出以字節爲單位的圖片大小。默認狀況下爲32。下一個是匹配項,這將在另外一章中進行。
**附加資源**
1.Michael Calonder, Vincent Lepetit, Christoph Strecha, and Pascal Fua, "BRIEF: Binary Robust Independent Elementary Features", 11th European Conference on Computer Vision (ECCV), Heraklion, Crete. LNCS Springer, September 2010.
2.LSH (Locality Sensitive Hashing) at wikipedia.