图像立体匹配方法以及双目视觉设备与流程

文档序号:18453804发布日期:2019-08-17 01:26阅读:229来源:国知局
图像立体匹配方法以及双目视觉设备与流程

本发明涉及图像处理技术领域,尤其涉及一种图像立体匹配方法、双目视觉设备。



背景技术:

深度技术有众多应用领域,例如智能手机、机器人、无人机、人脸识别等。测量深度的技术手段有很多种,例如结构光、TOF、雷达、双目立体视觉等。在这些技术中,双目立体视觉以其应用场景多样性(可以用在室内和室外空间)、小体积、低成本、高精度等特性,被众多产品采用,尤其以智能手机的应用最为广泛,开始从高端机型逐渐走向中低端机型。

立体匹配是双目立体视觉中的关键性技术,双摄像头模组从两个不同角度采集的两张图像,立体匹配算法在图像中找到对应像点,生成一张视差图,再使用三角测量法计算得到深度图。立体匹配的核心原理在于,识别和匹配像点的特性,以期最大限度地提高测量精度,从而实现类似于人眼的仿生学功能。

目前的立体匹配算法可以分为两类:局部匹配算法和全局匹配算法。在运算效率方面,局部匹配算法具有更大的优势,达成了计算量和处理效果的平衡,但仍然有很多问题,例如,硬件性能低的应用场景仍然需要更加高效的算法。



技术实现要素:

本发明就是针对上述问题,提供了一种图像立体匹配方法,包括如下步骤:

分别对第一图像和第二图像进行处理以生成第一包络图像和第二包络图像;其中,所述第一图像和第二图像是对同一场景从双目视觉设备的不同摄像头拍摄得到的灰度图像;

在视差范围内的每一种视差下,基于所述第一包络图像和第二包络图像,判断所述第一图像中的各个像素点与所述第二图像中的对应的像素点是否匹配,并根据匹配结果生成匹配标记层;

对每一层匹配标记层进行中值滤波以更新所述匹配标记层;

基于所述第一图像中每个像素点的匹配标记序列确定像素点的初始视差,以得到初始视差图;其中,所述匹配标记序列是根据更新后的匹配标记层中各个像素点对应每一种视差的匹配标记的序列;

对所述初始视差图进行图像分割,并对分割后的初始视差图进行区块融合处理以得到最终视差图。

可选的,所述分别对第一图像和第二图像进行处理以生成第一包络图像和第二包络图像包括:

分别以所述第一图像和第二图像中任一像素点作为中心像素点,并以该中心像素点坐标为中心点建立N1×N1窗口,其中N1为正整数,且为奇数;

基于第一灰度偏差并以所述中心像素点的灰度值为基准设定第一灰度范围;

分别检测所述第一图像和第二图像在N1×N1窗口内除该中心像素点之外的其他像素点的灰度值是否在所述第一灰度范围内;

若是,则该中心像素点的位置标记为1;若否,则该中心像素点的位置标记为0;

分别将所述第一图像和第二图像中所有位置标记为1的像素点中的最大灰度值和最小灰度值分别替换该中心像素点的灰度值;

基于噪声灰度偏差并以最大灰度值和最小灰度值替换所述中心像素点的灰度值的基础上,生成所述第一包络图像的上下限和第二包络图像的上下限。

可选的,所述基于所述第一包络图像和第二包络图像,判断所述第一图像中的各个像素点与所述第二图像中的对应的像素点是否匹配,并根据匹配结果生成匹配标记层包括:

根据所述第一图像中某一个像素点的第一包络图像与所述第二图像中相对应的像素点的第二包络图像是否具有交集;

若是,则确定所述第一图像中的该像素点与第二图像中相对应的像素点匹配,在该视差下,所述第一图像的该像素点的匹配标记为1;

若否,则确定所述第一图像中的该像素点与第二图像中相对应的像素点不匹配,在该视差下,所述第一图像的该像素点的匹配标记为0;

依照上述判断方法确定所述第一图像中所有像素点的匹配标记,以生成该视差下所述第一图像的匹配标记层。

可选的,所述对每一层匹配标记层进行中值滤波以更新所述匹配标记层包括:

