Skip to main content
Version: Next

多次曝光与自动曝光

成像完整性是衡量三维重构技术的最重要指标之一。在许多应用场合,成像完整性不足是面阵结构光技术不能被应用的主要原因。对于面阵结构光系统而言,合适的曝光强度至关重要。

对于一个确定的曝光强度,其所能接受的被测物体反光率动态范围是有限的。若整个被测物体各个部位的反光率都十分相近,单一的曝光强度尚可以实现完整拍摄,但若整个被测物体各个部位的反光率相差很大(即高对比度),容易使被测物体的某些部位超出曝光强度的动态范围,导致成像完整性差。

另外一方面,过曝或欠曝都会造成像素点重构失败,从而影响成像完整性,这需要使用者有着丰富的调曝光参数的经验;而在一些场景,如物流和抓取应用中,被测物体可能每次都有不同的材质和反光率,这导致需要人工每次调整曝光,但实施中几乎不可能。

对此,盛相3D相机提供两个重要的功能来解决复杂场景的3D拍摄问题:多次曝光自动曝光

  • 多次曝光采用多套不同的曝光强度对被测物体进行多次拍摄,再将多个拍摄结果进行合并,以获得更宽广的系统动态范围。多次曝光功能常常也被称作HDR拍摄,或简称HDR,其中HDR是High Dynamic Range,高动态范围的缩写。
  • 自动曝光通过投影预测图案并同步拍摄预测图像,预测各像素最佳曝光强度值,对最佳曝光强度值进行分组频数统计,最后根据统计结果产生优选曝光设置。其解决了人工调整曝光的局限性:需要丰富的调参经验,以及不能随时动态地适用场景的变化。
image
info

Sizector S系列支持最多3次曝光,Sizetor M系列支持最多2次曝光。

info

Sizector S系列支持自动曝光,Sizetor M系列无自动曝光。

本文讲述多次曝光和自动曝光主要的原理,帮助理解工作的机制。有关功能的使用请参考:软件使用-设置-曝光

多次曝光原理

多次曝光的原理较为简单,顾名思义,多次曝光采用多套不同的曝光强度对被测物体进行多次拍摄,再将多个拍摄结果进行合并。对于图像任意像素点,当多个曝光强度都可以重构出正确的三维的情况,3D相机会取其中曝光最大的值作为结果,因为通常越大的曝光强度,其得到的三维结果的重复性和稳定性更好。

并且,多次曝光的选择结果被记录在数据结构体中Mask值的bit3~bit7。如下,为浮点数点云数据结构对Mask的定义说明:

struct MPSizectorS_DataPointFloat3DStruct
{
unsigned char Gray;
/// bit 0 至 bit 2: 有效状态掩码. 0x00为有效点。 0x01为过曝点。0x02为重构失败。0x03为超出用户设定范围(像素点被范围检查功能剔除)。0x04 为数据溢出 (转换至定点数的过程中,定点数的值超出 0~65535 的范围)。\n
/// bit 3 至 bit 4: HDR掩码, 有效点最终采用的数据的曝光次数。例如,当HDR融合采用了3次曝光,最终采用了第二次曝光的结果作为该像素点的结果,则为2。\n
/// bit 5 至 bit 7: HDR掩码, 各次曝光的有效状态。
unsigned char Mask;
float X;
float Y;
float Z;
};

自动曝光原理

自动曝光的基本流程是,通过投影预测图案并同步拍摄预测图像,预测各像素最佳曝光强度值,对最佳曝光强度值进行分组频数统计,最后根据统计结果产生优选曝光设置。

image

拍摄预判图像和预测像素最佳曝光

根据结构光成像原理,例如典型的正弦相移法,投射到物体上的条纹图案被相机采集,其应该不过曝,又有足够大的亮度振幅;另一方面,对于任意像素点,其亮度值与曝光强度成正比。因此,对于给定的最理想亮度振幅,其对应一个最佳的曝光强度,即在该最佳曝光强度下拍摄,该像素点的相移信息是最佳的,重构出来的三维点也是最佳的。

info

