发明内容
本发明的目的在于提供一种双目视觉系统的立体匹配优化方法,克服现有技术方案计算速度慢的缺陷,大大降低了对计算芯片的要求,能够快速完成立体匹配,生成稠密的视差图。
本发明所述的双目视觉系统的立体匹配优化方法,包括以下几个步骤:
a、从双目视频系统获取双目图像;
b、对双目图像进行畸变矫正与极线校正;
c、将双目图像由彩色图像转换为灰度图像;
d、以灰度图像中的其中一幅图像为基准,用另外一幅图像依据像素的模版来匹配;
e、优化零均值归一化交叉相交ZNCC因子计算规则,将其优化成为
①,
式①中,d为水平视差,
②,
③,
式②和③中,I1(x,y)为作为基准的图像中像素点(x,y)的灰度值,I2(x,y+d)为用来匹配的图像中像素点(x,y+d)的灰度值,即为作为基准的图像中以像素点(x,y)为中心的计算模板上各点的灰度值和,即为用来匹配的图像中以像素点(x,y+d)为中心的计算模板上各点的灰度值和;
为作为基准的图像中以像素点(x,y)为中心的计算模板与用来匹配的图像中以像素点(x,y+d)为中心的计算模板上各对应点灰度的乘积之和;
为用来匹配的图像中以像素点(x,y+d)为中心的计算模板上各点灰度的平方和;W=(2M+1)×(2N+1)即为计算模板大小;
f、以优化后的零均值归一化交叉相交ZNCC因子作为相似性度量计算,以[0,D]为视差搜索范围,采用从左到右、从上到下的顺序匹配,计算出作为基准的图像中各像素点在视差搜索范围内不同视差所对应的ZNCC值,各像素点的ZNCC值中最大值所对应的视差记为该像素点的匹配视差;
g、根据作为基准的图像中各像素点的匹配视差生成稠密视差图。
所述步骤f中各像素点计算模板的优化计算描述如下:
设所述计算模板位于最上面的一行为首行,位于最下面的一行为尾行,位于最左边的一列为首列,位于最右边的一列为尾列;
作为基准的图像中第一个像素点按照计算式进行计算,计算完成后将第一个像素点的计算模板的和值以及其计算模板各列的和值存入存储单元作为中间值供后续像素点的计算使用;
将作为基准的图像中除图像第一个像素点外的像素点进行分类定义,定义位于首行的像素点为第1类点,定义位于首列的像素点为第2类点,定义位于非首行和非首列的其他位置的像素点为第3类点;
对于以上3个分类像素点,在进行所述步骤e中ZNCC因子中的四个和值SI1(x,y)、SI2(x,y,d)、 公式计算时,分别按以下的原则进行优化计算处理:
对于第1类点,计算像素点(x,y)计算模板各点相应计算值的和值,调用像素点(x,y-1)计算模板各点相应计算值的和值、像素点(x,y-1)计算模板首列各点相应计算值的和值,用像素点(x,y-1)计算模板各点相应计算值的和值减去像素点(x,y-1)计算模板首列各点相应计算值的和值再加上像素点(x,y)计算模板尾列各点相应计算值的和值,即得;每次计算完成后将像素点(x,y)计算模板各点相应计算值的和值与像素点(x,y)计算模板尾列各点相应计算值的和值存入存储单元;
对于第2类点,计算像素点(x,y)计算模板各点相应计算值的和值,调用像素点(x-1,y)计算模板各点相应计算值的和值,用像素点(x-1,y)计算模板各点相应计算值的和值减去像素点(x-1,y)计算模板首行各点相应计算值的和值再加上像素点(x,y)计算模板尾行各点相应计算值的和值,即得;每次计算完成后将像素点(x,y)计算模板各点相应计算值的和值与像素点(x,y)计算模板各点相应计算值以列为单位求和得到的和值存入存储单元;
对于第3类点,像素点(x,y)计算模板各点相应计算值的和值等于a加上b;其中a的计算,调用像素点(x,y-1)计算模板各点相应计算值的和值、像素点(x,y-1)计算模板首列各点相应计算值的和值,用像素点(x,y-1)计算模板各点相应计算值的和值减去像素点(x,y-1)计算模板首列各点相应计算值的和值,即得;b的计算,调用像素点(x-1,y)计算模板尾列各点相应计算值的和值,用像素点(x-1,y)计算模板尾列各点相应计算值的和值减去该计算模板尾列位于首行的点的相应计算值再加上像素点(x,y)计算模板尾列位于尾行的点的相应计算值,即得;每次计算完成后将像素点(x,y)计算模板各点相应计算值的和值与像素点(x,y)计算模板尾列各点相应计算值的和值存入存储单元。
在现有技术中,ZNCC(x,y,d)的计算式如下:
①,
式(1)中,d为水平视差,
④,
⑤,
式④中,表示作为基准的图像中以像素点(x,y)为中心的计算模板内各点灰度的均值,表示用来匹配的图像中以像素点(x,y+d)为中心的计算模板内各点灰度的均值,W=(2M+1)×(2N+1)即为计算模板大小;
在计算ZNCC(x,y,d)时,设d=0,1,2…D,下面统计与本发明技术方案相区别的各子模块计算需要的乘、除法次数:
1.计算时需要1次除法,
2.计算时需要(D+1)次除法,
3.计算时需要2*(D+1)次乘法,
4.计算时需要2*(D+1)次乘法。
在本发明中,ZNCC(x,y,d)的计算式如下:
式(1)中,d为水平视差,
式(2)中,
在计算ZNCC(x,y,d)时,设d=0,1,2…D,下面统计与现有技术方案中相对应的各子模块计算需要的乘、除法次数:
1.计算SI1(x,y)时需要0次除法,
2.计算SI2(x,y,d)时需要0次除法,
3.计算 即计算 时需要2*(D+1)次乘法,
4.计算 即计算 时需要2*(D+1)次乘法;
综上所述,在对图像中某个像素点(x,y)的ZNCC(x,y,d)计算中,本发明的技术方案比现有技术方案减少了(D+2)次除法,由于D为视差搜索范围,所述当视差搜索范围扩大时,本发明技术方案减少的运算次数则随之增加;同时,图像是由巨大数量的像素点构成的,因此在整幅图像的计算中,本发明的技术方案的应用能大幅度减少除法运算次数,加速立体匹配的计算过程,提供更好的实时性,降低了计算芯片运算负荷,使得整体的双目视觉系统的立体匹配能够更快更好的实现。
本发明的步骤f结合上述步骤e优化之后的公式,形成了新的图像立体匹配计算结构,对于图像中第三类像素点计算过程进行了大幅度的优化。本发明的步骤f将已计算像素点计算模板中各点相应计算值以列为单位求和并对和值进行存储,在后续运算过程中进行调用,使得本发明中第三类像素点的计算只需要进行2次减法、2次加法和对2个像素点进行相应计算,并且运算复杂度不随模板大小的变化而变化,模板越大,本方案对冗余计算减少、对运算时间减少的作用越明显。其中,在计算模板尾列的计算中,只需要对2个像素点进行相应计算,然后进行1次减法与1次加法计算即可;这一计算过程不论模板大小,都只需要对2个像素点进行相应的计算,较现有技术逐点进行相应计算再多次相加的方法,进一步减少了运算复杂程度。
本发明使用长度为计算模板宽度的循环队列来存储上述和值,用当前计算的模板尾列各点相应计算值的和值代替其左边相邻像素点计算模板的首列各点相应计算值的和值,这样循环存储单元只需要设置2N+1个存储单元就能够实现提高循环队列的利用率,减少循环队列占用的空间的技术效果,减轻了处理器的负担。
本发明的双目视觉系统的立体匹配优化方法通过对匹配计算中计算因子的整合,以及对计算模板各点相应计算值列向和值的存储与调用,实现减少冗余计算、减低匹配计算代价、提高系统实时性的技术效果,使得本发明的技术方案既具备较高的准确性,又具备较快的匹配速度。对于越高精度的立体匹配,本发明的优势就越明显,能够大大降低对计算芯片的要求,使得日常及军事领域高需要精度图像识别应该能够获得更低的成本,同时还能够提高立体匹配实时性。因此,本发明有着广阔的应用前景,具有突出的实质性特点和显著的进步。
具体实施方式
如图1所示,本发明的双目视觉系统的立体匹配优化方法包括以下步骤:
a.从双目视频系统获取双目图像;
b.对双目图像进行畸变矫正与极线校正;
c.将双目图像由彩色图像转换为灰度图像;
d.以转换为灰度图像后的双目图像中的左图为基准,用右图依据像素的模版来匹配;
e.优化ZNCC因子;
f.以优化的ZNCC因子作为相似性度量进行匹配计算,确定各像素点的匹配视差;
g.根据各像素点的匹配视差生成稠密视差图。
如图2所示,此处F(x,y,d)的计算示意图适用于ZNCC因子中的四个和值SI1(x,y)、SI2(x,y,d)、 公式优化计算,F(x,y,d)表示像素点(x,y)视差为d时计算模板的计算结果,F(x,y-1,d)表示像素点(x,y-1)视差为d时计算模板的计算结果,P表示像素点(x,y-1)视差为d时计算模板首列相应计算结果的和值,Q表示像素点(x-1,y)视差为d时计算模板尾列相应计算结果的和值,R(x-1-m,y+n)表示像素点(x-1,y)视差为d时计算模板尾列中位于首行的点的相应计算结果,R(x-1+m,y+n)表示像素点(x-1,y)视差为d时计算模板尾列中位于尾行的点的相应计算结果,R(x-m,y+n)表示像素点(x,y)视差为d时计算模板尾列中位于首行的点的相应计算结果,R(x+m,y+n)表示像素点(x,y)视差为d时计算模板尾列中位于尾行的点的相应计算结果,以上的R(x-1-m,y+n)、R(x-1+m,y+n)、R(x-m,y+n)、R(x+m,y+n)位于同一列,其中F(x,y-1,d)、P、Q在之前像素点的计算后已经存储至存储单元,在本次计算中直接进行调用即可,而R(x-1-m,y+n)、R(x+m,y+n)为本次计算中需要重新进行计算的部分,由此得到像素点(x,y)视差为d时计算模板的计算结果即F(x,y,d)的计算式如下:
F(x,y,d)=F(x,y-1,d)-P+Q-R(x-1-m,y+n)+R(x+m,y+n)。
如图3所示,此处F(x,y,d)的计算示意图适用于SI2(x,y,d)与公式优化计算,在一行中除F(x,1,d)需按照图2优化方式逐个计算[0,D]的值外,由于视差递增时计算模板的平移与像素点匹配时的平移相一致,本行其余像素点(x,y)的前D个F(x,y,d)值分别与像素点(x,y-1)的后D个F(x,y-1,d)值一一对应,即像素点(x,y)在d=[0,D-1]范围内计算出的F(x,y,d)值分别与像素点(x,y-1)在d=[1,D]范围内计算出的F(x,y-1,d)值一一对应。因此对于像素点(x,y)的F(x,y,d)值只有第D+1个F(x,y,d)值即F(x,y,D)需要通过计算得到。
下面结合实施例具体说明本发明的技术方案。
本发明的技术方案工作过程如下:
a.从双目视频系统左、右两个摄像机获取左、右两幅图像;
b.利用对两个摄像机进行立体标定后得到的参数对左、右图进行畸变校正,然后对畸变校正后的左、右图进行极线校正,使得左、右图中对应的像素点都位于同一行中;
c.将左、右图由彩色图像转换为灰度图像,以便进行基于灰度的匹配计算;
d.以转换为灰度图像后的双目图像中的左图为基准,用右图依据像素的模版来匹配;
e.优化零均值归一化交叉相交ZNCC因子计算规则,将其优化成为
①,
式①中,d为水平视差,
②,
③,
式②和③中,I1(x,y)为左图中像素点(x,y)的灰度值,I2(x,y+d)为右图中像素点(x,y+d)的灰度值,即为左图中以像素点(x,y)为中心的计算模板上各点的灰度值和,即为右图中以像素点(x,y+d)为中心的计算模板上各点的灰度值和;为左图中以像素点(x,y)为中心的计算模板与右图中以像素点(x,y+d)为中心的计算模板上各对应点灰度的乘积之和;为右图中以像素点(x,y+d)为中心的计算模板上各点灰度的平方和;W=(2M+1)×(2N+1)即为计算模板大小;
f、以优化后的零均值归一化交叉相交ZNCC因子作为相似性度量计算,以[0,D]为视差搜索范围,采用从左到右、从上到下的顺序匹配,计算出参照图中各像素点在视差搜索范围内不同视差所对应的ZNCC值,各像素点的ZNCC值中最大值所对应的视差记为该像素点的匹配视差;
步骤f中各像素点计算模板的优化匹配运算方法描述如下,结合步骤e优化后的②式与③式进行:
设所述计算模板位于最上面的一行为首行,位于最下面的一行为尾行,位于最左边的一列为首列,位于最右边的一列为尾列;
左图第一个像素点按照计算式进行计算,计算完成后将第一个像素点的计算模板各点相应计算值的和值以及该点计算模板各点相应计算的值以列为单位求和得到的和值存入存储单元作为中间值供后续像素点的计算调用;
将左图中除图像第一个像素点外的像素点进行分类定义:
定义位于首行的像素点为第1类点;
定义位于首列的像素点为第2类点;
定义位于其他位置的像素点为第3类点;
(一)对 的优化:
令
1.对于第1类点:计算式如下:
其中SI1I2(x,y-1,d)为像素点(x,y-1)对应的SI1I2(x,y-1,d)值,从存储单元中调用;
为像素点(x,y-1)计算SI1I2(x,y-1,d)值时计算模板首列各对应点灰度乘积的和值,从存储单元中调用;
为像素点(x,y)计算SI1I2(x,y,d)值时计算模板尾列各对应点灰度乘积的和值;
计算完成后将SI1I2(x,y,d)的值以及像素点(x,y)计算SI1I2(x,y,d)值时计算模板尾列各对应点灰度乘积的和值存入存储单元,供后续像素点的计算调用;
2.对于第2类点:计算式如下:
其中SI1I2(x-1,y,d)为像素点(x-1,y)对应的SI1I2(x-1,y,d)值,从存储单元中调用;
式中为像素点(x-1,y)计算SI1I2(x-1,y,d)值时计算模板首行各对应点灰度乘积的和值;
式中为像素点(x,y)计算SI1I2(x,y,d)值时计算模板尾行各对应点灰度乘积的和值;
计算完成后将SI1I2(x,y,d)的值以及像素点(x,y)计算SI1I2(x,y,d)值时计算模板各对应点灰度乘积以列为单位求和得到的和值存入存储单元,供后续像素点的计算调用;
3.对于第3类点:计算式如下:
其中SI1I2(x,y-1,d)为像素点(x,y-1)对应的SI1I2(x,y-1,d)值,从存储单元中调用;
为像素点(x,y-1)计算SI1I2(x,y-1,d)值时计算模板首列各对应点灰度乘积的和值,从存储单元中调用;
为像素点(x-1,y)计算SI1I2(x-1,y,d)值时计算模板尾列各对应点灰度乘积的和值,从存储单元中调用;
I1(x-1-M,y+N)·I2(x-1-M,y+N+d)为像素点(x-1,y)计算SI1I2(x-1,y,d)值时计算模板位于首行尾列的对应点灰度乘积;
I1(x+M,y+N)·I2(x+M,y+N+d)为像素点(x,y)计算SI1I2(x,y,d)值时计算模板位于尾行尾列的对应点灰度乘积;
计算完成后将SI1I2(x,y,d)的值以及像素点(x,y)计算SI1I2(x,y,d)值时计算模板尾列各对应点灰度乘积的和值存入存储单元,供后续像素点的计算调用;
(二)对 的优化:
1.对于第1类点:计算式如下:
其中SI1(x,y-1)为像素点(x,y-1)对应的SI1(x,y-1)值,从存储单元中调用;
为像素点(x,y-1)计算SI1(x,y-1)值时计算模板首列各点灰度的和值,从存储单元中调用;
为像素点(x,y)计算SI1(x,y)值时计算模板尾列各点灰度的和值;
计算完成后将SI1(x,y)的值以及像素点(x,y)计算SI1(x,y)值时计算模板尾列各点灰度的和值存入存储单元,供后续像素点的计算调用;
2.对于第2类点:计算式如下:
其中SI1(x-1,y)为像素点(x-1,y)对应的SI1(x-1,y)值,从存储单元中调用;
为像素点(x-1,y)计算SI1(x-1,y)值时计算模板首行各点灰度的和值;
为像素点(x,y)计算SI1(x,y)值时计算模板尾行各点灰度的和值;
计算完成后将SI1(x,y)的值以及像素点(x,y)计算SI1(x,y)值时计算模板各点灰度以列为单位求和得到的和值存入存储单元,供后续像素点的计算调用;
3.对于第3类点:计算式如下:
其中SI1(x,y-1)为像素点(x,y-1)对应的SI1(x,y-1)值,从存储单元中调用;
为像素点(x,y-1)计算SI1(x,y-1)值时计算模板首列各点灰度的和值,从存储单元中调用;
为像素点(x-1,y)计算SI1(x-1,y)值时计算模板尾列各点灰度的和值,从存储单元中调用;
I1(x-1-M,y+N)为像素点(x-1,y)计算SI1(x-1,y)值时计算模板位于首行尾列的点的灰度值;
I1(x+M,y+N)为像素点(x,y)计算SI1(x,y)值时计算模板位于尾行尾列的点的灰度值;
计算完成后将SI1(x,y)的值以及像素点(x,y)计算SI1(x,y)值时计算模板尾列各点灰度的和值存入存储单元,供后续像素点的计算调用;
(三)对 的优化:
1.对于第一个像素点(0,0):
当d=0时,
计算完成后将SI2(0,0,0)的值以及像素点(0,0)计算SI2(0,0,0)时的计算模板各点灰度值以列为单位求和得到的和值存入存储单元;
当d=1,2…D时,
其中SI2(0,0,d-1)为像素点(0,0)对应的SI2(0,0,d-1)值,从存储单元中调用;
为像素点(0,0)计算SI2(0,0,d-1)值时计算模板首列各点灰度的和值,从存储单元中调用;
为像素点(0,0)计算SI2(0,0,d)值时计算模板尾列各点灰度的和值;
计算完成后将SI2(0,0,d)的值以及像素点(0,0)计算SI2(0,0,d)值时计算模板尾列各点灰度的和值存入存储单元,供后续像素点的计算调用;
2.对于第1类点:
当d=0,1,2…D-1时,
SI2(x,y,d)=SI2(x,y-1,d+1);
其中SI2(x,y-1,d+1)为像素点(x,y-1)对应的SI2(x,y-1,d+1)值,从存储单元中调用;
当d=D时,
其中SI2(x,y-1,D)为像素点(x,y-1)对应的SI2(x,y-1,D)值,从存储单元中调用;
为像素点(x,y-1)计算SI2(x,y-1,D)值时计算模板首列各点灰度的和值,从存储单元中调用;
为像素点(x,y)计算SI2(x,y,D)值时计算模板尾列各点灰度的和值;
计算完成后将SI2(x,y,d)的值以及像素点(x,y)计算SI2(x,y,D)时的计算模板尾列各点灰度的和值存入存储单元,供后续像素点的计算调用;
3.对于第2类点:计算式如下:
其中SI2(x-1,y,d)为像素点(x-1,y)对应的SI2(x-1,y,d)值,从存储单元中调用;
为像素点(x-1,y)计算SI2(x-1,y,d)值时计算模板首行各点灰度的和值;
为像素点(x,y)计算SI2(x,y,d)值时计算模板尾行各点灰度的和值;
计算完成后将SI2(x,y,d)的值以及像素点(x,y)计算SI2(x,y,d)值时计算模板各点灰度值以列为单位求和得到的和值存入存储单元,供后续像素点的计算调用;
4.对于第3类点:
当d=0,1,2…D-1时,
SI2(x,y,d)=SI2(x,y-1,d+1);
其中SI2(x,y-1,d+1)为像素点(x,y-1)对应的SI2(x,y-1,d+1)值,从存储单元中调用;
当d=D时,
其中SI2(x,y-1,D)为像素点(x,y-1)对应的SI2(x,y-1,D)值,从存储单元中调用;
为像素点(x,y-1)计算SI2(x,y-1,D)值时计算模板首列各点灰度的和值,从存储单元中调用;
为像素点(x,y)计算SI2(x,y,D)值时计算模板尾列各点灰度的和值,从存储单元中调用;
I2(x-1-M,y+N+D)为像素点(x-1,y)计算SI2(x-1,y,D)值时计算模板位于首行尾列的点的灰度值;
I2(x+M,y+N+D)为像素点(x,y)计算SI2(x,y,D)值时计算模板位于尾行尾列的点的灰度值;
计算完成后将SI2(x,y,d)的值以及像素点(x,y)计算SI2(x,y,D)时计算模板尾列各点灰度的和值存入存储单元,供后续像素点的计算调用;
(四)对 的优化:
令
1.对于第一个像素点(0,0):
当d=0时,
计算完成后将的值以及像素点(0,0)计算时的计算模板各点灰度值的平方以列为单位求和得到的和值存入存储单元;
当d=1,2…D时,
其中为像素点(0,0)对应的值,从存储单元中调用;
为像素点(0,0)计算值时计算模板首列各点灰度的平方的和值,从存储单元中调用;
为像素点(0,0)计算值时计算模板尾列各点灰度的平方的和值;
计算完成后将的值以及像素点(0,0)计算值时计算模板尾列各点灰度的平方的和值存入存储单元,供后续像素点的计算调用;
2.对于第1类点:
当d=0,1,2…D-1时,
其中为像素点(x,y-1)对应的值,从存储单元中调用;
当d=D时,
其中为像素点(x,y-1)对应的值,从存储单元中调用;
为像素点(x,y-1)计算值时计算模板首列各点灰度的平方的和值,从存储单元中调用;
为像素点(x,y)计算值时计算模板尾列各点灰度的平方的和值;
计算完成后将的值以及像素点(x,y)计算时的计算模板尾列各点灰度的平方的和值存入存储单元,供后续像素点的计算调用;
3.对于第2类点:计算式如下:
其中为像素点(x-1,y)对应的值,从存储单元中调用;
为像素点(x-1,y)计算值时计算模板首行各点灰度的平方的和值;
为像素点(x,y)计算值时计算模板尾行各点灰度的平方的和值;
计算完成后将的值以及像素点(x,y)计算值时计算模板各点灰度值的平方以列为单位求和得到的和值存入存储单元,供后续像素点的计算调用;
4.对于第3类点:
当d=0,1,2…D-1时,
其中为像素点(x,y-1)对应的值,从存储单元中调用;
当d=D时,
其中为像素点(x,y-1)对应的值,从存储单元中调用;
为像素点(x,y-1)计算值时计算模板首列各点灰度的平方的和值,从存储单元中调用;
为像素点(x,y)计算值时计算模板尾列各点灰度的平方的和值,从存储单元中调用;
为像素点(x-1,y)计算值时计算模板位于首行尾列的点灰度值的平方,
为像素点(x,y)计算值时计算模板位于尾行尾列的点灰度值的平方;
计算完成后将的值以及像素点(x,y)计算时的计算模板尾列各点灰度值的平方的和值存入存储单元,供后续像素点的计算调用;
g.根据左图中各像素点的匹配视差生成稠密视差图。
以上所述,仅是本发明的实施例之一,并非对本发明的技术范围作任何限制,在实际使用中也可以以右图为基准,用左图进行匹配,故凡是依据本发明的技术实质对以上实施例所作的任何细微修改、等同变化与修饰,均仍属于本发明的技术方案的范围内。