一种基于计算机视觉的低成本室内空间测量系统设计与实现
2011-09-19李荣明芦利斌陈鼎新
李荣明,芦利斌,陈鼎新
(第二炮兵工程学院 602教研室,陕西 西安 710025)
室内机器人的运动轨迹和位置控制,对室内空间测量方法与技术提出了需求。现在常用的室内空间测量手段有超声波测量、红外测量、射频(RF)测量和视觉测量等,其中视觉测量因为视觉图像包含了目标的丰富信息且视觉系统价格低廉、使用方便,引起研究人员的极大关注[1]。日本东京大学利用实时双目立体视觉和机器人整体姿态信息集成,开发了一种仿真机器人动态行走导航系统[2]。文献[3]中研究了一种利用双目立体视觉系统定位手术器械的方法,为外科手术提供了一定的辅助作用。
笔者研究的室内空间测量系统,主要用于实时测量室内小型飞行或地面移动机器人的空间位置。测量精度要求:≤20 mm;实时性要求:≥10 Hz。通过3个低成本的USB摄像头对静止或运动目标(其上放置一红色指示灯)的图像拍摄,来实时确定室内目标的空间精确位置信息,并可将这些信息实时传递给目标控制系统进行辅助控制。
1 工作原理
室内空间测量利用双目立体视觉原理[4],即采用两个摄像头在针孔成像模型下,如果摄像头光心和像点已知,就可以确定这两点组成的唯一射线,物点必然在此射线上。由两个摄像头进行交汇就有两条这样的射线,射线相交于物点即确定出空间物点的位置。如图1中,空间点P是O1P1与O2P2两条射线的交点。该系统采用3个摄像头两两交汇得到空间点的3个位置坐标,求其均值作为目标的位置信息,来提高系统测量的精度。
图1 用双摄像头观测空间物点Fig.1 Observing space object point with dual cameras
2 系统总体设计
2.1 硬件设计
硬件部分主要由3台USB摄像头及连接延长线,1台数据处理计算机和1个红色指示灯组成。3台摄像头利用支架布置在房间3个角落,使之能最大范围地观测到测量空间全部,并通过USB接口连接在计算机上(如图2所示)。室内实验空间面积大约在30 m2,测量范围设计为3 m×3 m×1.5 m。
图2 硬件组成与连接Fig.2 Hardware components and connections
摄像头选用蓝色妖姬S8摄像头,静态分辨率可达1 280×960,最高帧速率为 150帧/秒,USB2.0接口。使用的图像采集频率为30 Hz,图像分辨率为320×240。
计算机上安装VC++6.0、OpenCV1.0和DirectX9.0b SDK等软件,用于数据处理和软件开发等。
红色指示灯放置在目标物体上,便于摄像头捕捉和图像识别。
2.2 软件设计
软件部分分为3大模块:摄像头标定模块、图像处理模块和空间位置计算模块,数据流程如图3所示。
图3 软件系统模块及数据流程Fig.3 Software system module and data process
1)摄像头标定模块 通过从不同角度对标定棋盘格的拍摄与角点识别,先后计算出每台摄像头的内参数与外参数。
2)图像处理模块 对摄像头实时采集的图像进行畸变矫正、平滑滤波、阈值分割、形态学处理和特征角点检测等,提取出目标点坐标。
3)空间位置计算模块 输入目标点在二维图像上的坐标和摄像头参数,利用空间两条射线相交确定一点的原理,实时计算目标物体的位置信息。
3 功能模块算法设计与实现
OpenCV是一个开源的计算机视觉库[5],由一系列C函数和少量C++类构成,可实现图像处理和计算机视觉方面的很多通用算法。它支持多种平台,移植性强、执行效率高,可以很好地应用于工程实际当中。本文借助OpenCV库函数来实现主要功能模块的算法。
3.1 摄像头标定模块
摄像头标定是视觉测量的必要步骤,通过标定可得到二维图像坐标与三维空间坐标之间的关系。目前普遍使用的是张氏平面标定法[6],它无需知道模板的运动参数,避免了其他标定法设备要求高,操作繁琐等缺点,同时又能保证标定的精确度和参数的鲁棒性。
张氏标定法假设模板位于世界坐标系ZW=0的平面,然后从不同角度拍摄3幅以上(含3幅)模板图像,根据模板上的点和其图像对应点的映射关系线性求解出摄像头的内外参数,再根据相应算法得到畸变系数,最后利用LM算法优化参数。摄像头标定流程如图4所示。
图4 摄像头标定流程Fig.4 Camera calibration process
利用OpenCV库函数实现摄像头标定算法如下:
1)读入或拍摄标定图像,使用cvFindChessboardCorners函数进行棋盘格角点检测,确定角点的位置。如果所有角点都被检测到,它们都被以链表形式存储起来并输出,函数返回非零值,否则函数返回零。
2)当提取到了所有的角点后,使用cvFindCornerSubPix函数对这些角点进行细化,得到角点亚像素级的坐标值;再使用cvDrawChessboardCorners函数将检测到的角点在图像中显示出来。
3)使用cvCalibrateCamera2函数,输入角点的空间三维坐标值以及二维图像坐标值,可以快速计算出摄像头内参,包含以像素为单位的焦距、图像主点坐标和畸变系数等。
4)再通过外参标定图像的角点检测,输入已计算出的内参数和畸变系数,使用cvFindExtrinsicCameraParams2函数计算摄像头的外参数。
3.2 图像处理模块
图像处理模块主要是完成实时拍摄的图像中目标点的坐标获取,在室内空间,受周围环境特别是光照影响,要快速准确地提取出目标是件困难的工作。为此,在目标物体上放置一红色指示灯,通过亮度对比滤除复杂的背景环境,使图像处理变得简单有效。图像处理的具体流程如图5所示。
图5 图像处理流程Fig.5 Flow chart of image processing
主要过程的实现代码如下:
3.3 空间位置计算模块
由标定模块得到的内外参数计算出摄像头C1和C2的投影矩阵M1与M2,图像处理模块得到目标点P在两幅成像平面中的像点为 P1(u1,v1)和 P2(u2,v2),设点 P 的世界坐标为(X,Y,Z),利用针孔成像模型得:
mkij分别为 Mk的第 i行第 j列元素。 在式(1)和式(2)中消去Zc1或Zc2,从而得到关于X,Y,Z的4个线性方程:
由解析几何知,式(3)或式(4)的几何意义是过O1P1或O2P2的直线。由于空间点P是O1P1与O2P2交点,它必然同时满足式(3)与式(4)。 因此,可以将式(3)与式(4)联立求出 P点的坐标(X,Y,Z)。 事实上,式(3)与式(4)为包含(X,Y,Z)3个变量的4个线性方程,只需其中3个就可解出(X,Y,Z),已假设了直线O1P1与O2P2一定相交,或者说,4个方程必定有解且解是唯一的。由于实验测量数据总是有噪声的,用最小二乘法求出(X,Y,Z)。 将公式(3)和(4)写成矩阵形式,得到最小二乘结果如下式:
上述算法通过 CvMat*Crossingpoint(CvMat*a_homography,CvMat*b_homography,CvPoint2D32f a_pt,CvPoint2D32f b_pt)函数给予实现,指针a_homography和b_homography分别指向两个摄像头的投影矩阵,a_pt和b_pt为目标点在两成像平面上的像素坐标,函数返回交点的坐标向量即目标点的空间坐标。
4 实验验证分析
对该系统的实验主要从两个方面来进行的,一方面是检验系统测量的实时性,另一方面是检验其精确性。
1)验证系统测量的实时性
先调用QueryPerformanceFrequency()函数获得机器内部定时器的时钟频率为2 520 690 000 Hz,然后采集图像并测量计算 1 000次,再调用 QueryPerformanceCounter()函数返回前后的时间计数值,利用两次获得的计数之差及时钟频率,计算出此测量系统的采集频率为:1 000/(11 923 425 995 955-11 758 675 015 563)/2 520 690 000=15.3 Hz, 完全能够满足室内低速运动机器人的测量要求。
2)验证系统测量的精确度
①静态测量验证。在室内坐标系中,利用地板线和卷尺测量多组目标点的空间位置,并与系统测量结果进行比较(如表1所示),测量误差均在15 mm范围内。图6给出目标点在(500,500,115)位置时静态测量的界面截图。
表1 静态测量结果与实际坐标值比较Tab.1 Compared static measurement result with true position
图6 目标在(500,500,115)位置测量界面Fig.6 Measurement interface of target in(500,500,115)position
②动态测量验证。由于在室内没有其他可靠的定位系统作为参考,这里仅利用遥控小汽车在地面从点(-1 000,-1000,115)开始,沿1.5 m×1.5 m的正方形低速行驶,汽车高115 mm。在测量的原始数据输出前进行均值滤波,剔除野值,使得数据输出更加平滑可靠。系统记录下实时测量的位置信息,利用Matlab绘出运动轨迹三维坐标图如图7所示,不难看出绘出的运动轨迹成正方形,且始末点坐标与实际一致。
图7 目标运动轨迹图Fig.7 Track figure of target movement
3)结果分析
系统测量的结果误差在15 mm范围内,基本满足室内空间位置测量的需要。分析引起误差的原因有:
①摄像头标定过程引入的误差,比如标定模板制作粗糙,粘贴的平板无法做到完全水平;另外在外参数标定中,标定模板距离摄像头较远,成像小,以及受摄像头固有噪声和环境噪声影响,使得棋盘格角点提取有一定误差;
②摄像头动态采集图像的分辨率太低,仅为320×240,影响了图像的质量,图像处理中目标提取的一点点偏离就会给计算结果带来很大误差;
③室内地面反光给目标特征提取带来很大干扰,特别是当目标进入反光区中,就很难准确捕捉到目标点,使得测量数据很不可靠。
5 结 论
本文设计实现了一种基于计算机视觉的室内空间测量系统,通过固定在室内的3个USB摄像头实时捕获目标图像,能够比较精确地测量室内静止或低速运动目标的空间位置。整个系统仅需一台普通计算机和3个USB摄像头及10 m延长线,摄像头连同USB延长线的价格在200元左右,成本低廉、搭设简易,且系统移植性强、适用广泛,可在多种室内环境进行目标测量,测量结果精确、实时性强,完全可以满足室内移动机器人的测量要求。
[1]蔡征宇,沈俊杰,杨昀.基于工业CCD摄像机的机器人视觉定位系统研究[J].机电一体化,2010(3):22-23.
CAI Zheng-yu,SHEN Jun-jie,YANG Yun.The robot vision system using CCD camera[J].Mechatronics,2010(3):22-23.
[2]Okada K,Inaba M,Inoue H.Integration of real-time binocular stereo vision and whole body information for dynamic walking navigation of humanoid robot[C]//IEEE Conference on Multisensor Fusion and Intergration for Intelligent Systems.Tokyo:[s.n.],2003:131-136.
[3]刘晶晶.基于双目立体视觉的三维定位技术研究[D].武汉:华中科技大学,2007:9-14.
[4]党乐.基于双目立体视觉的三维重建方法研究[D].西安:长安大学,2009:3-5.
[5]Bradski G,Kaebler A.学习 OpenCV(中文版)[M].于仕琪,刘瑞帧,译.北京:清华大学出版社,2009.
[6]ZHANG Zheng-you.Flexible camera calibration by viewing a plane from unknown orientations[C]//Proceedings of the 7th International Conference on Computer Vision.Liege,Belgium:Elsevier Science Publishers,1999:666-674.