内容来自OpenCV-Python Tutorials 自己翻译整理

目标:

了解BRIEF算法的基本原理

原理:

在SIFT算法使用128维的描述符,因为使用float类型描述,所以需要512字节的内存。
在SURF算法中,以64维描述符来计算,至少需要256字节的内存。
在创建一个含有数千个特征的向量会消耗大量的内存,这种情况在资源的有限的设备上不实用,尤其是嵌入式设备。 此外,计算时间也非常漫长。

但是在实际的匹配过程中,不是所有的维数都需要。我们可以使用一些方法来对维数进行压缩,例如PCA(主成分分析)算法,和LDA(线性判别式分析)算法等等。甚至使用LSH(局部敏感哈希)算法,把SIFT的描述符从浮点数类型转化成二进制字符串,然后对这些字符串使用汉明距离来进行匹配。由于韩明距离的计算方法只需要使用亦或位运算和位计数,在带有SSE指令的现代的CPU上计算速度很快。
不过,在此我们需要先找到描述符,然后才能使用哈希,进而计算汉明距离。不过这样没解决内存过大的问题。

BRIEF算法由此产生,该算法提供了一个很简介的手段在不寻找描述符的情况下,去寻找二进制字符串。

大致过程如下

首先找到特征点,在特征点附近划定一个正方形区域,使用高斯平滑去掉噪声。接下来,使用一种算法,在正方形区域当中选定一对点 (x,y) ( x , y ) (x,y),例如x点的像素值是p,y点是q,如果p小于q,那么结果产生结果1,否则产生结果0,如下下来寻找n对点,就会得到n维的二进制字符串。

维度可以是128,256,512,默认值256。

在得到二进制字符串后,就可以使用汉明距离来匹配这些描述符了。

这里注意,BRIEF算法不提供特征点检测功能,所以需要使用其他的特征检测器来找到特征点,例如SIFT算法或者SURF算法等等。本文腿甲你使用CenSurE检测算法来寻找特征点,最重要的是CenSurE检测算法配合BRIEF算法效果要比使用SURF算法效果更好。

SURF算法在没有选择的图像当中,匹配效果非常好。而且速度快,使用资源低,在有选择的图像当中,效果很差。

关于BRIEF的原版论文和CenSurE检测器的论文
https://download.csdn.net/download/tengfei461807914/10294235

OpenCV中的BRIEF算法

在OpenCV中CenSurE检测器叫做STAR

import numpy as np
import cv2
from matplotlib import pyplot as pltimg = cv2.imread('1.jpg',0)# 初始化STAR检测器
star = cv2.xfeatures2d.StarDetector_create()
# 初始化BRIEF特征提取器
brief = cv2.xfeatures2d.BriefDescriptorExtractor_create()
# 使用STAR寻找特征点
kp = star.detect(img,None)
# 计算特征描述符
kp, des = brief.compute(img, kp)img = cv2.drawKeypoints(img,kp,img,color=(255,0,0))cv2.imshow('p',img)cv2.waitKey(0)
print( brief.descriptorSize() )
print( des.shape )

STAR检测器文档
https://docs.opencv.org/master/dd/d39/classcv_1_1xfeatures2d_1_1StarDetector.html
BRIEF的文档
https://docs.opencv.org/master/d1/d93/classcv_1_1xfeatures2d_1_1BriefDescriptorExtractor.html

python opencv入门 BRIEF算法(36)相关推荐

  1. python opencv入门 SURF算法(34)

    内容来自OpenCV-Python Tutorials 自己翻译整理 目标: SURF算法基础 opencv总SURF算法的使用 原理: 上节课使用了SIFT算法,当时这种算法效率不高,需要更快速的算 ...

  2. python——opencv入门(一)

    1. OpenCV的结构 和Python一样,当前的OpenCV也有两个大版本,OpenCV2和OpenCV3.相比OpenCV2,OpenCV3提供了更强的功能和更多方便的特性.不过考虑到和深度学习 ...

  3. python语言入门w-Python算法基础

    有穷性:算法的有穷性是指算法必须能在执行有限个步骤之后终止: 确切性:算法的每一步骤必须有确切的定义: 输入项:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条 ...

  4. python opencv入门 Meanshift 和 Camshift 算法(40)

    内容来自OpenCV-Python Tutorials 自己翻译整理 目标: 在本章,学习Meanshift算法和Camshift算法来寻找和追踪视频中的目标物体. Meanshift算法: mean ...

  5. python+openCV使用SIFT算法实现印章的总相似度检测

    python实现,使用SIFT算法和文字相似度检测算法,并使用了pyqt5做的印章相似度检测工具,还有很大优化空间,对于我这水平费了不少力气,记录一下. 首先整体流程是预建了一个印章库,包含若干张图片 ...

  6. python opencv入门 光流法(41)

    内容来自OpenCV-Python Tutorials 自己翻译整理 目标: 了解光流的概念,使用lucas-kanade估算方法 使用cv2.calcOpticalFlowPyrLK() 方法来追踪 ...

  7. python OpenCV 入门教程等你来取

    虽然python 很强大,而且也有自己的图像处理库PIL,但是相对于OpenCV 来讲,OpenCV更加强大, 可以做更多更复杂的应用,比如人脸识别等.跟很多开源软件一样OpenCV 也提供了完善的p ...

  8. python opencv 利用 GrabCut 算法(opencv已经实现)从图像中分离出前景

    # 利用GrabCut算法从图像中分离出前景 import numpy as np import cv2 as cv from matplotlib import pyplot as pltimg = ...

  9. python opencv 利用分水岭算法实现对物体的分割 图文详细注释版 以分割官网提供的硬币为例

    分水岭算法可以实现自动分割多个物体,opencv中 cv.watershed() 函数实现了分水岭算法 话不多说,上代码 # 利用分水岭算法分离多个相同硬币 import numpy as np im ...

最新文章

  1. c语言单链表冒泡排序的步骤,急!!求c语言单链表冒泡排序的详细流程图
  2. ftp工具之本地操作命令
  3. delete和delete[]的区别
  4. python模块补充
  5. DefaultIfEmpty
  6. 本地、服务器文件互传命令
  7. pytorch之参数的初始化
  8. 构建之法 阅读笔记04
  9. iView admin网站后台管理系统模板v2.5.0
  10. java 邮件批量发送邮件_利用Java实现电子邮件的批量发送[转载]
  11. 十进制转二进制,短除法与位运算两种方法
  12. 支付分账如何助力B2B大宗商品交易?
  13. 学计算机专业1050显卡够不够,gtx1050显卡性能怎么样
  14. 一文了解生物识别技术
  15. 敏捷结果30天之第十一天:高效能、慢生活
  16. 3dmax软件导入图片为背景的方法与步骤
  17. 金山是微软VBA的正式授权用户
  18. 明星之间的尴尬同框,最萌身高差,最后一个笑喷
  19. PostgreSQL 使用RETURNING返回值
  20. python图片批量处理(水印、重命名)

热门文章

  1. C语言带符号整形的转换
  2. 海伦司和奈雪,必有一战
  3. 2022-中国式管理-时代光华-曾仕强
  4. 如何在IDEA中连接mysql数据库以及导入mysql jar包
  5. FPGA加速技术在FPGA开发板设计中的应用
  6. 星际官方小说:《刀锋女王》
  7. [渝粤教育] 西南科技大学 农产品市场与管理 在线考试复习资料
  8. IE10不显示swfupload上传附件按钮问题
  9. Python对商品属性进行二次分类并输出多层嵌套字典
  10. MallBook签约与非网,用SaaS思维构建平台交易数字化管理