//我们在从金字塔的图像中获取特征点时为每一个特征点计算了描述子
//现在看看如何计算一个空间的地图点的描述子
void MapPoint::ComputeDistinctiveDescriptors()
{
// Retrieve all observed descriptors
vector<cv::Mat> vDescriptors;
//获取到某一个地图点可以被哪些关键帧观测到以及在这些关键帧上与该地图点对应的特征点的编号
map<KeyFrame*,size_t> observations;
{
unique_lock<mutex> lock1(mMutexFeatures);
if(mbBad)
return;
observations=mObservations;
}
if(observations.empty())
return;
//vDescriptors用来存储这些所有与可以观测到该地图点的特征点的描述子
vDescriptors.reserve(observations.size());
for(map<KeyFrame*,size_t>::iterator mit=observations.begin(), mend=observations.end(); mit!=mend; mit++)
{
//获取可以观测到此地图点的所有关键帧
KeyFrame* pKF = mit->first;
//然后获取,在该关键帧下与该地图点对应的特征点的描述子
//vDescriptors中存储了所有的那些可以观测到该地图点的图像上的与之对应的特征点的描述子。
if(!pKF->isBad())
vDescriptors.push_back(pKF->mDescriptors.row(mit->se
ORB-SLAM2中MapPoints的描述子的计算
最新推荐文章于 2025-01-19 21:21:02 发布