【OpenCV-Python】教程:4-8 ORB (Oriented FAST and Rotated BRIEF)

news2024/11/24 11:07:29

OpenCV Python ORB (Oriented FAST and Rotated BRIEF)

【目标】

  • 理解 ORB 的基础理论

【理论】

ORB 来自于 OpenCV 实验室;在ICCV2011的论文 “ORB: An efficient alternative to SIFT or SURF” 提出,是 SIFT 和 SURF 的替代,没有专利问题;

ORB基本上是FAST关键点检测器和 BRIEF描述符的融合,并进行了许多改进以增强性能。该算法首先利用FAST算法找到关键点,然后利用Harris角点测度找到关键点中的前N个点。它还使用金字塔来生成多尺度的特征。但有一个问题是,FAST并不计算方向。那么旋转不变性呢?作者提出了以下修改。

计算局部角点为中心的Patch的亮度加权重心,方向就是角点到重心的连线。为了提高旋转不变性,用 x x x y y y计算力矩,它们应位于半径为 r r r的圆形区域内,其中 r r r为patch的大小。

对于描述符,ORB 使用 BRIEF描述符。但是我们已经看到 BRIEF 在旋转时表现不佳。所以 ORB 所做的就是根据关键点的方向来“控制” BRIEF。对于位置 ( x i , y i ) (x_i, y_i) (xi,yi)的n个二进制测试的任何特征集,定义一个 2 × n 2×n 2×n矩阵 S S S,其中包含这些像素的坐标。然后使用patch的方向 θ θ θ,找到它的旋转矩阵,并旋转 S S S以获得转向(旋转)版本 S θ Sθ Sθ

ORB将角度离散为 12 份,每份角度为 30度,并构造一个预先计算的BRIEF模式查找表。只要关键点方向 θ θ θ在视图中是一致的,正确的点 S θ Sθ Sθ将被用来计算它的描述符。

BRIEF有一个重要的特性,即每个位特征的方差较大,均值接近0.5。但一旦它沿着关键点方向定向,它就失去了这种性质,变得更加分散。高方差使特征更具鉴别性,因为它对输入的反应不同。另一个理想的特性是让测试不相关,因为这样每个测试都会对结果有贡献。为了解决所有这些问题,ORB在所有可能的二进制测试中运行贪婪搜索,以找到方差高且均值接近0.5且不相关的二进制测试。结果称为 rBRIEF

对于描述符匹配,采用了改进传统LSH的多探针LSH。文章说ORB比SURF和SIFT快得多,ORB描述符比SURF好得多。ORB是低功耗全景拼接等设备的良好选择。

【代码】

在这里插入图片描述

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

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

# 初始化ORB检测器
orb = cv2.ORB_create()

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

# 特征描述
kp, des = orb.compute(img, kp)

# 绘制特征点
img2 = cv2.drawKeypoints(img, kp, None, color=(0, 255, 0), flags=0)

