是否可以在单目ORB-SLAM2中获得距离缩放
Is it possible to obtain distance scaling in Monocular ORB-SLAM2?
我正在尝试使用单目ORB SLAM2找到从相机到ORB特征点的真实世界距离。
我计算了每个 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中给出了相对准确的距离。
有没有方法可以在单目球体 SLAM 中缩放距离?
请看这篇文章:"ORB-SLAM2 在初始化时任意定义比例,作为中值场景深度。实际上,每次初始化 orb-slam2 时,比例都不同。在单目SLAM中不可能获得正确的比例,因为您无法从图像序列中估计真实世界的深度。您需要另一个数据源,例如第二个摄像头、IMU、激光雷达、机器人测程法或具有已知真实世界尺寸的标记。在RGBD情况下,深度传感器知道深度,因此坐标可以正确缩放。
相关文章:
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 计算缩放多边形的比例,得到给定的多边形面积
- QwtPlot具有相等的轴和自动缩放
- 如何在directx/c++中进行平移/缩放操作
- 在Qt中实现无限可缩放的画布
- 是否可以为 QPixmap 派生类嵌入缩放方法?
- 形状对象的旋转和缩放不正确C++
- 如何在 OpenSceneGraph 中缩放/旋转/移动资产
- 如何在OpenGL(GLFW,很高兴)中进行2D缩放?
- 改变或缩放两个正态分布以具有特定的相关系数
- SDL2 调整窗口大小后如何缩放鼠标坐标?
- 如何在OpenGL中正确旋转和缩放对象?
- 仅当类型为 std::complex 时,才进行缩放
- 将 VS Code 用于跨平台可缩放C++项目
- 根据帧速率缩放/缩小数字
- 在 c++ 中缩放浮点值
- 如何防止 DirectX C++程序的拉伸/缩放
- 使用提升几何缓冲区缩放多边形时的冗余折点
- 为什么我不能使用 Sphere 来缩放字形?
- 是否可以在单目ORB-SLAM2中获得距离缩放