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 快速定向和旋转)相关推荐

  1. ORB - (Oriented Fast and Rotated BRIEF)算法

    ORB - (Oriented Fast and Rotated BRIEF) ORB detector 使用 FAST detector 和 BRIEF descriptor 基本思路.在介绍 OR ...

  2. ORB(Oriented FAST and Rotated BRIEF) 特征点

    ORB(Oriented FAST and Rotated BRIEF) 特征点 在Fast角点与brief描述子的基础上,拓展得到ORB特征点. 具有实时性好,提取效果也不错的优势,被广泛应用于需要 ...

  3. ORB(Oriented FAST and Rotated BRIEF)

      之前总是在ORB-SLAM的各个版本中听到ORB,但还不知道什么是ORB.借今天这个机会了解下ORB.   ORB(Oriented FAST and Rotated BRIEF).首先要意识到O ...

  4. 数字图像处理学习笔记(三):ORB算法(尺度不变特征变换)Oriented FAST and Rotated BRIEF

    数字图像处理学习笔记(三):ORB算法(尺度不变特征变换)Oriented FAST and Rotated BRIEF 一.概述 参考:特征点匹配+特征检测方法汇总 ORB的全称是Oriented ...

  5. Oriented FAST and Rotated BRIEF

    Oriented FAST and Rotated BRIEF www.cnblogs.com/ronny 这篇文章我们将介绍一种新的具有局部不变性的特征 -- ORB特征,从它的名字中可以看出它是对 ...

  6. SLAM学习 | 论文研读《ORB: an efficient alternative to SIFT or SURF》

    SLAM学习 | 论文研读<ORB: an efficient alternative to SIFT or SURF> 1 文章翻译 Abstract(摘要) 1 Introductio ...

  7. SLAM前端 ---------特征提取之ORB(ORB与SIFT与SURF)

    ORB 论文翻译: 一种特征匹配替代方法:对比SIFT或SURF 1.ORB特征简介  ORB是Oriented FAST and Rotated BRIEF(oFAST and rBRIEF)的简称 ...

  8. [图像特征匹配]SIFT、SURF、ORB算法笔记以及代码实现

    SIFT.SURF.ORB算法学习笔记 文章目录 SIFT.SURF.ORB算法学习笔记 一. SIFT (1)构建尺度空间 (2)使用DOG近似LOG定位极值点(关键点) (3)计算关键点方向 (4 ...

  9. Opencv实现Sift、Surf、ORB特征提取与匹配

    在opencv3中,这三个算子都转移到一个名为xfeature2d的第三方库中,而在opencv2中这三个算子在nonfree库中. 关于在vs下配置opencv可参考我转载的另外一篇文章.注意版本号 ...

最新文章

  1. 【转载】变量的存储类别
  2. 【错误记录】Flutter 混合开发获取 BinaryMessenger 报错 ( FlutterActivityAndFragmentDelegate.getFlutterEngine() )
  3. Spring常问的面试
  4. go get golang.org/x 包下载失败问题
  5. 山东省高等学校2018年计算机教学研究年会通知
  6. Python计算从n个元素中任选i个的组合数C(n,i)
  7. STL—内存的配置与释放
  8. oracle 10g 高级复制,Oracle9i和Oracle10g之间构建高级复制环境的测试用例
  9. IE11的userAgent
  10. 商业银行资产托管业务读书笔记
  11. 新型养老机构的“智安”神器 | ​钛颐康智慧养老物联网平台
  12. 学习笔记(1):Matlab小白入门必备教程-数据的基本运算
  13. 使用git将远程仓库和本地仓库关联
  14. Centos 下使用speedtest-cli 进行测速
  15. MFC实现浮点/进制转换计算器
  16. 用三极管制作的三色LED循环灯,灯珠颜色及排列可随意组合
  17. GD32F4xx uIP协议栈移植记录
  18. 计算机切换管理员用户,切换为Administrator,完全掌握电脑
  19. Maya场景渲染(一)
  20. Android 混合开发之仿微信朋友圈

热门文章

  1. Python 函数的可变参数(*paramter与**paramter)的使用
  2. TabLayout 在宽屏幕上tab不能平均分配的问题解决
  3. 请给出一个Scala RDD的HelloWorld例子
  4. Hitcon 2016 Pwn赛题学习
  5. Excel的数据分析—排位与百分比
  6. jQuery-1.9.1源码分析系列(四) 缓存系统
  7. 适合所有尺寸打印马赛克
  8. 重大要素改变中的机会选择包括_财务人员专业胜任能力要素及框架
  9. python找工作学历_第一学历和最高学历,哪一个对找工作帮助更大?
  10. html显示数据库图片django,django将图片上传数据库后在前端显式的方法