应用笔记11-Vzense DS系列ToF相机HDR功能测试

编辑:Sophia.feng 时间: 2024-10-21

HDR技术原理介绍

请查看《 技术笔记05-了解基于间接飞行时间技术(iToF)中HDR模式 》了解HDR技术的原理。

DS86产品HDR效果展示

多种反射率物体测试

(1)目标物体及其特性说明
杂乱复杂物体,包括纸箱(贴有透明胶带和白色标签纸)、透明薄膜卷、白色信封、黑色本子、黑色网线、黑色电源适配器、黑色测距仪(带高反射率亚克力屏幕)等,其中黑色物体对光线的反射率低,白色物体的反射率高,亚克力屏幕、透明薄膜卷的反射率更高。
(2)相机位置:相机距离目标物体约0.75-0.9m。
(3)相机预热:相机预热20分钟。
(4)测试环境:22°C室温,室内光线为200lux。
(5)测试效果展示:

相机设置目标物体深度图(0.75m~0.9m)点云图(RGB对齐)
曝光时间:2000us
HDR:ON



点云图查看
曝光时间:2000us
HDR:OFF



点云图查看

(6)测试效果说明
关闭HDR功能:相机曝光时间设置为2000us时,透明薄膜卷、亚克力屏、纸箱上的透明胶带、白色信封、白色标签等反射率高的表面均出现了明显的过曝现象。
开启HDR功能:相机曝光时间设置为2000us时,目标区域中,高低反射率的物体均成像良好,仅正对相机的透明薄膜卷部位有轻微的过曝现象。

汽车轮胎和轮毂测试

(1)目标物体及其特性说明
汽车的轮胎和轮毂反射率差异较大。黑色轮胎反射率低,不易成像,金属轮毂反射率高,易过曝。
(2)相机位置:相机距离目标物体约1m。
(3)相机预热:相机预热20分钟。
(4)测试环境:22°C室温,室外光线为50000Lux。
(5)测试效果展示:
距离汽车轮胎1m处的对比效果展示:

相机设置深度图, 距离1m点云图
曝光时间:2000us
置信滤波:9
HDR:ON



点云图查看
曝光时间:2000us
置信滤波:9
HDR:OFF



点云图查看

(6)测试效果说明
测试距离越近,高反射率的物体越容易过曝。
在关闭HDR功能时,在1m距离时,轮毂大部分区域都已经过曝。
打开HDR功能后,在1m的距离测试,轮毂依然可以完整成像,不存在过曝现象。

HDR功能的缺陷

(1)HDR的原理是通过多张不同曝光时间的帧(长曝光和短曝光)融合获得一张HDR图像,这必然会增加获取一帧图像所需要的时间,所以在HDR模式下,相机的帧率会降低,延时会加长。
(2)由于ToF的原理,同一物体在不同曝光时间下,所测量的距离精度会有略微的差别,特别短曝光模式下精度会下降。所以同一平面的物体在HDR模式下,有时会有分层的现象。如下面案例所示:

由于HDR功能的缺陷,在实际测量中,建议尽量不开启HDR功能,而是通过调整合适的帧率和曝光时间来满足场景需求。请查看《 应用笔记04-Vzense 3D ToF相机的曝光时间作用和调节方式介绍 》。

HDR功能实现方式

ScepterGUITool 中HDR的使用方法

在ScepterGUITool中,可以通过HDR开关来开启或关闭HDR功能,如下图所示:

SDK的使用方法

例程参考:
BaseSDK/Windows/Samples/Base/NYX650/ToFExposureTimeOfHDRSetGet。
1、HDR状态(打开/关闭)可以通过以下软件 API 设置/获取:

//设置HDR状态开启/关闭
ScStatus scSetHDRModeEnabled(ScDeviceHandle device, bool bEnabled);

//获取HDR状态开启/关闭设置
ScStatus scGetHDRModeEnabled(ScDeviceHandle device, bool* bEnabled);

设置 HDR 状态方法:

ScDeviceHandle deviceHandle = 0;
ScStatus status = SC_OTHERS;
bool bHDREnable = 0;
//打开设备
status = scOpenDeviceByIP(pDeviceListInfo[0].ip, &deviceHandle);
//HDR开启
bHDREnable = True;
status = scSetHDRModeEnabled(deviceHandle, bHDREnable);

获取HDR状态方法:

ScDeviceHandle deviceHandle = 0;
ScStatus status = SC_OTHERS;
bool bHDREnable = 0;
//打开设备
status = scOpenDeviceByIP(pDeviceListInfo[0].ip, &deviceHandle);
//获取当前设备HDR状态设置
status = scGetHDRModeEnabled(deviceHandle, &bHDREnable);
cout << "HDR States: " << bHDREnable << endl;

2、可以通过软件 API 获取HDR的组成frame数量:

ScStatus scGetFrameCountOfHDRMode(ScDeviceHandle device, int32_t* pCount);

3、HDR对应frame的曝光时间可以通过以下软件 API 设置/获取:

//设置组成HDR对应frame的曝光时间
ScStatus scSetExposureTimeOfHDR(ScDeviceHandle device, uint8_t frameIndex, int32_t exposureTime);
//获取组成HDR对应frame的曝光时间
ScStatus scGetExposureTimeOfHDR(ScDeviceHandle device, uint8_t frameIndex, int32_t* pExposureTime);

4、在HDR模式下,可以通过软件 API 获取tof传感器的最大曝光时间:

//在HDR模式下,获取深度传感器的最大曝光时间
ScStatus scGetMaxExposureTimeOfHDR(ScDeviceHandle device, uint8_t frameIndex, int32_t* pMaxExposureTime)

DS86/DS87系列相机某些版本默认使能HDR功能,即每次设备上电开启HDR功能。因此无需代码调用,如果需要关闭,可使用如上方式在open成功后,调用接口关闭。

相关文章

How can we support you?

We will be happy to advise you on product selection and find the right solution for your application.

联系我们