news 2026/7/5 14:14:45

ORB-SLAM3 mFeatVec

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ORB-SLAM3 mFeatVec

mFeatVec(Feature Vector,特征向量)的计算原理,简单来说就是:为当前帧图像中的每个特征点,找到它在视觉词汇树中对应的中间节点(叶子节点world ID 上溯4层的节点ID),并将该特征点的索引(ORB特征点在当前帧图像中的索引),存入这个节点ID 下的一个列表里

它的核心作用就像一份“花名册”,为后续的特征匹配提供了一份按地点(节点)归类的索引,从而避免了全局的暴力搜索。


🧠 核心思想:在“街区”里找人

为了理解mFeatVec的原理,我们可以做一个类比:

  • mBowVec(词袋向量):相当于“全局摘要”。它只告诉你有某个单词(比如“窗户”),但不说这个单词具体出现在图像的哪个位置。它用于快速比较两张图的整体相似度。

  • mFeatVec(特征向量):相当于“街区地图”。它把图像特征点按“街区”(词汇树的中间节点)分类。当你在这个街区里找某个特征点时,就不用满城搜索,只需要查看这个街区的居民列表即可。

mFeatVec的这种“街区”设计,是加速特征匹配的关键。


⚙️ 计算流程:两步构建索引

mFeatVec的计算和mBowVec是同步的,都在ComputeBoW()函数中完成。

  1. 特征点“落户”:对于当前帧图像中提取的每个ORB特征点,它的描述子会从词汇树的根节点出发,每层都选择与它最相似的子节点,一路向下,直到抵达一个叶子节点(即一个具体的“视觉单词” world ID)。

  2. 登记到“街区”:在特征点向下搜索的过程中,ComputeBoW()函数除了记录最终的单词world ID,还会记录下这个特征点经过的、距离叶子节点固定层数(比如4层)的那个中间节点ID。这个中间节点ID,就是它归属的“街区”。

    • 代码层面,DBoW2::FeatureVector::addFeature(NodeId id, unsigned int i_feature)函数实现了这一登记过程:它会将特征点(在当前帧图像中)的索引i_feature添加到对应中间节点IDid的列表中。(NodeId id是中间节点ID,i_feature是ORB特征点在当前帧图像中的索引


🚀 核心应用:如何用mFeatVec加速匹配?

这是mFeatVec最关键的价值所在。在特征匹配函数SearchByBoW中,它被这样使用:

  1. 同步遍历:同时遍历两个关键帧的mFeatVec(例如,记为f1itf2it),找出它们拥有相同中间节点ID的部分。(两个关键帧的mFeatVec包含 相同的某个中间节点 ID

  2. 限制匹配范围

    • 如果两帧都包含节点N,那么匹配算法只会比较f1itN节点下的特征点列表和f2itN节点下的特征点列表。(相同的某个中间节点 ID下,暴力匹配两帧的ORB特征点,因为它们之间有很大的相似性)

    • 这相当于把原本需要在成百上千个点之间进行的“全局搜索”,缩小到了只在一个“街区”(对应节点)内的少量点之间进行比对,极大地提升了匹配速度。(不是两帧之间的所有特征点都暴力匹配,降低了匹配次数)

💎 总结

mFeatVec本质是一个按词汇树节点ID索引的、记录特征点ID的列表(std::map<NodeId, std::vector<unsigned int>>)。它通过将特征点按“视觉相近程度”预先分组,为后续的帧间特征匹配提供了“街区级”的快速索引,是ORB-SLAM3能够实现实时数据关联的关键数据结构。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 14:13:05

Java面向对象课程设计:学生成绩管理系统

一、项目简介 本项目为Java面向对象课程设计&#xff0c;由三人小组协作开发学生成绩管理系统。项目遵循多层分层架构思想&#xff0c;基于MySQL实现数据持久化&#xff0c;依托JDBC完成程序与数据库交互&#xff0c;使用Swing搭建可视化GUI界面。项目全程采用Git协同开发&…

作者头像 李华
网站建设 2026/7/5 14:09:54

3步搞定Unity卡通渲染:从零到一掌握URP Toon Shader核心技巧

3步搞定Unity卡通渲染&#xff1a;从零到一掌握URP Toon Shader核心技巧 【免费下载链接】UnityURPToonLitShaderExample A very simple toon lit shader example, for you to learn writing custom lit shader in Unity URP 项目地址: https://gitcode.com/gh_mirrors/un/Un…

作者头像 李华
网站建设 2026/7/5 14:08:35

MC6470与dsPIC33EP运动控制方案在工业自动化中的应用

1. 项目概述&#xff1a;MC6470与dsPIC33EP512MU810的强强联合在工业自动化和高精度运动控制领域&#xff0c;系统响应速度和定位精度始终是工程师们追求的核心指标。最近我在一个智能仓储机器人项目中&#xff0c;尝试将MC6470运动控制器与Microchip的dsPIC33EP512MU810数字信…

作者头像 李华
网站建设 2026/7/5 14:06:52

交互设计方法、核心流程以及常用模型

交互设计方法&#xff08;Interaction Design Methodology&#xff09;的核心在于以用户为中心&#xff08;User-Centered Design, UCD&#xff09;。它不仅仅是关注界面好看与否&#xff0c;而是关注用户如何与产品互动&#xff0c;以及如何以最高效、最愉悦的方式达成目标。交…

作者头像 李华
网站建设 2026/7/5 14:06:42

STM32与TC78H660FTG实现高效直流电机控制方案

1. 项目背景与核心器件选型 在工业自动化和消费电子领域&#xff0c;直流有刷电机因其结构简单、控制方便、成本低廉等优势&#xff0c;仍然占据着重要地位。然而传统的电机驱动方案存在效率低、发热严重、控制精度不足等问题。最近我在一个智能家居窗帘控制项目中&#xff0c;…

作者头像 李华