格雷码与窗口灰度结合的立体匹配*

2013-01-10 05:51颜国霖
通化师范学院学报 2013年10期
关键词:立体匹配条纹格雷

颜国霖

(黎明职业大学 机电工程与自动化学院,福建 泉州 362000)

立体匹配是双目立体视觉测量和立体重构中最主要的步骤之一.匹配就是在不同的立体成像平面上找出对应的点关系,进而得出视差值.目前,在立体匹配研究方面已经有了大量研究的成果.文献[1]对目前常用的各种立体匹配算法进行了比较全面的概述和比较.立体匹配算法通常可以分为基于全局信息[2]的立体匹配方法和基于局部信息[3]的立体匹配方法.近年来又有了基于半全局信息[4]的立体匹配方法.其中,第一类算法速度相对快,但当图像中有重复纹理特征或凹凸面、遮挡等现象,常常会出现误匹配.而后两类算法需要计算每个点的视差,匹配过程算法难度大,对于需要实时性能的场合来讲过于耗时.因此,本文研究了一种基于格雷码与窗口灰度相结合的立体匹配方法,并将其应用于木雕工艺品的快速扫描和三维重构,缩短设计周期,从而实现降低设备成本的目的.

1 基于图像校正的立体匹配

图1是经过图像校正的双目立体视觉的系统模型,P点代表被测物表面的一点.P点坐标为P(X,Y,Z)(以左摄像机光心为坐标原点).左侧图像、右侧图像分别为两个摄像头的成像平面.

图1 双目视觉系统模型

左右光心为两个摄像头的光心,两光心的距离为基线长度T.光心与点P的连线在成像平面形成点pl(xl,yl)、pr(xr,yr).左右图像经过图像校正后pl、pr处于同一水平线上.于是根据三角形相似定理可得:

(1)

(2)

(3)

上式中,d为图像像素的物理长度,(cx,cy)为光心在图像上的像素点,f为摄像头的焦距(以上各个参数由摄像机标定求出).

由式(1),(2),(3)可得

由以上结果可知欲求被测物体表面上的点的间三维坐标,只需求出被测点在左右两摄像头采集的图像上对应的点的图像坐标,即计算机视觉所用术语--图像匹配.为了能将左右两图的对应点相互匹配起来,本文结合格雷编码与窗口灰度相关的算法,对左右两图的待测点进行立体匹配.

2 窗口的灰度匹配算法

灰度匹配算法是在以左侧图像中以待匹配点为模板,创建一个M×N的子窗口图像,然后在右侧图像中沿极线在视差搜索范围内搜索一个相素灰度值相似(或相同)的子窗口,从而实现两幅图像的匹配.由于本实验已事先对左右摄像机采集的图像进行了立体校正,极线已水平配准,因此只需在右图中与左图的待匹配点的同一行上搜索即可.灰度匹配本质上是利用图像的灰度值计算两窗口的相似性.匹配窗口尺寸大小可调,大的窗口可减少错误匹配的数量,并能够将含较少特征的区域进行重构.计算模板与图像灰度之间差值的绝对值总和(SAD)及所有差值的平方和(SSD)是常被用来计算灰度相关性的方法[5].在双目视觉系统中,两摄像机的视角是不可能完全相同的,光照条件又经常变化,导致对算法的精度影响很大.因此本文实验采用归一化互相关性算法(NCC).该算法表示为:

(4)

式中S(x.y)为(x,y)对应的两个窗口的相似度,T(x,y)为左图像(x,y)的灰度值,I(x,y)为右图像(x,y)的灰度值.

因为-1≤S(x,y)≤1,当S(x,y)=1时,两窗口的图像极性相同,当S(x,y)=-1时,两窗口图像的极性相反,线性光照条件不会影响匹配结果,这就是归一化互相关系数的好处.由于S(x,y)=1是在理想状态的匹配值,很难实现,因此我们取使S(x,y)为最大值时的点为匹配点.另外由于我们的搜索范围是在右图中的一整行上,这样不仅降低了搜索速率,而且还能出现相关度相近的点,出现错误匹配的情况.因此我们先利用格雷码光栅将待测区域划分为若干个区域,然后再在对应的子区域中搜索待匹配点的灰度相关值最大的点.此法不仅可以提高搜索速率,还可以降低匹配的错误率.

3 格雷编码解码

格雷码是时间编码中的一种.时间编码方法具有易于实现、空间分辨率高、三维测量精度高等优点.但是用传统的格雷编码技术求取完整的三维曲面需投影大量图案,效率偏低.为解决这个情况,我们将格雷编码与窗口灰度相关算法相结合,先用格雷编码技术将整幅图分为2n个区域(投射n幅光栅条纹图可将原图分成2n个区域),然后再计算左右两图子区域内的像素点的相关值,将左右两图的点匹配成对.

