一种基于边缘分割和种子点的局部立体匹配方法

文档序号:6510679阅读:397来源:国知局
一种基于边缘分割和种子点的局部立体匹配方法
【专利摘要】本发明公开了一种基于边缘分割和种子点的局部立体匹配方法,所述的方法包括:A.利用边缘轮廓构造动态变化匹配窗口;B.对视差值进行一致性检测,得到视差种子点;C.基于颜色差异将种子点的视差值传递给周围非种子点;D.基于水平和竖直上的投票方法来消除错误的匹配点。本发明根据边缘提取方法提取边缘轮廓,然后通过边缘分割构建匹配窗口,从而提高了分割的鲁莽性和准确性。通过采用基于颜色差异的种子点视差传递策略和基于投票的优化方法,有利于得到精确的视差图。
【专利说明】—种基于边缘分割和种子点的局部立体匹配方法【技术领域】
[0001]本发明涉及图像处理领域,尤其涉及基于图像的双目立体匹配方法及其实现。
【背景技术】
[0002]通过给定的两幅图像得到稠密的视差图是计算机视觉领域的研究热点和难点。获得精确的稠密视差图之所以富于挑战,是因为如下因素:1.低纹理信息区域。当进行匹配时,噪声会对匹配结果产生很大影响。2.遮挡问题。当深度不连续时会出现“foregroundfattening”现象。3.高纹理区域。4.重复纹理区域。
[0003]早期的立体视觉匹配方法是基于特征的,即它们首先使用兴趣算子或者其它边缘检测器来提取潜在能够匹配的图像位置集合,然后使用基于块的度量在其它图像中搜索对应的位置。因而得到的是稀疏的视差图,如Matthies,Bolles。1996年,Collins提出边缘才是唯一稳定的特征并将其用于立体匹配。这个方向最新的工作是Zhang和Shan在2000年做的工作,他们关注于如何提取出高稳定性的特征并使用它们作为种子以生长出更多的匹配。
[0004]因为基于图像的渲染和建模中都需要稠密的视差图,目前的立体匹配方法主要关注于稠密视差图的获取。Scharstein和Szeliski在2002年将立体匹配方法分为以下四个步骤:1.像素点匹配代价的计算。2.匹配代价的聚集。3.视差计算和优化(亚像素)。4.视差求精(refinement)。立体匹配方法大致可以分为两类:局部方法和全局方法。局部方法利用像素周围的匹配窗口来计算匹配代价,并通过WTA方法得到最优的视差值;全局方法主要是采用了全局的优化理论方法估计视差,建立全局能量函数,通过最小化全局能量函数得到最优视差值。
[0005]全局方法通常利用平滑性假设,然后求解一个全局优化问题,即求取一个视差赋值来最小化一个包含数据和平滑项的全局代价函数。这些方法间的主要区别在于所使用的最小化过程,例如图割方法(Boykov, Veksler和Zabih在2001年提出),置信传递方法(Sun, Zheng和Shum在2003年提出),期望最大化方法(Birchfield在2007年提出)。总的来说全局方法的精度较高,但是速度较慢。
[0006]局部方法是基于匹配窗口的,它在计算一个给定点的视差值时依赖于局部有限窗口内的灰度值。通过计算匹配窗口内总的匹配代价(聚集过程),利用WTA策略选择匹配代价最小的聚集值来确定视差。局部方法的代表有SSD方法,SGBM方法,Adapt.Weights方法,SegmentSup.方法等。总的来说局部方法获得的视差图的精度要差于全局方法,但是速度较快,适合于实时系统。
[0007]局部立体匹配方法的关键是找到合适的匹配窗口。最先采用固定窗口(FixedWindow),效果很差。1999年Bobick和Intille引入固定在不同点的多窗口以提高匹配窗口的灵活性。 Okutomi等利用自适应大小窗口,根据区域信息动态改变窗口大小,提高了匹配效果。2006年Yoon和Kweon提出了基于彩色分割方法,这是局部方法里一个里程碑式的改进,使得局部方法的精度可以与全局方法相媲美。后来又提出了通过分割的方法得到匹配窗口。
[0008]目前已经出现了很多局部立体匹配方法,但是在时间复杂度和视差图精度方面仍然需要进行改进。

【发明内容】

