当前位置:首页> AI教程> BRIEF算法:快速特征描述符计算和匹配

BRIEF算法:快速特征描述符计算和匹配

释放双眼,带上耳机,听听看~!
本文介绍了BRIEF算法的基础知识、特征描述符计算和匹配步骤,以及在OpenCV中的应用。通过高效的二进制编码和匹配方法,BRIEF算法提供了快速的特征描述和匹配方式,适用于图像处理和计算机视觉任务。

目标

在本章中,将看到

  • BRIEF算法的基础知识

理论

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

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

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

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

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

算法步骤

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

τ(p;x,y):={1,ifp(x)<p(y)0,otherwisetau(p;x,y):=begin{cases}1,quad if p(x) < p(y)\ 0,quad otherwise end{cases}

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

  • 在大窗口中随机选取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算法:快速特征描述符计算和匹配

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

BRIEF算法:快速特征描述符计算和匹配

附加资源

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

RT-DETR 模型量化压缩及部署实战

2023-12-9 0:21:14

AI教程

无监督二元变化引导的高光谱多类变化检测网络及其在遥感图像处理中的应用

2023-12-9 1:41:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索