注释:本文翻译自OpenCV3.0.0 document->OpenCV-Python Tutorials,包括对原文档种错误代码的纠正

1.概述

SIFT使用具有128个浮点数的特征描述符。 考虑成千上万个这样的特征 。 它需要大量的内存和更多的时间进行匹配。 我们可以压缩它以使其更快。 但是我们仍然必须先计算它。这里有BRIEF,它提供了寻找具有更少内存的二进制描述符的快捷方式,更快的匹配以及更高的识别率。

2.目标

在这一章中,我们将看到BRIEF算法的基础知识

3.理论

我们知道SIFT使用128-dim矢量描述符。由于它使用浮点数,所以基本上需要512个字节。同样,SURF也至少需要256个字节(对于64-dim)。为数千个特征创建一个向量需要大量内存,这对于资源约束应用程序尤其是嵌入式系统来说是不可行的。内存越大,匹配时间越长。

但是实际匹配可能不需要所有这些维度。我们使用PCA、LDA等几种方法对其进行压缩。即使使用LSH(局部敏感散列)等散列方法,也可以将浮点数中的这些SIFT描述符转换为二进制字符串,这些二进制字符串用于匹配使用汉明距离的特征,这提供了更好的加速,因为查找汉明距离只是应用XOR和位计算,在具有SSE指令的现代CPU中非常快。但是在这里,我们首先需要找到描述符,然后我们只能应用散列,这并不能解决我们最初的内存问题。

此刻BRIEF进入画面。它提供了查找二进制字符串的快捷方式,无需查找描述符。它采用平滑图像补丁并以独特的方式选择一组(x,y)位置对(在论文中进行了解释)。然后在这些位置对上完成一些像素强度比较。例如,让第一个位置对是p和q,如果I(p)<I(q),那么它的结果是1,否则它是0.这适用于所有位置对以获得维位串。

这个可以是128,256或512。OpenCV支持所有这些,但默认情况下,它将是256(OpenCV以字节表示,因此这些值i昂是16,32和64)。所以一旦你得到这个,你可以使用汉明(Hamming)距离来匹配这些描述符。

重要的一点是BRIEF是一个特征描述符,它不提供任何方法来查找特征。因此,你不得不使用任何其它特征探测器,如SIFT、SURF等。本文建议使用CenSurE,它是一种快速检测器,而且对于CenSurE点,BRIEF比SURF点的效果稍好。

总之,BRIEF是一种更快的方法特征描述符计算和匹配。除非有大的面内旋转,否则它还提供高识别率。

4.OpenCV中的BRIEF

下面的代码显示了借助CenSurE探测器计算BRIEF描述符。(CenSurE探测器在OpenCV中称为STAR探测器)

# -*- coding: utf-8 -*-
'''
二进制独立鲁棒特征
BRIEF(Binary Robust Independent Elementary Features)
1.SIFT使用128-dim矢量描述符,由于它使用浮点数,所以基本上需要512个字节。
2.同样SURF也至少需要256字节(对于64-dim)。
问题就是:为数千个特征创建一个向量需要大量内存,这对于资源约束程序尤其是嵌入式系统来说是不行的,内存越大匹配时间越长。
但实际匹配可能不需要所有这些维度,可以使用PCA、LDA等几种降维算法进行压缩。
BRIEF实际上是一个特征描述符,不提供任何方法来查找特征。因此不得不使用其它特征检测器,如SIFT,SURF等。
还有CenSurE,它是一种快速检测器,而且比SIFT和SURF效果稍好。
In total,BRIEF是一种更快的方法特征描述符计算和匹配。除非有大的面内旋转,否则它还提供高识别率。
下面的Demo:借助CenSurE探测器计算BRIEF描述符。(CenSurE探测器在OpenCV中称为STAR探测器)
'''import cv2
import numpy as np
from matplotlib import pyplot as pltimg = cv2.imread('5.jpg', 0)
# 初始化STAR探测器,官网文档中是star = cv2.FeatureDetector_create()对于这个版本是错误的!
star = cv2.xfeatures2d.StarDetector_create()
print('help of FeatureDetector_create', help(star))
# 初始化BRIEF探测器,官网文档是brief = cv2.DescriptorExtractor_create("BRIEF"),对于这个版本也是错误的
brief = cv2.xfeatures2d.BriefDescriptorExtractor_create()
print('help of brief', help(brief))# 用star找到关键点
kp = star.detect(img, None)# 用BRIEF计算描述符
kp, des = brief.compute(img, kp)'''
下一步的工作是匹配:'''

