Некоторое содержание этого приложения в настоящий момент недоступно.
Если эта ситуация сохраняется, свяжитесь с нами по адресуОтзывы и контакты
1. (WO2019061291) DISPARITY MAP GENERATION METHOD, SYSTEM, STORAGE MEDIUM AND COMPUTER PROGRAM PRODUCT
Document

说明书

发明名称 0001   0002   0003   0004   0005   0006   0007   0008   0009   0010   0011   0012   0013   0014   0015   0016   0017   0018   0019   0020   0021   0022   0023   0024   0025   0026   0027   0028   0029   0030   0031   0032   0033   0034   0035   0036   0037   0038   0039   0040   0041   0042   0043   0044   0045   0046   0047   0048   0049   0050   0051   0052   0053   0054   0055   0056   0057   0058   0059   0060   0061   0062   0063   0064   0065   0066   0067   0068   0069   0070   0071   0072   0073   0074   0075   0076   0077   0078   0079   0080   0081   0082   0083   0084   0085   0086   0087   0088   0089   0090   0091   0092   0093   0094   0095   0096   0097   0098   0099   0100   0101   0102   0103   0104   0105   0106  

权利要求书

1   2   3   4   5   6   7   8   9   10   11   12  

附图

0001   0002   0003   0004   0005   0006   0007  

说明书

发明名称 : 生成视差图的方法、系统、存储介质和计算机程序产品

[0001]
版权申明
[0002]
本专利文件披露的内容包含受版权保护的材料。该版权为版权所有人所有。版权所有人不反对任何人复制专利与商标局的官方记录和档案中所存在的该专利文件或者该专利披露。

技术领域

[0003]
本申请涉及图像处理领域,更为具体地,涉及一种生成视差图的方法、系统、存储介质和计算机程序产品。

背景技术

[0004]
半全局匹配(semi-global matching,SGM)算法是一种常用的生成视差图的算法。SGM算法可应用于双目视觉系统。SGM算法可以根据双目视觉系统采集到的左视图和右视图计算视差图。进一步地,双目视觉系统可以根据SGM算法计算出的视差图,得到当前所处场景的深度信息。
[0005]
在计算视差图中任意一个像素的视差值的过程中,为了保证该像素的视差值的准确性,SGM算法通常需要考虑该像素周围各个方向的像素对该像素的视差值的影响。因此,在计算过程中,SGM算法通常需要围绕该像素执行全方向(或称全通道(full path))的循环迭代。常见的SGM算法包括基于8个迭代方向的SGM算法。该8个迭代方向的分布如图1所示。
[0006]
SGM算法需要计算视差图中的像素在全方向的循环迭代的代价(cost)来计算该像素的视差值。视差图中的任意一个像素在任一迭代方向的代价的计算需要依赖该像素周围的位于该迭代方向的像素的视差值。但是,图像通常是逐行或逐列处理的,因此,在计算某个像素的代价时,该像素周围的某些迭代方向的像素可能还未被处理,暂时还无法得到这些迭代方向的迭代信息,从而无法计算出该像素的视差值。因此,图像处理系统需要在内存中暂时缓存目前已经得到的迭代信息(或称中间结果),等得到该像素在全方向的迭代信息之后才可以对该像素进行进一步处理,得出该像素的视差值。以图像按照从上向下逐行处理为例,在计算视差图中的某个像素的代价时,位于该像素下一行的像素的视差值还未得到,从而导致该像素的视差值也暂时 无法确定。因此,基于SGM算法计算视差图的过程需要缓存大量的中间结果,导致内存的占用量较大。
[0007]
发明内容
[0008]
本申请提供一种生成视差图的方法、系统、存储介质和计算机程序产品,以提高基于SGM加速算法计算出的视差图的准确度。
[0009]
第一方面,提供一种生成视差图的方法,包括:获取第一左视图和第一右视图;根据所述第一左视图和所述第一右视图,通过SGM加速算法,生成第一初始视差图;根据所述第一左视图和所述第一右视图,生成第二左视图和第二右视图,其中所述第二左视图和所述第二右视图分别与所述第一左视图和所述第一右视图旋转180度之后得到的视图相同,或者所述第二左视图和所述第二右视图分别与所述第一右视图和所述第一左视图旋转180度之后得到的视图相同;根据所述第二左视图和所述第二右视图,通过所述SGM加速算法,生成第二初始视差图;根据所述第一初始视差图和所述第二初始视差图,确定所述第一左视图和所述第一右视图的目标视差图。
[0010]
第二方面,提供一种图像处理系统,包括:存储器,用于存储程序;处理器,用于执行所述存储器中存储的程序,当所述程序被执行时,所述处理器用于执行如第一方面所述的方法。
[0011]
第三方面,提供一种生成视差图的装置,包括用于执行第一方面所述的方法的模块。
[0012]
第四方面,提供一种计算机可读存储介质,包括计算机指令,当所述计算机指令在计算机上运行时,使得所述计算机执行如第一方面所述的方法。
[0013]
第五方面,提供一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机执行如第一方面所述的方法。
[0014]
本申请基于非全方向的SGM加速算法计算视差图,可以降低视差图计算过程对内存的占用量。假设SGM加速算法是基于n个迭代方向的SGM加速算法,则第一初始视差图相当于基于该n个迭代方向计算出的视差图,第二初始视差图相当于基于该n个方向相反的n个方向计算出的视差图。由于对第一初始视差图和第二初始视差图融合后得到的目标视差图考虑了更多的迭代方向,因此本申请提供的技术方案在降低视差图计算过程对内存的占用量的前提下,还可以提高计算出视差图的准确性。

