【翻译:OpenCV-Python教程】二元健壮独立基础特征

⚠️由于自己的拖延症,3.4.3翻到一半,OpenCV发布了4.0.1了正式版,所以接下来是按照4.0.1翻译的。

⚠️除了版本之外,其他还是照旧,BRIEF (Binary Robust Independent Elementary Features),附原文。

目标

在本章

  • 我们会学到BRIEF算法的基础知识

理论

我们知道SIFT算法使用128维向量来表示描述符。既然它使用浮点数,那基本上需要512字节。同样,SURF算法也需要最少256字节(对于64维时)。为数千个特性创建这样的向量需要大量内存,这对于资源局促的应用程序,尤其是嵌入式系统来说是不可行的。占用内存越大,匹配所需的时间就越长。

但是所有的那些维度,都有可能在真正匹配的时候用不上。我们可以用某些方法压缩它,比如PCA,LDA等等(译者注:这些都是机器学习中降维算法)。甚至还有其他方法,比如使用LSH(区域敏感散列)进行散列,来将浮点数中的SIFT描述符转换为二进制字符串。这些二进制字符串用来使用汉明距离(译者注:汉明距离用于表示两个字符串之间的差异,它等于A字符串变成B字符串需要替换的字符个数)匹配特征。这就能让运算速度大增,因为查找汉明距离只需应用XOR(译者注:XOR,逻辑运算符,异或)和二进制计数,这在具有SSE指令的现代cpu中是非常快的。但是要走到这一步,我们首先需要算出描述符,然后我们才能应用哈希散列法,这并不能解我们最初的问题,内存。

BRIEF算法就在此时来充当了大计的最后拼图。它提供了直接查找二进制字符串而不需要查找描述符的快捷方案。它取平滑后的图像分块,以一种独特的方式选择一组nd (x,y)位置对(论文中有更详细解释)。然后这组中的每一对位置都进行强度比较。比如,第一对位置是p和q,如果I(p)

这个nd的位数可以是128,256或者512。OpenCV 都是支持的,但默认的还是256(OpenCV用字节形式来表示这个nd的位数所以值是16, 32以及64)。一旦你得到这个(译者注,二进制字符串),你可以用汉明距离来匹配这些描述符。

一个重要的点是,BRIEF指的是一个特征描述符。它没有提供任何查找特性的方法。因此,你将不得不使用任何其他函数先来找出特征,如SIFT, SURF等。那篇论文中推荐使用CenSurE,它是一种快速的检测器,BRIEF算法和它算出点配合使用,甚至比和SURF算出的点配合的更好写。

简单讲,BRIEF是一种快速计算和匹配特征描述符的方法。它还提供了高识别率,除非平面内较大的旋转。

OpenCV里的BRIEF

以下代码显示了对BRIEF描述符的计算,在CenSurE检测器的帮助下。(CenSurE 检测器在OpenCV里叫做 STAR detector)

提示,你需要opencv contrib来使用它。

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('simple.jpg',0)
# Initiate FAST detector
star = cv.xfeatures2d.StarDetector_create()
# Initiate BRIEF extractor
brief = cv.xfeatures2d.BriefDescriptorExtractor_create()
# find the keypoints with STAR
kp = star.detect(img,None)
# compute the descriptors with BRIEF
kp, des = brief.compute(img, kp)
print( brief.descriptorSize() )
print( des.shape )

函数 brief.getDescriptorSize() 以字节形式给出了nd使用的位数。默认是32(译者注:32代表256位)。接下来就是匹配啦,我们在下一章来讲。

额外资源

  1. Michael Calonder,Vincent Lepetit,Christoph Strecha,和Pascal Fua的论文,"BRIEF: Binary Robust Independent Elementary Features",在克里特岛伊拉克里翁举行的第十一届欧洲计算机视觉会议(ECCV)上提出。后又于2010年9月发表于计算机科学丛书。
  2. wikiped上介绍的区域敏感散列 LSH (Locality Sensitive Hashing) 。

上篇:【翻译:OpenCV-Python教程】角点检测的快速(FAST)算法

下篇:【翻译:OpenCV-Python教程】更快速且支持旋转的BRIEF算法

你可能感兴趣的:(OpenCV,翻译,OpenCV,中文文档,4.0.1,计算机视觉,人工智能)