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

ORB-SLAM3 特征点

int N;std::vector<cv::KeyPoint> mvKeys, mvKeysRight;std::vector<cv::KeyPoint> mvKeysUn;是 ORB-SLAM3 中Frame类的核心成员变量,用于存储图像中提取的特征点信息。


📝 变量定义

这些变量在 ORB-SLAM3 的Frame.h文件中定义:

cpp

class Frame { public: int N; // 特征点数量 std::vector<cv::KeyPoint> mvKeys; // 原始提取的特征点(含畸变) std::vector<cv::KeyPoint> mvKeysRight; // 右目原始特征点(仅双目/RGB-D使用) std::vector<cv::KeyPoint> mvKeysUn; // 去畸变后的特征点(用于计算) // ... };

📖 详细解读

1.int N

  • 含义:当前帧中提取的特征点总数

  • 作用:作为所有特征点相关向量的大小基准,用于遍历和索引。

  • 赋值:通常在构造函数中根据图像提取的特征点数量赋值:

    cpp

    N = mvKeys.size(); // 单目 N = mvKeys.size(); // 双目/深度,一般取左目数量

2.std::vector<cv::KeyPoint> mvKeys

  • 含义:从原始图像中提取的ORB特征点(包含相机畸变)。

  • 来源:直接从图像上通过ORBextractor提取得到,坐标是原始的像素坐标 (u, v),未经任何修正。

  • 用途:主要用于特征匹配描述子提取

3.std::vector<cv::KeyPoint> mvKeysRight

  • 含义右目图像中提取的ORB特征点(仅用于双目相机RGB-D相机)。

  • 用途:用于双目立体匹配,计算视差和深度。在单目相机中,此向量为空。

4.std::vector<cv::KeyPoint> mvKeysUn

  • 含义去畸变后的特征点(Undistorted Keypoints),即矫正后的归一化平面坐标或像素坐标

  • 计算方式:在Frame构造函数中,通过调用相机模型的UndistortKeyPoints()函数,将mvKeys中的畸变坐标矫正为无畸变坐标。

    cpp

    mpCamera->UndistortKeyPoints(mvKeys, mvKeysUn);
  • 用途:用于所有需要精确几何计算的任务,包括:

    • 三角化生成地图点

    • 计算重投影误差

    • 位姿优化(BA)

    • 与地图点进行3D-2D匹配


🔍 三种特征点的对比

变量是否含畸变坐标系主要用途
mvKeys✅ 是原始像素坐标 (u, v)特征提取、描述子匹配
mvKeysRight✅ 是(右目)原始像素坐标 (u, v)双目立体匹配
mvKeysUn❌ 否(已矫正)矫正后像素坐标或归一化平面坐标三角化、BA优化、重投影误差计算

⚙️ 实际使用示例

获取特征点坐标

cpp

// 使用原始坐标(匹配时常用) cv::KeyPoint kp = mvKeys[i]; float u = kp.pt.x; float v = kp.pt.y; // 使用去畸变坐标(几何计算时常用) cv::KeyPoint kp_un = mvKeysUn[i]; float u_un = kp_un.pt.x; float v_un = kp_un.pt.y;

双目深度计算

cpp

// 在双目模式下,左右目特征点匹配 // mvKeys 为左目特征点,mvKeysRight 为右目特征点 float disparity = mvKeys[i].pt.x - mvKeysRight[i].pt.x; float depth = f * baseline / disparity; // 计算深度

💎 总结

变量一句话总结
N特征点总数,向量大小的基准
mvKeys原始提取的、含畸变的特征点,用于匹配
mvKeysRight右目原始特征点,仅双目/RGB-D使用
mvKeysUn去畸变后的特征点,用于所有几何计算

补充:

在ORB-SLAM3中,NmvKeysUn在单目和双目模式下的主要区别如下:

📊 核心区别速览

特性单目模式双目模式
N(特征点数量)等于左目图像提取的特征点总数。同样等于左目图像的特征点总数。
mvKeysUn(去畸变特征点)始终有效,存储所有去畸变后的特征点,用于几何计算。通常无意义,因为输入图像一般已预先矫正,该字段可能为空或未被使用。
数据来源仅有一张图像。左右两张图像,但主流程基于左目。
特征点存储mvKeys(原始) ->mvKeysUn(去畸变)。mvKeys(左目原始),mvKeysRight(右目原始)。
mvKeysUn的作用提供无畸变的坐标,用于后续三角化、重投影误差计算等。因输入图像已去畸变,其作用被弱化或替代。

📝 详细解读