在该层匹配标记层中,以某一标记点为中心建立N2×N2窗口,以划定空间模板P1,其中N2为正整数,且为奇数;

在所述第一图像中提取与N2×N2窗口相对应的邻域空间;

基于第二灰度偏差并以所述邻域空间内的中心像素点的灰度值为基准设定第二灰度范围;

检测所述邻域空间内除所述中心像素点之外的其他邻域像素点的灰度值是否在所述第二灰度范围内;

若是,则该邻域像素点的位置标记为1;若否,则该邻域像素点的位置标记为0,以生成模板P2;

将空间模板P1与模板P2进行点对点的非运算和与运算之后再求和;

若求和结果大于或等于1,则将该标记点的匹配标记更新为0,若求和结果小于1,则将该标记点的匹配标记更新为1,以更新所述匹配标记层。

可选的,所述基于所述第一图像中每个像素点的匹配标记序列确定像素点的初始视差,以得到初始视差图包括:

将所述第一图像中的每个像素点所对应的每一种视差的匹配标记组成该像素点的匹配标记序列;

将距离最大视差最近的标记为1的匹配标记作为最优匹配标记,并将该最优匹配标记对应的视差作为该像素点的初始视差;

基于所述第一图像中的每个像素点的初始视差得到初始视差图。

可选的,所述对所述初始视差图进行图像分割采用的算法为基于graph的图像分割算法。

可选的,对分割后的初始视差图进行区块融合处理以得到最终视差图包括:

设定区块内像素点数目的阈值;

判断分割后的初始视差图中各个区块内的像素点数目是否小于所述阈值;

将像素点数目小于阈值的区块与其相邻接的且像素点数目大于阈值的一个或多个区块做区块融合处理,以调整所述像素点数目小于阈值的区块内各个视差值,以得到最终视差图。

本发明实施例还提供了一种双目视觉设备,包括:

双目视觉摄像头,用于拍摄图像;

图像处理器和存储器,所述存储器存储有程序指令,在所述图像处理器执行所述程序指令时,进行如下操作:

分别对第一图像和第二图像进行处理以生成第一包络图像和第二包络图像;其中,所述第一图像和第二图像是对同一场景从双目视觉设备的不同摄像头拍摄得到的灰度图像;

在视差范围内的每一种视差下,基于所述第一包络图像和第二包络图像,判断所述第一图像中的各个像素点与所述第二图像中的对应的像素点是否匹配,并根据匹配结果生成匹配标记层;

对每一层匹配标记层进行中值滤波以更新所述匹配标记层;

基于所述第一图像中每个像素点的匹配标记序列确定像素点的初始视差,以得到初始视差图;其中,所述匹配标记序列是根据更新后的匹配标记层中各个像素点对应每一种视差的匹配标记的序列;

对所述初始视差图进行图像分割,并对分割后的初始视差图进行区块融合处理以得到最终视差图。

与现有技术相比,本发明技术方案至少具有以下有益效果:

本发明实施例提供的图像立体匹配方法中,先对拍摄得到的双目灰度图像(或将拍摄的彩色图像转换成灰度图像)进行处理获得第一包络图像和第二包络图像,这样可以降低后续匹配代价的计算量。然后,利用包络图像判断双目图像对应像素点之间是否匹配,并根据匹配结果生成匹配标记。由于点对点的灰度范围确定出来的匹配标记并不准确(没有参考周围像素的信息),因此采用中值滤波对匹配标记做进一步的平滑处理以更新匹配标记。

然后,基于第一图像中每个像素点的匹配标记序列确定像素点的初始视差,以得到初始视差图。由于绝大部分运算都是简单的逻辑运算,不涉及复杂的加减乘除,这对于软件计算量是极大的减少。逻辑运算生成的结果非0即1,构建一定的数据结构后,非常有利于节省存储开销。

进一步,为了提升初始视差图的效果,对初始视差图进行图像分割以及对分割后的视差图做区块融合处理,在处理过程中,会参考更加大的邻域,从而得到更加准确的视差图。

本发明实施例提供的双目视觉设备中,图像处理器执行所述程序指令时,执行上述图像立体匹配方法的操作步骤,运算效率显著提高,并能够获得更加准确的视差图。

附图说明