曝光强度是盛相定义的归一化的代表曝光时间的度量,其与曝光时间成正比,具体请参考:曝光强度和曝光时间

一个直接的办法是,遍历所有的曝光强度,观察何时达到最理想亮度振幅;而更高效的方法是遍历特定的几个曝光强度,根据亮度值与曝光强度成正比的关系,再等比例地算出每个像素的最佳曝光强度。

盛相通过投影和拍摄特定的几个曝光强度来计算出每个像素点的最佳曝光强度,这一步通常在自动曝光模式拍摄3D开始阶段被自动完成。另一方面,用户还可以使用2D模式下的曝光强度预测模式,来获得相机计算的每个像素点的最佳曝光强度。具体请参考:曝光强度预测

最后,需要注意的是并不是所有的像素点都能计算出最佳曝光强度,这些点通常也就不可被重构,包括:

  • 过暗的点
  • 过亮的点
  • 超出景深的点(不清晰的点)

分组频数统计和产生优选曝光设置

在获得每个像素的最佳曝光强度之后,自动曝光算法将对最佳曝光强度进行分组和对频数做直方图统计,如下图所示:

image

直方图的横坐标是曝光强度,纵坐标是最佳曝光强度属于这一小段范围的曝光强度的像素点的个数。

info

曝光强度被转换为对数再作为直方图的横坐标,这样能更高效的做后续的计算。

接着,自动曝光算法将遍历所有的曝光强度组合,并使用直方图计算在其范围内的像素点个数,同时评估这些范围内像素点在该曝光强度下的成像质量,综合计算得出一个该曝光强度的得分。最终,所有结果中得分最高的作为最终的自动曝光结果。

同样以上图为例,对于给定曝光强度15,最佳曝光值为12.7~19.8(此处数据仅为示例)的像素都可以被重构出来。但是对于最佳曝光强度为15~19.8的像素点,15的曝光强度弱于其最佳曝光值,此时虽然像素可以被重构出来,但是亮度幅度下降,导致三维数据稳定性或重复性下降。因此,计算曝光强度15的得分时,15~19.8范围的像素点个数会乘以一个小于等于1.0的系数,再加上12.7~19.8的的点的个数,最终的数字作为曝光强度15的得分。

info

自动曝光参数:优先级,即为上述的系数。

tip

当优先级=0时(完整性优先),系数为1.0,即忽视亮度幅度下降因素;

当优先级=7时(重复精度优先),系数是一个最小约0.5,且与像素最佳曝光强度和给定曝光强度差值相关的一个值。

caution

随着优先级的设置变大,所有的曝光强度的得分都会变小,但是最终曝光的结果可能差别不大,也因此成像的像素点个数也差别不大。因此,自动曝光的得分与成像的像素点个数不能视同:得分低不意味着成像点数少,相反,得分高也不意味成像点数多。

info

此处的得分亦称作质量得分,即相机采图软件上反馈的质量得分和和数据结构体中FrameInfo.AutoHDRResult.Score的值,如下:

struct MPSizectorS_AutoHDRResultStructType
{
bool IsUsingAutoHDRResult;
unsigned char ExposureNum;
float AutoHDR_ExposureIntensity3D_1st;
float AutoHDR_ExposureIntensity3D_2nd;
float AutoHDR_ExposureIntensity3D_3rd;
/// 自动HDR得到的曝光设置的预估得分。有效范围为[0, 100]。
unsigned char Score;
};

对于指定次数1次的自动曝光,则只需要遍历所有曝光强度,找到最大得分的曝光强度作为结果。

对于指定次数为2次或3次的自动曝光,需要遍历所有2次或3次曝光强度组合,找到最大得分的组合作为结果。如下图,说明了如何计算多次曝光的得分计算:

image

如上,直方图的分区只要满足在任意曝光的范围内即被计算在内,但是不会重复计算,其它逻辑与1次的逻辑类似。

对于指定质量的自动曝光,则会依次遍历所有1次,2次,3次曝光的组合,直到满足指定质量阈值。需要注意的是,此处的质量阈值同样指的是上述的得分,因此也同样受到优先级参数的影响。