基于双目立体摄像机图像的三维建模方法设计及实现
摘要随着计算机技术的迅速发展和计算机立体视觉技术的广泛应用,图像的三维重建因其重要的科研价值和现实意义也越来越受到人们的重视。双目立体视觉是一种在Marr 视觉理论基础上建立起来的三维重建技术,是通过两台摄像机对拍摄同一物体处于不同位置时的情况,融合两只眼睛获得的图像差别,利用几何原理对获取的图像进行三维场景的恢复,对于交通事故现场重建、工业制造、三维医学图像重建、电影特技、人脸识别等视觉导航、医学诊断以及工业检测等领域都具有重要的应用价值。本文探讨了基于双目立体摄像机图像的三维建模的原理,并对其设计及实现的方法进行了详细阐述。
【关键词】双目立体视觉 摄像机 三维建模 设计
立体视觉通俗地讲就是使用成像设备和计算机工具代替人的双眼对目标进行识别、测量与图像处理,因此它是一门集图像处理、计算机科学及模式识别等多种学科于一体的交叉学科,其中双目立体摄像机图像作为一种对于人类双眼视觉的生理构造直接模拟的技术,具有尺寸小、成本低、效率高、实施简单等独特优势,在未来空间物体的非接触型三维测量中具有深远意义。
图1所示为一个完整的平面户型图以及三维立体效果图。虽然我们可以利用计算机辅助技术CAD和三维建模技术3D MAX进行模型创建,但是它们只是运用了人眼对光影、明暗、虚实的感觉得到的视觉立体效果,不仅工作量大、模型扩展性差、效率低,而且在真实感方面都存在很多问题,比如缺乏细节的表面纹理、材质和贴图数据,无法有效解决光照变化与交互性问题。因此,我们研究了一种对三维物体进行快速反向建模的方法,对需要创建实时、真实的几何模型提供了一种新的途径与实现方法。
1 基于双目立体摄像机图像的三维建模原理
所谓视觉方法实施三维重建,实际上是以同一物体从不同角度拍摄而得到的至少两幅图像为基础,对该物体进行三维信息回复的过程。具体的实现步骤有:
1.1 图像获取
二维图像始终是立体视觉信息的本源,一般可以通过数码相机、摄像机或者扫描仪等输入设备实现。以需要进行三维重建的物体为对象,从两个以上的不同角度拍摄获取该物体的图像。
1.2 摄像机标定
该步骤主要是为了建立成像模型,对于摄像机位置以及内外属性参数进行确定,以达到确定物体点和它的像点二者之间存在的对应关系。如果对于精确度要求不高的情况下进行模型创建,可以采用线性模型描述摄像机进行标定。
1.3 特征提取
所谓图像特征即是获得的图像数据中最能够突出物体属性的相关信息,实质上就是对同一物点不同角度下图像中存在的特定对应关系进行确定。包括物体的点、线、面等,比如建筑物特征提取时需要确定梁、柱、墙等。
1.4 立体匹配
对所选特征进行计算并建立起特征间对应关系的过程,是整个双目立体摄像机图像中最为关键也是最为困难的一步,其基本原理是选择出合理的基元,借助一定的计算获得两幅图像中基元间的对应。
1.5 三维重建
经过前面几部分的工作后,我们就可以获得摄像机成像模型,提取出匹配关系,在此基础上就可以对场景中的物体点实施三维重建了,也即是对物体表面点所蕴含的三维信息进行恢复。
2 特征点提取的优化算法
本研究中对于传统边缘提取以及特征点提取两种算法的优缺点进行有效整合后,提出了一种优化过的,基于边缘约束的特征点匹配传播新型算法,较为简单有效。
2.1 边缘提取
Canny 检测算子除了具有定位性能优越、单响应的特征外,还具备信噪比高的优势,因而在实际中经常用来进行立体匹配的边缘检测。在实验中,为了有效避免边缘检测受到来自于噪声以及微小干扰等因素的不良影响,同时也为了尽量减轻运算的复杂性和难度,本研究中对于当前常用的双阈值选取方法进行了一些改进。我们知道,立体匹配中的每一对图像对间均存在不少差异,这些差异虽然非常细微但是却不能忽视,影响重大,所以我们在确定一个固定阈值不能简单的下结论,必须参照各个图像的灰度状况等各种因素,只有这样才能够对初始灰度差值实施较为准确的定位。在选取双阈值时,我们可以挑选一幅规格为m× n的图像,引入T 0。综合考虑图像各像素及其周围邻域之间具有的某种关联性后,根据实际情况采取相应措施应对局部噪声干扰以及边缘丢失等不良现象。首先,我们可以任意选择图像中的一点,用P(x,y)来表示,对P点和它8邻域点 ,即Pi(x,y)(i值为0-7间的整数)的灰度差值,用Ti(i值为0-7间的整数)进行表示,取其中最大的一个值,用Tjmax(j值为1,2,…),用Tjavg(j值为1,2,…)来表示平均值。其中T0充当了门限作用,一旦Tjmax的值超过它,就可以把这一点记数Nj(j值为1,2,…),用Thtot表示最大值的集合,将Tjmax存储到其中,用Tltot表示平均值集合,并将Tjavg存储到其中。当对整幅图像全部遍历后,我们就能够获得所有满足条件点的参数,我们假设t1
符号意义上,TH和 TL分别代表的是双阈值中的最大阈值和最小阈值。通过TL获得边缘图像TL[i,j]的8个相邻域位置,具体情况如图2所示。利用递归跟踪算法对TL[i,j]进行不断的搜集边缘,如果像素点的边缘强度值大于高阈值,那么就可以将其标记为边缘点。
在对双阈值的 Canny 边缘检测算法实施过上述的优化后能够有效获得不同图像的边缘信息。需要注意的是,实际处理中为了尽可能的增强边缘定位的准确性,有效降低边缘毛刺,我们还应当实施进一步的细化工作。本研究中采用的细化方法,是利用认可度较高的形态学中骨骼化的方法。具体的表达式如下:
S(A)= Sk(A),
Sk(A) =(AΘkB)—(AΘkB)。B。
符合意义上,A的含义是已经检测得到的边缘,B的含义为 3×3的结构元素,(AΘkB)是一个较为关键的关系式,表示的是边缘A的连续k次腐蚀,相应的,k的含义就是A被腐蚀为空集合前进行的迭代次数,S(A)代表的是本次试验最终获得的细化边缘。
2.2 完成上述步骤后,就可以进行以边缘为约束的特征点提取方法
本研究中将边缘连接点以及端点作为两个关键点,其中连接点充当的是两条边缘的转折点,端点主要充当的是边缘的起始点和终点。所有边缘点均处于它的8邻域内,扫描时应当从左上角入手,方式选择逆时针,一旦0和1的二者变换次数不小于6时,就表明这一点位于其8邻域内并和大于2的点进行连接,就可以视作连接点;反之,如果变换次数等2,也即是说只和一个点进行了连接,那么该点应当视作端点。
接着我们就可以依照标记跟踪特征关键点,逐次连接出需要的真实边缘,在连接的过程中还应当进行去除虚假边缘和短小边缘。具体流程如下:(1)搜索起始点:首先对边缘像素做出键点判定,然后再进行线性标记。如果这一点属于关键点而且尚没有得到标记,那么就可以将它记为某一线段的起始点。(2)进行双向搜索 next_p:搜索的起点可以由其边缘起始点充当,然后对其8 邻域内进行搜索,方式依旧是逆时针,其中首个没有被标记的连接点用 next_p进行表示,还应当对其赋予与相同标记,然后返回 1;反之,如果搜索过程中没有发现连接点同时又有边缘点,那么就可以将被标记过且小于2个的用next_p进行表示,如果不是,则应把邻域中搜索到的最后一个边缘点做出同样的标记。根据这种方法持续搜索,一直到不能再发现新的 next_p,然后返回该起始点,用上述方法再次从反方向入手继续搜索 next_p。(3)进行边缘连接:把上述我们搜索获得的全部相同标记的点依次进行,由此形成一个连续的边缘。(4)最为关键的一步,也就是删除边缘毛刺。我们通过对每一连接点4个邻接方向上的边缘进行逐次比较,然后选择长度小于某一阈值的分枝作为删除对象,接着对剩余的几个分枝进行连接,最终获得一个完整边缘。完成后,就可以重复上述步骤搜索下一段边缘。
边缘连接完毕,综合考虑真实边缘以及特征关键点的实际情况,选用常用的直线分割的方法增加一些可靠特征点,当然数量必须合理。进行直线分割过程中,我们所用到的分割点实质上就是实验中的边缘特征点。主要步骤有四步,一是从已提取的特征关键点入手,用特征关键点充当初始分割点,然后以顺序的方式对这些点逐次地连接,就可以获得一个初始多边形。二是在关键点中,随机选择两个相邻的A、B,在这两点之间沿着边缘搜索新点C,接着找出这一点到线段AB的距离,用d表示,如果d值和预先设定的阈值相比较低的话,就可以将该店当做新的分割点。三点的坐标分别用,C (x,y)、 A(x1,y1)、 B (x2,y2)来表示,那么C到AB连线的距离用以下公式进行表示:
d=x×(y2-y1)+(x2-x1)+(y2×x1)-y1×x2)]/D
D =
符号意义上,D代表的是AB的长度;d则代表C到AB的距离。三在已经取得的线段基础上还应当进行继续分割,如果分割的线段长已经能够达到预先设定的阈值,才可以结束整个迭带,否则就要继续进行。四是提取出全部的分割点充当特征点,然后获取相关坐标信息,该环节结束。
3 基于OpenGL平台的三维重建
3.1 OpenGL(Open Graphics Library)平台及其优势
OpenGL是一种在IRIS GL基础上开发起来的三维图形标准,也是当前行业领域内应用率最高的2D/3D图形API,该平台速度较快,和射线跟踪程序相比,其速度要快好几个数量级。总体来说,其特点主要体现在以下两个方面:
开放性:能够独立于窗口系统以及操作系统,利用OpenGL开发的应用程序能够在当前使用的各种平台间随意移植;能够和Visual C++紧密接口,能够方便的完成相关的图像计算,同时计算结果具有极高的准确性和可靠性。
扩展性:实际操作中利用OpenGL 扩展机制,就可以借助API实现功能扩充。就其功能来说,OpenGL平台包括建模(常见的点、线、面,包括复杂的三维物体的绘制);变换(基本变变换和投影变换)、颜色模式设置(RGB模式和颜色索引)、光照和材质设置(自发光、环境光、漫反射和高光)以及贴图映射(能够较为逼真的反应出物体表面细节)等。
就现阶段来说,OpenGL动态库的运行需要处于Windows 95以及Windows NT3.5 以上的操作系统的运行环境,而其静态库则需要处于VC++2.0以上的环境中。本研究中借助了Windows XP 操作系统以及VC++6.0的版本而进行的,其中在微机版本中,OpenGL涵盖了基本库、实用库以及辅助库这几个主要的函数库。OpenGL中基本描述和绘制操作则包括图元、光照、材质。
3.2 OpenGL中深度数据的三维表面重建
众所周知,我们对于曲面物体的表面进行处理时通常会选择多边形小平面作为逼近对象来进行处理,而三角形的性质决定了它可以确保三个顶点同时处在一个平面上,所以这种方式最为常用。我们在基于OpenGL下对三维图形进行绘制时,一般可以通过以下几个程序进行。
(1)OpenGL初始化,也即是根据实验对象情况设置像素格式,一般需要输入绘制风格(线型、宽度、颜色)以及深度位元等较为重要的数据。
(2)将基本像素作为依据,依此来建立和物体相符的三维模型,然后对模型做相关数学描述的处理,通常来说会借助OpenGL平台自带的GL_ POLYGON 以及glVertex3d来实现。
(3)将物体放置到三维空间中一个特定的位置,同时启动三维透视视觉体,根据需要在其中一个场景中加入合理的光照、光照条件以及材质等,尽量保证场景的准确性。
(4)将物体和物体颜色信息转化成能够在屏幕上显示的相关像素信息。
另外,我们在进行三维显示中应当重点关注下述信息:
(1)OpenGL 平台本身就拥有比较便捷的绘制三角形的命令:
glBegin(GL_TRIANGLES) ;// 标志开始画三角形
glVertex3fv(m3dpoint[0]) ;//标志三角形的顶点
glVertex3fv(m3dpoint[1]);
glVertex3fv(m3dpoint[2]);
glEnd( ); // 结束三角形的绘制
(2)对三角网格进行绘制时,还应当高度重视法向量,物体的法向量主要功能在于对其表面在空间中的方向进行定义,尤其是对相对于光源的方向进行定义,而我们使用的这款平台正是借助向量对于物体的顶点处所能够接收的光进行的确定,还具有能够为任何一个多边形或者顶点指定法向量的功能。为了得到更好的逼近效果,我们可以使用 函数进行平滑明暗处理。
3.3 实验结果
3.3.1 空间数据重建实验仿真
为了验证前文所述算法的可行性和优越性,选用了 VisualC++6.0版本,同时对标定下的相关图像数据点实施了空间点三角网格化,具体的结果如图2所示,其中图3(a)表示的是空间点三维显示情况,图3(b)表示的是X-Z 平面投影情况,图3(c)表示的则是Delaunay 二维情况,三维三角网格情况如图3(d)所示。我们首先把空间离散点投影到 X-Z 平面,然后再上面利用上述优化过的特征点提取方法,实现二维图像点的三角网格化,然后把所得到的结果射映到三维空间,最终实现较高质量的空间点的三角网格化。
从三角网络化的结果可以看出,优化过的算法具有使用简便,效率较高,应用效果优良的特点,最为重要的是,它能够有效解决离散点几何信息不足的难点,从而大大提高了生成之后的平面三角片可信度,也可以更为清晰明确的获得离散点集的几何拓扑关系。实验中有时需要对三维效果进行强化,这时我们不需要再借助其他软件,只需要用OpenGL自带的光照处理即可,具体情况如图4所示。
3.3.2 实物重建
为了防止数据处理可能出现的错误,也进一步验证算法的实用性以及可靠性,本文又进行了实物重建实验。在前文所说的标准空间数据实验仿真基础之上,又选择一个普通实物作为研究对象,对其实施了三维重建。
实验采用了JAI 公司生产研制的CV-A11仪器CCD、DALSA研制生产的PC2-VISION 图像采集卡以及一个普通光学仪器。需要注意的是,实验进行前,实验人员还必须对双目立体视觉系统作出必要的调试:(1)调节光学平台,确保台面能够维持在一个水平面上;(2)借助计算台面上的螺纹孔个数,测量物距;(3)合理调整基线距离,使其和物距比值合理;(4)需要保持两台设备高度的一致性;(5)旋转角度、俯仰角度均应当调整到相同角度。上述调试全部完成后,检查左右摄像机以及光轴是否平行,检查图像坐标 X 轴,观察其是否共线,同时还应当注意,两幅图像极线除了要共线之外还必须平行于摄像机基线。本次试验中,摄像机标定得到参数为:fu 的值为1668.32,fv为1649.51,s 、uo以及vo的值分别为12.09、1267.49、936.57。另外,系统基线长度选择的是2cm,采用本研究中的特征提取以及匹配算法所得到的二维图像如图5所示,边缘提取如图6所示,特征点提取和特征点匹配结果如图7和图8所示,图9(a)和(b)分别为LEGO 三维重建结果的左视图和顶视图。
从图5显示的结果来看,物体边缘提取非常清晰,且具有较好的连续性,从各长方形积木块轮廓角度来看,拼接处边缘,除了定位准确外还具有棱角分明的特点。图6显示,能够对大多数长方形积木块的四个角点进行成功提取,本次试验中,提取的对数总共为702,经过计算可以得出,其和边缘点的压缩比值应是5.3%,基于以上,我们能够得出特征点提取定位准确,分布情况合理和全面。实验中经过计算和观察, ZNCC> 0.9和符合C-CC 、BFS 策略的相关可靠匹配点对,总数一共达到了598对,同时基于视差梯度等约束条件下进行匹配传播算法,一共得到的可靠匹配点对达到了1674 对,具体情况参照图8。实物结果已经完成了三维重建模型应当具备的放大、缩小以及平移等相关操作功能,便于我们从各种角度观察。从图9可以看出,重建结果从形状来说和原物比较,符合率高,能够给人以较强的真实感,同时还具有较为优良的可视效果。所以,我们可以得出结论,本研究中的三维重建算法具有较高的可行性和优越性。
4 结束语
本文首先对于双目立体摄像机图像的三维建模方法进行了概述,接着针对特征点提取这一重要步骤提出了一种基于边缘约束的特征点匹配传播优化算法,并基于OpenGL平台进行了有效验证和实践,证明了该方案的有效性和优越性,具有一定的应用价值。
参考文献
[1]张铖伟,王彪,徐贵力.摄像机标定方法研究[J].计算机技术与发展,2010(11).
[2]雷彦章,赵慧洁,姜宏志.一种单双目视觉系统结合的三维测量方法[J].光学学报,2008(07).
[3]金伟伟.基于双目视觉的运动小目标三维测量的研究与实现[D].浙江大学, 2010.
作者单位
四川水利职业技术学院四川省成都市611231