OpenCV-Python中的BRIEF(二進位的魯棒獨立基本特徵)

2020-02-21     人工智慧遇見磐創

目標

在本章中,我們將看到BRIEF算法的基礎知識

理論

我們知道SIFT使用128維矢量作為描述符。由於它使用浮點數,因此基本上需要512個位元組。同樣,SURF最少也需要256個位元組(用於64像素)。為數千個功能部件創建這樣的向量會占用大量內存,這對於資源受限的應用程式尤其是嵌入式系統而言是不可行的。內存越大,匹配所需的時間越長。

但是實際匹配可能不需要所有這些尺寸。我們可以使用PCA,LDA等幾種方法對其進行壓縮。甚至使用LSH(局部敏感哈希)進行哈希的其他方法也可以將這些SIFT描述符中的浮點數轉換為二進位字符串。這些二進位字符串用於使用漢明距離匹配要素。這提供了更快的速度,因為查找漢明距離僅是應用XOR和位數,這在具有SSE指令的現代CPU中非常快。但是在這裡,我們需要先找到描述符,然後才可以應用散列,這不能解決我們最初的內存問題。

現在介紹BRIEF。它提供了一種直接查找二進位字符串而無需查找描述符的快捷方式。它需要平滑的圖像補丁,並以獨特的方式(在紙上展示)選擇一組$nd(x,y)$位置對。然後,在這些位置對上進行一些像素強度比較。例如,令第一位置對為$p$和$q$。如果$I(p)< I(q)$,則結果為1,否則為0。將其應用於所有$nd$個位置對以獲得$n_d$維位串。

該$n_d$可以是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 npimport cv2 as cvfrom matplotlib import pyplot as pltimg = 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()給出以位元組為單位的$n_d$大小。默認情況下為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. https://en.wikipedia.org/wiki/Locality-sensitive_hashing at wikipedia.
文章來源: https://twgreatdaily.com/zh-mo/LNaIaHAB3uTiws8KFrXp.html