[0009]1.一种基于边缘分割和种子点的局部立体匹配方法,其特征在于包括:
[0010]A.利用边缘轮廓构造动态变化匹配窗口 ;
[0011]B.对视差值进行一致性检测,得到视差种子点;
[0012]C.基于颜色差异将种子点的视差值传递给周围非种子点;
[0013]D.基于水平和竖直上的投票方法来消除错误的匹配点。
[0014]2.如权利要求1所述的方法,其特征在于,在步骤A中利用Canny边缘检测方法提取轮廓,将提取得到的边缘作为条件来构造匹配窗口。
[0015]3.如权利要求1所述的方法,其特征在于,将像素点P周围的点分为内点和外点,所有的内点构成P的匹配窗口。匹配窗口的构造过程是寻找所以内点的过程。
[0016]4.如权利要求1所述的方法,其特征在于,在步骤A中像素点p的匹配窗口通过如下过程获得:以像素点为起始点,在竖直方向上,在上、下两个方向上标记内点,直到遇到边缘像素点而停止;以竖直方向上得到的内点为起始点,在水平方向上,在左、右两个方向上标记内点,直到遇到边缘像素点而停止;以上标记的所有内点构成该像素点的匹配窗口。匹配窗口最大为31X31,最小为3X3。
[0017]5.如权利要求1中所述的方法,其特征在于,在所述步骤B之前得到的视差值进行一致性检测。通过了一致性检测的像素点,被标记为种子点;否则,被标记为非种子点。
[0018]6.如权利要求5所述的方法,其特征在于,一致性检测方法为:对于左图中的像素点P,通过WTA策略找到右图中与之匹配的像素点q,以及对应的视差值disp(L);对于右图中的像素点q,通过WTA策略找到左图中与之匹配的像素点p’,以及对应的视差值disp (R)。如果disp(L)等于disp (R),则通过了一致性检测;否则,未通过。
[0019]7.如权利要求1所述的方法,其特征在于,在步骤C中循环地寻找非种子点,一旦找到非种子点,则其视差值通过其周围的种子点的视差值得到。循环直到全部的非种子点视差值都求得之后才结束。所有的非种子点和种子点的视差值构成了完整的稠密视差图。
[0020]8.如权利要求7所述的方法,其特征在于,对于非种子点P,我们在水平方向上,P的两侧分别找到距离P点最近的左、右非种子点SI和S2,SI和S2的视差值分别为displ和disp2。如果displ < disp2,则像素点p的视差值被赋值为displ和disp2之间的较小者。否则像素点P的视差值通过颜色差异来得到。
[0021]9.如权利要求8所述的方法,其特征在于,颜色差异的方法为:对于非种子点P,我们分别比较P和SI和S2的颜色差异。如果P和SI的颜色差异大于p和S2的颜色差异,则将S2的视差值赋值给p ;否则,将SI的视差值赋值给P。颜色差异是像素P和像素q在RGB空间里的R、G、B三通道的灰度值差异的绝对值之和。
[0022]10.如权利要求1所述的方法,其特征在于,由步骤C得到的视差图中仍然存在错误的视差值,我们先后通过水平和垂直方向上的投票机制来消除它们。
[0023]水平方向上,对任意相邻像素点p和q,若它们的视差值的差值的绝对值大于一个设定的阈值,则在像素点P的两侧构建分割段,其依据为颜色差异的大小。然后在分割段里的所有像素点的视差值进行投票,得到票数最多的视差值赋值给像素点P。
[0024]在垂直方向上,在像素点p两侧构建分割段(p,P-N / 2)和(p,p+N / 2),其中N为分割段的长度。在分割段里进行投票,得到票数最多的视差值将赋值给像素点P。
[0025]有益效果
[0026]本发明根据Canny方法得到的边缘轮廓构造局部匹配窗口,通过一致性检测生成一系列的视差种子点;然后通过新的基于颜色差异的传递方法将种子点的视差值赋值给周围的非种子点,从而得到稠密的反映深度信息的视差图。本发明中的方法能够自动地调整局部匹配窗口,通过种子点的视差值传递得到精确的稠密视差图。具有鲁莽性好、精度高、时间复杂度低的优点,得到的视差图可以进一步实现3D重建。
【专利附图】

