ORB——SLAM2中一些关于深度相机参数depthfactor的解释和点云处理

先上一个有条理的博客:https://blog.csdn.net/catpico/article/details/120688795看完还是有不懂再看这个文章

//第一种说法**************

  1. 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(包含加载地图部分)

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值