(四)OpenCV中的特征检测之BRIEF(二进制强大的独立基本特征)相关推荐

  1. OpenCV中的二进制鲁棒独立基本特征——BRIEF

    OpenCV中的二进制鲁棒独立基本特征--BRIEF 1. 效果图 2. 源码 参考 这篇博客将介绍OpenCV中的二进制鲁棒独立基本特征.BRIEF是一种更快的特征描述符计算和匹配方法.它还提供了较 ...

  2. Python+OpenCV:图像二进制鲁棒独立基本特征(BRIEF, Binary Robust Independent Elementary Features)

    Python+OpenCV:图像二进制鲁棒独立基本特征(BRIEF, Binary Robust Independent Elementary Features) 理论 We know SIFT us ...

  3. OpenCV中的SURF(Speeded-Up Robust Features 加速鲁棒特征)

    OpenCV中的SURF(加速健壮功能) 1. 效果图 2. 原理 2.1 为什么SURF比SIFT快? 2.3 怎样获取SIFT与SURF? 3. 源码 参考 上一篇博客介绍了用于关键点检测和描述的 ...

  4. OpenCV中的快速特征检测——FAST(Features from Accelerated Segment Test)

    OpenCV中的快速特征检测--FAST(Features from Accelerated Segment Test) 1. 效果图 2. 源码 参考 OpenCV中的尺度不变特征变换(SIFT S ...

  5. opencv中匹配点对的坐标提取

    在opencv中,特征检测.描述.匹配都有集成的函数.vector<DMatch> bestMatches;用来存储得到的匹配点对.那么如何提取出其中的坐标呢? int index1, i ...

  6. 第四章:OpenCV中的图像处理

    第四章:OpenCV中的图像处理 本章节你将学习图像的改变色彩空间.提取对象.图像的几何变换.图像的阈值.平滑图像等OpenCV图像处理的基本内容. 更多内容请关注我的GitHub库:TonyStar ...

  7. opencv画虚线_(四十四)OpenCV中的机器学习-SVM

    时间为友,记录点滴. 本来还想在特征点检测的道路上再走一走,学习一下Harr级联或者HOG什么的,但总有些概念感觉绕不过去.择日不如撞日,撞日不如今日.我们先揭开机器学习中的一个小角,看看大热的机器学 ...

  8. python识别图像中绿色的部分_[OpenCV-Python] OpenCV 中的图像处理 部分 IV (四)

    部分 IV OpenCV 中的图像处理 21 OpenCV 中的轮廓 21.1 初识轮廓 目标 • 理解什么是轮廓 • 学习找轮廓,绘制轮廓等 • 函数:cv2.findContours(),cv2. ...

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

    目标 在本章中, 我们将看到BRIEF算法的基础知识 理论 我们知道SIFT使用128维矢量作为描述符.由于它使用浮点数,因此基本上需要512个字节.同样,SURF最少也需要256个字节(用于64像素 ...

最新文章

  1. numpy中的ogrid
  2. 【Data Mining】机器学习三剑客之Numpy常用用法总结
  3. java 继承多态的一些理解和不理解
  4. linux驱动模块命令大全insmod/rmmod/modprobe/depmod/lsmod
  5. 数据结构:二叉查找树(C语言实现)
  6. jq循环取数据 ,一直记不住,放到这
  7. 新发布AlbumOnNet 、dotnetCharting控件注册资料
  8. 浏览器判断及客户端跳转,绕开微信对某宝限制
  9. 虚拟机下liunx安装jdk
  10. 【Python机器学习】决策树ID3算法结果可视化附源代码 对UCI数据集Caesarian Section进行分类
  11. 《统计学》第八版贾俊平第十三章时间序列分析和预测知识点总结及课后习题答案
  12. 2116: 简简单单的数学题(快速幂||爆longlong处理)
  13. 轻重在平衡:平衡查找树的强大威力
  14. 谷歌关闭中国音乐搜索服务--有点可惜
  15. Java变量概述与使用
  16. spark 读取本地文件
  17. 当职场中领导问是否有男朋友要怎么应对
  18. mysql 1677_【MySQL】Error Code:1677处理过程小记
  19. mysql infile ignore_mysql导入数据load data infile用法
  20. Docker 启动Redis

热门文章

  1. 安全复工,GCC在行动丨神州信息篇
  2. 基于halcon—缺陷检测常用方法与示例总结
  3. 多边形内部两两连线最多分出的区域数公式
  4. 古月居ros课件_古月居ROS入门21讲学习笔记(基础概述1-5课)
  5. 6.嵌入式控制器EC学习 嵌入式控制器EC中的PS/2触摸板的通信过程
  6. gRPC学习与应用(1)
  7. 90 s games(90年代游戏)
  8. python控制程控电源_程控电源的用途
  9. 守护世界守护你 —— 我该如何进化?
  10. 手把手教你搭建java接口自动化测试框架(四):断言、生成测试报告