SIFT和SURF的替换算法——ORB (Oriented FAST and Rotated BRIEF 快速定向和旋转)
SIFT和SURF的替代算法——ORB (Oriented FAST and Rotated BRIEF 快速定向和旋转
- 1. 效果图
- 2. 源码
- 参考
1. 用于关键点检测和描述的SIFT(Scale-Invariant Feature Transform 尺度不变特征变换),但它相对较慢
2. 加速版的SIFT——SURF(Speeded-Up Robust Features 加速鲁棒特征)
3. SURF的优化版——BRIEF(Binary Robust Independent Elementary Features 二进制鲁棒独立基本特征)
这篇博客将继续介绍特征检测的算法:SIFT和SURF的替换算法,FAST和BRIEF的融合算法——ORB (Oriented FAST and Rotated BRIEF 快速定向和旋转) 。
ORB比SURF和SIFT快得多,ORB描述符比SURF工作得更好,是用于全景拼接等低功耗设备的理想选择。
在计算成本、匹配性能以及主要专利方面,ORB是SIFT和SURF的良好替代品。SIFT和SURF是专利算法,需要为它的使用付费。但ORB不需要。
ORB基本上是快速关键点检测器和简短描述符的融合,经过许多修改以提高性能。首先利用FAST算法寻找关键点,然后利用Harris角点测度在关键点中找到前N个点。它还使用金字塔生成多尺度特征。另一方面,FAST不能计算方向以及旋转不变性,作者均作出了优化和修改。
ORB在所有可能的二进制测试中进行贪婪搜索,以找到方差高、均值接近0.5且不相关的测试。结果称为rBRIEF。对于描述符匹配,对传统LSH进行了改进,使用多探针LSH。
1. 效果图
原始图如下:
ORB 只绘制关键点,忽略大小和方向,效果图如下:
ORB绘制关键点,大小和方向效果图如下:
2. 源码
# OpenCV中的ORB (Oriented FAST and Rotated BRIEF) 快速定向和旋转。
#
# ORB比SURF和SIFT快得多,ORB描述符比SURF工作得更好,是用于全景拼接等低功耗设备的理想选择。
# 在计算成本、匹配性能以及主要专利方面,ORB是SIFT和SURF的良好替代品。SIFT和SURF是专利算法,需要为它的使用付费。但ORB不需要。
#
# ORB基本上是快速关键点检测器和简短描述符的融合,经过许多修改以提高性能。首先利用FAST算法寻找关键点,然后利用Harris角点测度在关键点中找到前N个点。它还使用金字塔生成多尺度特征。另一方面,FAST不能计算方向以及旋转不变性,作者均作出了优化和修改。
# ORB在所有可能的二进制测试中进行贪婪搜索,以找到方差高、均值接近0.5且不相关的测试。结果称为rBRIEF。对于描述符匹配,对传统LSH进行了改进,使用多探针LSH。import cv2
from matplotlib import pyplot as pltorigin = cv2.imread('images/simple.jpg')
# origin = cv2.imread('images/simple.jpg', 0)
plt.imshow(cv2.cvtColor(origin, cv2.COLOR_BGR2RGB))
plt.xticks([])
plt.yticks([])
plt.title('origin')
plt.show()img = origin.copy()# 初始化ORB检测器
orb = cv2.ORB_create()# 使用ORB寻找关键点
# print(orb.detectAndCompute(img, None))
kp = orb.detect(img, None)# 计算ORB描述符
kp, des = orb.compute(img, kp)# 仅绘制关键点位置,而忽略圆的大小和方向
img2 = cv2.drawKeypoints(img, kp, img, color=(0, 255, 0), flags=0)
plt.imshow(cv2.cvtColor(img2, cv2.COLOR_BGR2RGB))
plt.xticks([])
plt.yticks([])
plt.title('orb res')
plt.show()# 绘制关键点位置、大小和方向
img2 = cv2.drawKeypoints(img, kp, img, color=(0, 255, 0), flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
plt.imshow(cv2.cvtColor(img2, cv2.COLOR_BGR2RGB))
plt.xticks([])
plt.yticks([])
plt.title('orb size orientation res')
plt.show()
参考
- https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_orb/py_orb.html#orb
SIFT和SURF的替换算法——ORB (Oriented FAST and Rotated BRIEF 快速定向和旋转)相关推荐
- ORB - (Oriented Fast and Rotated BRIEF)算法
ORB - (Oriented Fast and Rotated BRIEF) ORB detector 使用 FAST detector 和 BRIEF descriptor 基本思路.在介绍 OR ...
- ORB(Oriented FAST and Rotated BRIEF) 特征点
ORB(Oriented FAST and Rotated BRIEF) 特征点 在Fast角点与brief描述子的基础上,拓展得到ORB特征点. 具有实时性好,提取效果也不错的优势,被广泛应用于需要 ...
- ORB(Oriented FAST and Rotated BRIEF)
之前总是在ORB-SLAM的各个版本中听到ORB,但还不知道什么是ORB.借今天这个机会了解下ORB. ORB(Oriented FAST and Rotated BRIEF).首先要意识到O ...
- 数字图像处理学习笔记(三):ORB算法(尺度不变特征变换)Oriented FAST and Rotated BRIEF
数字图像处理学习笔记(三):ORB算法(尺度不变特征变换)Oriented FAST and Rotated BRIEF 一.概述 参考:特征点匹配+特征检测方法汇总 ORB的全称是Oriented ...
- Oriented FAST and Rotated BRIEF
Oriented FAST and Rotated BRIEF www.cnblogs.com/ronny 这篇文章我们将介绍一种新的具有局部不变性的特征 -- ORB特征,从它的名字中可以看出它是对 ...
- SLAM学习 | 论文研读《ORB: an efficient alternative to SIFT or SURF》
SLAM学习 | 论文研读<ORB: an efficient alternative to SIFT or SURF> 1 文章翻译 Abstract(摘要) 1 Introductio ...
- SLAM前端 ---------特征提取之ORB(ORB与SIFT与SURF)
ORB 论文翻译: 一种特征匹配替代方法:对比SIFT或SURF 1.ORB特征简介 ORB是Oriented FAST and Rotated BRIEF(oFAST and rBRIEF)的简称 ...
- [图像特征匹配]SIFT、SURF、ORB算法笔记以及代码实现
SIFT.SURF.ORB算法学习笔记 文章目录 SIFT.SURF.ORB算法学习笔记 一. SIFT (1)构建尺度空间 (2)使用DOG近似LOG定位极值点(关键点) (3)计算关键点方向 (4 ...
- Opencv实现Sift、Surf、ORB特征提取与匹配
在opencv3中,这三个算子都转移到一个名为xfeature2d的第三方库中,而在opencv2中这三个算子在nonfree库中. 关于在vs下配置opencv可参考我转载的另外一篇文章.注意版本号 ...
最新文章
- 【转载】变量的存储类别
- 【错误记录】Flutter 混合开发获取 BinaryMessenger 报错 ( FlutterActivityAndFragmentDelegate.getFlutterEngine() )
- Spring常问的面试
- go get golang.org/x 包下载失败问题
- 山东省高等学校2018年计算机教学研究年会通知
- Python计算从n个元素中任选i个的组合数C(n,i)
- STL—内存的配置与释放
- oracle 10g 高级复制,Oracle9i和Oracle10g之间构建高级复制环境的测试用例
- IE11的userAgent
- 商业银行资产托管业务读书笔记
- 新型养老机构的“智安”神器 | ​钛颐康智慧养老物联网平台
- 学习笔记(1):Matlab小白入门必备教程-数据的基本运算
- 使用git将远程仓库和本地仓库关联
- Centos 下使用speedtest-cli 进行测速
- MFC实现浮点/进制转换计算器
- 用三极管制作的三色LED循环灯,灯珠颜色及排列可随意组合
- GD32F4xx uIP协议栈移植记录
- 计算机切换管理员用户,切换为Administrator,完全掌握电脑
- Maya场景渲染(一)
- Android 混合开发之仿微信朋友圈
热门文章
- Python 函数的可变参数(*paramter与**paramter)的使用
- TabLayout 在宽屏幕上tab不能平均分配的问题解决
- 请给出一个Scala RDD的HelloWorld例子
- Hitcon 2016 Pwn赛题学习
- Excel的数据分析—排位与百分比
- jQuery-1.9.1源码分析系列(四) 缓存系统
- 适合所有尺寸打印马赛克
- 重大要素改变中的机会选择包括_财务人员专业胜任能力要素及框架
- python找工作学历_第一学历和最高学历,哪一个对找工作帮助更大?
- html显示数据库图片django,django将图片上传数据库后在前端显式的方法