cv2.imshow("img", img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

【接口】

cv2.ORB_create(	[, nfeatures[, scaleFactor[, nlevels[, edgeThreshold[, firstLevel[, WTA_K[, scoreType[, patchSize[, fastThreshold]]]]]]]]]	) ->	retval

ORB 创建

  • nfeatures: 保留的最多的特征数
  • scaleFactor: 金字塔抽取比,默认为 2,经典的金字塔
  • nlevels: 金字塔层级数,最小层级大小为 input_image_linear_size/pow(scaleFactor, nlevels - firstLevel)
  • edgeThreshold: 特征取否的阈值,
  • firstLevel: 送到金字塔的第一层,前一层就上采样
  • WTA_K: 产生BRIEF描述符每个元素点的数目,默认值为2;也可能是3和4,3则意味着取3个随机点(这些点是随机的,它们是由预定义的种子生成的,因此BRIEF描述符的每个元素都是从像素矩形中确定性计算出来的。)找到亮度最大的点和获胜者的输出索引(0,1或2),这样输出占用2位,因此它将需要一个特殊的汉明距离变体,记为 NORM_HAMMING2(每Bin 2位) ,当WTA_K = 4时,我们取4个随机点来计算每个bin。
  • scoreType: HARRIS_SCORE 默认,可以用于对特征进行排序;FAST_SCORE 可以计算更快一点,但是没那么稳定。
  • patchSize: 方向 BRIEF 描述符的 Patch 尺寸。
  • fastThreshold: fast阈值;
	cv2.ORB.getDefaultName(		) ->	retval
	cv2.ORB.getEdgeThreshold(		) ->	retval
	cv2.ORB.getFastThreshold(		) ->	retval
	cv2.ORB.getFirstLevel(		) ->	retval
	cv2.ORB.getMaxFeatures(		) ->	retval
	cv2.ORB.getNLevels(		) ->	retval
	cv2.ORB.getPatchSize(		) ->	retval
	cv2.ORB.getScaleFactor(		) ->	retval
	cv2.ORB.getScoreType(		) ->	retval
	cv2.ORB.getWTA_K(		) ->	retval
	cv2.ORB.setEdgeThreshold(	edgeThreshold	) ->	None
	cv2.ORB.setFastThreshold(	fastThreshold	) ->	None
	cv2.ORB.setFirstLevel(	firstLevel	) ->	None
	cv2.ORB.setMaxFeatures(	maxFeatures	) ->	None
	cv2.ORB.setNLevels(	nlevels	) ->	None
	cv2.ORB.setPatchSize(	patchSize	) ->	None
	cv2.ORB.setScaleFactor(	scaleFactor	) ->	None
	cv2.ORB.setScoreType(	scoreType	) ->	None
	cv2.ORB.setWTA_K(	wta_k	) ->	None

【参考】

  1. OpenCV: ORB (Oriented FAST and Rotated BRIEF)
  2. Ethan Rublee, Vincent Rabaud, Kurt Konolige, Gary R. Bradski: ORB: An efficient alternative to SIFT or SURF. ICCV 2011: 2564-2571.
  3. OpenCV: cv::ORB Class Reference

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

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

相关文章

Java解析XML-JDK

JAXB 概述 JAXB(Java Architecture for XML Binding)是J2SE和J2EE平台的一部分,让开发者能够快速完成Java类和XML的互相映射。 JAXB 允许Java人员将Java类映射为XML表示方式。其实,JAXB是一个业界标准,是一项可以根据X…

企业景气指数、企业家信心指数-季度数据(2005-2022年)

(2005-2022年) 企业景气指数(企业综合生产经营景气指数)是根据企业负责人对本企业综合生产经营情况的判断与预期而编制的指数,用以综合反映企业的生产经营状况。 企业家信心指数综合反映企业家对宏观经济的看法和信心…

【Make YOLO Great Again】最终版本YOLOv1-v7全系列大解析(全网最详细汇总篇)

Rocky Ding公众号:WeThinkIn写在前面 【Make YOLO Great Again】栏目专注于从更实战,更深刻的角度解析YOLOv1-v7这个CV领域举足轻重的算法系列,并给出其在业务,竞赛以及研究维度的延伸思考。欢迎大家一起交流学习💪&am…

node+vue基于微信小程序的乐团团购系统的设计与实现

随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&#xf…

Stm32旧版库函数4——nrf24l01 32位数据发送接受

stm32 32位 发射(硬件SPI 引脚重映射): #include "stm32f10x_lib.h" #include "sys_config.h" #include "usart.h" #include "nrf.h" #include "delay.h" extern u8 TX_ADDRESS[TX_ADR_…

在Windows OS中安装与配置Scala的IDE环境

在Windows OS中安装与配置Scala的IDE环境一、Scala的安装过程二、Scala与IDE的集成一、Scala的安装过程 (1)下载与安装Scala软件 以下有个帖子,其详细记录了Window系统在安装Scala的步骤,可供读者参考, Window系统详…

jmeter的安装和简单使用

jmeter的安装和简单使用 Jmeter是一款优秀的开源测试工具&#xff0c;就算是开发也要了解一下。 下载 window下载zip包即可 下载地址&#xff1a; https://jmeter.apache.org/download_jmeter.cgi <img src“https://cdn.jsdelivr.net/gh/cloudinwinter/myimagemaster/…

COVID应对小tips

不信谣不传谣&#xff0c;只是自己的一点记录&#xff0c;有引用到各位大佬的内容&#xff0c;侵删&#xff0c;感谢感谢&#xff0c;对自己可以理中客&#xff0c;对别人还是尽可能主观上的友好&#xff0c;不要慷他人之慨。 准备 喉咙刺痛方面&#xff1a;柠檬&#xff08;…

【简化版蒙板扣图】带你轻松走进OPENCV蒙板扣图的世界

蒙板扣图的学习目标&#xff1a; 图像素材&#xff1a; 本操作适用图片&#xff1a; -前景清晰&#xff0c;背景模糊的原始图片 自定义库&#xff1a; 把OPENCV中的干扰理解的部分&#xff0c;制作成独立的库文件&#xff0c;这样学友们就可以轻松的理解蒙板扣图的真正含义…

C语言:分支与循环语句

文章目录一.什么是语句二.控制语句三(一).分支语句if-else3.1if3.2if-else3.3if-else嵌套3.4悬空else3.5if语句判断的流程3.6if语句可能会犯的小错误三(二).分支语句switch四.循环语句4.1while语句4.2do while语句4.3for语句4.4一道简单又不简单的小题目4.5循环总结4.6循环上的…

Opencv中关于特征点匹配定位的问题(一)DMatch解析

Opencv中关于特征点匹配定位的问题回顾定位回顾 在我们检测到特征点之后&#xff0c;通常进行特征点的匹配。 首先我们先回顾一下使用Brute-Force匹配器来进行匹配。 import cv2 import numpy as np import matplotlib.pyplot as plt#读取图片 imgcv2.imread(./newmm.png) te…

宝藏软件Obsidian知识体系搭建,免费的多端云同步

宝藏软件Obsidian知识体系搭建&#xff0c;免费的多端云同步。 为什么推荐Obsidian 人很奇怪,在关注短期目标的时候,会有成功失败之说,但是如果关注体系呢&#xff1f;就不那么会在乎短期收益了. 为什么呢&#xff1f;因为体系可能会创造强大的滚雪球效应. 使用笔记软件颇多…

如何针对时间片论法进行优化

前言 通过该篇学习了嵌入式的任务调度&#xff08;即时间片论法&#xff09;后&#xff0c;了解到通过以1ms为调度时间单位轮询判断是否需要执行函数任务&#xff0c;那么下面介绍如何基于时间片论法的任务调度模式充分利用MCU的资源&#xff0c;姑且先称这种方式为时间片差分…

一致性hash算法

目录 1.业务场景 2.传统hash算法 2.一致性hash算法 2.1.算法过程 2.1.一直性hash算法的优点 2.2.一致性hash算法的缺点 2.3.hash倾斜的解决办法 1.业务场景 假设有30000张图片需要存放到编号为1、2、3的3台服务器上。 2.传统hash算法 假设有30000张图片需要存到3台服务器…

【JavaWeb开发-Servlet】拾起海中的漂流瓶增强版

目录 原版&#xff1a; 1、前端样式 2、错误提示 3、实现id序列增长 完整项目代码&#xff1a; 原版&#xff1a; 【JavaWeb开发-Servlet】拾起海中的漂流瓶_代码骑士的博客-CSDN博客需求&#xff1a;点击网页按钮随机显示一句话&#xff1a;1、内容涵盖&#xff1a;老人…

PySpark大数据计算教程

PySpark大数据计算教程 了解如何将 Spark 与 Python 结合使用&#xff0c;包括 Spark Streaming、机器学习、Spark 2.0 DataFrames 等&#xff01; 课程英文名&#xff1a;Spark and Python for Big Data with PySpark 此视频教程共4.0小时&#xff0c;中英双语字幕&#xf…

多模态(红外,可见光)目标检测

【github】https://github.com/DocF/multispectral-object-detection 一.环境 1.1 环境 基本依赖和yolov5基本相同&#xff0c;当然也可以配置在虚拟环境中 git clone https://github.com/DocF/multispectral-object-detection cd multispectral-object-detection pip ins…

基于燃压缩空气储能系统的零碳微能源互联网优化调度(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f468;‍&#x1f4bb;做科研&#xff0c;涉及到一个深在的思想系统&#xff0c;需要科研者逻辑缜密&#xff0c;…

由美国火星照片细节,分析造假的疑点

穿帮都是细节。 除了阿波罗登月&#xff0c;你觉得美国还在哪些航天项目中有造假嫌疑&#xff1f; - 知乎 西红柿加醋 能走着游泳就好了 ​ 关注 无可靠信息来源 423 人赞同了该回答 除了登月&#xff0c;比较又争议的当然就数登火了&#xff0c;比如出自Nasa官方网站上的…

CSS布局-定位,相对,绝对,子绝父相,固定定位,层级关系。

CSS布局-定位&#xff0c;相对&#xff0c;绝对&#xff0c;子绝父相。 目录CSS布局-定位&#xff0c;相对&#xff0c;绝对&#xff0c;子绝父相。1、定位1.1 网页常见布局方式1.2 定位的常见应用场景2.1 定位初体验2.2 使用定位的步骤3.1 静态定位4.1 相对定位5.1 绝对定位5.…