基于MyRIO嵌入式平台的双目立体视觉开发及应用
2019-09-10周凡
周凡
摘 要:人类对于三维世界的感知,主要是通过双眼从外界环境中获取视觉成像,然后通过视网膜,把视觉信号传递到大脑,再由大脑根据固有的经验和知识,对信号进行识别处理,最终形成三维的感知。而机器视觉就是利用各种软硬件模拟这一过程,包括摄像机标定、图像获取、特征提取、图像校正、立体匹配、三维重构以及目标定位。文章主要研究内容是基于MyRIO嵌入式平台的双目立体视觉开发问题及应用。具体内容为:对MyRIO嵌入式平台以及开发环境进行了说明,讨论了目前国内外立体视觉的主流实现方法、以及对MyRIO嵌入式平台进行了有效的改进,最后展示了一例关于立体视觉在MyRIO嵌入式平台的具体应用。
关键词:机器视觉;双目立体视觉;三维感知;MyRIO嵌入式开发平台
中图分类号:TP391.41 文献标识码:A 文章编号:2096-4706(2019)01-0073-03
Development and Application of Binocular Stereo Vision Base on
MyRIO Embedded System
ZHOU Fan
(State Grid Hubei Electric Power Co.,Ltd.,Maintenance Company,Yichang 443000,China)
Abstract:Human perception of the three-dimensional world mainly through the eyes from the external environment to obtain visual imaging,and then through the retina,the visual signal is transmitted to the brain,and then according to the inherent experience and knowledge,the brain recognizes and processes the signal,and finally forms the three-dimensional perception. Machine vision is to simulate this process with various software and hardware,including camera calibration,image acquisition,feature extraction,image correction,stereo matching,three-dimensional reconstruction and target location.The main content of this paper is the development and application of binocular stereo vision based on MyRIO embedded platform. Specific contents are as follows:MyRIO embedded platform and development environment are described,the mainstream implementation methods of stereo vision at home and abroad are discussed,and effective improvements are made for MyRIO embedded platform. Finally,an example of the application of stereo vision in MyRIO embedded platform is presented.
Keyword:machine vision;binocular stereo vision;3D perception;MyRIO embedded development platform
0 引 言
在計算机视觉(Computer Vision)领域,双目立体视觉(Binocular Stereo Vision)是一个极为重要的研究分支,特别是在“鸟飞派”[1]机器学习专家的眼中。这是因为,人类的视觉原理就是通过双眼从两个不同的角度,把从外界环境中获取的视觉信号经由视网膜传递到大脑,再由大脑根据固有的经验和知识,对视觉信号进行识别处理,最终形成视觉意识。而在大自然中,几乎所有生物都拥有两只眼睛,这一事实也从旁佐证了双目立体视觉的合理性。
1 MyRIO嵌入式平台
1.1 MyRIO硬件及功能
MyRIO是National Instruments公司生产的一款用于信号控制、机器人、机电一体化和嵌入式概念教学的便携式、实时(Real-time)嵌入式设备。其处理器采用双核ARM Cortex-A9 Processor,拥有512M内存,并且支持IEEE 802.11 b,g,n协议,即2.4 GHz频率WIFI通信协议。MyRIO拥有包括模拟信号、数字信号在内的20个输入输出端口MSP Connector,并拥有34个通用可编程端口的MXP Connector,同时支持3.3V以及5V两个电压等级的信号输出。除此以外,在一些高配型号上,还挂有板载加速度计与板载陀螺仪。
1.2 MyRIO软件及控制
MyRIO主要通过事先在PC端对其内置的LabVIEW FPGA芯片进行编程,实现用户所需的功能。用户需要在PC端使用LabVIEW软件通过USB或者无线与MyRIO进行连接,然后把程序下载到MyRIO的LabVIEW FPGA芯片中。完成以后,MyRIO会根据用户在程序中的指令执行相应的操作。
2 双目立体视觉主流实现方法
2.1 摄相机的标定
摄像机标定的目的是求解两个镜头的内、外参数。内参数包括镜头的几何特性和光学特性,外参数则包括自身相对于外界坐标系的位置和方向,以及与另一个镜头光心的相对距离,也就是基线。虽然有时相机的生产厂家会给出部分内外参数,譬如镜头尺寸、广角度数、焦距等。但是考虑到相机参数的精度将直接影响最后的识别结果。所以主流的双目立体视觉实现方法往往会对相机进行高精度标定,而非采用生产厂家给出的理论值。
从原理上,可以将相机标定方法分为三类,传统标定法、相机自标定法和主动视觉标定法。传统标定法主要是利用制造精度非常高,并且尺寸已知的标定物(如黑白格棋盘),通过多次矫正实验,来获取相机的内、外参数。直接线性法(Direct Linear Transformation)[2]、TSAI法[3]和张友正标定法[4]等,都属于传统标定法。而相机自标定法则不同,它是基于图相之间的对应关系来获取内、外参数,所以不需要标定物辅助。所谓主动视觉标定法则是利用一个可以精确控制的基座,通过定量的移动后,从移动前后图像变化来获取相机的内、外参数。
2.2 图像校正
图像校正的目的是消除图像的垂直视差(Disparity)。两个相机类似于人的双眼,应该处于同一水平面。所以在垂直视角上应该是相同的,而在水平视角应该有对应于基线的差异。但两个相机获取的图像在垂直方向上往往会有一定差异,于是就需要利用图像校正来消除。具体做法是,将基线与图像的水平扫描线以及水平轴X对齐,然后逐点的与其在水平线上的对应点匹配,从而消除垂直视差。
2.3 立体匹配算法
立体匹配算法是计算机视觉领域的研究重点,当前的研究方向主要是提高匹配的精度和降低算法的复杂度[5]。当相机把三维的物体投影到二维世界时,所有细节信息,比如物体表面的材质、光照的高亮以及阴影等信息,都被压缩成像素,表现为不同的灰度。如何通过不同的灰度值,还原三维世界的场景,这就是计算机视觉领域的难点。目前主要有基于局部的立体匹配算法和基于全局的立体匹配算法两大类。基于局部的立体匹配算法将像素点作为最小匹配单元进行匹配,虽然这种方法计算复杂度较低,但是纹理和噪声对其影响较大。而基于全局的立体匹配算法则侧重于在整个图像中搜寻全局的最优解,虽然精度比局部立体匹配算法要高,但是其計算复杂度也比局部立体匹配算法高。
3 对MyRIO嵌入式平台的改进
3.1 OpenCV与Visual Studio开发套件的替代
在绝大多数双目立体视觉的开发项目中,都会用到OpenCV计算机视觉库以及微软公司的Visual Studio开发工具。其中OpenCV是一款包含了一系列C函数和少量C++类的开源图像处理算法库,在图像处理领域,用户可以通过调用其中的函数,来实现用户所需的具体功能。而Visual Studio开发工具则提供了一个集成的开发环境,在这个开发环境中,用户能够自上而下地对整个开发过程进行管理与测试。
目前主流的双目立体视觉实现结构都是在Visual Studio的开发环境中调用OpenCV算法库的内容,从而达到双目立体视觉的效果。但是MyRIO嵌入式平台,既不兼容Visual Studio开发环境,又无法调用OpenCV算法库(目前最新的OpenCV版本仅支持Linux、Windows、Android和Mac OS[6])。所以要想在MyRIO嵌入式平台上开发双目立体视觉,必须对这个结构加以改进。
经过大量的研究和测试,本文提出一种可行的改进方法。首先利用LabVIEW开发环境代替Visual Studio开发环境,由于两者都支持C语言的代码,所以在代码兼容性上问题并不大。对于集成了300多个中、高层API函数的OpenCV算法库而言,双目立体视觉的实现并不需要如此数量的函数集。杀鸡焉用牛刀,一种思路是将所需的函数提取出来,然后写入到LabVIEW开发环境中。而Ben Ward与笔者则发现了另一种可行的解决方案,首先还是在LabVIEW中移植Visual Studio的代码,然后利用MATLAB中的Application下拉列表里的Stereo Camera Calibrator对相机进行标定。但是笔者的实验结果表明,Stereo Camera Calibrator的标定结果并不是特别理想。同时,苏丽颖等人[7]的研究结果也指出,Stereo Camera Calibrator的平均误差大于OpenCV。所以在有条件的情况下,应尽量采用OpenCV与 Visual Studio开发套件进行标定,获取内、外参数后,再将相机接入MyRIO嵌入式平台进行后续工作。这一步完成后,需要将内、外参数利用mat文件的形式载入到MATLAB中。
然后创建一个系统对象(System Objects),以USB或无线的方式分别读入两个相机的视频流(Video Stream)。为了计算视差和3D重构,必须事先进行对视频帧数的校正,可以使用MATLAB自有的rectifyStereoImages函数。接下来就可以利用左右的灰度进行视差计算了,在MATLAB中disparity函数可以实现这一步骤,并且输出视差图。有了视差图以后,利用点云(Point Cloud)就可以很方便地进行3D重构。(事实上,这一函数名就叫pointCloud)。当有了点相对于三维世界的坐标,那么无论是对物体的识别,还是对距离的感知,都可以通过相应的代码轻易地实现。最后需要做的就是对视频流的每一帧图像,都进行上述操作,这样就可以动态地实现所需功能。
3.2 双目立体视觉的物理实现
计算机视觉的飞速发展,催生了一系列双目立体视觉硬件。其中最具代表性的硬件就是双目摄像头,这是一种将两个镜头集成在一个电路板上的硬件,仅通过一个USB接口与PC连接。虽然这种双目摄像头的价格并不昂贵,但是却有两个问题。一是市面上大多数双目摄像头都是集成两个广角镜头(成本较低),这会导致在相机标定环节,图形或多或少会有一定的畸变。二是绝大多数双目摄像头需要安装相应的驱动,或者需要启动一个Windows操作系统中的.exe文件来读取视频流。这对于MyRIO嵌入式平台来说非常不友好。所以针对MyRIO嵌入式开发平台,一种改进的方法是利用两个完全一样的非广角镜头自制双目摄像头,虽然对制作的精度要求很高,但这是一种可行性较高的方案。其重点是,在水平方向对两个镜头的固定、基线距离的精确把握、焦距和感光度等可调节、参数保持一致。
4 应用实例与结论
4.1 一个基于MyRIO的双目立体视觉案例
2003年6月2日,欧洲航天局的首次火星探测任务——“火星快车号”发射升空。同年的年12月19日,“火星快车号”抵达预定轨道,其搭载的火星登陆器“小猎犬二号”(小猎犬号正是两次跟随英国生物学家达尔文探索地球生命的帆船。)成功分離,开始登陆火星。然而,仅仅六天之后,“小猎犬二号”与此次任务的登录操作中心失去联系。次年2月6日,英国莱斯特大学“小猎犬二号”管理委员会宣布,任务失败。
但是“小猎犬二号”管理委员会并没有气馁,他们在莱斯特大学成立了宇宙研究中心(Space Research Centre),继续登陆火星,进行地外生命的项目研究。在这个项目中,有一个子项目名叫SPLIT(Small Planetary Linear Impulse Tool),这个子项目致力于开发一套能够对火星上的岩石进行切割,并能够采样分析其内部成分的工具。在这个子项目的测试阶段,开展了一个更小的子项目PPR(Prototype Planetary Rover),这个项目被要求设计一个模拟火星登陆器,作为SPLIT的测试平台。而在PPR项目中,针对模拟识别火星岩石以及其距离的项目要求,采用了本文所述的开发方法。
模拟火星登录器采用MyRIO嵌入式开发平台作为其核心控制设备,通过无线与控制端连接。这样的通信模式决定了PPR项目无法采用主流的OpenCV与Visual Studio开发套件,来实现双目立体视觉。该项目主要从物理硬件和开发平台两个方面改进了双目立体视觉的主流开发方式,使其能够因地制宜,适应在MyRIO嵌入式环境下工作。如第三章所述,利用两个参数相同的非广角镜头,水平排列,制作双目摄像机;用LabVIEW开发环境取代Visual Studio,并根据OpenCV算法库中所需函数,在MATLAB中进行图像校正、立体匹配、三维重构以及目标定位。但摄像机标定环节,即双目镜头内、外参数的获取,依然使用平均误差较小[7]的OpenCV与 Visual Studio开发套件进行标定。
4.2 结论
随着人工智能的飞速发展,计算机视觉逐渐成为不可或缺的一环。对于双目立体视觉的研究,也越来越深入。但是由于其算法的独特性,双目立体视觉的开发环境受限。本文主要讨论了在MyRIO嵌入式平台下的双目立体视觉开发问题,文章从硬件和软件两个层面给出了具体改进方法,文章末尾的应用实例也证明了这种改进方法是可行的,稳定的。本文旨在启发,在计算机视觉领域,除了加强纵向的深入,比如标定方法、匹配算法的研究;还应该进行横向的延伸,比如加强对双目立体视觉开发平台兼容性与鲁棒性等研究。
参考文献:
[1] Wu Jun.Age of Intelligence [M].Beijing:Citic Press,2016.
[2] Abdel-Aziz Y I,Karara H M,Hauck M.Direct Linear Transformation from Comparator Coordinates into Object Space Coordinates in Close-Range Photogrammetry * [J].Photogrammetric Engineering & Remote Sensing,2015,81(2):103-107.
[3] Lenz R K.A New Technique for Fully Autonomous and Efficient 3D Robotics Hand/Eye Calibration [J].IEEE Transactions on Robotics & Automation,1989,5(3):345-358.
[4] 张友正,马颂德.计算机视觉-计算理论与算法基础 [M].北京:科学出版社,1998.
[5] 韩慧妍.基于双目立体视觉的三维模型重建方法研究 [D].太原:中北大学,2014.
[6] OpenCV Dev Team.OpenCV 2.4.13.7 documentation. OpenCV dev team [EB/OL].https://docs.opencv.org/2.4/index.html.2011-2014/2018-10.
[7] 苏丽颖,李小鹏,么立双.双目摄像机快速标定新算法 [J].中南大学学报(自然科学版),2013,44(S2):364-367.