【OpenCV-Python】教程:4-7 BRIEF( Binary Robust Independent Elementary Features)特征

news2024/11/13 23:30:38

OpenCV Python BRIEF ( Binary Robust Independent Elementary Features)

【目标】

  • 学习 BRIEF 算法理论

【理论】

我们知道SIFT使用128维向量作为描述符。因为它使用的是浮点数,所以需要512字节。类似地,SURF也需要最少256字节(对于64维)。为数千个特性创建这样的向量需要大量内存,这对于资源受限的应用程序是不可行的,特别是对于嵌入式系统,内存消耗大,匹配的时间长。

但这些维度在实际匹配时可能不是都需要。我们可以使用PCA、LDA等多种方法对数据进行压缩。甚至还使用其他方法,如使用LSH ( 局域敏感哈希) 来将这些浮点数中的 SIFT 描述符转换为二进制串。这些二进制字符串使用汉明距离来匹配特征。这提供了更好的加速,因为寻找汉明距离只是应用异或和位计数,这在具有SSE指令的现代cpu中非常快。但在这里,我们需要先找到描述符,然后才能应用哈希,这并不能解决我们最初的内存问题。

这时,BRIEF 浮现在眼前。它提供了直接查找二进制字符串的快捷方式,而无需查找描述符。它需要平滑的图像块,并以唯一的方式选择一组 n d ( x , y ) n_d (x,y) nd(x,y)位置对(在论文中解释)。然后对这些位置对进行像素强度比较。例如,设某一个位置对为 p p p q q q,如果 I ( p ) < I ( q ) I(p) < I(q) I(p)<I(q),则其结果为1,否则为0。这适用于所有的 n d n_d nd位置对,以获得一个 n d n_d nd维位串。

  • 点对选择

设我们在特征点的邻域块大小为 S × S S×S S×S 内选择 n d n_d nd个点对 ( p , q ) (p,q) (p,q),Calonder的实验中测试了5种采样方法:

1)在图像块内平均采样;
2) p p p q q q都符合 ( 0 , 1 25 S 2 ) (0, \frac{1}{25} S^2) (0,251S2)的高斯分布;
3) p p p符合 ( 0 , 1 25 S 2 ) (0, \frac{1}{25}S^2) (0,251S2)的高斯分布,而 q q q符合 ( 0 , 1 100 S 2 ) (0, \frac{1}{100}S^2) (0,1001S2)的高斯分布;
4)在空间量化极坐标下的离散位置随机采样
5)把 p p p固定为 ( 0 , 0 ) (0,0) (0,0) q q q在周围平均采样

在这里插入图片描述

这个 n d n_d nd可以是 128 128 128 256 256 256 512 512 512OpenCV支持所有这些,但默认情况下,它将是 256 256 256 (OpenCV以字节表示, 所以这些值将是16,32和64)。一旦你得到了这个,你就可以用汉明距离来匹配这些描述符。

重要的一点是 BRIEF 是一个特征描述符,它不提供任何查找特征的方法。所以你必须使用任何其他的特征检测器,如SIFT, SURF等。本文推荐使用CenSurE,这是一种快速检测器,BRIEF 对 CenSurE 点的效果甚至比 SURF 点要好。

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

  • 优点:

计算速度快

  • 缺点:

对噪声敏感
不具备旋转不变性
不具备尺度不变性

  • STAR(CenSurE) in OpenCV

STAR 是源自 CenSurE 的特征检测器。但与CenSurE不同的是,Star使用正方形、六边形和八边形等多边形来接近圆形,而Star模拟的是带有2个重叠正方形的圆形:1个垂直,1个旋转45度。这些多边形是双层的。它们可以被看作是带有粗边框的多边形。边界和封闭区域的权重是相反的。与其他尺度空间探测器相比,该探测器具有更好的计算特性,并且能够实时实现。与SIFT和SURF相比,它们在次采样像素处发现极值,从而在更大的尺度上降低精度,CenSurE在金字塔的所有尺度上使用全空间分辨率创建特征向量。

【代码】

在这里插入图片描述

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

img = cv2.imread("assets/blox.jpg")

# fast检测
fast_kp = cv2.FastFeatureDetector_create()

# brief 描述子
brief = cv2.xfeatures2d.BriefDescriptorExtractor.create()

# 特征点检测
kp = fast_kp.detect(img, None)
print(len(kp))

# 计算特征
kp, des = brief.compute(img, kp)
print(len(kp))

# 画关键点
img2 = cv2.drawKeypoints(img, kp, None, color=(255,0,0), flags=0)
print(brief.descriptorSize())

