当前位置: 首页 > news >正文

【跟我一起读《视觉惯性SLAM理论与源码解析》】第八章 ORB-SLAM2中的特征匹配

特征匹配在ORB-SLAM2中是很重要的内容,函数有多次重载,一般而言分为以下

  • 单目初始化下的特征匹配
  • 通过词袋进行特征匹配
  • 通过地图点投影进行特征匹配
  • 通过Sim(3)变化进行特征匹配
  1. 在单目初始化下的特征匹配是参考帧和当前帧之间的特征点匹配,一般先构建旋转直方图,在半径窗口搜索当前帧F2中所有的候选匹配特征点,遍历窗口中所有潜在的匹配候选点,找到最优和次优的匹配候选点,对最优和次优进行检查,满足一定的阈值约束条件,删除重复匹配,计算匹配点旋转角度差所在的直方图,根据直方图信息统计剔除错误匹配的特征点对,最后将筛选后的匹配的特征点保存好。
  2. 对于方向一致性检验,由于特征点匹配对主方向上整体会有一个固定一致的变化,通常直方图前三个最大的格子就是正常的匹配点对(旋转直方图干的事)。一般来说不再前三个格子中的都是外点,要剔除,在的是内点保留。
  3. 如何快速搜索候选匹配点的?假设第一帧提取到的特征点坐标是(x1,y1),那么在第二帧中相同坐标以(x1,y1)为圆心画一个半径为r的圆(源代码是正方形,这里换成圆形更合适),分网格,计算上下左右边界的行列id,判断是否合法,不合法直接踢掉;遍历圆所有网格,寻找满足条件的候选特征点,若此网格里没有,遍历下一个,读取特征点,保证其所在金字塔层数符合要求,通过计算候选特征点距离圆心的距离,判断是否在圆内。
  4. 用词袋进行特征匹配,一般都会把图像中提取的特征点转化为词袋向量以及特征向量(确定描述子的单词ID,权重,单词所属的节点),词袋向量保存的是单词在所有叶子节点中距离叶子节点最近的ID以及权重,对于同一个单词ID,权重是会不断更新的;特征向量中保存的是深度level up的节点ID以及特征点在原图像中的索引,在进行特征匹配的时候搜索范围是和它具有同样NodeID的所有子节点,level up越小,速度越快,但不一定能查到。在实际例子关键帧与当前帧的匹配中,首先分别取出同一节点的ORB特征点,(外for)遍历关键帧属于该节点的特征点,取出描述子,(内for)遍历当前帧属于该节点的特征点,取出描述子,计算描述子之间距离,更新最佳与次佳,根据阈值剔除错误匹配,统计角度变化直方图,根据直方图剔除错误匹配的特征点对。
  5. 通过地图点投影的特征匹配需要做一个PnP的转化也就是3D-2D的匹配,首先还是旋转直方图,计算当前帧和上一帧的平移向量,对于前一帧的地图点,通过相机投影模型投影到当前帧中的像素坐标,根据相机的运动方向判断搜索的尺度范围,遍历候选的匹配点,选择描述子距离最小的特征点,作为最佳匹配点,构建直方图,进行旋转一致性检验,剔除不一致的匹配
  6. 基于sim3的不再详细描述了,需要注意要在保证没有匹配的特征点对进行1->2,2->1的sim3变换,只有当你选我我也选你的时候才能认作是成功的匹配点对。

这里还是需要反复琢磨每一个细节,这里只做一个基本的概括

http://www.lryc.cn/news/19048.html

相关文章:

  • 【Leedcode】数据结构中链表必备的面试题(第四期)
  • 【2023】助力Android金三银四面试
  • Leetcode.1801 积压订单中的订单总数
  • 红帽Linux技术-cp命令
  • 代码随想录算法训练营day41 | 动态规划 01背包问题基础 01背包问题之滚动数组
  • MyBatis学习笔记(三) —— MyBatis核心配置文件详解
  • 使用GDAL进行坐标转换
  • 日常编程中和日期相关的代码和bug
  • ATT与Intel汇编语法区别
  • Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介绍
  • 2023年网红营销10大趋势解读:品牌出海必看
  • Java学习笔记 --- 正则表达式
  • 【基础算法】字符串哈希
  • unity 多个模型或物体无限循环拖拽 类似无限列表循环
  • GroupDocs.Merger for Java
  • 04--WXML
  • 一篇五分生信临床模型预测文章代码复现——FIgure 9.列线图构建,ROC分析,DCA分析 (五)
  • 每月一书(202302)《狂飙》
  • wsl2 docker 安装
  • 极光笔记 | 埋点体系建设与实施方法论
  • SpringMVC中的各注解类理解
  • DNF搭建服务器服务端搭建教程
  • 【论文简述】Learning Optical Flow with Adaptive Graph Reasoning(AAAI 2022)
  • qt QCustomPlot学习
  • 【HDFS】FsDatasetImpl系列文章(七):finalizeBlock方法和unfinalizeBlock方法
  • 测试部门来了个99年的卷王之王,老油条感叹真干不过,但是...
  • CSS 网页动画【快速掌握知识点】
  • 电脑技巧:分享六个非常实用的资源网站
  • 【Java基础 下】 027 -- 异常、File、综合案例
  • 教师管理系统的设计与实现