3.1 格雷码编码

图2 格雷码光栅图

图2为投射的n幅格雷编码图像之一,如图所示格雷光栅图由黑白相间的条纹周期组成.每幅图中所包含的周期数为2n-1,其中n为图像的第几幅.即第一幅的周期为20=1,第n幅为2n-1个周期.编码时黑白条纹分别与二进制码的0、1相对应.于是物体上的点经由所有格雷码图像照射后被编上相应的格雷码.

图3 时间序列条纹图

图3上的实线为物体上的某条线在六幅采集的图中的光照情况,在图3是黑色所以被赋予0,在图2是白色所以被赋予1,以此类推这条线上的点的格雷码值为010100.用此法将格雷码光照射后拍出的整幅图像编码,可以将图像分成2n个区域,每个子区域内的格雷码值是一样的.如上图投射6幅格雷码光栅图,可将采集的图像分成64个区域.但是未经过解码的64个子区域的格雷码值相邻区域之间的值不连续,必须将格雷码值解码转换成0~63的连续的二进制值,以便下文绝对相位的求取.

3.2 格雷解码[6]

图4 格雷码解码图

根据二进制码与格雷码的规律,从格雷码G到二进制码B的转换步骤如图4:格雷码的最高位不变赋值给二进制码最高位即Bn=Gn,然后再将Bn位与Gn-1位进行异或运算后的值赋值给Bn-1位,以此类推得:

Bn=Gn;
Bn-1=Bn⊕Gn-1;
Bn-2=Bn-1⊕Gn-2;
……
B0=B1⊕G0;

(5)

例如图3中的格雷码G=010100,二进制转换后的值为B=011000=24.图3中将采集的图像所有像素点的格雷码都二进制解码后,图像被分为64个区域,区域的值由0~63连续变化,然后就可以在这些子区域内进行灰度相关值的计算,求出相关值最大的点即为相互匹配的点.

4 立体匹配

首先在左摄像机平面图像上有像素点(xl,yl),要寻找其在右摄像机平面上对应的匹配点(xr,yr).运用上述原理和方法,以(xl,yl)为基准,选择一个3×3窗口,计算在这个区域中归一化互相关系数的局部最大值并当成其灰度值.然后在右图像相同Y坐标的一条水平线上,搜索格雷码值与点(xl,yl)一样的点,最后将所有搜索的结果的点都与基准点的灰度特性相比较,并记录下相似值S(x,y).

当S(x,y)=1时,对应的(xr,yr)是(xl,yl)的最佳匹配点,当S(x,y)=0时,这时匹配最差.所有计算结束,相似度值最大的那个点为(ur,vr)的最佳匹配点.

5 实验步骤与结果

5.1 实验器材

维视MV-1300UM工业摄像头两个,分辨率为640×480,像元大小为5.2μ×5.2μ,明基MP515投影仪一台、PC机一台.

5.2 实验步骤

利用格雷编码与相移相结合技术测量三维空间点的坐标实验流程如图5所示.

图5 实验步骤流程

(1)首先是结构光的投射,依时间序列控制投影仪向被测物体的表面依次投射6幅格雷编码图案.格雷码图案的投射为了将被测区域划分成若干子区域,图案数量的多少并无硬性规定.但是投射图案过少,子区域区间大,将对进一步的连续划分精度造成影响.投射图案多,能将子区域分成小区间便于连续划分,但是由于光学衍射定理,投射的光栅中白条纹会向黑条纹衍射.如果划分的区域过小,黑条纹在被白条纹衍射后条纹宽度将非常窄,不利于图像采集与分析.对后续结果分析将造成影响,所以投射图案的数量也不宜过多,本文采用的投影仪分辨率为1280*720,经过反复实验,在投射6幅格雷码图案可将图像划分64个宽度为20个像素的区域,实验结果效果较佳.

(2)图像采集,图像的采集与步骤(1)的投射时序相对应,用摄像头依次对6个投射场景采集6幅对应的图案,然后再在自然光条件下采集一幅图案用于进行窗口灰度相关匹配.在C++程序语言中,可以用如下的数据结构来表示创建的图像的数据结构.

Typedef struct_IplImage

{

Int nChannels;//图像的通道数

Int depth; //图像的深度 可以是8,16,32,64位

Int width; //图像的宽度

Int height; //图像的高度

Char*imageData; //存储图像的数据,包括颜色值、灰度值等

Int widthStep; //图像每一行所用的字节数,是8的倍数,不足的补0

Int origin; //用于设置坐标原点位于左上角还是左小角

Int dataOrder; //指明数据是将像素点不同通道的值的排列方式

}