图1是本发明实施例的一种图像立体匹配方法的具体实施例的示意图;

图2A是本发明实施例中的一种3x3窗口的示意图;

图2B是本发明实施例中的带有位置标记的模板示意图;

图2C是本发明实施例中的包络图像的示意图;

图3是本发明实施例的一个初始视差选择示意图;

图4A是本发明实施例提供的第一种融合示意图;

图4B是本发明实施例提供的第二种融合示意图;

图4C是本发明实施例提供的第三种融合示意图。

具体实施方式

为使本发明的上述目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施方式做详细的说明。

如图1所示的是本发明实施例的一种图像立体匹配方法的具体实施例的示意图。参考图1,该方法包括如下步骤:

步骤S1:分别对第一图像和第二图像进行处理以生成第一包络图像和第二包络图像;其中,所述第一图像和第二图像是对同一场景从双目视觉设备的不同摄像头拍摄得到的灰度图像;

步骤S2:在视差范围内的每一种视差下,基于所述第一包络图像和第二包络图像,判断所述第一图像中的各个像素点与所述第二图像中的对应的像素点是否匹配,并根据匹配结果生成匹配标记层;

步骤S3:对每一层匹配标记层进行中值滤波以更新所述匹配标记层;

步骤S4:基于所述第一图像中每个像素点的匹配标记序列确定像素点的初始视差,以得到初始视差图;其中,所述匹配标记序列是根据更新后的匹配标记层中各个像素点对应每一种视差的匹配标记的序列;

步骤S5:对所述初始视差图进行图像分割,并对分割后的初始视差图进行区块融合处理以得到最终视差图。

本实施例描述的图像立体匹配方法适用于对采用双目视觉设备(使用已经校正为理想双目立体视觉系统)拍摄视场中的图像进行立体匹配,这些双目图像可以较好地满足对极线约束,从而大幅简化后续算法的复杂度,最终得到视差图。这里不限定双目视觉设备的感光芯片的种类,如果是彩色感光芯片,则把图像转换为灰度图像,以简化后续计算和降低存储空间,如果是黑白感光芯片,则可以直接使用采集到的图像进行算法处理。

如步骤S1所述,分别对第一图像和第二图像进行处理以生成第一包络图像和第二包络图像;其中,所述第一图像和第二图像是对同一场景从双目视觉设备的不同摄像头拍摄得到的灰度图像。在本实施例中,将所述第一图像作为参考图像,所述第二图像作为目标图像。

具体地,分别对第一图像和第二图像进行处理以生成第一包络图像和第二包络图像包括如下步骤:

步骤S11:分别以所述第一图像和第二图像中任一像素点作为中心像素点,并以该中心像素点坐标为中心点建立N1×N1窗口,其中N1为正整数,且为奇数;

步骤S12:基于第一灰度偏差并以所述中心像素点的灰度值为基准设定第一灰度范围;

步骤S13:分别检测所述第一图像和第二图像在N1×N1窗口内除该中心像素点之外的其他像素点的灰度值是否在所述第一灰度范围内;

步骤S14:若是,则该中心像素点的位置标记为1;若否,则该中心像素点的位置标记为0;

步骤S15:分别将所述第一图像和第二图像中所有位置标记为1的像素点中的最大灰度值和最小灰度值分别替换该中心像素点的灰度值;

步骤S16:基于噪声灰度偏差并以最大灰度值和最小灰度值替换所述中心像素点的灰度值的基础上,生成所述第一包络图像的上下限和第二包络图像的上下限。

在实践中,无论第一图像还是第二图像,通过依序遍历灰度图像中的每个像素点(作为当前的中心像素点),依照上述步骤S11~步骤S16的方法可以得到每个像素点的包络图像的上下限,从而生成所述第一包络图像(对应第一图像)和第二包络图像(对应第二图像)。

下面列举一个具体实例来描述上述步骤S11~步骤S16的过程。

结合参考图2A所示的3x3窗口的示意图、图2B所示的带有位置标记的模板示意图以及图2C所示的包络图像的示意图。

