Я пытаюсь найти реальное расстояние от камеры до характерных точек ORB с помощью монокуляра ORB SLAM2.
Я вычислил евклидово расстояние между мировыми координатами каждой характерной точки ORB и мировой координатой местоположения камеры текущего ключевого кадра. Этот процесс повторяется для всех кадров. Таким образом, расстояние получается для каждой точки ORB в текущем кадре.
В Viewer.cc
std::vector<MapPoint*> MP = mpTracker->mCurrentFrame.mvpMapPoints;
cv::Mat CC = mpTracker->mCurrentFrame.GetCameraCenter();
mpFrameDrawer->DrawFrame(MP,CC);
В FrameDrawer.cc
cv::Mat FrameDrawer::DrawFrame(std::vector<MapPoint*> DistMapPt, cv::Mat CameraPt)
{
.
.
.
else if(state==Tracking::OK) //TRACKING
{
mnTracked=0;
mnTrackedVO=0;
const float r = 5;
for(int i=0;i<n;i++)
{
if(vbVO[i] || vbMap[i])
{
cv::Point2f pt1,pt2;
pt1.x=vCurrentKeys[i].pt.x-r;
pt1.y=vCurrentKeys[i].pt.y-r;
pt2.x=vCurrentKeys[i].pt.x+r;
pt2.y=vCurrentKeys[i].pt.y+r;
float MapPointDist;
MapPointDist = sqrt(pow((DistMapPt[i]->GetWorldPos().at<float>(0)-CameraPt.at<float>(0)),2)+pow((DistMapPt[i]->GetWorldPos().at<float>(1)-CameraPt.at<float>(1)),2)+pow((DistMapPt[i]->GetWorldPos().at<float>(2)-CameraPt.at<float>(2)),2));
}
.
.
.
}
}
}
Однако это рассчитанное расстояние не равно и не может быть масштабировано на реальное расстояние. Тот же метод дает относительно точные расстояния в RGBD ORB SLAM2.
Есть ли способ масштабирования расстояний в монокуляре ORB SLAM?