OpenCV系列之BRIEF(二进制的鲁棒独立基本特征) | 四十二

目标
在本章中,算法

  • 咱们将看到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.
相关文章
相关标签/搜索