基于红外结构光的成像方法
技术领域
本发明涉及图像传感器技术领域,尤其涉及一种基于红外结构光的成像方法。
背景技术
三维重建技术是指其通过三维物体的图像来恢复三维物体的三维空间几何形状。通过结构光来获得空间编码,再通过三角测量法来获得深度信息,为三维重建的方式之一。
常见的通过结构光获取深度信息的应用使用激光散斑或者编码结构光。激光散斑是指当激光通过粗糙透明表面(如毛玻璃)并投射在物体表面时,在物体表面可以观察到无规则分布的明暗斑点。这种激光散斑的产生是当激光照射在粗糙表面上时,表面上每一点都要散射光,而空间的点接收这些相干散射光的照射就形成了激光散斑,散斑场按光路分为两种,一种散斑场是在自由空间中传播而形成的(也称作客观散斑),另一种是由透镜成像形成的(也称作主观散斑1。
而对于空间各点形成的规则散斑,其中包含了空间每点的深度信息,通过红外图像传感器来捕获所形成的散斑,通过特征提取与匹配,最终可以获得关于空间每点所形成的散斑中所包含的深度信息。红外图像传感器所成像上面亮点与暗区的对比度与深度计算有紧密联系。
然而,环境光中也存在一定的红外光,会对红外结构光成像形成一定的干扰,影响了所成像的深度获取。因此,如何减弱环境光对红外结构光成像的影响,成为目前业界亟需解决的问题之一。
发明内容
针对现有技术中存在的问题,本发明的目的在于提供一种基于红外结构光的成像方法,以减弱环境光对红外结构光成像过程中的影响,利于后续深度信息的获取。
为了达到前述目的,本发明提供一种基于红外结构光的成像方法,其包括:
在红外结构光源处于关闭状态时,对红外图像传感器的像素阵列进行第一次曝光,获取并存储所述像素阵列中各个像素的像素值;
在所述红外结构光源处于开启状态时,对所述红外图像传感器的像素阵列进行第二次曝光,获取所述像素阵列中各个像素的像素值,并判断其是否大于或者等于所存储的该像素的像素值;
若是,所述像素的输出值为第二次曝光之后所获取的该像素的像素值与所存储的该像素的像素值之差;否则,所述像素的输出值为第二次曝光之后所获取的该像素的像素值;
其中,所述第一次曝光的曝光时间与所述第二次曝光的曝光时间相等。
进一步地,在进行第二次曝光时,所述红外图像传感器通过引脚输出一个与所述第二次曝光同步的控制信号,使所述红外结构光源处于开启状态。
进一步地,所述基于红外结构光的成像方法包括:对所述像素阵列中各个像素的输出值进行分段数值映射,使在每一分段内像素的输出值进行数值映射之后的像素值在该分段对应的像素值范围内。
进一步地,按照32段折线表对所述像素阵列中各个像素的输出值进行分段数值映射;所述32段折线表包括Li(m)和Lo(m)的2组参数,Li(m)为输入参数,Lo(m)为输出参数,每个Li(m)与一个Lo(m)相对应,m为大于或者等于0且小于或者等于32的整数,Lo(0)等于0,Lo(32)等于所述红外图像传感器的像素值上限,Li(0)大于或者等于Lo(0),Li(32)小于或者等于Lo(32)。
进一步地,对于第i个像素,在对其输出值进行数值映射之后所输出的像素值为:
当Vx(i)小于Li(0)时,Vo(i)=Li(0);
当Vx(i)大于或者等于Li(0)且小于或者等于Li(32)时,若Vx(i)大于或者等于Li(x)且小于Li(x+1),
Vo(i)=Lo(x)+(Lo(x+1)-Lo(x))*((Vx(i)-Li(x))/(Li(x+1)-Li(x));
当Vx(i)大于Li(32)时,Vo(i)=Li(32);
其中,Vx(i)为第i个像素的输出值,Vo(i)为第i个像素在对其输出值进行数值映射之后所输出的像素值;Li(x)和Li(x+1)分别为m等于x和x+1时,32段折线表中对应的输入参数;Lo(x)和Lo(x+1)分别为m等于x和x+1时,32段折线表中对应的输出参数;x为大于等于0且小于32的整数。
进一步地,通过所述红外图像传感器对所述像素阵列中各个像素的输出值进行分段数值映射,并输出数值映射之后的像素的输出值。
与现有技术相比,本发明提供的基于红外结构光的成像方法对红外图像传感器中的像素阵列进行曝光时间相等的两次连续曝光,在像素阵列处于环境光下对其进行第一次曝光,接着在红外结构光源处于开启状态时对像素阵列进行第二次曝光。在像素的第二次曝光之后所获取的像素值大于或者等于第一次曝光之后所存储的像素值时,以该像素第二次曝光之后所获取的像素值与第一次曝光之后所存储的像素值的差作为其输出值;在像素的第二次曝光之后所获取的像素值小于第一次曝光之后所存储的像素值时,以该像素第二次曝光之后所获取的像素值作为其输出值。从而减弱环境光中红外光对像素阵列中各个像素的输出值的影响,利于后续深度信息的获取。
附图说明
下面,将结合附图对本发明的优选实施方式进行进一步详细的说明,其中:
图1为本发明一实施例中基于红外结构光的成像方法的流程图;
图2为对所获取的像素的输出值进行数值映射时所采用的32段折线表一个示意图;
图3为对所获取的像素的输出值进行数值映射时所采用的32段折线表另一个示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合说明书实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参考图1,为本发明一实施例中基于红外结构光的成像方法的流程示意图。图1中基于红外结构光的成像方法包括:
在红外结构光源处于关闭状态时,对红外图像传感器的像素阵列进行第一次曝光,获取并存储所述像素阵列中各个像素的像素值;
在所述红外结构光源处于开启状态时,对所述红外图像传感器的像素阵列进行第二次曝光,获取所述像素阵列中各个像素的像素值,并判断其是否大于或者等于所存储的该像素的像素值;
若是,所述像素的输出值为第二次曝光之后所获取的该像素的像素值与所存储的该像素的像素值之差;否则,所述像素的输出值为第二次曝光之后所获取的该像素的像素值;
其中,所述第一次曝光的曝光时间与所述第二次曝光的曝光时间相等。
本实施例中,由于第二次曝光的曝光时间与第一次曝光的曝光时间相等,第一次曝光之后所存储的像素值中对应环境光中红外光部分与第二次曝光之后所获取的像素值中对应环境光中红外光部分相同,上述减法运算能够消除环境光中红外光对像素阵列中各个像素的输出值的影响。
本实施例中,红外图像传感器通过引脚输出控制信号,控制信号通过光源驱动模块控制红外结构光源的开启与关闭。具体的,所述红外图像传感器通过引脚输出一个与所述第二次曝光同步的控制信号,在进行第二次曝光时,该控制信号处于高电平,使红外结构光源处于开启状态。在其余时间(例如,进行第一次曝光期间),该控制信号处于低电平,使红外结构光源处于关闭状态。由于红外结构光源的开启与关闭,以及对像素阵列的两次连续曝光均通过红外图像传感器内部控制实现,相对于通过设置于红外图像传感器外部的后端主控实现两次曝光的技术方案,本实施例中成像方法能够明显缩短两次曝光的时间间隔,消除对运动中物体进行成像时,时间间隔可能带来的影响。
本实施例中,所述基于红外结构光的成像方法包括:对所述像素阵列中各个像素的输出值进行分段数值映射,使在每一分段内像素的输出值进行数值映射之后的像素值在该分段对应的像素值范围内。
具体的,可将像素阵列中像素的输出值按其像素值大小分为2段或者3段以上。在将像素阵列的像素的输出值分为3段时,可采用如下方式进行分段及数值映射。若所述像素的输出值大于或者等于0且小于第一阈值,其进行数值映射之后输出的像素值大于或者等于0且小于第一预设值;若所述像素的输出值大于或者等于所述第一阈值且小于或者等于第二阈值,其进行数值映射之后输出的像素值大于或者等于所述第一预设值且小于或者等于第二预设值;若所述像素的输出值大于所述第二阈值且小于或者等于所述红外图像传感器的像素值上限,其进行数值映射之后输出的像素值大于所述第二预设值且小于或者等于所述红外图像传感器的像素值上限;
所述第一阈值大于0且小于或者等于所述红外图像传感器的像素值上限的50%,所述第一预设值小于或者等于所述第一阈值;所述第二阈值大于或者等于所述红外图像传感器的像素值上限的50%且小于所述红外图像传感器的像素值上限,所述第二预设值大于或者等于所述第二阈值。在所述第一阈值等于所述第二阈值时,对应于像素阵列的像素的输出值分为2段的情况。
通过对所述像素阵列中各个像素的输出值进行分段数值映射,使像素的输出值较小时,其进行数值映射之后该像素的像素值更小;以及使像素的输出值较大时,其进行数值映射之后该像素的像素值更大;提高红外图像传感器所成像的对比度,利于后续深度信息的获取。
本实施例中,通过所述红外图像传感器对所述像素阵列中各个像素的输出值进行数值映射并输出。相对于通过设置于红外图像传感器外部的后端主控,实现对像素的输出值的数值映射并输出的方案,本实施例中成像方法能够减少后端主控的处理需求,降低对后端主控的性能要求。
本实施例中,可按照折线表对所述像素阵列中各个像素的输出值进行数值映射。折线表的段数可根据实际情况进行选择。例如,折线表为N段折线表,N为大于或者等于2的整数。折线表的段数越多,越利于数值映射之后像素的输出值的控制,更利于后端用户的应用(例如,深度信息的获取等)。而折线表的段数越多,对像素的输出值进行数值映射时所需的计算量越大。
综合考虑上述因素,本实施例中采用的折线表为32段折线表。所述32段折线表包括Li(m)和Lo(m)的2组参数,Li(m)为输入参数,Lo(m)为输出参数,每个Li(m)与一个Lo(m)相对应,m为大于或者等于0且小于或者等于32的整数,Lo(0)等于0,Lo(32)等于所述红外图像传感器的像素值上限,Li(0)大于或者等于Lo(0),Li(32)小于或者等于Lo(32)。图2中32段折线表的横坐标为像素的输出值,纵坐标为对像素的输出值进行数值映射后的像素值。例如,对于包括8bit像素的红外图像传感器,其像素值的下限为0,上限为255。相应的,32段折线表中,Lo(0)=0,Lo(32)=255。
对于第i个像素,在对其输出值进行数值映射之后所输出的像素值Vo(i)为:
当Vx(i)小于Li(0)时,Vo(i)=Li(0);
当Vx(i)大于或者等于Li(0)且小于或者等于Li(32)时,若Vx(i)大于或者等于Li(x)且小于Li(x+1),
Vo(i)=Lo(x)+(Lo(x+1)-Lo(x))*((Vx(i)-Li(x))/(Li(x+1)-Li(x));
当Vx(i)大于Li(32)时,Vo(i)=Li(32);
其中,Vx(i)为第i个像素的输出值,Vo(i)为第i个像素在对其输出值进行数值映射之后所输出的像素值,Li(x)和Li(x+1)分别为m等于x和x+1时,32段折线表中对应的输入参数;Lo(x)和Lo(x+1)分别为m等于x和x+1时,32段折线表中对应的输出参数;x为大于等于0且小于32的整数。
对于像素的输出值Vx(i)大于或者等于Li(0)、且小于或者等于Li(32)的情况,先确定像素的输出值Vx(i)于32段折线表中的位置,如位于Li(x)和Li(x+1)之间,然后根据输入参数Li(x)和Li(x+1)及其分别对应的输出参数Lo(x)和Lo(x+1)确定数值映射之后输出的该像素的像素值。
具体的,对于输出值小于第一阈值的像素,通过32段折线表的前几段,使该像素数值映射后的像素值小于第一预设值;对于输出值大于第二阈值的像素,通过32段折线表的后几段,使该像素数值映射后的像素值大于第二预设像素值、且小于红外图像传感器的像素值的上限;对于输出值大于或者等于第一阈值且小于或者等于第二阈值的像素,通过32段折线表的中间几段,使该像素数值映射后的像素值大于或者等于第一预设值且小于或者等于第二预设值。所述第一阈值可与第一预设值相同或者不同,所述第二阈值可与第二预设值相同或者不同。从而在像素的输出值小于第一阈值时,使其进行数值映射之后输出的该像素的像素值更小;在像素的输出值大于第二阈值时,使其进行数值映射之后输出的该像素的像素值更大;提高红外图像传感器所成像的对比度,利于后续深度信息的获取。
图2为对所获取的像素的输出值进行数值映射时可采用的32位折线表的一个示意图。图2的32段折线表中,像素阵列的像素的输出值分为3段,第一阈值A为红外图像传感器的像素值的上限的30%,第二阈值B为红外图像传感器的像素值上限的70%。对应的,第一预设值小于第二预设值。
图3为对所获取的像素的输出值进行数值映射时可采用的32位折线表的另一个示意图。图3的32段折线表中,像素阵列的像素的输出值分为2段,第一阈值C为红外图像传感器的像素值的上限的50%,第二阈值D为红外图像传感器的像素值上限的50%。即第一阈值C与第二阈值D相等,对应的,第一预设值等于第二预设值。
需要说明的是,本发明并不限于上述两种32段折线表。
本实施例中红外结构光成像方法能够减弱环境光中红外光对像素阵列中各个像素的输出值的影响,同时还能够通过对像素的输出值进行数值映射,提高像素所成像的对比度,利于后续深度信息的获取。
以上实施例仅供说明本发明之用,而并非是对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明范围的情况下,还可以做出各种变化和变型,因此,所有等同的技术方案也应属于本发明公开的范畴。