刘宝龙,张 薇,陈 桦,姚慧敏
(1.西安工业大学 计算机科学与工程学院,西安 710021;2.中国石油 长庆油田分公司第八采油厂,西安 710021)
一般立体视觉系统分为软件部分和硬件部分,硬件包括CCD相机采集部分,软件包括相机标定,立体匹配以及三维重建这三部分。相机标定简单来说就是通过相机成像规律得到相机组的内外参数,利用参数进行图像矫正,立体匹配和三维重建均是在经过校正后的图像基础上进行。因此相机标定部分决定了整个立体视觉系统最终重建模型的准确度和精度。双目立体视觉是通过两个不同的视角对同一场景模拟人类左右眼进行观察拍摄,由此获得具有视差的左右图像,通过信息补偿计算还原出原始三维场景。一般的双目立体视觉直接通过相机进行数据采集,显微立体视觉系统中在CCD相机前面增加显微镜充当相机镜头进行数据采集。因为加入了显微镜所以导致成像光路更复杂,产生更大的畸变,并且加入显微镜后会导致视野的缩小,这些都会直接导致相机标定时使用的相机模型变复杂以及三维成像时的景深计算难度加大。
20世纪90年代文献[1]深入研究并且建立了双目显微视觉系统,并将系统应用在研究细胞和微小零件三维立体形状重构问题上;文献[2]在对细胞进行双目显微立体视觉操作实验过程中提出了一种针对CMO型体视显微镜的成像模型,并且指出了体视显微镜自身所存在的各种畸变参数,以Tsai立体显微镜为基础,最终建立了可以进行有效三维测量的显微立体视觉系统;文献[3]在体视显微镜基础上构建了显微立体视觉系统,用来观察物体的三维表面形貌和三维位移场;文献[4-6]提及并制造出用于细胞操作的机器人样机;这些系统都是在2D显微镜下工作的。
针对显微相机的标定,文献[7]提出了一种通过多次转动标定板来估计成像系统参数和成像畸变的方法;文献[8]基于Tsai两步法提出了利用正交栅格消除镜头畸变的改进方法;文献[9]提出了基于平移的显微镜标定方法。文献[10]设计了点阵标定板和精密平动平台,实现了在多种放大倍数下的基于Tsai显微镜的标定方法;文献[11]结合建立的平面模板,利用消失点和圆环点的约束关系求得相机参数;文献[12]提出了一种基于弥散圆的光学显微镜景深自动标定方法。
在实际的标定过程中,因为不可避免的人为等因素的干扰,会导致采集到的标定图像质量不一致,这些质量不一致的图像会导致整体的标定产生误差,由于显微成像系统为放大系统,所以会进一步加大外界信息的干扰。因此为了最大程度的减少人为等因素的干扰,本文在文献[13]提出的标定方法基础上通过每组图像标定的标准差进行原始数据筛选,通过减少外界干扰降低最终累计的标定误差,利用得到的标定结果进行图像矫正,并在三种常用显微倍率环境下进行上述相机标定,通过对比标定结果得到显微环境下倍率和标定焦距相关关系。
相机拍摄是将物体的三维信息转存为二维信息,在此过程中必定会丢失大量信息,立体视觉是通过两个相机拍摄的信息互相补偿还原出物体的三维信息。其中相机标定就是通过相机原理以及系列合适数据图像求解得到物体三维到二维的变换关系。对于理想的单个相机模型而言,物体的三维信息仅经过旋转平移缩放等变换即可得到其对应的二维图像信息,这个过程也就是世界坐标系与图像坐标系的转换[14-15]。
相机标定常用的相机模型为针孔模型,模型简易图如图1所示,其中长方体代表相机。假设世界坐标系原点为相机光心,Z轴指向相机外,坐标系遵守右手坐标系。图像坐标系是以相机的成像面为基准,图像中心为坐标系原点,同样遵守右手坐标系。
图1 针孔成像模型Fig.1 Pinhole imaging moel
这时假定物体点P在世界坐标系OWCS中坐标为M=[X,Y,Z,1]T,其在图像坐标系OCCS中对应的点坐标为m=[u,v,1]T,则这两点有如下映射关系:
sm=ARtM
(1)
式中:A为相机内参矩阵;R为旋转矩阵;t为平移矩阵;s为缩放因子。令H=A[R,t],H也被称为单应性矩阵。每拍一张标定板的照片就可以得到一个单应性矩阵。相机平面中点的坐标通过上面提到的欧拉角点处理得到,空间平面中三维点的坐标可由标准标定板的规格得到。也就是说每得到一张标定板的图片就可以得出空间三维点和相机平面二维点之间的关系,因为未知参数数量以及s缩放因子标量的关系至少需要3组以上才可以完成最基本的标定求解。
上述为一般理想相机模型但在显微立体视觉系统中又有不同。显微立体视觉系统(SLM系统)不同于一般宏观的立体视觉系统之处在于借助显微镜等工具对合成对象的放大部分,也就是说显微镜是实现显微立体视觉系统中最重要的一部分[16-17]。体视显微镜的工作空间大,便于操作微观对象,而且由于观测方法是非接触式测量,所以对观测物品的表面没有任何损伤,其还可以通过和电脑连接实时观察到动态场景。但由于体视显微镜的成像原理属于光学成像,容易引起图像的畸变,导致后续的显微立体视觉系统的准确度降低,所以对体视显微镜进行显微标定是十分有必要的。
体视显微镜由于光路结构的不同,分为两条光路共用一个物镜镜片的CMO型和两条光路各自拥有不同物镜镜片的G型。
两种显微镜光路结构如图2所示,受实物限制选择G型体视显微镜,光路经过分光镜分给CCD相机和目镜。显微镜下的标定和普通相机环境下的标定主要差异在于光路不同以及视场不同。具体来说常规的相机标定一般是将针孔模型当作理想相机模型,但由于显微镜的特殊性,普通的针孔模型并不适用。例如显微镜中的校准平面和图像平行或者接近平行,导致世界坐标平面与图像坐标共面或是接近共面,而宏观下相机标定基本都是非共面标定,且由于体视显微镜的视场要比一般的相机小的多,显微镜下的景深也同样比一般相机小,所以一般相机标定方法并不适用于显微镜环境。
图2 体视显微镜光路结构示意图Fig.2 Optical puth structure of stereoscopic microscope
根据文献[13]提出的标定方法在实际的试验中将世界坐标系的原点定为标定板的中心,Z轴指向标定板,切角对面符合右手坐标系。假定存在任一点PW=(XW,YW,ZW)T,则从世界坐标中转换为图像像素坐标qi=(r,c)T需经过如下过程:
(2)
① 利用一般相机模型进行简单坐标系的变换,即把世界坐标系中PW转为相机坐标系中得到pC,此时的pC坐标位置为理想条件下的世界环境点P的相机映射点;
② 利用所选面阵相机拍摄特点,进行相机数学模型的平面投影映射计算,得到理想的二维点也就是点qc,到此都是在理想计算环境下的结果;
④ 通过投影倾斜图像平面进行畸变点的校正得到最终的实际像素坐标点qi。
具体过程中使用到的数学模型为
(3)
(4)
(5)
(6)
式中:f、k、Cx、Cy、Sx、Sy分别为焦距、畸变量、畸变中心坐标、传感器相邻单元尺寸;R和t分别为相机的旋转、平移矩阵;I为单位矩阵。在进行双目标定时增加了计算两相机坐标系之间的变换关系,此时假定任一坐标系为上述世界坐标系,用类似方法就可以得到两相机之间的位置关系。
由于显微镜的放大光路系统,导致微小的环境变化都会对数据采集造成干扰,所以简单的进行过曝,降低对比度和对焦等,以对直观图像进行删减是远远不够的。为了进一步降低外界因素对相机系统的干扰,本文提出误差筛选方法,通过数据的均方误差对采集数据进行数据清洗,误差计算方法为
(7)
误差筛选需要对所有数据进行重投影误差计算,找到不足以对相机系统描述的数据进行剔除。当相机系统的数字模拟模型确定时,一定会与实际的相机系统存在一定误差,这个误差就是采集数据是否可以描述相机系统的判断标准。因为需要剔除的误差数据表现为偏离标准误差过高或是过低,所以对相机系统的标准误差用截尾平均数表示。
设同一时刻同一对象的左右图像为一组。对一组图像而言n=7×7即一组图像有49个需要计算重投影的特征点,设Xi={x1,x2,…,x49},其中xj表示单幅中第j个特征点的重投影偏差值,Xi表示第i幅图像重投影误差集合,利用截尾平均数来表示整体各组误差值:
(8)
a=m/n
(9)
式中:a为截尾系数,a=m/n;m为截掉个数;n为数据个数;X(na+1),…,X(n-na)为截尾数据。具体步骤为
① 根据图像中标定板位置将图像分类。标定板位置靠近图像中心的为一类,四周为另一类,这么做是因为相机成像时视野中心和四周会存在不同的畸变程度;
② 单独对每一组图像进行立体标定,然后计算每一组的重投影误差;
③ 根据步骤①中的图像分类方式,对步骤②中的重投影误差进行分类,得到两个重投影误差集合Xi,Yi;
④ 根据重投影误差集合计算误差数据的偏离程度,通过偏离程度选择对应的m值和剔除对象;
⑥ 利用截尾平均数再次检测所有数据的偏离情况;
⑦ 对剩余的图像数据组进行整体标定,得到最终的相机模型重投影误差值Err。
剔除误差值偏离主体(该主体是指实际相机模型和数学表示相机模型之间的误差)的原因:若重投影误差偏离主体且远高于主体水平,则说明该组数据的实际点与重投影点之间偏差过大,即该组数据异常,远离数学相机模型和实际相机模型,该组数据标定失败。若重投影误差偏离主体且远低于主体水平,则说明该组数据的实际点与重投影点之间误差极小,即该组数据异常,逼近实际相机模型但远离数学相机模型,该组数据同样标定失败。
这样的数据既不能用来描述计算使用的数学相机模型也不能用来描述实际的相机模型,所以不应纳入整体标定数据。这样进行筛选后可以很大程度的减少肉眼看不出的外界因素对图像的干扰,达到降低标定误差提高标定精度的目的。
根据实际情况显微立体视觉系统中体视显微镜使用Semorr DOM3000,该显微镜共有0.204X、0.306X、0.510X、0.816X和1.275X五种倍率,结合后期使用环境以及标定板大小最后选择在0.510X、0.306X、0.204X这三个常用倍率下进行标定实验,图像采集部分由两个Basler CCD工业相机组成,标定板规格依据倍率选择10 mm点阵型,由于显微镜自带打光为直射,容易造成标定板过曝,因此选择侧面被动打光避免过曝和反射点情况发生。
通常来说相机的畸变影响在视野中心最小,四周最大,所以在标定图像的采集时应该要注意标定板应覆盖到视野的各个角落。并且应该在相机的工作范围内尽量在x,y,z三个方向进行标定板的旋转。在所有的图像采集过程中显微镜的观测部分和CCD相机部分不可以有位置的变化,CCD相机也应该保持光圈、焦距等参数的一致,采集的所有图片都要保证清晰避免标定板反光或是过曝等不良情况。在另外两个倍率下重复采集操作,共得到三组不同倍率下的标定图像。
得到合适的标定板采集图像后,对图像进行高斯平滑滤波、边缘提取以及模型匹配等操作,找到并定位图像中每个圆的圆心坐标,再根据标定板规格即世界坐标系中的参数,利用上述数学计算过程进行相机的内外参数求解计算。
实际使用的显微镜放大倍率分别为0.204X,0.306X,0.510X,0.816X,1.275X这5种,结合实际的标定板大小(10 mm×10 mm)以及显微镜的实际放大倍率,选择只在三组常用倍率下进行双目标定。标定校正后得到的相机外参数见表1,其中clpcr为标定得到的左相机相对右相机的位姿,位姿的6个参数分别为世界坐标系中的X、Y、Z轴向距离和平面的余弦角ω、δ、θ,rectposeR代表在校正后光轴平行的理想双目相机模型中,左相机相对于右相机的位姿,位姿参数含义同上。
相机内参的标定数据见表2,参数分别为焦距f,畸变量k,水平及垂直像素尺寸(dx,dy)即像元尺寸大小,畸变中心横纵坐标(lx,ly)即主点坐标。
表1 相机外参标定数据Tab.1 Calibration data of camera external fererence
表2 相机内参标定数据Tab.2 Calibration data of camera internal reference
注:R为右相机;L为左相机。
综合考虑数据和标定板在图像中的尺寸,最终选择在0.306X倍率下完成后续的工作。因此在0.306X倍率下进行误差筛选重标定。对所有数据进行整体标定,得到累计的重投影误差如图3所示。
图3 标定累计误差
图3中横坐标为累计图像数量,纵坐标为标定累计得到的重投影误差,最终得到相机标定误差为0.411 968 pixel。进一步进行对比实验,用同样的数据进行误差筛选标定。对采集到的数据进行分组,中心组(图像1、2、7、8、10、11、14、15、20~24)和四周组(包括图像3~6、9、12、13、16~19),部分图像数据如图4~5所示。
图4 中心组Fig.4 Central groop
图5 四周组Fig.5 Periphery group
分别对单组数据进行标定误差计算和累计标定误差计算,得到图6和图7两幅图像误差分布图。其中图6为单独每一幅图像的标定重投影误差,图7为剔除部分数据后顺序累计到某张时相机标定的重投影误差。
图6 单幅标定误差Fig.6 Single calibration error
图7 单幅标定累计误差Fig.7 Single calibration cumulation error
通过两个误差集合分别计算各自集合数据的偏离程度,中心组误差偏离不超过0.01 pixel,四周组误差偏离不超过0.02 pixel,得到各自对应的m值。在确定截取个数m时遵守宁少勿多,尽量不影响到数据整体水平的原则。
两个误差集合分别剔除的数据为图像2和图像9。从图6中也不难看出第2幅和第9幅的重投影误差与整体数据相较偏差过大。虽然第19幅和第20幅均方误差出现断层分布,但他们在整体数据中分布正常,所以不予删除,有断层出现是由于在拍摄时的角度位置变化引起。
对剩余图像进行整体的相机标定,得到累计的平均均方误差如图7所示。
未经过误差筛选的标定误差为
Error = 0.411 968 pixel。
经过误差筛选后的标定误差为
Error = 0.385 889 pixel。
从结果看到,经过误差筛选后的标定误差比未经过误差筛选的标定误差降低了6.5%。由上述结果可以得出,对标定素材图像进行误差筛选,可以避免一定的外在因素干扰,减少对相机系统的偏差描述数据,降低相机的标定误差。
图8 累计标定焦距Fig.8 Accumulated calibration focal lenth
利用误差筛选后的数据进行标定,得到了标定焦距和图像数关系如图8所示,其中纵坐标为累计标定焦距,从图8可以看出,随着图像数据的增多,标定焦距和误差在18幅后20幅左右开始趋于稳定(其他相机参数也有同样规律)。虽然图像越多标定数据越稳定,但同时由于图像数据的增多,标定过程计算量会大幅增加,导致计算速度变慢,所以相机标定图像数据选择20幅左右最为合适。
文中针对显微环境的双目相机立体标定问题,通过一般的立体相机模型进行坐标系的转换,利用面阵相机特点进行点的投影计算得到理想映射点的二维坐标,通过设定的畸变模型进行畸变点计算,利用投影倾斜进行畸变校正并得到实际点坐标,在这一系列过程中得到图像点的变换矩阵即相机内外参。
由于实际的采集环境和操作等问题导致采集到的所有图像数据并不一定适合进行相机标定计算,因此要先对所有图像数据进行误差筛选,通过计算每对图像数据的标定重投影误差,根据重投影误差的分布筛选掉不具有相机系统代表的图像对,以提高最终整体相机标定精度。通过误差筛选后的数据进行相机立体标定,为基于显微立体视觉的三维重建提供基础。利用该方法对多组常用显微镜倍率进行标定,发现在显微镜环境下放大倍率和标定焦距成正相关关系,验证工作计划在后续工作中进行。