王媛媛, 刘学成, 伍凤娟
(西安科技大学 电气与控制工程学院,陕西 西安 710054)
目前,国内外主要的三维(3D)图像数据采集技术有空间结构光编码技术、飞行时间(time of flight,TOF)法和双目视觉法3种。其中,双目视觉具有适应室内和室外,不怕阳光干扰,适应远距离采集景深数据等优点,但因计算量大,限制了其在低计算能力、低功耗和高实时性场合的应用。近年来,国内外已提出了一些优化的双目视觉实现方法,大多基于高性能数字信号处理器(digital signal processor,DSP)、多核中央处理单元(central processing unit,CPU)并行或者直接进行显卡编程用统一计算设备架构(compute unified device architecture,CUDA)进行加速。随着电子技术的发展,现场可编程门阵列(field programmable gate array,FPGA)在数字信号处理领域应用愈加广泛,其设计的灵活性和可并行执行性,使得经过并行优化的算法应用于FPGA中能够成倍提升执行效率[1,2]。
本文主要针对双目视觉中的摄像机标定方法、立体匹配算法以及三维重构算法进行研究,并利用FPGA作为计算平台,实现了场景深度信息的获取,具有很好的三维显示效果。
双目视觉技术模拟人眼视觉系统,依据计算机视觉相关的理论和技术,利用双目摄像头采集同一场景不同位置的左右路图像,对场景进行三维重建[3,4]。1)由于摄像头存在加工误差,使得原始图像存在微小畸变,因此,需要对图像采用畸变校正和极线校正补偿硬件误差预处理,以及标定摄像机。标定方法采用双目图像预处理算法实现。2)当要对两相机图像重叠部分的每个像素点均给出一个视差和距离时,难以确定两相机图像上实际场景中的某个点在相机传感器上的投影所对应的像素,故需进行立体匹配。在求得匹配像素后即可计算视差,结合双目的外参即可对图像中的像素点进行距离计算。
双目视觉系统图像预处理部分有2个作用:去除图像噪声;校正图像畸变。去噪采用中值滤波算法实现;校正的处理实现单相机的畸变校正和双目整体的水平对齐校正,为保证实时性同时减少资源占用,具体实现时两个校正处理由一个模块实现[5]。
1)中值滤波原理
中值滤波即将目标像素点与其周围相邻的8个像素以亮度为依据排序,取序号为5的像素亮度值替换原目标像素点的亮度值,及对图像平滑处理,去除像素点原本的极大或极小值。中值滤波有利于降低暗环境下摄像头自动亮度增益功能产生的白噪声或椒盐噪声。
2)双目畸变校正和极线校正
使用OpenCV进行单目相机标定,计算出相机内参数:内参矩阵(fx,fy,u0,v0)和畸变系数。校正径向畸变和切向畸变公式为
r2=x2+y2
(1)
式中k1~k6为一到六阶径向畸变系数,实际情况下取前三阶即可满足校正要求;p1和p2为切向畸变系数。
双目极线校正又称平行校正,主要用于将相机左右光轴完全平行和左右视图的水平对齐处理。已知OpenCV立体校正后会输出一个投影矩阵Pl、Pr和旋转矩阵Rl、Rr,旋转矩阵可以使两幅图像满足极线约束,而投影矩阵可以使两个平面映射到同一平面上[6]。
AD-Census算法来源于SAD和Census 2种算法的结合,在SAD和Census算法分别实现之后,将两者结合仅需要在2种算法的代价聚合一步将两者单独的代价换为2个算法加权求和后的共同匹配代价[7~10]
C(p,d)=λCensusCCensus(p,d)+λADCAD(p,d)
(2)
为减少计算量同时也增加后期三维点云的准确性,图像三维点云处理中需要剔除错误点云。在已知图像点云距离范围时,可以简单排除掉超出范围的点云,还可以使用滤波等算法剔除掉错误点云[11,12]。
验证系统硬件包含摄像头、FPGA开发以及下位机。双目摄像头使用了2个OV7725 CMOS摄像头,左右平行放置,摄像头板通过40Pin 柔性印刷电路板(flexible printed circuit,FPC)排线与FPGA开发板连接,摄像头板的电源由FPGA开发板的5V输出提供。摄像头分辨率为640像素×480像素(约30万像素),中心距为7.0 cm,输出格式为RGB565,位宽为8 bit。在FPGA开发板上使用硬件编程语言实现图像预处理,在下位机上使用C语言实现立体匹配算法及点云处理。
2.1.1 中值滤波算法的实现
采用FPGA实现中值滤波,最关键的就是实现3×3单元的排序操作。但在排序寻找中值之前,要先获得3×3的像素块。由于所用的CMOS摄像头一次只输出一个像素的RGB值且每一行从左到右,在列数上从上到下输出。其仿真模块如图1所示。要想构造3×3的像素块,则必须将前两列的像素进行缓存。设计采用了2行Shift-RAM IP核实现,每个Shift-RAM的缓存深度均为1行的像素数,即640。
图1 中值滤波模块仿真波形
图2 实际拍摄效果
图2为单独使用FPGA实现双摄像头采集图像在液晶屏上的显示效果。可以看出:加上中值滤波算法的图像较未加中值滤波的图像清晰度更高,噪声更小。
2.1.2 双目校正模块整体实现
采用投影矩阵的参数对原始坐标进行第一次变换,将原始坐标转换到以投影矩阵中焦点坐标为原点的坐标;第二次变换将像素点映射到三维空间并进行旋转;第三次变换对径向畸变校正(校正的畸变参数中切向畸变参数为0,故不进行切向畸变校正);采用原始的相机内参矩阵将坐标映射到原图的像素坐标,分别用两个与原图同尺寸的矩阵存储用于重映射的坐标。即可通过重映射等操作由原图生成校正后的图像。
本文采用实时计算重映射坐标值,将基于ROM的坐标读取改为基于重映射坐标计算模块的坐标发生,具体方法如图3所示,可以实现较少的资源占用,图4为双目校正前后效果。
图3 双目校正模块框图
图4 双目校正前后效果对比
通过C++编程配合OpenMP并行库实现AD-Census算法,在下位机上处理。图5为设计的双目深度摄像头实际效果。可知:对挡板、黑色衣物等无法计算出有效的深度信息,而对于纹理较明显的桌椅边缘等区域有明显的视差数据。该视差图效果不佳的原因主要有2点:1)AD-Census中,对于不同分辨率的相机、不同距离的目标物要达到较好的视差效果均需要调试参数。如SAD窗口大小,滑动窗搜索的范围以及代价聚合时SAD和Census的权重;2)摄像头本身质量一般,即便经过校正仍存在轻微的以图像中心为圆心的椭圆形光晕。
图5 AD-Census算法实际效果
通过AD-Census计算之后可以得到一幅深度为16位的视差图,视差值与实际场景中的像素点和摄像头的距离相对应,测试均在实验室内进行,能够确定最大场景距离,且SAD部分具有最大视差设置,其决定了最小距离,同时测试时一般避免使双目摄像头距待扫描的场景过近,即可确定一个最小距离。用确定的最大距离和最小距离结合双目标定中的摄像头外参Q即可得到要保留的最大视差和最小视差,随后将视差图上不在设定范围内点的视差设置为0,即可剔除大部分错误点。点云处理库(point cloud library,PCL)中提供了点云的一些基本处理方法,可以比较容易地实现三维点云地处理,PCL中的Statistical Outlier Removal函数可以移除点云中的离群点,使用VoxelGrid体素格滤波器可以将一个立方体格内的点云合为一个点[13]。图6为点云滤波与下采样效果,可见:经过滤波后,点云的形态可以保留但点数大幅减少,为后期形态上的处理、拼接等操作提供了更多的方便。
图6 点云滤波与下采样效果
本文主要以FPGA开发板和下位机为硬件平台,用Verilog HDL实现双目图像预处理算法,下位机CUDA编程实现立体匹配和点云处理算法。论述了双目系统相关理论原理、双目图像预处理模块基于FPGA平台的设计实现、AD-Census算法的原理以及点云的三维滤波、多点云拼接相关原理和实现方法。最终可以实现以7帧/s的速度计算640×480大小的深度图,经过上位机进一步处理,可以将270°范围内以1.8°为间隔的150幅深度图转换为点云,并拼接出270°左右视野内的三维场景。
参考文献:
[1] Smisek J,Jancosek M,Pajdla T.3D with Kinect[J].Advances in Computer Vision & Pattern Recognition,2013,21(5):1154-1160.
[2] 王文强.基于FPGA的双目视觉系统研究[D].北京:清华大学,2015:12-30.
[3] 张永平.嵌入式双目视觉系统和三维重建技术研究[D].杭州:杭州电子科技大学,2011:10-25.
[4] 王 欣,袁 坤,于 晓,等.基于运动恢复的双目视觉三维重建系统设计[J].光学精密工程,2014,22(5):1380-1386.
[5] 布拉德斯基,克 勤.学习OpenCV:中文版[M].于仕琪,刘瑞祯,译.北京:清华大学出版社,2009:10-25.
[6] 姜宏志,赵慧洁,梁宵月,等.基于极线校正的快速相位立体匹配[J].光学精密工程,2011,19(10):2520-2525.
[7] Isakova N,Basak S,Sönmez A C.FPGA design and implementation of a real-time stereo vision system[C]∥International Symposium on Innovations in Intelligent Systems and Applications,IEEE,2012:1-5.
[8] 雷 磊,郑江滨,宋雪梅.基于改进Census变换的立体匹配算法[J].计算机应用研究,2013,30(10):3185-3188.
[9] Nadia Baha,Hakim Touzene,Slimane Larabi.FPGA implementation for stereo matching algorithm [C]∥Science and Information Conference,2013:448-454.
[10] 马颂德,张正友.计算机视觉:计算理论与算法基础[M].北京:科学出版社,1998:34-40.
[11] 刘广飞,周文晖,戴国骏.基于FPGA的双目视觉同步采集系统[J].杭州电子科技大学学报,2011,31(3):22-25.
[12] 王 森,杨克俭.基于双线性插值的图像缩放算法的研究与实现[J].自动化技术与应用,2008,27(7):44-45.
[13] 姚顽强,蔺小虎,马 飞,等.基于改进坐标增量的点云数据压缩算法[J].西安科技大学学报,2016(6):849-856.