(3)图像预处理.由于光照环境等因素的影响,采集的图像上有许多噪声,这些噪声将使实验结果有许多离散的点.因此首先对采集图像平滑滤波处理[7].平滑处理有中值滤波、高斯模糊滤波、双边滤波模糊算法等几种方法.其中高斯滤波能在保留信号的条件下减少噪声,本实验中对边缘没有较高的要求,因此本实验选择使用高斯滤波平滑处理来去除噪声.因为在格雷码编码解码的过程中要求图案只含有黑(灰度值0)白(灰度值255)条纹,但实际采集的图像上像素的点灰度在1~255之间变化.因此必须设定一个阈值[8]作为一个分水岭.使大于这个阈值的所有像素点的灰度值全部为255,小于阈值的点的灰度为0.阈值的选择需根据环境及光照选择,阈值设定大了本来应为白条纹的区域被设为黑条纹;阈值设定小了本来应为黑条纹的区域被设为白条纹.因此本文在多次重复的基础上选择灰度值90作为图像二值化的阈值.

(4)三维重构及显示,经过预处理的图像的灰度值只有255与0.于是就可以对图案进行格雷解码划分子区域,再利用窗口灰度相关算法进行立体匹配,最后用三角定理解出空间点的三维坐标.模型的显示可以采用图形程序接口OPENGL.本文先将采集的离散点云集用OPENGL显示出来,然后再将这些点云数据进行三角片化处理显示出整体面模型.这样既可以精简数据,又可以通过对比对实验过程及结果有直观的认识.

5.3 实验结果与分析

本文对某两木雕工艺品进行扫描,扫描过程的光栅图像如图6所示,扫描结果如图7、8所示.分别利用本文方法和Bouguet算法对两个木雕对象进行扫描,其运行结果如表1所示.由表1可以看出,本文算法所用的时间可减少近一半,且实验测量精度点距相对误差可达0.040%,点云误差为0.0735mm,足以说明该实验的高效性、可靠性和高精度性.

表1 本文算法和Bouguet算法的运行时间比较 ms

图6 实验过程的光栅图像

图7 原始图像

图8 扫描结果

6 结束语

本文对木雕进行结构光投射、图像采集、图像预处理后,再结合格雷编码与窗口灰度相关的算法,对左右两图的待测点进行匹配,实现快速立体匹配、三维重构的目的,可为后续工作做好准备.但由于视觉系统引入结构光,对测量环境有一定要求,一般而言,不适合在室外环境.因此,对双目视觉系统的应用存在一定限制.

参考文献:

[1]Scharstein D, Szeliski R.A taxonomy and evaluation of dense two-frame stereo correspondence algorithms [J].International Journal of Computer Vision,2002, 47(1/2/3):7-42.

[2]Klaus A, Sormann M, Karner K.Segment-based stereo matching using belief propagation and a self adapting dissimilarity measure [C].Proceedings of the 18th International Conference on Pattern Recognition, Hong Kong, 2006:15-18.

[3]Gu Z, Su X Y, Liu Y K ,et a1.Local stereo matching with adaptive support weight, rank transform and disparity calibration[J].Pattern Recognition Letters, 2008, 29(9):1230-1235.

[4]Hirschmuller H .Stereo processing by semiglobal matching and mutual information [J].IEEE Transactions on Pattern Analysis and Machine Intelligence, 2008, 30(2): 328-341.

[5]张广军.视觉测量[M].北京:科学出版社,2008:239-259.

[6]丁强,董万钧.一种格雷码与二进制码转换的新方法[J].水利水文自动化,2001(1):21-22.

[7]李俊生.一种图像平滑处理方法的空域算法与频域分析[J].常州工学院学报,2004,17(2):30-33.

[8]董立菊,于戈.一种有效的图像二值化方法 [J].东北大学学报,2004,25(12):1149-1152.

猜你喜欢
立体匹配条纹格雷
谁是穷横条纹衣服的人
别急!丢了条纹的斑马(上)
别急!丢了条纹的斑马(下)
基于SIFT算法的图像匹配技术在测量系统中的应用
改进导向滤波器立体匹配算法
氯吡格雷治疗不稳定型心绞痛临床观察
动态规划立体匹配的状态空间分析和性能改进
镜像式单摄像机立体视觉传感器对弹簧几何尺寸的测量
《道林·格雷的画像》中的心理解读
阿司匹林与氯吡格雷联合治疗心肌梗死的疗效观察