ORB-SLAM3 GetMapPointMatches
pKF-GetMapPointMatches()是KeyFrame类的一个成员函数它的作用是获取一个关键帧KeyFrame所观测到的所有地图点MapPoint的列表。 函数原型与返回值它的函数原型很简单cppconst vectorMapPoint* GetMapPointMatches() { return mvpMapPoints; }该函数直接返回类成员变量mvpMapPoints。这是一个vectorMapPoint*类型的向量其中每个元素都是一个指向MapPoint对象的指针向量的大小与该关键帧提取的特征点数量一致。 关键帧与地图点的关系KeyFrame(关键帧)是SLAM系统选取的具有代表性的图像帧。MapPoint(地图点)是地图中一个3D空间点的世界坐标。关系一个关键帧在拍摄时会“看到”许多地图点。GetMapPointMatches()返回的正是这个关键帧“看到”并成功匹配的3D点列表。向量的索引与关键帧中特征点的索引是一一对应的。如果某个特征点没有对应的地图点则该位置的指针为nullptr。 典型应用场景这个函数在ORB-SLAM3的多个核心模块中被广泛使用剔除冗余关键帧 (LocalMapping::KeyFrameCulling())遍历当前关键帧的所有地图点检查其中超过90%的点是否能被其他至少3个关键帧观察到。如果是则判定该关键帧为冗余并剔除以控制地图规模。闭环检测 (LoopClosing)当检测到闭环时获取关键帧的地图点将其投影到当前帧以寻找更多匹配从而优化闭环。地图点融合 (LocalMapping::SearchInNeighbors())获取当前关键帧和其共视关键帧的地图点检查并融合重复的地图点。跟踪与匹配 (Tracking,ORBmatcher)在重定位等场景下获取参考关键帧的地图点与当前帧的特征点进行匹配以估计位姿。⚠️ 注意事项检查指针有效性返回的向量中可能包含nullptr在使用前务必检查指针是否为空避免程序崩溃。检查地图点状态即使指针有效也应通过pMP-isBad()检查地图点是否“坏掉”bad坏点不应再被使用。总而言之GetMapPointMatches()是访问关键帧所包含的“地图内容”的核心接口是系统进行地图优化、闭环检测和关键帧剔除等操作的数据基础。