【附图说明】
[0027]图1为本发明的一种基于边缘分割和种子点的立体匹配方法的结构示意图;
[0028]图2为本发明的一种立体匹配方法实施例的流程图;
[0029]图3为本发明的一种根据边缘轮廓生成局部匹配窗口的原理示意图;
[0030]图4为本发明的双目立体视觉系统的结构原理图;
[0031]图5为本发明的立体匹配过程中依赖的对极几何原理图。
【具体实施方式】
[0032]下面通过【具体实施方式】结合附图2对本发明进行详细说明。
[0033]立体匹配方法通过匹配两个不同的摄像机视图的像素点,从而获得像素点的视差图和深度信息。这两个视图必须要有一定的重叠区域(否则无法进行匹配),通常可以通过数码相机或者摄像机得到。
[0034]在局部立体匹配方法中,为了提高匹配的准确性,需要以像素点为中心构建一个匹配窗口,匹配的时计算匹配窗口内的总的匹配代价。由于在深度不连续的地方,会出现“Foreground flattening”现象,因此动态调整匹配窗口至关重要。
[0035]请参考图1,在本发明的一种实施例中,我们通过步骤stepl?step8,最终获得了精确的稠密视差图,整个过程包括图像的采集、摄像机的校正、边缘轮廓的提取、匹配窗口的构建、匹配代价的计算、WTA策略、一致性检测、视差值的传递和视差图的优化等部分。具体步骤如下:
[0036]Stepl:图像的采集和摄像机的标定。
[0037]1.图像的采集。通过数码相机或摄像机采集图像,图像之间要有一定的重叠区域。
[0038]2.摄像机的标定。得到两台摄像机之间几何关系。
[0039]Step2:调整摄像机间的角度和距离,输出行对准的校正图像(左图像和右图像)。行对准指的是两图像在同一个平面上,并且图像的每一行是严格对齐的(具有相同的方向和y坐标)。
[0040]Step3:通过Canny边缘提取方法提取左右图像的边缘轮廓。Canny边缘提取方法是目前公认性能最好的边缘提取方法之一。我们将提取到的边缘轮廓上的像素点的灰度值设为255,将其它像素点的灰度值设为0,这样就得到了以灰度值255和0标识的边缘轮廓图1I。
[0041]Step4:利用St印3中得到的边缘轮廓构造动态变化的匹配窗口。在局部立体匹配中一个关键的因素是如何根据像素周围的信息动态调整匹配窗口的大小,从而使得在匹配窗口中的所有像素具有相同或像素的视差值。本步骤通过边缘分割来构造动态的匹配窗口,原理图如附图3。
[0042]对于左图中的任意像素点p(x,y),我们将它周围的像素点分为两类:内点和外点,所有内点(包括像素点P本身)构成像素点P的匹配窗口。接着我们要做的就是寻找像素点P周围的所有内点,方法如下:
[0043]1.我们以像素点p为起始点,首先在正I轴(竖直向上的方向)寻找内点。将遇到的所有像素点q(x,y’)标记为内点,直到如下两种情况之一出现为止:一是发现像素点q为边缘轮廓上的一个像素点;二是像素点P和像素点q的距离(因为P和q的横坐标相同,他们的距离就是y轴上的距离)大于L(L是用来限制匹配窗口的最大值,可以设定为10)。同样,在负y轴(竖直向下的方向)上以像素点P为起始点来寻找内点。将遇到的所有像素点q标记为内点,直到上面介绍过的两种情况之一的出现为止。
[0044]在具体实施的时候,我们可以根据边缘轮廓图1l中p(x,y)周围的像素点的灰度值来判断是否为边缘点:若q(x,I,)的灰度值为255,则说明q是一个边缘点,此时满足上面情况,内点标记停止;若q(x, y’ )的灰度值为0,则说明不是边缘点,应该标记为内点。
[0045]2.通过上面的方法,我们已经得到了以像素点p为中心的在竖直方向(y轴)上所有的内点ql,q2,q3...。接下来我们通过y轴方向上的内点构造水平方向上的内点:以这些内点为起始点(例如ql(x,y’),我们在水平向左(X轴负方向)和水平向右(X轴正方向)上将遇到的所以像素点标记为内点,直到如下两种情况之一出现为止:一是发现像素点s(x’,y’ )为边缘轮廓上的一个像素点;二是像素点s和像素点ql之间的距离(由于他们的纵坐标相同,他们的距离就是水平距离)大于L(与上面相同,设定为10)。
[0046]同样我们根据边缘轮廓图1l中ql(x,y’ )周围的像素点的灰度值来判断是否为边缘点,与前面介绍的方法相同。
[0047]这样通过I和2我们标记处了像素点p周围的所有内点,包括竖直方向上的内点ql,q2,q3...和以它们为中心标记的水平内点sl,s2,s3...。这些内点构成了像素点P周围的匹配窗口。除去内点之外的所有像素点为外点。
[0048]在本实例中,我们可以选择一个二维数组来标识像素点p的匹配窗口:ucharmask[21] [21] (21 = 2*L+1)。当mask中的一个元素的值为I时代表的是一个内点,为0代表的是一个外点。一个可能的mask数组的值为:
[0049]Mask [21] [21] = {
[0050]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
[0051]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
[0052]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
[0053]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
[0054]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
[0055]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
[0056]{0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0},[0057]{0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0},
[0058]{0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0},
[0059]{0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0},
[0060]{0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0},
[0061] {0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0},
[0062] {0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0},
[0063]{0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0},
[0064]{0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0},
[0065]{0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0},
[0066]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
[0067]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
[0068]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
[0069]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
[0070]{0,0,0,0,0,0,0`,0,0,0,0,0,0,0,0,0,0,0,0,0,0}}
[0071]可以看到Mask由值为0或者I的元素构成,所有为I的元素是像素P的内点,从而它们构成像素点P的匹配窗口。注意:像素点P对应Mask 二维数组中的Mask[10] [10],匹配窗口是以像素点P为中心,在P的周围像素点中找到的。
[0072]St印5:在局部匹配窗口中计算匹配代价。匹配窗口内的匹配代价的计算方法有很多种,如 SAD(sum of absolute differences), SSD (sum of squared differences),STAD (sum of truncated differences)。在本实例中为了提高性能,我们选择STAD方法来计算匹配代价,它的计算公式如下:
[0073]CSTAD(p,d) ^ I ip)~ I?sh\q%T)


i = R;C,B
[0074]CAgg(P>d) = S cSTaAs

!SU(P)
[0075]Step6:利用WTA选择最优的视差值。对于左图中的像素点P,我们需要在右图中的搜索范围为[0,dmax) (dmax是可能出现的最大的视差值)内寻找匹配代价最小的像素点q(x-d,y),并把此时的视差值d昨晚像素点p的视差值。不断重复这个过程,我们就能够找到左图像中所有像素点的视差值。
[0076]Step7:一致性检测。有上一步得到的视差值中存在着很多错误的匹配点,这是由于遮挡、低纹理和高纹理因素的影响所导致的。这一步我们采用一致性检测来消除这些错误匹配的点,从而得到可信度较高的、可以认为是正确的视差值种子点。具体而言就是:对于左图中的每一个像素点P(x,y),我们找到右图中的匹配点q(x_dl,y),它的视差值为dl ;然后以右图中像素点q(x_dl,y)为基准,找到左图中与之最匹配的匹配点p’(x-dl+d2,y),如果P就是P’,这意味着dl == d2,那么我们就说像素点p通过了一致性检测,我们将其标记为视差种子点;否则,我们便将其标记为非种子点。
[0077]StepS ;将种子点的视差值传递给非种子点。由St印7将左图中所有的像素带你分为两类:视差种子点和非视差种子点。视差种子点的视差值具有很高的可信度,我们将其视为正确的视差值。而通过视差种子点构成的视差图是稀疏的视差图,我们需要将这些种子点的视差值传递给周围的非视差种子点,从而构成了稠密的视差图。[0078]有学者提出通过插值法来实现:非种子点的视差值通过周围最近邻的种子点的视差值的插值方法来得到,并对深度不连续的区域和遮挡区域进行特殊处理(选取较小的视差值作为它的非种子点的视差值)。本发明采用另外一种新的视差值传递方法,它采用颜色差异比较来进行传递,具有更好的实现效果。
[0079]对于左图中的每一个非种子点P,我们在它水平方向的两端寻找最近邻的种子点(此处我们假设SL,SR分别为左边最近邻种子点和右边最近邻种子点),SL和SR的视差值分别为dL, dR。
[0080]我们首先比较dL和dR的大小,如果dL < dR,说明像素点p位于深度信息不连续的区域,而且像素点P极有可能位于遮挡区域。此时我们将点P标记为处于遮挡区域,它的视差值为min(dL, dR)。
[0081]如果dL > dR,此时我们通过比较像素点p和SL和SR的颜色差异来选取最终的视差值。具体而言如下:如果P和SL的颜色差异较小,我们选择SL的视差值作为非种子点p的视差值;否则,我们选择SR的视差值作为非种子点p的视差值。
[0082]颜色差异的定义如下
【权利要求】
1.一种基于边缘分割和种子点的局部立体匹配方法,其特征在于包括: A.利用边缘轮廓构造动态变化匹配窗口; B.对视差值进行一致性检测,得到视差种子点; C.基于颜色差异将种子点的视差值传递给周围非种子点; D.基于水平和竖直上的投票方法来消除错误的匹配点。
2.如权利要求1所述的方法,其特征在于,在步骤A中利用Canny边缘检测方法提取轮廓,将提取得到的边缘作为条件来构造匹配窗口。
3.如权利要求1所述的方法,其特征在于,将像素点p周围的点分为内点和外点,所有的内点构成P的匹配窗口。匹配窗口的构造过程是寻找所以内点的过程。
4.如权利要求1所述的方法,其特征在于,在步骤A中像素点p的匹配窗口通过如下过程获得:以像素点为起始点,在竖直方向上,在上、下两个方向上标记内点,直到遇到边缘像素点而停止;以竖直方向上得到的内点为起始点,在水平方向上,在左、右两个方向上标记内点,直到遇到边缘像素点而停止;以上标记的所有内点构成该像素点的匹配窗口。匹配窗口最大为31X31,最小为3X3。
5.如权利要求1中所述的方法,其特征在于,在所述步骤B之前得到的视差值进行一致性检测。通过了一致性检测的像素点,被标记为种子点;否则,被标记为非种子点。
6.如权利要求5所述的方法,其特征在于,一致性检测方法为:对于左图中的像素点P,通过WTA策略找到右图中与之匹配的像素点q,以及对应的视差值disp(L);对于右图中的像素点q,通过WTA策略找到左图中与之匹配的像素点P’,以及对应的视差值disp(R)。如果disp(L)等于disp(R),则通过了一致性检测;否则,未通过。
7.如权利要求1所述的方法,其特征在于,在步骤C中循环地寻找非种子点,一旦找到非种子点,则其视差值通过其周围的种子点的视差值得到。循环直到全部的非种子点视差值都求得之后才结束。所有的非种子点和种子点的视差值构成了完整的稠密视差图。
8.如权利要求7所述的方法,其特征在于,对于非种子点p,我们在水平方向上,p的两侧分别找到距离P点最近的左、右非种子点SI和S2,SI和S2的视差值分别为displ和disp2。如果displ < disp2,则像素点p的视差值被赋值为displ和disp2之间的较小者。否则像素点P的视差值通过颜色差异来得到。
9.如权利要求8所述的方法,其特征在于,颜色差异的方法为:对于非种子点P,我们分别比较P和SI和S2的颜色差异。如果P和SI的颜色差异大于p和S2的颜色差异,则将S2的视差值赋值给p ;否则,将SI的视差值赋值给P。颜色差异是像素P和像素q在RGB空间里的R、G、B三通道的灰度值差异的绝对值之和。
10.如权利要求1所述的方法,其特征在于,由步骤C得到的视差图中仍然存在错误的视差值,我们先后通过水平和垂直方向上的投票机制来消除它们。 水平方向上,对任意相邻像素点P和q,若它们的视差值的差值的绝对值大于一个设定的阈值,则在像素点P的两侧构建分割段,其依据为颜色差异的大小。然后在分割段里的所有像素点的视差值进行投票,得到票数最多的视差值赋值给像素点P。在垂直方向上,在像素点P两侧构建分割段(P,P-N / 2)和(p,p+N / 2),其中N为分割段的长度。在分割段里进行投票,得到票数最多的视差值将赋值给像素点P。
【文档编号】G06T7/00GK103489183SQ201310404483
【公开日】2014年1月1日 申请日期:2013年9月4日 优先权日:2012年10月17日
【发明者】赵勇, 胡刚, 张亚莉, 袁誉乐 申请人:北京大学深圳研究生院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1