以第一图像为例,针对第一图像中任意一个像素点,以该像素点的坐标为中心点,建立一个3x3的窗口(即N1=3)。在该窗口内对应的所述第一图像的像素点的灰度值为a0~a8(如图2A所示),以中心像素点的灰度值a4为基准,以THG1为第一灰度偏差,建立第一灰度范围,如下所示:

grange1=[max(0,a4-THG1)min(a4+THG1,255)]

检测窗口内除该中心像素点之外的其它像素点的灰度值是否在所述第一灰度范围内,如果不在第一灰度范围内,则记该中心像素点的位置标志为0,反之则位置标记为1,生成一个3x3的模板(如图2B所示)。

统计窗口内位置标志为1的像素点的灰度值,找到其中的最大值和最小值,使用最大灰度值替换当前像素点的灰度值(即中心像素点的灰度值),可以生成一张新图Imax;使用最小灰度值替换当前像素点的灰度值,可以生成一张新图Imin。实际上,用中心像素点邻域内灰度的最大值和最小值替换当前灰度值相当于是考虑了噪声因素的灰度值范围,即在当前像素点真实的灰度值上加入噪声后得到当前像素点的灰度值范围。

然后,再以THG2为噪声灰度偏差,在生成的新图Imax上加上该噪声灰度偏差,成为第一包络图像的上限;在生成的新图Imin上减去该噪声灰度偏差,成为第一包络图像的下限。

对所述第一图像中的每个像素点都采用上述方法可以生成所述第一图像的第一包络图像。类似的,对所述第二图像中的各个像素点也采用上述方法可以生成所述第二图像的第二包络图像。

如步骤S2所述,在视差范围内的每一种视差下,基于所述第一包络图像和第二包络图像,判断所述第一图像中的各个像素点与所述第二图像中的对应的像素点是否匹配,并根据匹配结果生成匹配标记层。

在本实施例中,假设视差范围为[0,D],在该视差范围内,对于每一种视差,根据包络图像来判断所述第一图像中的各个像素点与所述第二图像中的对应的像素点是否匹配,并根据匹配结果生成匹配标记层。然后,叠加所有视差的匹配标记层就可以生成匹配标记容器。

其中,所述匹配标记层是指在当前视差下,所述第一图像中的所有像素点是否与所述第二图像中的对应的像素点匹配;如果匹配,则匹配标记为1,如果不匹配,则匹配标记为0;根据上述标记方式得到的由0和1的二值图像就形成一个匹配标记层。

具体来说,在本步骤包括:

步骤S21:根据所述第一图像中某一个像素点的第一包络图像与所述第二图像中相对应的像素点的第二包络图像是否具有交集;

步骤S22:若是,则确定所述第一图像中的该像素点与第二图像中相对应的像素点匹配,在该视差下,所述第一图像的该像素点的匹配标记为1;

步骤S23:若否,则确定所述第一图像中的该像素点与第二图像中相对应的像素点不匹配,在该视差下,所述第一图像的该像素点的匹配标记为0;

步骤S24:依照上述判断方法确定所述第一图像中所有像素点的匹配标记,以生成该视差下所述第一图像的匹配标记层。

例如,在视差为d时,判断第一图像中的像素点(x,y)与第二图像中的像素点(x-d,y)是否匹配的判断依据是在第一包络图像和第二包络图像中,两个像素点的灰度值的范围是否有交集,存在交集的判断标准如下:

1)第一图像中的像素点(x,y)的最小灰度值gLlow(x,y)小于或等于第二图像中的像素点(x-d,y)的最大灰度gRhigh(x-d,y),且大于或等于第二图像中像素点的最小灰度值gRlow(x-d,y);

2)第一图像中的像素点的最大灰度值gLhigh(x,y)大于或等于第二图像中像素点的最小灰度值gRlow(x-d,y),且小于或等于第二图像中的像素点(x-d,y)的最大灰度gRhigh(x-d,y)。

如果满足上述1)、2)两个条件中的任一条件,则判断第一图像中的像素点(x,y)与第二图像中的像素点(x-d,y)匹配。

采用上述方式可以在每一种视差下,对所述第一图像中的每个像素点与第二图像中相对应的像素点是否匹配做出判断,从而确定所述第一图像中所有像素点的匹配标记,以生成每一种视差下所述第一图像的匹配标记层。

