Table of Contents
曝光时间介绍
ToF(Time of Flight)的原理是通过自己发射激光达到物体表面反射回来的信号来测量距离的,如下图所示:
影响反射回来的信号强度的因素有:目标物体的距离,目标物体的反射率,以及发射激光的时间(即曝光时间)。其中曝光时间是唯一相机自主可调节的因素,针对应用场景,选择合适的曝光时间就尤为重要,它会直接影响测量的绝对精度,相对精度,距离范围等参数。
曝光时间过短,则信号强度会变弱,从而导致信噪比降低,绝对精度和相对精度变差,甚至无法测量远处物体,或低反射率物体,产生远距离盲区。
曝光时间过长,则信号强度会变高,对于提升信噪比、绝对精度和相对精度以及测量范围是有帮助的。但对于高反射物体,特别是近距离物体,会有过曝的风险,从而产生过近盲区,如下图所示,红色框区域由于信号过强,出现过曝,导致深度图缺失。
通常来说,在确定场景不发生过曝的前提下,为了获取更远的距离或者更稳定的点云图质量,需要通过提高ToF相机的曝光时间Te的方式来实现,但提高ToF相机的曝光时间会导致深度图一帧所需要的时间会更长,从而导致帧率会下降。长/短曝光时间的一帧组成如下图所示:
相对应的,如果我们需要获得更高的曝光时间,则需要先降低帧率。
以NYX650为例,拍摄竖立的黑色托盘(反射率低于5%),托盘到相机之间的距离为2m,如下图所示:
当帧率设定为30fps的时候,最大曝光时间为7300us,这时可以看到托盘的点云抖动较大,飞点较多。如下图所示:
降低帧率到5fps,则最大曝光时间为52000us,相对于上述30fps,7300us的设定条件下,托盘点云明显抖动更小,飞点也少,如下图所示:
在主动模式下,帧率指的是每秒重复的实时帧数。 而在触发模式下(包括硬件触发和软件触发),帧率指的是触发信号频率所能达到的最大帧率。例如,如果在硬件触发模式下将帧率设置为10帧/秒,则两个相邻触发信号之间的最小时间间隔必须大于1/10秒。
调解曝光时间和帧率的API介绍
参考例程:
BaseSDK/Windows/Samples/Base/NYX650/ToFExposureTimeSetGet。
结构类型:
/**
* @brief 传感器类型
*/
typedef enum
{
SC_TOF_SENSOR = 0x01, //ToF相机.
SC_COLOR_SENSOR = 0x02, //RGB相机.
} ScSensorType;
/**
* @brief 曝光模式类型
*/
typedef enum
{
SC_EXPOSURE_CONTROL_MODE_AUTO = 0, //自动曝光模式
SC_EXPOSURE_CONTROL_MODE_MANUAL = 1, //手动曝光模式
} ScExposureControlMode;
最大曝光时间可以通过以下API获取:
//获取ToF传感器当前帧率的最大曝光时间
ScStatus scGetMaxExposureTime(ScDeviceHandle device, ScSensorType sensorType, int32_t* pMaxExposureTime);
曝光模式(自动或手动)可以通过以下API设置或获取:
//设置ToF传感器的曝光模式(自动或手动)
ScStatus scSetExposureControlMode(ScDeviceHandle device, ScSensorType sensorType, ScExposureControlMode controlMode);
//获取ToF传感器当前曝光模式设置(自动或手动)
ScStatus scGetExposureControlMode(ScDeviceHandle device, ScSensorType sensorType, ScExposureControlMode* pControlMode)
ToF相机实时曝光时间可以通过一下API设置或获取:
//设置ToF传感器手动模式下的曝光时间
ScStatus scSetExposureTime(ScDeviceHandle device, ScSensorType sensorType, int32_t exposureTime)
//获取ToF传感器手动模式下的当前曝光时间
ScStatus scGetExposureTime(ScDeviceHandle device, ScSensorType sensorType, int32_t* pExposureTime)
帧率可以通过以下API设置和获取:
//设置ToF传感器帧率期望值
ScStatus scSetFrameRate(ScDeviceHandle device, int32_t value)
//获取ToF传感器当前帧率设置
ScStatus scGetFrameRate(ScDeviceHandle device, int32_t* pValue)
常见问题
如何改善低反射率物体的识别效果?
1、可以通过增加曝光时间的方式来改善点云效果,如上面案例所示。但同时要避免曝光时间过强带来的过曝问题,以及杂散光问题。
2、可以通过降低confidence filter的threshold来改善低反射率物体的识别,但注意这种方式并不会增加信号强度,有可能会引入其他噪声。
如何选择合适的曝光时间?
通常来说,在场景不过曝的前提下,通过选择合适的帧率,获取更长的曝光时间,会对提升效果有很大帮助。
在场景中同时具备高低反射物体如何解决?
如场景中同时需要测量高低反射物体,低反射物体会需要更长的曝光时间才可以获得较高的图像质量,但同时高反射物体会过曝,这时可以通过HDR的方式来改善,详情请见《 技术笔记05-了解基于间接飞行时间技术(iToF)中HDR模式 》。