附图说明

[0015]
图1是SGM算法的基本原理的示例图。
[0016]
图2是本发明一个实施例提供的生成视差图的方法的示意性流程图。
[0017]
图3是图2中的步骤250的一种实现方式的示例图。
[0018]
图4是图2中的步骤250的另一实现方式的示例图。
[0019]
图5是本发明另一实施例提供的生成视差图的方法的示意性流程图。
[0020]
图6是图5中的步骤540的一种实现方式的示例图。
[0021]
图7是本发明实施例提供的图像处理系统的示意性结构图。

具体实施方式

[0022]
本申请可应用于需要获取视差图的任意图像处理系统。该图像处理系统例如可以是具有视觉感知功能的无人机、机器人、无人驾驶汽车、潜水器等。
[0023]
本申请提及的SGM算法,有时也可称为半全局块匹配(semi-global block matching,SGBM)算法。
[0024]
为了降低SGM算法对内存占用量,提出了一种SGM加速算法。SGM加速算法无需对像素执行全方向的循环迭代,SGM加速算法对迭代方向的选取使得视差图中的像素视差值的计算无需或较少依赖该像素周围的还未计算出视差值的像素,从而可以降低视差图计算过程的内存占用量。
[0025]
为了便于理解,先结合图1,以SGM算法为基于8个迭代方向的SGM算法,SGM加速算法为基于4个迭代方向的SGM加速算法为例,对SGM算法和SGM加速算法进行介绍。
[0026]
如图1所示,假设图像处理系统按照由上至下逐行计算视差图10中的各行像素的视差值,且在计算每一行的像素时,按照从左到右的方式逐个计算该每一行中的像素的视差值。
[0027]
情况一:基于8个迭代方向的SGM算法计算视差图10中的像素P的视差值。
[0028]
如图1所示,该8个迭代方向包括从右上到左下的方向L0,从上到下的方向L1,从左上到右下的方向L2,从左到右的方向L3,从左下到右上的方向L4,从下到上的方向L5,从右下到左上的方向L6,从右到左的方向L7。SGM算法需要基于像素P周边的8个迭代方向的迭代信息(如8个方 向的像素的匹配代价)计算该像素P的视差值。但是,当计算像素P的视差值时,受到视差图10的像素处理方式(由上到下逐行处理,每一行像素从左到右逐个处理)的限制,位于像素P右方和下方(即L4、L5、L6、L7)的像素还未被处理,无法得到这些方向的迭代信息,从而无法得到像素P的视差值。因此,在SGM算法中,需要缓存大量的临时结果,直到像素P周边的8个迭代方向的迭代信息均确定之后才能计算出像素P的视差值。这样一来,当视差图10的尺寸较大时,就需要缓存大量的临时结果,导致内存的压力较大。
[0029]
情况二:基于4个迭代方向的SGM加速算法计算视差图10中的像素P的视差值。
[0030]
该4个迭代方向例如可以是从右上到左下的方向L0,从上到下的方向L1,从左上到右下的方向L2,以及从左到右的方向L3。SGM加速算法可以基于像素P周边的4个迭代方向的迭代信息计算像素P的视差值。参见图1,在计算像素P的视差值时,位于像素P周边的L0、L1、L2、L3方向的像素均已被处理,这些方向的迭代信息均已获得,因此,可以直接计算出像素P的视差值,无需缓存大量的临时结果。与基于全方向的SGM算法相比,SGM加速算法通过舍弃一些迭代方向的迭代信息,降低了视差图计算过程对内存容量的要求。当然,SGM加速算法基于的迭代方向也可以包括如图1所示的迭代方向L7。从图1可以看出,虽然在计算像素P的视差值时,位于迭代方向L7的像素还未被处理,因此,迭代方向L7的迭代信息还未得到,但由于像素P右边的像素与像素P位于同一行,按照像素的处理顺序,很快就可以获得迭代方向L7的迭代信息,不会对内存造成过大的压力,因此,即使将迭代方向L7作为SGM加速算法所基于的一个迭代方向,仍可以起到减少内存压力的效果。
[0031]
需要说明的是,上文是以SGM算法所基于的全方向为8方向为例进行举例说明的,但本发明实施例不限于此,例如,SGM算法所基于的全方向也可以是16方向(相邻两个方向之间的夹角为22.5度)等。
[0032]
同理,上文是以SGM加速算法所基于的方向包括L0-L3在内的4个迭代方向,或包括L0-L3、L7在内的5个迭代方向为例进行举例说明的,但本发明实施例不限于此。下面给出SGM加速算法所基于的迭代方向的一些示例。
[0033]
作为一个示例,SGM加速算法可以基于n个迭代方向计算任一视差图中的像素的视差值。n个迭代方向可以包含目标迭代方向集合中的一个或多个迭代方向。目标迭代方向集合可以为迭代方向集合一至迭代方向集合四中的任意一个迭代方向集合。
[0034]
迭代方向集合一可以包括从左到右的迭代方向,从右到左的迭代方向,以及方向朝下的各个迭代方向。方向朝下的迭代方向可以包括方向由正上到正下的迭代方向,如图1中的迭代方向L1。方向朝下的各个迭代方向也可以包括方向由斜上到斜下的迭代方向,如图1中的迭代方向L0、L2。图1是以全方向包含8个迭代方向为例进行说明的,实际上,视差图中的像素视差值的计算可以基于更多方向的迭代信息,如16方向(相邻两个方向之间的夹角为22.5度)的迭代信息。在这种情况下,方向朝下的迭代方向还可以包括L0-L1之间的迭代方向,L1-L2之间的迭代方向等。例如,当图像处理系统的像素处理方式为“由上至下逐行处理各行像素,从左到右(或从右到左)逐个处理每行中的像素时”,可以选取迭代方向集合一作为SGM加速算法所基于的迭代方向。
[0035]
迭代方向集合二可以包括从左到右的迭代方向,从右到左的迭代方向,以及方向朝上的各个迭代方向。方向朝上的迭代方向可以包括方向由正下到正上的迭代方向,如图1中的迭代方向L1。方向朝上的各个迭代方向也可以包括方向由斜上到斜下的迭代方向,如图1中的迭代方向L0、L2。图1是以全方向包含8个迭代方向为例进行说明的,实际上,视差图中的像素视差值的计算可以基于更多方向的迭代信息,如16方向的迭代信息。在这种情况下,方向朝上的迭代方向还可以包括L3-L4之间的迭代方向,L4-L5之间的迭代方向等。例如,当图像处理系统的像素处理方式为“由下至上逐行处理各行像素,从左到右(或从右到左)逐个处理每行中的像素时”,可以选取迭代方向集合二作为SGM加速算法所基于的迭代方向。
[0036]
迭代方向集合三可以包括从上到下的迭代方向,从下到上的迭代方向,以及方向朝右的各个迭代方向。方向朝右的迭代方向可以包括方向由正左到正右的迭代方向,如图1中的迭代方向L3。方向朝右的各个迭代方向也可以包括方向由斜左到斜右的迭代方向,如图1中的迭代方向L2、L4。图1是以全方向包含8个迭代方向为例进行说明的,实际上,视差图中的像素视差值的计算可以基于更多方向的迭代信息,如16方向的迭代信息。在这种 情况下,方向朝右的迭代方向还可以包括L1-L2之间的迭代方向,L3-L4之间的迭代方向等。例如,当图像处理系统的像素处理方式为“从左到右逐列处理各行像素,由上到下(或由下到上)逐个处理每列中的像素时”,可以选取迭代方向集合三作为SGM加速算法所基于的迭代方向。
[0037]
迭代方向集合四可以包括从上到下的迭代方向,从下到上的迭代方向,以及方向朝左的各个迭代方向。方向朝左的迭代方向可以包括方向由正右到正左的迭代方向,如图1中的迭代方向L7。方向朝左的迭代方向也可以包括方向由斜右到斜左的迭代方向,如图1中的迭代方向L0、L6。图1是以全方向包含8个迭代方向为例进行说明的,实际上,视差图中的像素视差值的计算可以基于更多方向的迭代信息,如16方向的迭代信息。在这种情况下,方向朝左的迭代方向还可以包括L0-L1之间的迭代方向,L6-L7之间的迭代方向等。例如,当图像处理系统的像素处理方式为“从右到左逐列处理各行像素,由上到下(或由下到上)逐个处理每列中的像素时”,可以选取迭代方向集合四作为SGM加速算法所基于的迭代方向。
[0038]
进一步地,在一些实施例中,如图1所示,迭代方向集合一可以包括从左到右的迭代方向,从左上到右下的迭代方向,从上到下的迭代方向,从右上到左下的迭代方向,以及从右到左的迭代方向。或者,迭代方向集合二可以包括从左到右的迭代方向,从左下到右上的迭代方向,从下向上的迭代方向,从右下到左上的迭代方向,以及从右到左的迭代方向。或者,迭代方向集合三可以包括从上到下的迭代方向,从左上到右下的迭代方向,从左到右的迭代方向,从左下到右上的迭代方向,以及从下到上的迭代方向。或者,迭代方向集合四可以包括从上到下的迭代方向,从右上到左下的迭代方向,从右到左的迭代方向,从右下到左上的迭代方向,以及从下到上的迭代方向。
[0039]
作为另一个示例,SGM加速算法所基于的n个迭代方向可以包括从左到右的迭代方向,从左上到右下的迭代方向,从上到下的迭代方向,从右上到左下的迭代方向。
[0040]
作为又一示例,SGM加速算法所基于的n个迭代方向可以包括从左到右的迭代方向,从左下到右上的迭代方向,从下向上的迭代方向,从右下到左上的迭代方向。
[0041]
上文指出,与SGM算法相比,SGM加速算法通过舍弃一些方向的迭代信息达到了降低视差图计算过程对内存的占用量的目的。但是,这种处理方 式会降低计算出的视差值准确性。为了能够提高基于SGM加速算法计算出的视差值的准确性,下面结合图2,对本发明实施例进行详细描述。
[0042]
图2是本发明一个实施例提供的生成视差图的方法的示意性流程图。图2的方法可以由任意图像处理系统执行。图2的方法可以包括步骤210-250,下面分别对这些步骤进行详细描述。
[0043]
在步骤210中,获取第一左视图和第一右视图。本发明实施例对第一左视图和第一右视图的获取方式不做具体限定。例如,可以通过双目立体视觉系统对当前视角或当前场景进行图像采集,得到该第一左视图和第一右视图。
[0044]
在步骤220中,根据第一左视图和第一右视图,通过SGM加速算法,生成第一初始视差图。
[0045]
本发明实施例对步骤220中的SGM加速算法所基于的迭代方向不做具体限定,可以从上文任一实施例提供的迭代方向集合中选取。
[0046]
本发明实施例对步骤220的实现方式不做具体限定。例如,可以先根据第一左视图和第一右视图计算匹配代价图(matching cost图)。该匹配代价图可以看成是一种三维图。假设将匹配代价图放置到xyz坐标系中,则xy平面可以表示第一左视图的各像素的位置,z轴可表示在第一右视图中以不同偏移量搜索第一左视图中的每个像素的匹配像素(或称对应像素)的代价。接着,可以根据该匹配代价图计算上述第一初始视差图。第一初始视差图中的各像素具有对应的视差值,像素的视差值可通过第一左视图和第一右视图中的最匹配的像素之间的偏移量表示(第一左视图和第一右视图的最匹配的像素可指匹配代价图中的匹配代价最小的像素)。在计算视差图中的各像素的最小匹配代价时,SGM加速算法可以在匹配代价图的xy平面执行非全方向(SGM加速算法的迭代方向的选取方式参见上文的描述)的迭代,并基于非全方向的迭代信息(匹配代价)计算每个像素的最小匹配代价,从而将该最小匹配代价对应的偏移量作为该像素的视差值。
[0047]
以匹配代价图中的像素(x,y)为例,cost(x,y,0)表示偏移量为0时像素(x,y)的匹配代价,cost(x,y,1)表示偏移量为1时像素(x,y)的匹配代价,cost(x,y,2)表示偏移量为2时像素(x,y)的匹配代价,cost(x,y,3)表示偏移量为3时像素(x,y)的匹配代价,cost(x,y,4)表示偏移量为4时像素(x,y)的匹配代价……。假设在像素(x,y)的所有匹配代价中,cost(x,y,2)的取值最小,则可以将第一初始视差 图中的像素(x,y)的视差值设定为2。
[0048]
在步骤230中,根据第一左视图和第一右视图,生成第二左视图和第二右视图。
[0049]
可选地,在一些实施例中,第二左视图和第二右视图分别与第一左视图和第一右视图旋转180度之后得到的视图相同。本发明实施例对第二左视图的生成方式不做具体限定。例如,可以将第一左视图旋转180度,从而得到第二左视图。又如,可以参考第一左视图的各像素的像素值,生成一张新的第二左视图,使得第二左视图与直接将第一左视图旋转180度之后得到的视图相同。同样地,本发明实施例对第二右视图的生成方式不做具体限定。例如,可以将第一右视图旋转180度,从而得到第二右视图。又如,可以参考第一右视图的各像素的像素值,生成一张新的第二右视图,使得第二右视图与直接将第一右视图旋转180度之后得到的视图相同。
[0050]
可选地,在另一些实施例中,第二左视图和第二右视图分别与第一右视图和第一左视图旋转180度之后得到的视图相同。本发明实施例对第二左视图的生成方式不做具体限定。例如,可以将第一右视图旋转180度,从而得到第二左视图。又如,可以参考第一右视图的各像素的像素值,生成一张新的第二左视图,使得第二左视图与直接将第一右视图旋转180度之后得到的视图相同。同样地,本发明实施例对第二右视图的生成方式不做具体限定。例如,可以将第一左视图旋转180度,从而得到第二右视图。又如,可以参考第一左视图的各像素的像素值,生成一张新的第二右视图,使得第二右视图与直接将第一左视图旋转180度之后得到的视图相同。
[0051]
在步骤240中,根据第二左视图和第二右视图,通过SGM加速算法,生成第二初始视差图。
[0052]
应理解,步骤240中使用的SGM加速算法与步骤220中使用的SGM加速算法所基于的迭代方向保持不变。以图1为例,假设SGM加速算法是基于L0-L3的SGM加速算法,则步骤220计算出的第一初始视差图考虑了L0-L3共4个方向的迭代信息。虽然步骤240与步骤220使用的SGM加速算法所基于的迭代方向保持不变,但受到第二左视图和第二右视图的生成方式的影响(与第一左视图和第一右视图具有180度的旋转关系),步骤240计算出的第二初始视差图相当于考虑了与L0-L3相反的4个方向,即L4-L7。
[0053]
步骤240的具体实现方式与步骤220类似,也可先计算第二左视图和第 二右视图的匹配代价图,再基于第二左视图和第二右视图的匹配代价图计算第二初始视差图,具体计算过程可以参见步骤220的描述,为了简洁,此处不再详述。
[0054]
在步骤250中,根据第一初始视差图和第二初始视差图,确定第一左视图和第一右视图的目标视差图。步骤250可以理解为第一初始视差图和第二初始视差图的融合过程。目标视差图可以理解为第一左视图和第一右视图的最终的视差图。
[0055]
假设SGM加速算法基于n个迭代方向,则第一初始视差图相当于基于该n个迭代方向计算出第一初始视差图,第二初始视差图相当于基于该n个方向相反的n个方向计算出第二初始视差图。由于对第一初始视差图和第二初始视差图融合后得到第一左视图和第一右视图的目标视差图考虑了更多的迭代方向,因此可以提高计算出的视差图的准确性,甚至可以达到与SGM算法近似的准确性。与此同时,本发明实施例仍保留了SGM加速算法的优势,整个计算过程无需像SGM算法那样存储大量的临时结果,内存压力较小。
[0056]
步骤250的实现方式可以有多种。作为一个示例,可以以第一初始视差图和第二初始视差图为基础,生成一幅新的目标视差图。作为另一个示例,可以先将第一初始视差图和第二初始视差图中的一幅视差图作为基准视差图,另一幅视差图作为参考视差图;然后,以参考视差图中的视差值更新基准视差图中的视差图;最后,将更新后的基准视差图作为目标视差图。下面结合图3-图4,对步骤250的实现方式进行详细的举例说明。
[0057]
可选地,在一些实施例中,如图3所示,步骤250可包括步骤310-360。下面对步骤310-360进行详细描述。
[0058]
在步骤310中,从参考视差图中选取M个参考像素。参考视差图可以为第一初始视差图和第二初始视差图中的任一视差图。
[0059]
本发明实施例对M的取值不做具体限定,可以是不小于1的任意正整数。换句话说,本发明实施例可以从参考视差图中选取部分像素作为参考像素,也可以从参考视差图中选取全部像素作为参考像素。
[0060]
在步骤320中,从基准视差图中选取M个像素。基准视差图是第一初始视差图和第二初始视差图中的除参考视差图之外的另一视差图,且M个参考像素与M个像素一一对应。
[0061]
应理解,图3是以先执行步骤310,再执行步骤320为例进行举例说明的,但本发明实施例对步骤310和步骤320的执行顺序不做具体限定,只要从参考视差图和基准视差图中选取出具有对应关系的M对像素即可。例如,可以先从参考视差图中选取M个参考像素,再从基准视差图中选取该M个参考像素对应的M个像素。又如,可以先从基准图像中选取M个像素,再从参考视差图中选取该M个像素对应的M个参考像素。
[0062]
还应理解,本发明实施例对基准视差图和参考视差图中的对应像素的确定方式不做具体限定。通常来讲,SGM加速算法会以左视图为基准计算视差图。如果第二左视图和第二右视图分别为第一左视图和第一右视图旋转180度之后得到的视图,则步骤220得到的第一初始视差图是以第一左视图为基准计算得到的视差图,步骤240也是以第一左视图(旋转180度之后的第一左视图)为基准计算得到的视差图。由于第一初始视差图和第二初始视差图的基准相同,则第一初始视差图的像素(x,y)的对应像素为第二初始视差图反转180度之后得到的视差图的像素(x,y)。如果第二左视图和第二右视图分别为第一右视图和第一左视图旋转180度之后得到的视图,则步骤220得到的第一初始视差图是以第一左视图为基准计算得到的视差图,步骤240是以第一右视图(旋转180度之后的第一右视图)为基准计算得到的视差图。由于第一初始视差图和第二初始视差图分别是以第一左视图和第一右视图为基准得到的视差图,则第一初始视差图的像素(x,y)的对应像素为第二初始视差图反转180度之后得到的更新后的第二初始视差图的像素(x-d1,y),其中d1为第一初始视差图的像素(x,y)的视差值。同理,更新后的第二初始视差图的像素(x,y)的对应像素为第一初始视差图的像素(x+d2,y),其中d2为第二初始视差图的像素(x,y)的视差值。
[0063]
在步骤330中,确定M个像素中的每个像素的视差值,以及M个参考像素中的与该每个像素对应的参考像素的视差值。
[0064]
在步骤340中,如果该每个像素的视差值为无效值,且该每个像素对应的参考像素的视差值为有效值,更新该基准视差图,使得该每个像素的视差值等于该每个像素对应的参考像素的视差值。
[0065]
应理解,在基于SGM加速算法计算视差图中各像素的视差值的过程中,由于计算误差等原因,某些像素的视差值可能没有计算出来,或者计算出的某些像素的视差值的取值明显不合理。在视差图中,可以将这些像素的视差 值标记为无效值。视差图中的无效值越多,基于该视差图得到的深度图可能越不准确。
[0066]
本发明实施例降低了基准视差图中的视差值为无效值的像素的数量,从而提高了基准视差图的质量。
[0067]
在步骤350中,如果该每个像素的视差值与该每个像素对应的参考像素的视差值均为无效值,保持该每个像素的视差值为无效值。
[0068]
在步骤360中,如果该每个像素的视差值与该每个像素对应的参考像素的视差值均为有效值,更新基准视差图,使得该每个像素的视差值为该每个像素的视差值与该每个像素对应的参考像素的视差值的均值。
[0069]
应理解,步骤350-360为可选步骤,在一些实施例中,图3的方法可以不包括步骤350-360。
[0070]
图3实施例中,更新后的基准视差图即可作为第一左视图和第一右视图的目标视差图。
[0071]
可选地,在另一些实施例中,如图4所示,步骤250可包括步骤410-450。下面对步骤410-450进行详细描述。
[0072]
在步骤410中,从基准视差图中选取K个像素。基准视差图是第一初始视差图和第二初始视差图中的任意一个视差图。
[0073]
本发明实施例对K的取值不做具体限定,可以是不小于1的任意正整数。换句话说,本发明实施例可以从参考视差图中选取部分像素作为参考像素,也可以从参考视差图中选取全部像素作为参考像素。
[0074]
在步骤420中,从参考视差图中选取K个参考像素,其中参考视差图为第一初始视差图和第二初始视差图中的除基准视差图之外的另一视差图,且K个参考像素与K个像素一一对应。
[0075]
应理解,图4是以先执行步骤410,再执行步骤420为例进行举例说明的,但本发明实施例对步骤410和步骤420的执行顺序不做具体限定,只要从参考视差图和基准视差图中选取出具有对应关系的K对像素即可。例如,可以先从基准图像中选取K个像素,再从参考视差图中选取该K个像素对应的K个参考像素。又如,可以先从参考视差图中选取K个参考像素,再从基准视差图中选取该K个参考像素对应的K个像素。
[0076]
还应理解,本发明实施例对基准视差图和参考视差图中的对应像素的确定方式不做具体限定。通常来讲,SGM加速算法会以左视图为基准计算视 差图。如果第二左视图和第二右视图分别为第一左视图和第一右视图旋转180度之后得到的视图,则步骤220得到的第一初始视差图是以第一左视图为基准计算得到的视差图,步骤240也是以第一左视图(旋转180度之后的第一左视图)为基准计算得到的视差图。由于第一初始视差图和第二初始视差图的基准相同,则第一初始视差图的像素(x,y)的对应像素为第二初始视差图反转180度之后得到的视差图的像素(x,y)。如果第二左视图和第二右视图分别为第一右视图和第一左视图旋转180度之后得到的视图,则步骤220得到的第一初始视差图是以第一左视图为基准计算得到的视差图,步骤240是以第一右视图(旋转180度之后的第一右视图)为基准计算得到的视差图。由于第一初始视差图和第二初始视差图是分别以第一左视图和第一右视图为基准得到的视差图,则第一初始视差图的像素(x,y)的对应像素为第二初始视差图反转180度之后得到的更新后的第二初始视差图的像素(x-d1,y),其中d1为第一初始视差图的像素(x,y)的视差值。同理,更新后的第二初始视差图的像素(x,y)的对应像素为第一初始视差图的像素(x+d2,y),其中d2为第二初始视差图的像素(x,y)的视差值。
[0077]
在步骤430中,确定K个像素中的每个像素的视差值,以及K个参考像素中的与该每个像素对应的参考像素的视差值。
[0078]
在步骤440中,如果该每个像素的视差值与该每个像素对应的参考像素的视差值的差异大于预设阈值,更新基准视差图,使得该每个像素的视差值为无效值。
[0079]
如果基准视差图中的某个像素与参考视差图中的与该像素对应的参考像素的视差值差异较大,则该像素的视差值的可信度较低。如果将可信度较低的视差值引入后续的深度图计算,可能会导致计算出的深度信息不可靠。本发明实施例将基准视差图中的可信度较低的像素的视差值标记为无效值,可以一定程度上提升深度信息的可靠性。
[0080]
在步骤450中,如果该每个像素的视差值和该每个像素对应的参考像素的视差值的差异小于或等于预设阈值,更新基准视差图,使得该每个像素的视差值为该每个像素的视差值和该每个像素对应的参考像素的视差值的均值。
[0081]
应理解,步骤450是可选步骤。在一些实施例中,图4的方法可以不执行450。
[0082]
图4实施例中,更新后的基准视差图即可作为第一左视图和第一右视图的目标视差图。
[0083]
下面结合具体例子,更加详细地描述本发明实施例。应注意,图5-图6的例子仅仅是为了帮助本领域技术人员理解本发明实施例,而非要将本发明实施例限于所例示的具体数值或具体场景。本领域技术人员根据所给出的图5-图6的例子,显然可以进行各种等价的修改或变化,这样的修改或变化也落入本发明实施例的范围内。
[0084]
图5是本发明另一实施例提供的生成视差图的方法的示意性流程图。图5的实施例中,SGM加速算法是4迭代方向的SGM加速算法,且该4个迭代方向为如图1所示的迭代方向L0-L3。图5的方法包括步骤510-540,下面分别对步骤510-540进行详细描述。
[0085]
在步骤510中,根据第一左视图和第一右视图,通过SGM加速算法,得到第一初始视差图。
[0086]
在步骤520中,将第一右视图旋转180度,得到第二左视图,并将第一左视图旋转180度,得到第二右视图。
[0087]
在步骤530中,根据第二左视图和第二右视图,通过SGM加速算法,得到第二初始视差图。
[0088]
在步骤540中,将第一初始视差图和第二初始视差图融合,得到目标视差图。
[0089]
步骤510获取到的第一初始视差图考虑的是L0-L3共4个迭代方向的迭代信息。通过步骤520的旋转操作,步骤530获取到的第二初始视差图考虑的是与L0-L3相反的4个方向,即L4-L7的迭代信息。这样一来,综合步骤510和步骤530,本发明实施例基于SGM加速算法获取到了8个方向的迭代信息,与基于8个迭代方向的SGM算法所获取的迭代信息量相当。因此,本发明实施例最终得到的目标视差图可以达到与基于8个迭代方向的SGM算法近似的性能。
[0090]
应理解,第二初始视差图是将第一左视图和第二右视图旋转180度之后再进行视差计算得到的视差图。因此,在执行步骤540时,可以先将第二初始视差图反向旋转180度,得到更新后的第二初始视差图,这样可以简化两幅初始视差图中的对应像素的查找过程。当然,在一些实施例中,也可以不对第二初始视差图进行反向旋转,只需要在确定两幅初始视差图中的对应像 素时将该180度的旋转关系考虑在内即可。
[0091]
下面以图6为例对步骤540的实现方式进行举例说明。应理解,图6中的基准视差图是第一初始视差图,参考视差图是将第二初始视差图旋转180度之后得到的更新后的视差图。图6的实施例将步骤540的实现过程分为两次校验过程,其中步骤542对应第一次校验过程,步骤544对应第二次校验过程。
[0092]
在步骤542中,遍历参考视差图中的像素(x,y,d2),查找基准视差图中的与像素(x,y,d2)对应的像素(x+d2,y,d1),其中d1表示基准视差图中的像素(x+d2,y)的视差值,d2表示参考视差图中的像素(x,y)的视差值。根据d2的取值更新d1的取值。例如,如果d1为无效值,则d1=d2;否则,d1保持不变。
[0093]
在步骤544中,遍历基准视差图中的像素(x,y,d3),查找参考视差图中的与像素(x,y,d3)对应的像素(x-d3,y,d4),其中d3表示基准视差图中的像素(x,y)的视差值,d4表示参考视差图中的像素(x-d3,y)的视差值。根据d3和d4的取值更新d1的取值。
[0094]
例如,可以执行如下流程:
[0095]
IF(d4=无效值),则d3保持不变;
[0096]
ELSE IF abs(d3-d4)>max_diff_thresh,则将d3设置为无效值;
[0097]
ELSE d3=(d3+d4)/2。
[0098]
abs(d3-d4)表示d3和d4之差的绝对值。max-diff_thresh表示d3和d4之间差异的预设阈值。该预设阈值可以根据经验或实际需要设定。
[0099]
上文中结合图1至图6,详细描述了本发明实施例提供的生成视差图的方法,下面将结合图7,详细描述本发明实施例提供的图像处理系统。
[0100]
图7是本发明实施例提供的图像处理系统的示意性结构图。图7的图像处理系统700包括存储器710和处理器720。存储器710可用于存储程序。处理器720可用于执行所述存储器中存储的程序。当存储器710中存储的程序被执行时,所述处理器720可用于执行上文任一实施例描述的生成视差图的方法。
[0101]
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其他任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加 载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如数字视频光盘(digital video disc,DVD))、或者半导体介质(例如固态硬盘(solid state disk,SSD))等。
[0102]
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
[0103]
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0104]
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0105]
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0106]
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

