卫钦智,陈 松
(中国科学技术大学 国家示范性微电子学院,安徽 合肥 230026)
双目立体视觉是一种重要的虚拟现实技术,通过模拟人类双眼的成像原理,即由左右两台摄像机拍摄同一场景,得到左右两幅图像,在同一设备中显示出来。
目前市场上的所有便携设备,诸如手机、平板、笔记本电脑等,都配备了具有强大功能的普通或者广角摄像头,获取更多信息的同时也带来视频图像的不同程度的畸变,畸变的引入不符合人眼的视觉感官,也不利于对图像进行特征提取、图像识别、图像分割等后续的处理。为了消除畸变,通常假设一个包含径向和切向畸变的模型[1],利用该模型校正图像。因此,图像校正一般也作为图像处理中的预处理操作。
一般,左右摄像机在实际中的摆放不完全满足理想配置,导致获得的左右图像不仅含有畸变,还存在一定的垂直视差,不利于后续的立体匹配[2]或者三维重建,所以合理的双目校正非常关键。基于FPGA的硬件双目图像几何校正处理方式不仅效果理想,还可以满足对实时性具有更高要求的场合。由于双目图像几何校正模型具有较高的计算复杂度,传统的硬件双目图像校正方式通常是基于查找表来实现双目畸变图和校正图像之间的映射[3],避免了在硬件内部复杂的计算,但是会消耗大量的缓存去存储原始的畸变图像,不适用于高分辨率双目图像。
鉴于以往的几何校正模型较高的计算复杂度,不适合硬件实现以及需要消耗大量缓存的缺点,本文设计了一种循环式缓存方式[4]存储图像和一种适合硬件实现的高效的双目几何校正模型。
图像产生几何畸变是指像素点在空间中发生位移,造成图像局部的变形。造成几何畸变的主要原因有光敏器件质量差、相机视场角度问题、视觉系统理论误差等。对于双目相机而言,还存在因左右相机空间位置差异和极线不平行造成的相同物体的成像点偏离理论位置,给双目图像匹配带来误差的问题。针对左右相机的空间位置变形,也需要对左右图像进行立体校正,减少后续深度信息计算误差。
如图1所示,Fl和Fr为左右相机光心,它们的连线即为基线,基线与左右成像平面的交点分别为对极点el和er,目标点p在原始畸变图中的位置分别为左图中的l1和右图中的r1,el和l1连线即为左极线,er和r1连线即为右极线,Rl和Rr为p点在校正图中的位置。
经过双目校正后得到的无畸变图像,使得左、右两幅图无畸变,目标点在校正后的两幅图像中对齐无垂直差距,左右极线二维坐标系重合,便于对校正好的双目图像进行立体匹配等操作。
图1 双目校正示意图
本文设计的双目校正几何模型主要是针对具有桶形畸变的广角双目图像,使得校正后的图像视频呈现出更好的视觉效果,更加符合人类感官,便于对获得的信息进行立体匹配、目标识别、对象跟踪、图像分割和图像特征提取等后续处理。
图2为双目图像几何校正流程。相机标定法:用于标定单目相机的网格模板标定法,获取畸变校正参数后进行畸变校正;基于MATLAB标定工具箱[4-5]的双目相机标定法,得到外部标定参数进行双目图像立体校正。根据畸变模型和空间位置关系,利用双线性插值[6-7]进行像素重建。
图2 双目校正结构流程图
如果用f(x,y)来表示输入的畸变图像的灰度函数,同样用g(x,y)来表示输出的校正图像的灰度函数,那么,输入和输出之间的空间点的对应关系就可以用数学方法来描述,其一般定义如下:
f(x′,y′)=g(x,y)=g[a(x,y),b(x,y)]
(1)
其中,x′=a(x,y),y′=b(x,y),x′、y′表示输入的畸变像素点,x、y是输出的校正图像素点。为了描述相机的成像几何关系,需要选定畸变校正模型并且对使用的双目广角相机进行标定,本文使用的标定方法有2种,分别为网格模板标定和基于MATLAB工具箱的黑白棋盘标定。
图像映射通常被应用于缩放、平移、旋转和拼接等多种图像处理方式中[8]。图像映射方式分为:向前映射和向后映射[9]。
向前映射:又称像素移交映射,是一种由畸变图像(输入图像)到校正图像(输出图像)的映射方式。其在校正过程中可能出现映射超出索引维度,即由畸变图像得到的校正图像像素超出图像分辨率维度,导致图像像素丢失。
向后映射:向后映射是一种由校正图像到畸变图像映射,又称图像填充映射。已知输出图像像素(整点坐标)在原图像中的坐标位置,通常是非整数坐标;利用畸变图像中非整数坐标点周围的整数坐标的像素的灰度值进行插值得到校正图像中对应整数点的像素灰度值,一般不会导致像素浪费或丢失现象,实现时效率更高。因此,本文所采用的校正模型是基于向后映射的校正方式。图3即为向后映射原理。
图3 向后映射方式
畸变校正模型的选择应该切合实际,需要考虑实现的效果和算法实现时的计算复杂度,更要考虑是否适合硬件实现及其资源消耗和实现效果。
校正模型实现时要准确对应所在坐标系。坐标系的变换顺序为:相机坐标系→像素坐标系→图像坐标系→像素坐标系,其中图像坐标系用来实现畸变校正,输入输出对应图像数据则是在像素坐标系中。
图4给出了对应坐标系转换关系,p为目标点,OcYcXcZc为相机坐标系,oxy是图像坐标系,ouv是像素坐标系。
图4 坐标系转换关系图
对于广角相机产生的桶形畸变,其主要由径向畸变和切向畸变组成。下面给出几组适用于广角相机的畸变校正模型:
(2)
公式(2)的模型考虑主要的桶形畸变中的径向畸变量,复杂度大大降低,能达到基本校正效果,易于计算和实现,但是缺乏灵活性。
(3)
公式(3)模型精度高,效果理想,但是参数众多,计算复杂度较高,硬件实现上没有优势,并且通常的桶形畸变以径向畸变为主,即第一个括号内的值。故本文提出了一种更为适合硬件实现的畸变校正模型,见公式(4):
(4)
模型(4)参数数量适中,复杂度不高,适合硬件实现。
网格标定法,首先制作标准网格点图,本文的网格点8×10的网格图,由边长为1 cm的正方形方格组成。
获得网格点后,利用双目相机拍摄对应网格点,得到畸变的网格图,通过匹配标准网格和变形网格中的网格点,得到每个网格点的坐标偏移量,从而建立畸变图和校正图之间的几何关系,求得畸变校正模型参数,图5为对应网格标定流程。
图5 网格标定流程图
利用网格标定分别对模型(2)、(3)、(4)进行了验证,模型(4)能有效去除畸变,并且适合硬件实现,同时,在4个校正参数中k1,k2,k3,k4不仅可以控制校正效果,还可以对图像内容的损失作调整,因此选定了模型(4)作为畸变校正模型。
使用MATLAB标定工具箱对双目相机进行标定,本文使用的是BOUGUET J Y发布的Calibration Toolbox for Matlab,与HEIKKILTI J和SILVEN O的四步标定法[10]也极为相似。其内部畸变模型与公式(3)大致相同,区别在于本文将坐标系转换单独处理。
本文主要是用标定工具箱的双目标定确定外部参数,完成几何校正模型中的立体校正环节。下面介绍本文双目标定的实施过程:
(1)用双目相机拍摄足量黑白棋盘图,分别重命名为左图像和右图像;
(2)要标定双目相机,首先要对单目相机内部参数进行标定,启动单目标定程序,先读入左图的20幅图依次进行标定,如图6所示,将标定得到的结果分别命名保存,然后对右图的20幅图进行同样操作,完成标定,得到左右2相机内部参数;
图6 待标定的左右棋盘图
(3)启动双目立体标定,加载左右相机内部标定参数,进行立体标定得到外部标定参数旋转矩阵om和平移矩阵T,om、T都是3维列向量。
图7给出了模拟的双目相机的空间位置关系图,可以用公式(5)的立体校正模型表示。根据左右相机之间位置关系得到右图像相对于左图像的新的坐标。
XR=R*XL+T
(5)
其中,XL,XR是左右图像对应的三维坐标,R由om经罗德里格斯变换得到。
图7 模拟的双目相机位置关系
本文提出的双目图像硬件电路设计架构如图8所示。
图8 双目图像校正电路硬件架构图
本文所提出的硬件架构,采用同步时钟设计,具体步骤如下:
(1)使用随机存取存储器作为缓存设备,控制左右图像的像素数据的写入、读出,并且基于随机存取存储器设计line-buffer控制模块;
(2)计算几何校正模型,将计算结果输出至line-buffer模块读取像素信息,同时,将插值参数输出至像素重建模块;
(3)根据插值参数和来自line-buffer模块的像素信息,利用双线性插值进行像素重建硬件电路结构设计。
图9所示是line-buffer控制模块电路结构,左右图像具有相同结构的line-buffer。line-buffer由指定数量随机存取存储器RAM组成,然后进行分组,每组由相同数量的RAM组成。RAM数量与图像畸变大小有直接关系,畸变越大所需要的RAM就越多,本文采用的广角相机具有一定幅度畸变,故需要一定数量的RAM用来缓存部分图像数据信息。
写入和读出的控制模块均相同,读数据的信号是根据line-buffer得到来自畸变图像和校正图像之间对应像素的空间位置关系来决定。
本文几何校正模型包括单目畸变校正模型和立体校正模型。左右图像的单目畸变校正模型相同。首先将标定得到的畸变校正参数和外部参数做定点化处理,作为参数内置于硬件电路中,其中畸变校正参数k1、k2、k3、k4分别对应para_x0、para_x1、para_y0、para_y1。
图9 line-buffer电路结构图
图10和图11分别给出了几何校正中单目畸变校正模型和立体校正模型的电路结构。畸变校正模型为6级流水线设计。将公式(4)展开,先处理3级流水线的乘法树结构,然后处理3级流水线的加法树结构,输出畸变图像与校正图像之间的行里对应关系,整数部分给到line-buffer模块作为读信号去读取相应数据,小数部分给到像素重建模块作为插值参数。立体校正主要的作用在于做空间坐标变换,使得左右图像坐标平行对齐,在硬件设计中根据实际情况做二维图像坐标的变换即可。
图10 畸变校正模型电路结构图
图11 立体校正电路结构
本模块是基于双线性插值设计的电路结构,双线性插值原理如图12所示。
图12 双线性插值原理图
假设p点为所求像素,设f(x)为求对应点像素值的函数,其中x2-x1=1,y2-y1=1。
(6)
(7)
(8)
如图13所示,左图和右图的像素重建模块结构相同。电路结构采用2级流水线设计,对来自line-buffer模块的4个图像像素数据和来自几何校正模型的插值参数重新插值计算校正后的像素。
本文使用的是分辨率为1 280×960的130°双目广角相机,双目相机基线长为8.0 cm,焦距为2.6 mm。
实验软件版本为Xilinx Vivado2017.1,实验平台为Xilinx 7z020开发板,频率为85 MHz。主要的资源消耗见表1,图14 给出了双目图像左右原图像和校正图像对比结果。
表1 资源消耗表
图13 像素重建电路结构图
图14 双目校正左右原图与校正图对比
本文在研究前人关于双目视觉校正的基础上,设计了一种高效双目图像几何校正硬件架构,效果较好,适合硬件实现。
对于具有较大畸变的双目相机能够完成双目几何校正,完成校正后图像边界不会出现大面积的黑色区域或像素缺失,将所有缺失都转换到右图像下边界或者右边界区域,利于后续的图像裁剪,且分辨率损失较小,实现效果较好。