OpenCV36: BRIEF 二进制稳健独立的基本特征

目标

在本章中,将看到

  • BRIEF算法的基础知识

理论

基于之前的知识可以知道, SIFT使用128维矢量作为描述符。由于它使用浮点数,因此基本上需要512个字节。同样,SURF最少也需要256个字节(用于64像素)。如果为数千个特征创建这样的向量会占用大量内存,这对于资源受限的应用程序尤其是嵌入式系统而言是不可行的内存越大,匹配所需的时间越长。

但是实际匹配可能不需要所有这些尺寸可以使用PCA,LDA等几种方法对其进行压缩。甚至使用LSH(局部敏感哈希)进行哈希的其他方法也可以将这些SIFT描述符中的浮点数转换为二进制字符串。这些二进制字符串用于使用汉明距离匹配要素,这提供了更快的速度,因为查找汉明距离仅是应用XOR和位数,这在具有SSE指令的CPU中运算是非常快的。但是在这里,需要先找到描述符,然后才可以应用散列,这不能解决最初的内存问题。

现在介绍BRIEF。它提供了一种直接查找二进制字符串而无需查找描述符的快捷方式。它需要平滑的图像块,并以独特的方式选择一组 n d ( x , y ) n_d(x,y) nd(xy)位置对。然后,在这些位置对上进行一些像素强度比较。例如,令第一位置对为 p p p q q q。如果 I p < I q I_p < I_q Ip<Iq,则结果为1,否则为0。将其应用于所有 n d n_d nd 个位置对以获得 n d n_d nd维位串。
n d n_d nd可以是128、256或512。OpenCV支持所有这些,但默认情况下将是256(OpenCV以字节为单位表示,因此值将为16、32和64)。因此,一旦获得此信息,就可以使用汉明距离来匹配这些描述符。

重要的一点是,BRIEF是特征描述符,它不提供任何查找特征的方法。因此,将不得不使用任何其他特征检测器,例如SIFT,SURF等。本文建议使用CenSurE,它是一种快速检测器,并且CenSurE比SURF点的工作要好一些。

简而言之,BRIEF是一种更快的方法特征描述符计算和匹配。除了平面内旋转较大的情况,它将提供很高的识别率。

算法步骤

  • 为减少噪声干扰,先对图像进行高斯滤波(方差为2,高斯窗口为9x9)
  • ·以特征点为中心,取SxS的邻域大窗口。在大窗口中随机选取一对(两个)5x5的子窗口,比较子窗口内的像素和(可用积分图像完成),进行二进制赋值.(一般S=31)

τ ( p ; x , y ) : = { 1 , i f p ( x ) < p ( y ) 0 , o t h e r w i s e \tau(p;x,y):=\begin{cases}1,\quad if p(x) < p(y)\\ 0,\quad otherwise \end{cases} τ(p;x,y):={ 1,ifp(x)<p(y)0,otherwise

其中p(x),p(y)分别随机点x=(u1,v1),y=(u2,v2)所在5x5子窗口的像素和.

  • 在大窗口中随机选取N对子窗口,重复步骤2的二进制赋值,形成一个二进制编码,这个编码就是对特征点的描述,即特征描述子.(一般N=256)

FAST算法提取特征点+BRIEF计算描述子 就构成了 ORB特征点提取部分

OpenCV中的BRIEF

下面的代码显示了借助CenSurE检测器对Brief描述符的计算。(在OpenCV中,CenSurE检测器称为STAR检测器)注意,您需要使用opencv contrib)才能使用它。

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('fly.png')
# 初始化FAST检测器
star = cv2.xfeatures2d.StarDetector_create()
# 初始化BRIEF提取器
brief = cv2.xfeatures2d.BriefDescriptorExtractor_create()
# 找到STAR的关键点
kp = star.detect(img, None)
# 计算BRIEF的描述符
kp, des = brief.compute(img, kp)
print(brief.descriptorSize())
print(des.shape)

cv2.drawKeypoints(img, kp, img, color=(255, 0, 0))
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

函数brief.getDescriptorSize()给出以字节为单位的 n d n_d nd大小。默认情况下为32。

在这里插入图片描述

附加资源

猜你喜欢

转载自blog.csdn.net/uncle_ll/article/details/121657499