权利要求书

[权利要求 1]
一种生成视差图的方法,其特征在于,包括: 获取第一左视图和第一右视图; 根据所述第一左视图和所述第一右视图,通过半全局匹配SGM加速算法,生成第一初始视差图; 根据所述第一左视图和所述第一右视图,生成第二左视图和第二右视图,其中所述第二左视图和所述第二右视图分别与所述第一左视图和所述第一右视图旋转180度之后得到的视图相同,或者所述第二左视图和所述第二右视图分别与所述第一右视图和所述第一左视图旋转180度之后得到的视图相同; 根据所述第二左视图和所述第二右视图,通过所述SGM加速算法,生成第二初始视差图; 根据所述第一初始视差图和所述第二初始视差图,确定所述第一左视图和所述第一右视图的目标视差图。
[权利要求 2]
如权利要求1所述的方法,其特征在于,所述SGM加速算法基于n个迭代方向计算任一视差图中的像素的视差值,所述n个迭代方向包含目标迭代方向集合中的一个或多个迭代方向,所述目标迭代方向集合为以下迭代方向集合中的任意一个迭代方向集合: 迭代方向集合一:从左到右的迭代方向,从右到左的迭代方向,以及方向朝下的各个迭代方向; 迭代方向集合二:从左到右的迭代方向,从右到左的迭代方向,以及方向朝上的各个迭代方向; 迭代方向集合三:从上到下的迭代方向,从下到上的迭代方向,以及方向朝右的各个迭代方向;以及 迭代方向集合四:从上到下的迭代方向,从下到上的迭代方向,以及方向朝左的各个迭代方向。
[权利要求 3]
如权利要求2所述的方法,其特征在于, 所述迭代方向集合一包括:从左到右的迭代方向,从左上到右下的迭代方向,从上到下的迭代方向,从右上到左下的迭代方向,以及从右到左的迭代方向;或者, 所述迭代方向集合二包括:从左到右的迭代方向,从左下到右上的迭代 方向,从下向上的迭代方向,从右下到左上的迭代方向,以及从右到左的迭代方向;或者, 所述迭代方向集合三包括:从上到下的迭代方向,从左上到右下的迭代方向,从左到右的迭代方向,从左下到右上的迭代方向,以及从下到上的迭代方向;或者, 所述迭代方向集合四包括:从上到下的迭代方向,从右上到左下的迭代方向,从右到左的迭代方向,从右下到左上的迭代方向,以及从下到上的迭代方向。
[权利要求 4]
如权利要求2所述的方法,其特征在于,所述n个迭代方向包括从左到右的迭代方向,从左上到右下的迭代方向,从上到下的迭代方向,从右上到左下的迭代方向;或者, 所述n个迭代方向包括从左到右的迭代方向,从左下到右上的迭代方向,从下向上的迭代方向,从右下到左上的迭代方向。
[权利要求 5]
如权利要求1-4中任一项所述的方法,其特征在于,所述根据所述第一初始视差图和所述第二初始视差图,确定所述第一左视图和所述第一右视图的目标视差图,包括: 从参考视差图中选取M个参考像素,其中所述参考视差图为所述第一初始视差图和所述第二初始视差图中的任一视差图,M为不小于1的正整数; 从基准视差图中选取M个像素,所述基准视差图是所述第一初始视差图和所述第二初始视差图中的除所述参考视差图之外的另一视差图,且所述M个参考像素与所述M个像素一一对应; 确定所述M个像素中的每个像素的视差值,以及所述M个参考像素中的与所述每个像素对应的参考像素的视差值; 如果所述每个像素的视差值为无效值,且所述每个像素对应的参考像素的视差值为有效值,更新所述基准视差图,使得所述每个像素的视差值等于所述每个像素对应的参考像素的视差值; 将更新后的所述基准视差图作为所述目标视差图。
[权利要求 6]
如权利要求5所述的方法,其特征在于,所述第二左视图和所述第二右视图分别与所述第一右视图和所述第一左视图旋转180度之后得到的视图相同, 所述从参考视差图中选取M个参考像素,包括: 将所述参考视差图旋转180度,得到更新后的参考视差图; 从所述更新后的参考视差图中选取所述M个参考像素; 所述从基准视差图中选取M个像素,包括: 根据所述M个参考像素中的每个参考像素在所述参考视差图中的位置(x,y),以及所述每个参考像素的视差值d,从所述基准图像中选取所述每个参考像素的对应像素(x+d,y)。
[权利要求 7]
如权利要求1-4中任一项所述的方法,其特征在于,所述根据所述第一初始视差图和所述第二初始视差图,确定所述第一左视图和所述第一右视图的目标视差图,包括: 从基准视差图中选取K个像素,其中所述基准视差图是所述第一初始视差图和所述第二初始视差图中的任意一个视差图,K为不小于1的正整数; 从参考视差图中选取K个参考像素,其中所述参考视差图为所述第一初始视差图和所述第二初始视差图中的除所述基准视差图之外的另一视差图,且所述K个参考像素与所述K个像素一一对应; 确定所述K个像素中的每个像素的视差值,以及所述K个参考像素中的与所述每个像素对应的参考像素的视差值; 如果所述每个像素的视差值与所述每个像素对应的参考像素的视差值的差异大于预设阈值,更新所述基准视差图,使得所述每个像素的视差值为无效值; 将更新后的所述基准视差图作为所述目标视差图。
[权利要求 8]
如权利要求7所述的方法,其特征在于,所述根据所述第一初始视差图和所述第二初始视差图,确定所述第一左视图和所述第一右视图的目标视差图,还包括: 如果所述每个像素的视差值和所述每个像素对应的参考像素的视差值的差异小于或等于所述预设阈值,更新所述基准视差图,使得所述每个像素的视差值为所述每个像素的视差值和所述每个像素对应的参考像素的视差值的均值。
[权利要求 9]
如权利要求5所述的方法,其特征在于,所述根据所述第一初始视差图和所述第二初始视差图,确定所述第一左视图和所述第一右视图的目标视差图,还包括: 如果所述每个像素的视差值与所述每个像素对应的参考像素的视差值 均为无效值,保持所述每个像素的视差值为无效值; 如果所述每个像素的视差值与所述每个像素对应的参考像素的视差值均为有效值,更新所述基准视差图,使得所述每个像素的视差值为所述每个像素的视差值与所述每个像素对应的参考像素的视差值的均值; 将更新后的所述基准视差图作为所述目标视差图。
[权利要求 10]
一种图像处理系统,其特征在于,包括: 存储器,用于存储程序; 处理器,用于执行程序,当所述程序被执行时,所述处理器用于执行如权利要求1-9中任一项所述的方法。
[权利要求 11]
一种计算机可读存储介质,其特征在于,包括计算机指令,当所述计算机指令在计算机上运行时,使得所述计算机执行如权利要求1-9中任一项所述的方法。
[权利要求 12]
一种计算机程序产品,其特征在于,当所述计算机程序产品在计算机上运行时,使得所述计算机执行如权利要求1-9中任一项所述的方法。

附图

[ 图 0001]  
[ 图 0002]  
[ 图 0003]  
[ 图 0004]  
[ 图 0005]  
[ 图 0006]  
[ 图 0007]