但是,基于点对点的灰度范围确定出来的匹配标记并不准确,主要原因在于没有参考周围像素的信息,因此需要进一步对匹配标记做平滑处理。平滑处理的原则:参考像素灰度相近的邻域像素点,从而更新自己的匹配标记。

如步骤S3所述,对每一层匹配标记层进行中值滤波以更新所述匹配标记层。

具体来说,本步骤包括:

步骤S31:在该匹配标记层中,以某一标记点为中心建立N2×N2窗口,以划定空间模板P1,其中N2为正整数,且为奇数;

步骤S32:在所述第一图像中提取与N2×N2窗口相对应的邻域空间;

步骤S33:基于第二灰度偏差并以所述邻域空间内的中心像素点的灰度值为基准设定第二灰度范围;

步骤S34:检测所述邻域空间内除所述中心像素点之外的其他邻域像素点的灰度值是否在所述第二灰度范围内;

步骤S35:若是,则该邻域像素点的位置标记为1;若否,则该邻域像素点的位置标记为0,以生成模板P2;

步骤S36:将空间模板P1与模板P2进行点对点的非运算和与运算之后再求和;

步骤S37:若求和结果大于或等于1,则将该标记点的匹配标记更新为0,若求和结果小于1,则将该标记点的匹配标记更新为1,以更新所述匹配标记层。

例如,每个匹配标记层是一个与第一图像大小相同的二值图像(0和1)。以当前标记点(x,y)为中心,建立11x11窗口(即N2=11),这样可以划定一个空间模板P1。

在第一图像中提取与匹配标记层的N2×N2窗口相对应的邻域空间,得到该领域空间内各个像素点的灰度值,并记录其中的中心像素点的灰度值为g(x,y)。以第二灰度偏差THG2,建立第二灰度范围,如下所示:

grange2=[max(0,g(x,y)-THG2)min(g(x,y)+THG2,255)]

检测所述邻域空间内除所述中心像素点之外的其他邻域像素点的灰度值是否在所述第二灰度范围内;若是,则该邻域像素点的位置标记为1;若否,则该邻域像素点的位置标记为0,以生成模板P2。

然后,将空间模板P1与模板P2进行点对点的非运算和与运算之后再求和,计算公式如下:

根据上述计算公式,若求和结果大于或等于1,则将该标记点的匹配标记更新为0,若求和结果小于1,则将该标记点的匹配标记更新为1,以更新所述匹配标记层。

如步骤S4所述,基于所述第一图像中每个像素点的匹配标记序列确定像素点的初始视差,以得到初始视差图;其中,所述匹配标记序列是根据更新后的匹配标记层中各个像素点对应每一种视差的匹配标记的序列。

具体地,本步骤包括:

步骤S41:将所述第一图像中的每个像素点所对应的每一种视差的匹配标记组成该像素点的匹配标记序列;

步骤S42:将距离最大视差最近的标记为1的匹配标记作为最优匹配标记,并将该最优匹配标记对应的视差作为该像素点的初始视差;

步骤S43:基于所述第一图像中的每个像素点的初始视差得到初始视差图。

依照上述步骤S3的方法更新每一种视差下的匹配标记层,从而可以更新匹配标记容器。在匹配标记容器中,所述第一图像中的每个像素点有一个匹配标记序列,对应视差范围[0,D],序列中只有两种数值0和1。在匹配标记序列中,选择距离视差D(即最大视差)最近的一个标记为1的匹配标记作为最优匹配标记,并选择该匹配标记所对应的视差为初始视差,请参考如图3所示的是本发明实施例的一个初始视差选择示意图。

依照上述选择初始视差的方法可以确定所述第一图像中每个像素点的初始视差,从而得到第一图像的初始视差图。

可以看出,上述计算初始视差图的过程中,绝大部分运算都是简单的逻辑运算,不涉及复杂的加减乘除,这对于软件计算量是极大的减少。逻辑运算生成的结果非0即1,构建一定的数据结构后,非常有利于节省存储开销。

进一步,为了提升初始视差图的效果,需要对初始视差图进行后处理。后处理的过程中,会参考更大的邻域空间,从而得到更加准确的视差图。

