DCAM系列WDR模式
1 原理与背景
Vzense 3D深度相机采用基于ToF(Time-of-Flight)飞行时间的方式进行距离测量。在工作中,相机会发出红外光,光遇到物体后反射回传感器,相机通过计算光发射与返回的时间差计算物体的距离。
此文档介绍了 Vzense ToF 深度相机所具备的 WDR(Wide Dynamic Range)功能,以及如何通过工具和代码实现的步骤。

2 相机工作范围
DCAM系列 ToF 相机使用脉冲方式测距,不同的脉冲宽度与激光强度决定了可测试的距离范围不同。距离范围(最近距离和最远距离)由自身发光的强度决定;
最远距离:如激光能量较弱,则在远距离没有深度数据,产生远距离盲区;
最近距离:如激光能量较强,近距离会产生过曝,没有深度数据,产生近距离盲区

如下表为DCAM550系列几个模式的距离范围:
Range 0
0.35m~1.5m
Range 1
0.5m~2.8m
Range 2
0.8m~4.4m
Range 5
1.2m~6.0m
如下表为DCAM560C系列几个模式的距离范围:
Range 0
0.16m~1.1m
Range 1
0.5m~2.8m
Range 2
0.75m~4.5m
Range 5
1.0m~6.0m
如果在实际使用需要更广的测量距离,而单一模式无法满足要求的情况,以DCAM550举例,如需要0.35m~4.4m的测量距离,就需要使用 WDR 模式 range0 + range2。
3 WDR(Wide Dynamic Range)介绍
WDR(Wide Dynamic Range)模式可以将相机设置为多 range 交替输出的方式,从而可以扩展检测范围。以DCAM550举例,例如相机需要检测0.35m~4.4m,可以设置为range0, 2的WDR模式。相机的输出帧就会变为下图所示:

交替输出模式:相机会交替输出 range 0,range 2 的图像,这样用户便可以在 range 0 对应的图像中检测 0.35m~1.5m 的数据,在 range 2 对应图像中检测 0.8m~4.4m 的数据。
融合输出模式:当然也可以选择合适的交界距离值,使用 SDK 自带的算法融合图像输出,即 0.35m~4.4m 的数据融合为一张‘W’图像输出。
注意事项:相机的最大帧率为 30 帧每秒,所以在使用 WDR 模式时,每个单一 range 的输出帧率会下降。例如,如果选用 range 0,1 的 WDR 模式,range 0 的输出为 15 帧每秒,range 1 的输出为 15 帧每秒。如果选用 range 0,1,2 的 WDR 模式,range 0 的输出为 10 帧每秒,range 1 的输出为 10 帧每秒,range 2 的输出为 10 帧每秒。
4 WDR 使用方法
4.1 Vzense UTool 工具
1.修改工具根目录下配置文件 UTool.ini 中对于 WDR 的参数配置:
例一:range 0 和 range 2 组成的双模式WDR
#WDR1
t1_totalRange=2 //WDR 模式下包含的模式数量
t1_range1=0 //WDR 模式下包含的第一个距离模式,0 代表是 range 0
t1_range1Count=1 //只能为 1,勿改
t1_range2=2 //WDR 模式下所包含的第二个距离模式,range 2
t1_range2Count=1 //只能为 1,勿改
t1_range3=0 //WDR模式下所包含的第三个距离模式,由于前面设定总数量为2,所以此模式不起作用
t1_range3Count=1 //只能为 1,勿改
例二:range 0, range 1, range 2 组成的三模式 WDR
#WDR1
t1_totalRange=3 //WDR 模式下包含的模式数量
t1_range1=0 //WDR 模式下包含的第一个距离模式,0 代表是 range 0
t1_range1Count=1 //只能为 1,勿改
t1_range2=1 //WDR 模式下所包含的第二个距离模式,range 1
t1_range2Count=1 //只能为 1,勿改
t1_range3=2 //WDR 模式下所包含的第三个距离模式,range 2
t1_range3Count=1 //只能为 1,勿改
2.启动 UTool,切换模式到 WDR 模式,此时为融合输出模式:
4.2 SDK 代码调用
交替输出 WDR 模式,例:
设置 WDR 参数:
PsWDROutputMode wdrMode = { PsWDRTotalRange_Two, PsNearRange, 1, PsFarRange, 1,
PsXFarRange, 1 };
Ps2_SetWDROutputMode(deviceHandle, sessionIndex, &wdrMode);
设置 WDR 模式
Ps2_SetDataMode(deviceHandle, sessionIndex, PsWDR_Depth);
设置非融合模式
Ps2_SetWDRStyle(deviceHandle, sessionIndex, PsWDR_ALTERNATION);
取 Depth 图
PsFrame depthFrame = {0};
PsFrameReady frameReady = {0};
Ps2_ReadNextFrame(deviceHandle, sessionIndex, &frameReady);
if (1 == frameReady.depth)
{
Ps2_GetFrame(deviceHandle,sessionIndex,PsDepthFrame, &depthFrame);
cout << "current image range : " << depthFrame.depthRange << endl;
}
取出 Depth 图时,可以通过 depthFrame 结构体中的 depthRange 判断当前取出图对应的 range。如下图中,左边为 range0 的 depth 图,左边为 range2 的 depth 图。
如果想使用 Vzense 的融合方式读取 WDR 图像,调用方法如下:
设置 WDR 参数:
PsWDROutputMode wdrMode = { PsWDRTotalRange_Two, PsNearRange, 1, PsFarRange, 1, PsXFarRange, 1 };
Ps2_SetWDROutputMode(deviceHandle, sessionIndex, &wdrMode);
设置 WDR 模式
Ps2_SetDataMode(deviceHandle, sessionIndex, PsWDR_Depth);
设置融合模式
Ps2_SetWDRStyle(deviceHandle, sessionIndex, PsWDR_FUSION);
PsFrame wdrDepthFrame = { 0 };
PsFrameReady frameReady = {0};
Ps2_ReadNextFrame(deviceHandle, sessionIndex, &frameReady);
if (1 == frameReady.wdrDepth)
{
Ps2_GetFrame(deviceHandle,sessionIndex,PsWDRDepthFrame, &wdrDepthFrame);
}
读取出的 depth 如下图为融合图像:

4.3 相机配置方式
相机可以支持通过配置工具方式设置相机默认启动方式的功能,具体参数说明可以参照工具软件的配置说明。

使用配置工具设置成功后,无需再调用接口进行参数和模式设置,直接进行图像读取即可。
5 附录
SDK 下载地址:
UTool 下载地址:
国内:https://gitee.com/Vzense/UTool
海外:https://github.com/Vzense/UTool
ConfigTool 下载地址:
Last updated