具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请的各实施例进行详细的阐述。然而,本领域的普通技术人员可以理解,在本申请各实施例中,为了使读者更好地理解本申请而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施例的种种变化和修改,也可以实现本申请所要求保护的技术方案。以下各个实施例的划分是为了描述方便,不应对本申请的具体实现方式构成任何限定,各个实施例在不矛盾的前提下可以相互结合相互引用。
本申请的一个实施例涉及一种深度成像方法,应用于电子设备,其中,电子设备可以为终端或服务器,本实施例以及以下个各个实施例中电子设备以服务器为例进行说明,下面对本实施例的深度成像方法的实现细节进行具体的说明,以下内容仅为方便理解提供的实现细节,并非实施本方案的必须。
本实施例的深度成像方法的具体流程可以如图1所示,包括:
步骤101,对获取到的红外图和散斑图进行人脸检测,得到散斑图的人脸区域,并从红外图中确定人脸的瞳距。
具体而言,服务器获取红外图和散斑图,由于散斑图是基于红外图生成的,因此散斑图与红外图表征的对象是相同的,即红外图与散斑图是时序对齐且像素对齐的。
在具体实现中,结构光相机对目标物体进行拍摄,得到一组对应的红外图和散斑图,服务器获取该组红外图和散斑图,并根据预设的人脸检测算法,对获取到的红外图和散斑图进行人脸检测,分别得到散斑图的人脸区域和红外图人脸区域,服务器从红外图的人脸区域中确定左眼瞳孔和右眼瞳孔的位置坐标,计算得到左眼瞳孔与右眼瞳孔之间的距离,即人脸对应的瞳距。
步骤102,根据瞳距和预设的对应关系,确定搜索范围。
具体而言,服务器在从获取到的红外图中确定出人脸对应的瞳距后,可以根据瞳距和预设的对应关系,确定搜索范围,其中,预设的对应关系为瞳距与搜索范围之间的对应关系,该对应关系预先基于采集的大量红外数据进行确定,由此得到的对应关系科学、可靠。
在具体实现中,预设的对应关系包括第一对应关系和第二对应关系,服务器在从获取到的红外图中确定出人脸对应的瞳距后,可以根据瞳距和第一对应关系,确定人机距离,人机距离即人脸与相机之间的距离,第一对应关系为瞳距与人机距离之间的对应关系,服务器确定人机距离后,可以根据人机距离和第二对应关系,确定粗视差值,第二对应关系为人机距离与粗视差值之间的对应关系,第一对应关系和第二对应关系都是经过大量数据提炼得到的,由此确定的粗视差值与真实视差值很接近,服务器根据计算出的粗视差值和预设的步长,确定搜索范围,后续在确定视差时,服务器对待匹配像素点无需在参考散斑图中进行全图匹配,只需在搜索范围内进行匹配,大幅减少了计算量,有效地提升了深度成像的效率和速度。
在一个例子中,第一对应关系,即瞳距与人机距离之间的对应关系,可以通过以下公式表示:
式中,distance_eye为瞳距,A为预设系数,Zcamera为人机距离。
在一个例子中,第二对应关系,即人机距离与粗视差值之间的对应关系,可以通过以下公式表示:
disparity=(F×L)/Zcamera
式中,Zcamera为人机距离,F为相机的红外摄像头的焦距,L为相机的基线,disparity为粗视差值。
步骤103,依次将人脸区域中的各像素点作为目标像素点,根据目标像素点的灰度值、预设的参考散斑图、预设的搜索算法和搜索范围,确定目标像素点的视差值。
具体而言,服务器在确定搜索范围后,可以遍历散斑图的人脸区域中的各像素点,依次人脸区域中的各像素点作为目标像素点,并根据目标像素点的灰度值、预设的参考散斑图、预设的搜索算法和确定出的搜索范围,确定目标像素点的视差值,即采用最佳匹配代价搜索的方式,逐像素点进行视差值计算,其中,预设的参考散斑图可以由本领域的技术人员根据实际需要进行设置,本申请的实施例对此不作具体限定。
在具体实现中,服务器确定目标像素点后,可以在预设的参考散斑图中确定同名像素点,以该同名像素点为中心,在确定出的搜索范围内基于预设的搜索算法,计算各像素点与目标像素点的匹配代价值(相关值),确定代价值最大的像素点,计算代价值最大的像素点列坐标与目标像素点的列坐标之间的差值,该差值即目标像素点的视差值。
在一个例子中,预设的搜索算法包括零均值归一化算法(Zero-normalizedcross-correlation,简称:ZNCC)。
步骤104,根据视差值和预设的恢复公式,得到目标像素点的深度值,并根据各目标像素点的深度值生成深度图。
具体而言,服务器计算出目标像素点的视差值后,可以根据目标像素点的视差值和预设的恢复公式,计算得到目标像素点的深度值,并根据各目标像素点的深度值生成深度图。
在具体实现中,预设的恢复公式如下:
式中,z0为相机与参考平面之间的距离,d为目标像素点的视差值,F为相机的红外摄像头的焦距,L为相机的基线,Z为目标像素点的深度值。
本实施例,服务器先对获取到的红外图和散斑图进行人脸检测,从散斑图中提取出人脸区域,并从红外图中确定人脸的瞳距,再根据瞳距和预设的瞳距与搜索范围的对应关系,确定出搜索范围,服务器依次将人脸区域中的各像素点作为目标像素点,并根据目标像素点的灰度值、预设的参考散斑图、预设的搜索算法和确定出的搜索范围,确定目标像素点的视差值,最后根据目标像素点的视差值和预设的恢复公式,得到目标像素点的深度值,从而根据各目标像素点的深度值生成深度图,考虑到以单目散斑结构光技术为基础的深度恢复方法,都是针对整张图像进行深度恢复,对背景区域进行深度成像浪费了大量的计算资源,而本申请的实施例,通过对红外图和散斑图进行人脸检测的方式,将前景区域和背景区域区分开,只对前景区域进行深度成像,大幅减少了计算量,提升了深度成像的速度和效率,同时,本申请的实施例用人脸检测确定瞳距和预设瞳距与搜索范围的对应关系的方式,可以完美替代pensor距离传感器的功能,大幅节约了深度相机的硬件成本。
本申请的另一个实施例涉及一种深度成像方法,下面对本实施例的深度成像方法的实现细节进行具体的说明,以下内容仅为方便理解提供的实现细节,并非实施本方案的必须,本实施例的深度成像方法的具体流程可以如图2所示,包括:
步骤201,对获取到的红外图和散斑图进行人脸检测,得到散斑图的人脸区域,并从红外图中确定人脸的瞳距。
步骤202,根据瞳距和预设的对应关系,确定搜索范围。
其中,步骤201至步骤202与步骤101至步骤102大致相同,此处不再赘述。
步骤203,依次将人脸区域中的各像素点作为目标像素点,判断目标像素点的灰度值是否大于预设的截断阈值,如果是,执行步骤204,否则,执行步骤205。
步骤204,将目标像素点的灰度值赋值为第一预设阈值。
步骤205,保持目标像素点的灰度值不变。
在具体实现中,服务器在确定搜索范围后,可以遍历散斑图的人脸区域中的各像素点,依次将人脸区域中的各像素点作为目标像素点,服务器先判断目标像素点的灰度值是否大于预设的截断阈值,如果目标像素点的灰度值大于预设的截断阈值,说明该目标像素点异常明亮,在确定视差值时可能会出现很大的误差,服务器将目标像素点的灰度值赋值为该预设的截断阈值,消除人脸区域中过亮的点,如果目标像素点的灰度值小于或等于预设的截断阈值,说明该目标像素点亮度正常,服务器保持目标像素点的灰度值不变。
在一个例子中,服务器通过以下公式为目标像素点的灰度值赋值:
式中,I(x,y)为目标像素点的灰度值,K1为预设的截断阈值,I′(x,y)为赋值后的目标像素点的灰度值。
步骤206,根据目标像素点的灰度值、预设的参考散斑图、预设的搜索算法和搜索范围,确定目标像素点的视差值。
步骤207,根据视差值和预设的恢复公式,得到目标像素点的深度值,并根据各目标像素点的深度值生成深度图。
其中,步骤206至步骤207与步骤103至步骤104大致相同,此处不再赘述。
本实施例,在所述依次将所述人脸区域中的各像素点作为目标像素点之后,所述根据所述目标像素点的灰度值、预设的参考散斑图、预设的搜索算法和所述搜索范围,确定所述目标像素点的视差值之前,还包括:判断所述目标像素点的灰度值是否大于预设的截断阈值;若所述目标像素点的灰度值大于预设的截断阈值,则将所述目标像素点的灰度值赋值为所述预设的截断阈值;若所述目标像素点的灰度值小于或等于预设的截断阈值,则保持所述目标像素点的灰度值不变,确定目标像素点的视差值时是以目标像素点的灰度值为基础的,如果目标像素点的灰度值过大,表示该目标像素点异常明亮,在确定视差值时可能会出现很大的误差,本实施例设置一个截断阈值,将灰度值大于截断阈值的像素点重新赋值,消除人脸区域中过亮的点,使得确定的视差值更加准确,从而提升深度成像的准确度。
本申请的另一个实施例涉及一种深度成像方法,下面对本实施例的深度成像方法的实现细节进行具体的说明,以下内容仅为方便理解提供的实现细节,并非实施本方案的必须,本实施例的深度成像方法的具体流程可以如图3所示,包括:
步骤301,对获取到的红外图和散斑图进行人脸检测,得到散斑图的人脸区域,并从红外图中确定人脸的瞳距。
步骤302,根据瞳距和预设的对应关系,确定搜索范围。
其中,步骤301至步骤302与步骤101至步骤102大致相同,此处不再赘述。
步骤303,依次将人脸区域中的各像素点作为目标像素点,确定以目标像素点为中心的预设窗口内像素点的数量,并计算预设窗口内的灰度值总和和灰度值均值。
具体而言,服务器在确定搜索范围后,可以遍历散斑图的人脸区域中的各像素点,依次将人脸区域中的各像素点作为目标像素点,服务器先确定以目标像素点为中心的预设窗口内像素点的数量,根据该窗口内各像素点的灰度值,计算该预设窗口内的灰度值总和和灰度值均值。
步骤304,根据预设窗口内各像素点的灰度值、灰度值总和、灰度值均值和像素点的数量,确定自适应滤波阈值。
具体而言,服务器计算出预设窗口内的灰度值总和和灰度值均值后,可以根据预设窗口内各像素点的灰度值、计算出的预设窗口内的灰度值总和、计算出的预设窗口内的灰度值均值和该窗口内像素点的数量,确定自适应滤波阈值,以对人脸区域进行自适应滤波。
在一个例子中,服务器根据预设窗口内各像素点的灰度值、灰度值总和、灰度值均值和像素点的数量,确定自适应滤波阈值,可以通过以下公式表示:
式中,sum为所述灰度值总和,windows(i,j)为所述窗口内像素点(i,j)的灰度值,m为所述灰度值均值,N为所述像素点的数量,A为预设的固定系数,K2为所述自适应滤波阈值,SAD为相似度准则,即预设窗口内各像素点的灰度值减去灰度值均值取绝对值再求和。
步骤305,判断目标像素点的灰度值是否大于自适应滤波阈值,如果是,执行步骤306,否则,执行步骤307。
步骤306,保持目标像素点的灰度值不变。
步骤307,将目标像素点的灰度值赋值为0。
在具体实现中,服务器计算出自适应滤波阈值后,可以判断目标像素点的灰度值是否大于该自适应滤波阈值,如果目标像素点的灰度值大于自适应滤波阈值,说明该目标像素点是人脸区域内部的像素点,服务器保持该目标像素点的灰度值不变,如果目标像素点的灰度值小于或等于自适应滤波阈值,说明该目标像素点与人脸区域差异明显,应该是背景区域的点,与人脸区域边缘很近,服务器将该目标像素点的灰度值赋值为0。
在一个例子中,服务器通过以下公式为目标像素点的灰度值赋值:
式中,I(x,y)为目标像素点的灰度值,K2为自适应滤波阈值,I′(x,y)为赋值后的目标像素点的灰度值。
步骤308,根据目标像素点的灰度值、预设的参考散斑图、预设的搜索算法和搜索范围,确定目标像素点的视差值。
步骤309,根据视差值和预设的恢复公式,得到目标像素点的深度值,并根据各目标像素点的深度值生成深度图。
其中,步骤308至步骤309与步骤103至步骤104大致相同,此处不再赘述。
本实施例,在所述依次将所述人脸区域中的各像素点作为目标像素点之后,所述根据所述目标像素点的灰度值、预设的参考散斑图、预设的搜索算法和所述搜索范围,确定所述目标像素点的视差值之前,还包括:确定以所述目标像素点为中心的预设窗口内像素点的数量,并计算所述预设窗口内的灰度值总和和灰度值均值;根据所述预设窗口内各像素点的灰度值、所述灰度值总和、所述灰度值均值和所述像素点的数量,确定自适应滤波阈值;判断所述目标像素点的灰度值是否大于所述自适应滤波阈值;若所述目标像素点的灰度值大于所述自适应滤波阈值,则保持所述目标像素点的灰度值不变;若所述目标像素点的灰度值小于或等于所述自适应滤波阈值,则将所述目标像素点的灰度值赋值为0,虽然通过人脸检测算法可以提取出散斑图的人脸区域,但是散斑图的人脸区域的边缘仍然可能存在背景区域的像素点,因此本实施例通过自适应滤波的方式,将与人脸区域差异明显的像素点的灰度值置为0,可以进一步提升深度成像的准确度。
本申请的另一个实施例涉及一种深度成像方法,下面对本实施例的深度成像方法的实现细节进行具体的说明,以下内容仅为方便理解提供的实现细节,并非实施本方案的必须,本实施例的深度成像方法的具体流程可以如图4所示,包括:
步骤401,对获取到的红外图和散斑图进行人脸检测,得到散斑图的人脸区域,并从红外图中确定人脸的瞳距。
步骤402,根据瞳距和预设的对应关系,确定搜索范围。
步骤403,依次将人脸区域中的各像素点作为目标像素点,判断目标像素点的灰度值是否大于预设的截断阈值,如果是,执行步骤404,否则,执行步骤405。
步骤404,将目标像素点的灰度值赋值为第一预设阈值。
步骤405,保持目标像素点的灰度值不变。
步骤406,确定以目标像素点为中心的预设窗口内像素点的数量,并计算预设窗口内的灰度值总和和灰度值均值。
步骤407,根据预设窗口内各像素点的灰度值、灰度值总和、灰度值均值和像素点的数量,确定自适应滤波阈值。
步骤408,判断目标像素点的灰度值是否大于自适应滤波阈值,如果是,执行步骤409,否则,执行步骤410。
步骤409,保持目标像素点的灰度值不变。
步骤410,将目标像素点的灰度值赋值为0。
步骤411,根据目标像素点的灰度值、预设的参考散斑图、预设的搜索算法和搜索范围,确定目标像素点的视差值。
步骤412,根据视差值和预设的恢复公式,得到目标像素点的深度值,并根据各目标像素点的深度值生成深度图。
在一个实施例中,预设的搜索算法为零均值归一化算法,服务器根据视差值和预设的恢复公式,得到目标像素点的深度值,可以通过如图5所示的各步骤实现,具体包括:
步骤501,获取视差值d对应的相关值、d-1对应的相关值和d+1对应的相关值。
具体而言,服务器计算得到目标像素点的视差值后,记视差值为d,服务器获取搜索过程中,视差值d对应的相关值、d-1对应的相关值和d+1对应的相关值。
步骤502,根据视差值、d对应的相关值、d-1对应的相关值和d+1对应的相关值,对视差值进行插值,得到目标像素点的插值后的视差值。
在具体实现中,服务器可以根据目标像素点的视差值、获取的d对应的相关值、d-1对应的相关值和d+1对应的相关值,对目标像素点的视差值进行插值,得到目标像素点的插值后的视差值,考虑到怕零均值归一化算法可以很好地衡量两个待匹配像素之间的相似程度,其相关值即代表两个像素点的相关程度,本申请的实施例根据d对应的相关值、d-1对应的相关值和d+1对应的相关值,对目标像素点的视差值进行插值处理,插值后的视差值更科学、合理,以插值后的视差值为基础进行深度成像,可以进一步提升深度成像的准确度。
在一个例子中,服务器根据目标像素点的视差值、d对应的相关值、d-1对应的相关值和d+1对应的相关值,对目标像素点的视差值进行插值,得到目标像素点的插值后的视差值,可以通过以下公式实现:
式中,d为目标像素点的视差值,d′为目标像素点的插值后的视差值,Zd为d对应的相关值,Zd-1为d-1对应的相关值,Zd+1为d+1对应的相关值。
步骤503,根据插值后的视差值和预设的恢复公式,得到目标像素点的深度值。
本实施例,所述搜索算法包括零均值归一化算法,所述根据所述视差值和预设的恢复公式,得到所述目标像素点的深度值,包括:获取所述视差值对应的相关值、d-1对应的相关值和d+1对应的相关值;其中,所述视差值为d;根据所述视差值、所述d对应的相关值、所述d-1对应的相关值和所述d+1对应的相关值,对所述视差值进行插值,得到所述目标像素点的插值后的视差值;根据所述插值后的视差值和预设的恢复公式,得到所述目标像素点的深度值,零均值归一化算法可以很好地衡量两个待匹配像素之间的相似程度,其相关值即代表两个像素点的相关程度,本申请的实施例根据d对应的相关值、d-1对应的相关值和d+1对应的相关值,对目标像素点的视差值进行插值处理,插值后的视差值更科学、合理,以插值后的视差值为基础进行深度成像,可以进一步提升深度成像的准确度。
上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包括相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该专利的保护范围内。
本申请的另一个实施例涉及一种深度成像装置,下面对本实施例的深度成像装置的实现细节进行具体的说明,以下内容仅为方便理解提供的实现细节,并非实施本方案的必须,本实施例的深度成像装置的示意图可以如图6所示,包括:检测模块601、匹配模块602和成像模块603。
检测模块601用于对获取到的红外图和散斑图进行人脸检测,得到散斑图的人脸区域,并从红外图中确定人脸的瞳距。
匹配模块602用于根据瞳距和预设的对应关系,确定搜索范围,并依次将人脸区域中的各像素点作为目标像素点,根据目标像素点的灰度值、目标像素点在预设的参考散斑图中对应的像素点的灰度值和搜索范围,确定目标像素点的视差值,其中,对应关系为瞳距与搜索范围之间的对应关系。
成像模块603用于根据目标像素点的视差值和预设的恢复公式,得到目标像素点的深度值,并根据各目标像素点的深度值生成深度图。
值得一提的是,本实施例中所涉及到的各模块均为逻辑模块,在实际应用中,一个逻辑单元可以是一个物理单元,也可以是一个物理单元的一部分,还可以以多个物理单元的组合实现。此外,为了突出本申请的创新部分,本实施例中并没有将与解决本申请所提出的技术问题关系不太密切的单元引入,但这并不表明本实施例中不存在其它的单元。
本申请另一个实施例涉及一种电子设备,如图7所示,包括:至少一个处理器701;以及,与所述至少一个处理器701通信连接的存储器702;其中,所述存储器702存储有可被所述至少一个处理器701执行的指令,所述指令被所述至少一个处理器701执行,以使所述至少一个处理器701能够执行上述各实施例中的深度成像方法。
其中,存储器和处理器采用总线方式连接,总线可以包括任意数量的互联的总线和桥,总线将一个或多个处理器和存储器的各种电路连接在一起。总线还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口在总线和收发机之间提供接口。收发机可以是一个元件,也可以是多个元件,比如多个接收器和发送器,提供用于在传输介质上与各种其他装置通信的单元。经处理器处理的数据通过天线在无线介质上进行传输,进一步,天线还接收数据并将数据传送给处理器。
处理器负责管理总线和通常的处理,还可以提供各种功能,包括定时,外围接口,电压调节、电源管理以及其他控制功能。而存储器可以被用于存储处理器在执行操作时所使用的数据。
本申请另一个实施例涉及一种计算机可读存储介质,存储有计算机程序。计算机程序被处理器执行时实现上述方法实施例。
即,本领域技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,简称:ROM)、随机存取存储器(Random Access Memory,简称:RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域的普通技术人员可以理解,上述各实施例是实现本申请的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本申请的精神和范围。