如步骤S5所述,对所述初始视差图进行图像分割,并对分割后的初始视差图进行区块融合处理以得到最终视差图。

在本步骤中,并不限定对初始视差图进行图像分割所采用的算法,例如可以采用基于graph的图像分割算法。

具体地,本步骤包括:

步骤S51:设定区块内像素点数目的阈值;

步骤S52:判断分割后的初始视差图中各个区块内的像素点数目是否小于所述阈值;

步骤S53:将像素点数目小于阈值的区块与其相邻接的且像素点数目大于阈值的一个或多个区块做区块融合处理,以调整所述像素点数目小于阈值的区块内各个视差值,以得到最终视差图。

在对初始视差图进行图像分割时,可以预先设定区块之内的最大视差差异以及像素之间的最大视差差异。例如,设定区块之内的最大视差差异为2,这是因为视差相差过大的像素点必然属于不同物体,进而属于不同区块;设定像素之间的最大差异固定为1,这是因为相邻像素点的视差是逐渐变化的。

初始视差图被分割成为一系列的区块,区块有大有小,而其中非常小的区块则被认为是视差计算错误的区块,需要使用后处理技术计算其准确的视差值。在本实施例中,设定区块内像素点数目的阈值为N,所有小于N的区块都会被认为是匹配错误的区块。对于匹配错误的区块,需要进行区块之间的融合,以将这些匹配错误的区块与其相邻接的且像素点数目大于阈值的一个或多个区块做区块融合处理,以调整所述像素点数目小于阈值的区块内各个视差值,以得到最终视差图。

在实际应用中,区块融合处理的方式根据不同的需求可以有多种选择,在本实施例中,提供如下三种区块融合处理的情况。

第一种:

参考图4A所示的是本发明实施例提供的第一种融合示意图。如果一个大区块(像素点数目大于阈值的区块)完全包围住当前的小区块(匹配错误的区块),那么将该小区块融合进入大区块中,在大区块中找到两个区块交界处的像素点,计算它们的视差的中间值,以此作为小区块内所有像素点的视差。

第二种:

参考图4B所示的是本发明实施例提供的第二种融合示意图。如果一个大区块的三面包围住当前的小区块,那么将该小区块融合进入大区块中,在大区块中找到两个区块交界处的像素点,计算它们的视差的中间值,以此作为小区块内所有像素点的视差。

第三种:

参考图4C所示的是本发明实施例提供的第三种融合示意图。如果两个大区块共同包围住当前的小区块,那么在两个大区块中找到各自与小区块交界处的像素点,计算它们的视差的中间值,以此作为小区块内所有像素点的视差。而如果是多个大区块共同包围住当前的小区块,则也按照第三种融合方法来进行处理。

经过区块融合处理后,初始视差图中匹配错误的区块被填充了正确的视差,从而得到了最终视差图。

本发明实施例还提供了一种双目视觉设备,该双目视觉设备包括:双目视觉摄像头,用于拍摄图像;图像处理器和存储器,所述存储器存储有程序指令,在所述图像处理器执行所述程序指令时,执行如上述方法实施例中的各项操作,以实现对图像进行立体匹配的过程,从而得到图像的视差图。

综上所述,本技术方案提供的图像立体匹配方法,先对拍摄得到的双目灰度图像(或将拍摄的彩色图像转换成灰度图像)进行处理获得第一包络图像和第二包络图像,这样可以降低后续匹配代价的计算量。然后,利用包络图像判断双目图像对应像素点之间是否匹配,并根据匹配结果生成匹配标记。由于点对点的灰度范围确定出来的匹配标记并不准确(没有参考周围像素的信息),因此采用中值滤波对匹配标记做进一步的平滑处理以更新匹配标记。

然后,基于第一图像中每个像素点的匹配标记序列确定像素点的初始视差,以得到初始视差图。由于绝大部分运算都是简单的逻辑运算,不涉及复杂的加减乘除,这对于软件计算量是极大的减少。逻辑运算生成的结果非0即1,构建一定的数据结构后,非常有利于节省存储开销。

进一步,为了提升初始视差图的效果,对初始视差图进行图像分割以及对分割后的视差图做区块融合处理,在处理过程中,会参考更加大的邻域,从而得到更加准确的视差图。

本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1