star = cv2.xfeatures2d.StarDetector_create()
star_kp = star.detect(img, None)
img3 = cv2.drawKeypoints(img, star_kp, None, color=(255, 0, 0), flags=0)
print(len(star_kp))


cv2.imshow("fastkpafter", img2)
cv2.imshow("starkp", img3)
cv2.waitKey(0)
cv2.destroyAllWindows()

【接口】

  • BriefDescriptorExtractor_create
cv.xfeatures2d.BriefDescriptorExtractor_create(	[, bytes[, use_orientation]]	) ->	retval
  • bytes: 描述符的长度(字节),16, 32, 64
  • use_orientation: 是否使用方向,默认不使用

其他见

【OpenCV-Python】教程:4-4 SIFT (Scale-Invariant Feature Transform) 介绍_黄金旺铺的博客-CSDN博客

【OpenCV-Python】教程:4-5 SURF (Speeded-Up Robust Features) 介绍_黄金旺铺的博客-CSDN博客

【OpenCV-Python】教程:4-6 FAST (Features from Accelerated Segment Test)算法角点检测_黄金旺铺的博客-CSDN博客

【参考】

  1. OpenCV官方文档
  2. Michael Calonder, Vincent Lepetit, Christoph Strecha, and Pascal Fua, “BRIEF: Binary Robust Independent Elementary Features”, 11th European Conference on Computer Vision (ECCV), Heraklion, Crete. LNCS Springer, September 2010.
  3. LSH (Locality Sensitive Hashing) at wikipedia.
  4. BriefDescriptorExtractor Class Reference

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/79616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

堪称零瑕疵!仅用了365页直接封神,我要吹爆这份RocketMQ笔记

RocketMQ 是阿里巴巴在2012年开源的分布式消息中间件&#xff0c;作为经历过多次阿里巴巴双十一这种“超级工程”的洗礼并有稳定出色表现的国产中间件&#xff0c;以其高性能、低延时和高可靠等特性近年来已经也被越来越多的国内企业使用。 谁使用ApacheRocketMQ&#xff1f; …

【不知道发啥】Win7网页版使用方法

文章目录网站使用方法测试总结&#x1f308;博客主页&#xff1a;Minecraft__Him &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️私信&#x1f4dd;评论 网站 https://win7simu.visnalize.com/ 使用方法 如果是蓝屏那就等一下&#xff0c; 等它跳到这个界面 …

硕士毕业进入阿里三年半,离职申请N+3,到手20多万,跳槽到下家涨薪50%,感谢阿里!...

最近这段时间的负能量帖子太多了&#xff0c;今天说点正能量的事。一位前阿里员工说&#xff1a;硕士3.5年&#xff0c;校招进入阿里供应链后端&#xff0c;月初离职&#xff0c;申请拿了n3&#xff0c;一共给了20多万&#xff0c;跳槽的package涨了50%&#xff0c;感谢阿里&am…

当我和ChatGPT聊Everything as Code

以下是我和ChatGPT的聊天原文。一开始还有点惊喜&#xff0c;震惊。越到后面&#xff0c;越感到失望。网络上大肆宣传ChatGPT要代替人类的文章&#xff0c;我怕是专门炒流量赚钱的吧&#xff1f;我个人觉得&#xff0c;它离代替人类&#xff0c;还远着呢。Everything as Code 的…

Stimulsoft Reports.NET 2023.1.0 Crack

Stimulsoft Reports.NET 是一种为在 Windows 窗体应用程序中集成和工作而创建的报告工具。使用我们的报告工具&#xff0c;您可以创建、编辑、查看、导出和打印任何复杂程度的报告。该产品包括一个功能强大、直观易懂的报表设计器和一个交互式查看器。 最大功能 Stimulsoft Rep…

光储直柔———助力实现零碳电力的新型建筑配电系统

光储直柔———助力实现零碳电力的新型建筑配电系统&#xff08;2021&#xff09; &#xff3b;引用本文&#xff3d;江亿&#xff0e;光储直柔———助力实现零碳电力的新型建筑配电系统[J]&#xff0e;暖通空调&#xff0c;2021, 21(10): 112. 光储直柔PSDF&#xff08;phot…

记一次CTF测验(web)

目录 01.php 签到题目 题目描述&#xff1a; 解题&#xff1a; 02.php 11&#xff1f; 题目描述&#xff1a; 解题&#xff1a; 03.php get拿来吧你 题目描述&#xff1a; 解题&#xff1a; 04.php 你从哪里来我的朋友 题目描述&#xff1a; 解题&#xff1a; 05.p…

功能测试(九)—— adb命令、Charles手机抓包

