先上一个有条理的博客:https://blog.csdn.net/catpico/article/details/120688795看完还是有不懂再看这个文章
//第一种说法**************
- Camera.bf中的b指基线baseline(单位:米),f是焦距fx(x轴和y轴差距不大),bf=bf,和ThDepth一起决定了深度点的范围:bf * ThDepth / fx即大致为b * ThDepth。 基线在双目视觉中出现的比较多,如ORB-SLAM中的双目示例中的EuRoC.yaml中的bf为47.9,ThDepth为35,fx为435.2,则有效深度为47.935/435.3=3.85米;KITTI.yaml中的bf为387.57,ThDepth为40,fx为721.54,则有效深度为387.57*40/721.54=21.5米。这里的xtion的IR基线(其实也可以不这么叫)bf为40,ThDepth为50,fx为558.34,则有效深度为3.58米(官方为3.5米)。
2.DepthMapFactor: 1000.0这个很好理解,depth深度图的值为真实3d点深度*1000. 例如depth值为2683,则真是世界尺度的这点的深度为2.683米。 这个值是可以人为转换的(如opencv中的convert函数,可以设置缩放因子),如TUM中的深度图的DepthMapFactor为5000,就代表深度图中的5000个单位为1米。
3. 文章中还有部分点云的相关处理
————————————————
版权声明:本文为CSDN博主「cc_sunny」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/aptx704610875/article/details/51490201/
//第二个说法************************
使用ros下的RGBD相机跑ORB_SLAM,这里的结果有点出乎意料,相机镜头一直固定点附近晃动,没有形成之前我们常见的 SLAM 长条形状的地图。
经过查找,发现是 Examples/RGB-D/TUM1.yaml 这个文件的参数设置有问题,其中
Depthmap values factor
DepthMapFactor: 5000.0
这个参数似乎是深度值的校正系数。在具体使用时,表达式为 Z = depth_image[v,u] / factor;
在 TUM 官网中明确指出普通运行模式和 ROS 运行模式中,这个数值是不同的:
factor = 5000 # for the 16-bit PNG files
OR: factor = 1 # for the 32-bit float images in the ROS bag files
因此之前普通模式运行时用 Examples/RGB-D/TUM1.yaml 没有问题,但是在 ROS 模式下就需要修改一下参数
Depthmap values factor
DepthMapFactor: 1.0
修改之后,再次运行上边的命令,就可以得到预期的效果。
作者:isl_qdu
链接:https://www.jianshu.com/p/31c95d9a5f97
来源:简书
//第三个说法,仅仅针对realsenseD4系列相机***********
realsense 深度数据的代码链接:https://www.cnblogs.com/herd/p/13412906.html
#include<librealsense2/rs.hpp>
#include<librealsense2/rsutil.h>
//获取深度像素对应长度单位(米)的换算比例
float get_depth_scale(rs2::device dev)
{
// Go over the device's sensors
for (rs2::sensor& sensor : dev.query_sensors())
{
// Check if the sensor if a depth sensor
if (rs2::depth_sensor dpt = sensor.as<rs2::depth_sensor>())
{
return dpt.get_depth_scale();
}
}
throw std::runtime_error("Device does not have a depth sensor");
}
//部分测量深度的代码
//获取深度像素与现实单位比例(D435默认1毫米)
float depth_scale = get_depth_scale(profile.get_device());
cout<<"depth_scale=="<<depth_scale<<"米"<<endl; //此处的输出是0.1,见配图1
//计算某个像素点处的深度数值
//取当前点对应的深度值
uint16_t depth_value=depth.at<uint16_t>(row,col);
//换算到米
float depth_m=depth_value*depth_scale;//此处的输出是真实的米制,见配图1
配图1
配图2
########################################################################
保存和加载ORB——SLAM的CSDN地址:https://blog.csdn.net/weixin_32049741/article/details/112108375
保存和加载ORB——SLAM的github地址(上文CSDN中的):https://github.com/BoomFan/ORB_SLAM2
#下载的文件包的名字是:ORB_SLAM2(包含加载地图部分)