  • N(特征点数量):无论是单目还是双目,N都代表左目图像提取的特征点数量。在双目模式下,右目图像的特征点存储在另一个向量mvKeysRight中,不计算在N内。

  • mvKeysUn(去畸变后的特征点):这是两者最核心的区别

    • 在单目模式中mvKeysUn非常重要。它存储了mvKeys经过去畸变后的特征点,是后续所有几何计算(如三角化、计算重投影误差等)的基础。

    • 在双目模式中mvKeysUn的“存在感”很低,因为双目系统通常处理的是已经过极线矫正(Rectified)的图像对。这意味着输入的图像本身就已去畸变,因此mvKeysUn可能未被使用或直接复制了mvKeys的值。

简单来说,N的含义在两种模式下是一致的,都指代左目图像的特征点数量。而mvKeysUn则是单目模式下不可或缺的“几何计算基准”,在双目模式下,这个角色通常由已经矫正好的原始图像承担了。

http://www.jsqmd.com/news/1139035/

相关文章:

  • Sneakerweb 协议:无需许可,用物理介质实现网页点对点发布与分享!
  • 告别nvm!fnm:新一代极速Node版本管理工具全攻略
  • 2026年标签打印软件十大品牌排行榜,谁更强?
  • 实验7-1_自媒体运营分析_数据清洗与预处理
  • 我终于又有了自己的 Linux 电脑
  • AI写作辅助平台的合规秘籍:如何让AI生成内容通过严格学术审查
  • 3类常见舵机(模拟/数字/总线)控制原理对比:PWM、响应速度与精度实测
  • PS AI换背景实操教程:3步搞定家具椅子场景替换,告别手动抠图
  • 企业上AI,为什么应该从“岗位Agent”开始?
  • 模型参数设置
  • 基于R语言的物种气候生态位动态量化与分布特征模拟技术
  • 3分钟搞定电脑散热噪音!FanControl免费风扇控制终极指南
  • 一种因子游戏【牛客tracker 每日一题】
  • Spring AOP面向切面编程-从注解到实战
  • 实验7-1:自媒体运营分析-数据清洗与预处理 实验报告
  • X4Val:面向多源非配对数据的鲁棒模型评估方法论
  • 2026年6月亲测:卓廷金税预警敏感
  • Linux 移动重命名 mv、删库跑路 rm 与打包压缩 tar 核心命令通关秘籍
  • LangChain:Loop Engineering才是未来核心竞争力!
  • 电力负荷预测和能源调度能用AI吗?深度解析AI Agent在新型电力系统中的应用实战与主流方案盘点
  • OpenAI GPT-5.6明日发布,借对手危机实现降维打击,AI竞争迈入实用主义时代
  • 单片机程序常用的消息队列
  • 计算机毕业设计之jsp旅行社网站的设计与实现
  • Trae:面向电子取证的可编程自动化代理与Skills机制解析
  • SKILL.md 文件怎么写?(手把手教程)
  • 刚性编队控制:去中心化无人机集群的SE(3)分布式实现
  • 全网资源下载终极指南:一键获取微信视频号、抖音、快手等平台内容
  • 36岁大龄前端转行AI大模型应用开发的思考
  • 2026高性价比数字人平台怎么选?从预算、口型、批量出片到商用权限一次讲清(CSDN投稿优化版)
  • 无源RFID标签在贵重固定资产远程监控中的应用边界与性能测试