目录 目标 一、APP命令格式 1.1 查看已连接的设备列表 1.2 断开连接设备 1.3 无线连接设备 1.4 开启adb服务 1.5 关闭adb服务 1.6 安装软件包 1.7 卸载软件包 1.8 获取包名 1.9 获取当前窗口(注意大小写区分) 1.10 清除缓存 1.11 启动/停止应用 1.12 获取手机日志…

Verilog语法之条件编译指令`ifdef, `ifndef,`else, `elsif, `endif

0、前言 一般情况下&#xff0c;C语言中的每一行代码都要参加编译。但有时候出于对程序代码优化的考虑&#xff0c;希望只对其中一部分内容进行编译&#xff0c;此时就需要在程序中加上条件&#xff0c;让编译器只对满足条件的代码进行编译&#xff0c;将不满足条件的代码舍弃&…

Canal-1-安装-代码

1总体简介 1 mysql需要开启binlog binlog分类 1.1&#xff09;statement: 语句级别&#xff0c;binlog 会记录每一次执行写操作的语句。相对于row模式节省空间&#xff0c;但是会产生数据不一致性&#xff0c;例如&#xff1a;update aa set create_timenew(); 如果用binlo…

Java学习笔记7.2.2 事件处理 - Swing常用事件

文章目录零、本讲学习目标一、Swing常用事件二、窗体事件&#xff08;一&#xff09;窗体事件概述&#xff08;二&#xff09;窗体事件类API概述&#xff08;三&#xff09;窗体事件使用方法&#xff08;四&#xff09;窗体事件案例演示三、鼠标事件&#xff08;一&#xff09;…

【进阶】C语言第一课:深度剖析数据在内存中的存储

目录 前言&#xff1a; 一、数据类型详细介绍&#xff1a; 1.相关知识回顾&#xff1a; 2.类型的基本归类&#xff1a; 整型家族&#xff1a; 浮点型家族&#xff1a; 构造类型&#xff1a; 指针类型&#xff1a; 空类型&#xff1a; 二、整形在内存中的存储&#xff1a; …

PS 更换证件照背景色

哈喽&#xff0c;各位小伙伴&#xff01;今天我们来学习一下如何更换证件照背景色&#xff1f; 常见证件照 常见的证件照一般有白色、蓝色和红色三种样式&#xff0c;我们拍证件照一般只拍一种&#xff0c;为了节省支出&#xff0c;其他两种颜色就需要我们自己调色处理了 蓝…

计算机毕业设计ssm+vue基本微信小程序的客户资源管理系统

项目介绍 基于Vue技术的客户资源管理系统是对客户的一些资料进行有效的管理, 它将企业的经营管理以客户为中心,通过系统管理员就可以轻松有效的对客户的信息进行操作管理。从而实现客户资料的一致性、准确性,查询的及时性等等。 该系统提供了客户管理、系统管理、合同管理、…

Java学习笔记7.1.2 初探Swing世界 - 布局管理器

文章目录零、本讲学习目标一、布局管理器二、边框布局管理器&#xff08;BorderLayout&#xff09;&#xff08;一&#xff09;边框布局管理器概述&#xff08;二&#xff09;边框布局管理器API文档&#xff08;三&#xff09;边框布局管理器使用方法&#xff08;四&#xff09…

Java项目:SSM在线物流综合管理平台系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台&#xff0c;后台为管理员登录&#xff1b; 管理员角色包含以下功能 管理员登录,管理员管理,合作公司管理,车型信息,货物基本…

MongoDB 数据库安装详细教程

1. MongoDB 下载流程 &#xff08;急用&#xff09;直接抵达&#xff1a;Download MongoDB Community Server | MongoDB 打开MongoDB官网&#xff1a;MongoDB (点击进入) 下载完成之后双击打开会出现如下界面&#xff1a; 2. MongoDB 环境配置 通过刚刚的安装知道了MongoDB Se…

人工智能--决策树原理与代码实现、特征提取、回归决策树

决策树&#xff1a;本质就是一个拥有多个判断节点的树 1&#xff0c;熵 系统越有序&#xff0c;集中&#xff0c;熵值越低&#xff1b;系统越混乱&#xff0c;越分散&#xff0c;熵值越高 在这里的计算中&#xff0c;log2记为1&#xff0c;通常以2为底 2&#xff0c;决策树…

Matlab|基于粒子群优化算法及鲁棒MPPT控制器提高光伏并网的效率

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑…

SpringBoot中使用Easyexcel实现Excel导入导出功能(三)

导出的数据包含有图片 导出excel表格的数据包含有图片&#xff0c;这种场景比较少。通Easyexcel实现这样的需求&#xff0c;我认为最简便的方法就是使用前面提到的自定义转换器&#xff08;com.alibaba.excel.converters.Converter&#xff09;&#xff1b;假如有这样一个场景&…