BRIEF描述子生成算法
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
一、介绍
我们知道SIFT算法通常通过对每个关键点生成128个特征向量作为描述子、SURF算法通常对关键点生成最少64个特征向量作为描述子。但是对于图像来说创建上千或者上万个这样的描述子内存开销比较大,运行速度受到严重影响。特别对嵌入式设备与一定设备来说,内存限制尤为明显,而且匹配的时候计算也比较耗时。
但是实际上这些特征数据OpenCV在匹配的时候并没有完全利用上,而是通过PCA、LDA等方法对它进行压缩,或者是LSH(局部敏感哈希)方法把这些特征描述子压缩从浮点数转换为二进制字符串,然后通过汉明距离(HammingDistance)进行比较。这样就可以通过简单的异或操作(OXR)与位值计算来加速实现对象特征匹配,对于SSE指令集的CPU这种方法可以大大加速。但是这种方法仍然需要首先计算描述子,然后使用LSH方法进行压缩,无法避免过度的内存开销。
而Brief方法可以直接通过关键点生成二进制字符串,跳过了中间描述子生成步骤,这样就大大减低了内存要求与计算开销。Brief方法主要思路是对每个关键点附件选择若干个像素点,将这些像素点的像素值组合成二进制字符串,然后使用该字符串作为该关键点的描述子。此方法是在2010年提出来的。结果实验测试在选取256个点甚至128个点情况下对没有旋转对象识别率非常高而且速度比SURF还快。但是当对象有旋转时候由于Brief不能很好的支持旋转不变性识别,特别是当旋转角度超过30度以上,准确率会快速下降。
二、Brief描述子生成步骤
Brief描述子生成首先需要产生足够多的随机点对,然后根据随机点对坐标得到对应像素值,对所有点对进行二进制字符串拼接,拼接完成即生成了描述子。
第一步
选择关键点周围SxS大小正方形图像区块,进行高斯模糊。这样做的原因是需要降低图像随机噪声,OpenCV在完成Brief的时候考虑到效率问题并没有采用高斯模糊而是采用了基于积分图的盒子模糊方法。
第二步
选择n个像素点对,其中n的取值常见为256、此外还可以是128、512。每个点对比较像素值输出如下。
对N个点对完成操作最终得到了二进制字符串,表达如下:
三、方法
高斯模糊比较
通过实验对比高斯sigma参数在0~3之间准确率比较高,窗口大小取值在9x9取得比较好的模糊去噪效果。论文中实验结果图示如下:
随机点生成方法比较
对于随机生成点对的方法,论文中给出了五种随机方法与实验结果比较,五种方法描述如下:
图示如下:
对图像五个几何采样完成测试结果如下:
四:代码演示
其中两张输入图像
最终运行效果图如下:
下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。
下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。
下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
BRIEF描述子生成算法相关推荐
- lsd 特征点匹配代码_线特征LSD and 描述子LBD---LBD算法(二)
上一节主要是介绍LSD算法理论,这节主要是介绍LBD算法. 1.尺度空间中提取线段 为了克服在线检测碎片问题和提高大尺度变化的性能,我们的检测框架采用由对原始图像进行搞死下采样( with a set ...
- 即将开源STD:用于3D位置识别的稳定三角形描述子
文章:STD: Stable Triangle Descriptor for 3D place recognition 作者:Chongjian Yuan, Jiarong Lin , Zuhao Z ...
- 特征描述子提取公用接口
OpenCV封装了一些特征描述子提取算法,使得用户能够解决该问题时候方便使用各种算法.这章用来计算的描述子提取被表达成一个高维空间的向量 vector.所有实现 vector 特征描述子子提取的部分继 ...
- sift计算描述子代码详解_SIFT解析(三)生成特征描述子
以上两篇中检测在DOG空间中稳定的特征点,lowe已经提到这些特征点是比Harris角点等特征还要稳定的特征.下一步骤我们要考虑的就是如何去很好地描述这些DOG特征点. 下面好好说说如何来描述这些特征 ...
- ORB-SLAM2中生成金字塔提取FAST角点和计算BRIEF描述子
//这个是类ORBextractor的带参构造函数,并且使用初始化列表对该类中的这5个变量赋值 ORBextractor::ORBextractor(int _nfeatures, float _sc ...
- SIFT算法特征描述子构建---关键点定位原理及代码
0.引言 sift针对局部特征进行特征提取,在尺度空间寻找极值点,提取位置,尺度,旋转不变量,生成特征描述子. 总共分四个步骤: 尺度金字塔生成 关键点/极值点提取 生成梯度直方图 特征描述子构建 s ...
- SLAM--PL-SLAM中基于线特征的初始化方法(LSD算法,LBD描述子,计算R和t)
SLAM中基于线特征的初始化方法 线特征的初始化 直线段检测算法---LSD:a Line Segment Detector 描述子---LBD:Line detection and descript ...
- 【视觉算法】SHOT特征描述子
回顾一下上一篇文章学习的物体识别流程,首先计算模型点云特征,并将特征保存:然后计算场景点云特征,并将特征保存:在此基础上,进行特征匹配:每一对特征点,进行霍夫投票,投票峰值对应的那些点对,即为正确的特 ...
- 基于点云描述子的立体视觉里程计快速鲁棒的位置识别方法
点云PCL免费知识星球,点云论文速读. 文章:A Fast and Robust Place Recognition Approach for Stereo Visual Odometry Using ...
最新文章
- lookout筛选相同信息_信息流广告4大行业案例总结分析(不会操作那就抄吧,建议收藏)...
- 实用!你不知道的小技巧,电脑快速实现屏幕长截图
- lua学习笔记之io
- Leetcode - 347. Top K Frequent Elements(堆排序)
- centos 7配置firewall防火墙的地址伪装和端口转发实例
- C++ gnome sort 侏儒排序的实现算法(附完整源码)
- 蓝桥杯基础模块9:IO口扩展与存储器映射
- cupload怎么保存图片_原生js的图片上传插件cupload
- 在Xshell中直接上传或下载文件
- JavaScript基础知识总结笔记
- 【Windows】打印机0x0000011b解决办法
- 这些CAD制图初学入门问题你遇到过吗?CAD制图初学入门全攻略!
- 阿泰,水晶报表--pull模式样板
- 2010节假日安排通知
- cot函数 java_java8、jdk8日期与字符串转化
- mars3d-热力图
- matlab 错误使用 connector.internal.autostart.run输入参数的数目不足。
- ndk开发字符串转十六进制!音视频时代你还不会NDK开发?已拿offer
- Beta产品测试报告:那周余嘉熊掌将得队、为了交项目干杯队
- FMDB 操作数据库