嵌入式操作系统
OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python, Java and MATLAB/OCTAVE (版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#,Ch, Ruby的支持。
所有新的开发和算法都是用C++接口。
基于OpenCV的三维重建算法。该算法充分发挥了OpenCV的函数库功能,提高了计算的精度效率,具有良好的跨平台移植性,可以满足各种计算机视觉系统的需要。
引言
三维重建技术是计算机视觉、人工智能、虚拟现实等前沿领域的热点和难点,也是人类在基础研究和应用研究中面临的重大挑战之一。基于图像的三维重建是图像处理的一个重要研究分支,作为当今热门的虚拟现实和科学可视化的基础,它被广泛应用于检测和观察中。一个完整的三维重建系统通常可分为图像获取、摄像机标定、特征点提取、立体匹配、深度确定和后处理等6大部分[1] [3]。
其中精确标定摄像机内外参数和立体匹配是三维重建中最重要也是最困难的问题。 开放源代码的计算机视觉类库OpenCV(Open Source Computer Vision Library)由英特尔公司位于俄罗斯的研究实验室所开发,它是一套可免费获得的由一些C函数和C 类所组成的库,用来实现一些常用的图像处理及计算机视觉算法[2]。
OpenCV与英特尔公司所开发的另一图像处理库IPL(Image Processing Library)兼容, IPL用于实现对数字图像的一些低级处理,而OpenCV则主要用于对图像进行一些高级处理,比如说特征检测与跟踪、运动分析、目标分割与识别以及3D重建等。由于OpenCV的源代码是完全开放的,而且源代码的编写简洁而又高效,特别是其中大部分的函数都已经过汇编最优化,以使之能高效而充分地利用英特尔系列处理芯片的设计体系,
对于Pentium MMX, Pentium, Pentium Ⅲ及Pentium Ⅳ这些处理器而言,OpenCV的代码执行效率是非常高的,所以近年来在国外的图像处理相关领域中被广泛地使用,成为一种流行的图像处理软件。OpenCV中的摄像机标定模块为用户提供了良好的接口,同时支持Windows、Linux 平台,有效地提高了开发效率,并且执行速度快,具有良好的跨平台移植性,因此可以很好地应用于工程实际当中。
2.1 图像获取
立体图像的获取是立体视觉的基础,图像获取的方式很多,主要取决于应用的场合和目的,还要考虑视点差异、光照条件、摄像机性能以及景物特点等因素的影响,以利于立体计算。
2.2 摄像机标定
摄像机标定是为了建立成像模型、确定摄像机的位置和属性参数,以确定空间坐标系中物体点同它的像点之间的对应关系。两个摄像机都要标定,如果摄像机是固定的,当从2-D计算机图像坐标推导3-D信息时,只需一次标定。 摄像机的标定方法可分为两大类:第一类是直接估计摄像机的位置、光轴方向、焦距等参数;第二类是通过最小二乘法拟合,确定三维空间点映射为二维图像点的变换矩阵。一个有效的摄像机模型,除了能够精确地恢复出空间景物的三维信息外,还有利于解决立体匹配问题。
2.3 特征提取
由多视点的视差确定3-D信息,关键是确定场景中同一物点在不同图像中的对应关系,解决该问题的方法之一是选择合适的图像特征并进行匹配。特征是像素或像素集合或它们的抽象表达,常用的匹配特征主要有点状特征、线状特征和区域特征等。一般来讲,大尺度特征含有较丰富的信息,本身数目较少,易于得到快速匹配,但对它们的提取与描述相对复杂,定位精度也差;而小尺度特征本身的定位精度高,表达描述简单,但数目较多,所含信息量却较少,因而在匹配时需要采用较强的约束准则和匹配策略。
合理的选择匹配特征对立体匹配工作有十分重要的意义,应综合考虑各种因素,根据不同的景物特点和应用要求选择。一般的,对于包含有大量非规则形状和高度突变的场景,比较适合提取点状特征,因为提取线段、区域等特征既困难又会引入误差:对于具有规则结构的场景,若线段和区域特征的提取和描述比较容易且误差较小,应提取线段特征以实现快速匹配。
2.4 立体匹配
立体匹配是根据对所选特征的计算,建立特征间的对应关系,将同一个空间点在不同图像中的映像点对应起来,并由此得到相应的视差图像,立体匹配是双目视觉中最重要也是最困难的问题。当空间三维场景被投影为二维图像时,同一景物在不同视点下的图像会有很大不同,而且场景中的诸多因素,如光照条件、景物几何形状和物理特性、噪声干扰和畸变以及摄像机特性等,都被综合成单一的图像灰度值。
因此,要准确的对包含了如此之多不利因素的图像进行无歧义匹配十分困难。 立体匹配的方法主要分为两大类,即灰度相关和特征匹配。灰度相关直接用象素灰度进行匹配,该方法优点是匹配结果不受特征检测精度和密度的影响,可以得到很高的定位精度和密集的视差表面;缺点是依赖于图像灰度统计特性,对景物表面结构以及光照反射较为敏感,因此在空间景物表面缺乏足够纹理细节、成像失真较大(如基线长度过大)的场合存在一定困难。
基于特征的匹配方法的优点是使用从强度图像得到的特征作为匹配基元,所以在环境照明发生变化的情况下较为稳定;缺点是特征提取需要额外计算量,另外由于特征是离散的,所以不能在匹配后直接得到密集的视差场。
匹配方法需要解决以下问题:选择正确的匹配特征;寻找特征间的本质属性;建立能正确匹配所选特征的稳定算法。
2.5 深度信息确定
当通过立体匹配得到视差图像后,就可以确定深度图像并恢复场景3-D信息了。影响距离测量精度的因素主要有摄像机标定误差、数字量化效应、特征检测与匹配定位精度等,一般来讲,距离测量精度与匹配定位精度成正比,与摄像机基线长度成反比。增大基线长度可以改善深度测量精度,但同时会增大图像间的差异,增加匹配的困难程度。因此,要设计一个精确的立体视觉系统,必须综合考虑各方面的因素,保证各环节都具有较高的精度。
2.6 后处理
后处理包括深度插值、误差校正和精度改善。立体视觉的最终目的是恢复景物可视表面的完整信息,目前,无论哪种匹配方法都不可能恢复出所有图像点的视差,因此对于一个完整的立体视觉系统,必须进行最终的表面内插重建。
OpenCV中采用的定标方法是介于传统定标方法和自定标方法之间的一种方法,由在其论文中提出的。这种方法不需要知道摄像机运动的具体信息,这点比传统定标技术更为灵活,同时仍需要一个特定的标定物以及一组已知的特征基元的坐标,这点不如自定标灵活。它通过在至少3个不同的位置获取标定物的图像,计算出摄像机所有的内外参数。
由于它比传统定标技术更为灵活,又可以得到不错的定标精度,所以被OpenCV所采纳。 在这个模型的定标过程中将用到的三个坐标系:图像坐标系,摄像机坐标系和世界坐标系。通过坐标系之间的变换可以通过下面的公式把图像坐标系的点和世界坐标系[7] [8]:
由于矩阵A包含了摄像机全部的6个内参数
,所以称A为摄像机内参数矩阵。PC为模型的外参数矩阵,可以通过以下公式得到:
其中,
为旋转矩阵,
为平移向量。
基于OpenCV的摄像机标定采用通用的棋盘标定模板,先用函数cvFindChessboardCorners()粗略提取出棋盘的角点,然后再使用FindCornerSubPix()函数,进一步精确得到角点亚象素级的坐标值。最后把坐标值代入cvCalibrateCamera2()函数,得到摄像机的内外参数值(效果如图1所示)。
图1 提取角点并显示的效果图(棋盘取自OpenCV) OpenCV中有Sobel,Laplace,Canny等几种用于边缘检测的算子。但一般使用坎尼(Canny)算子也就是cvCanny()函数做边缘检测和特征提取(如图2)。
图2 做Canny处理后的比较图 三维重建中最大的难点也是最重要的部分就是立体匹配部分。在OpenCV中选用基于特征匹配中的极线约束方法[9]。 假设空间一点P,它在两个摄像机成像平面上的投影点分别为P1和P2,如图3所示。其中,C1和C2分别为两个摄像机的中心,即摄像机坐标系的原点。
在极线几何中,我们称C1和C2的连线为基线。基线和两摄像机成像平面的交点e1和e2分别为两摄像机的极点,它们分别为两个摄像机中心C1和C2在对应的摄像机成像平面上的投影坐标。P、C1和C2组成的三角平面称为极平面π。π和两个摄像机成像平面的交线l1和l2称为极线,一般称l1为点P2对应的极线,l2为点P1对应的极线,l1和l2互为对应极线。
图3 我们在极平面π上另取一点P′,从图中可以看到,它在两摄像机平面上的投影点为P1和P2′,其中,P2和P2′都在极线l2上。这就是极线约束,即当给定一点P1,它的匹配点一定出现在它所对应的极线上,由此,可以将我们的搜索空间压缩到一维的直线,即极线上。
在OpenCV中可以先使用函数cvFindFundamentalMat()求出图像的基础矩阵,然后用把求得的基础矩阵代入函数cvComputeCorrespondEpilines()函数中求出一幅图像中的点在另一幅图像中的对应极线。
求得极线后,对图像上沿极线方向上的像素点进行灰度相似性的匹配,能很方便的找出该点在对应图像上的匹配点。
基于上述原理和OpenCV的函数,利用VC6.0开发了一个全套的三维重建系统。通过上述的6个步骤最终还原出了物体的图形。程序经过严格的测试,运行稳定。在进行相机标定时,要注意的是:照片越多(至少3幅)计算的内外参数就越精确。而且其中任意两幅图像所对应的摄像机光轴不能是平行的。
图4 实验所用到的左右对应图像
图5 提取到的轮廓
图6 匹配过程(图中白点标记为一对对应点)
图7 点重建的效果图(使用OpenGL重建)
三维重建视觉作为计算机视觉中的一个重要分支,一直是计算机视觉研究的重点和热点之一。它直接模拟了人类视觉处理景物的方式,可以在多种条件下灵活地测量景物的立体信息。对它的研究,无论是在视觉生理的角度还是在工程应用的角度都具有十分重要的意义。三维重建视觉技术在由物体的二维图像获得物体的深度信息上具有很大的优越性。 本文利用OpenCV开发的三维重建的系统具有计算简单,结果精确,运行效率高,可以跨多平台等优点。
系统可以有效的应用于各种可使用计算机视觉的应用中。 本试验系统适宜于测量范围不太大、遮挡较少的空间物体的三维测量,对于遮挡较严重的情况,我们需要增加摄像机的数目,从更多方向对物体进行摄像,通过在多个方向上运用双目立体视觉原理进行三维重建。
全部0条评论
快来发表一下你的评论吧 !