第一作者:林春雨(1979—),男,辽宁绥中人,副教授,博士.研究方向为图像视频处理和图像视频编解码. email: cylin@bjtu.edu.cn.
为了去除鱼眼图像存在严重的畸变,需要对鱼眼相机进行标定,本文在已知相机参数表的前提下,提出了一种边缘直线拟合来标定最重要的镜头光心坐标算法.该算法利用像素点在图像平面上的物理尺寸及相机焦距,确定相机标定内参矩阵中水平轴和竖直轴的尺度因子.在部分内参已知的情况下,对光心的横、纵坐标在给定范围内进行遍历,校正点到拟合直线加权距离和最小的点,即为所求的光心坐标值.实验结果表明: 与常规的标定算法相比,该算法得到的光心坐标减少了由于不精确参数使用带来的累积误差,提高了相机标定结果的精度.
In order to remove the distortion in fish-eye image, the camera calibration is required. We put forward an algorithm to determine fish-eye lens optical center using the edge straight-line-fitting technology with a given camera parameters table. This algorithm utilizes the physical size of each pixel in the image plane as well as the camera focal length. Therefore, the scale factor in horizontal and vertical axes of the reference matrix can be determined. With some provided parameters, the optic center can be determined by traversing the pixel coordinates within given range. The optic center, which made the weighted distance between corrected points and fitted straight lines smallest, is needed. Experimental results show that compared with the conventional camera calibration algorithm, this algorithm reduces the accumulation of errors due to the using of inaccurate parameters and makes the calibration results more accurate.
鱼眼镜头是一种超广角镜头, 因其前镜片呈抛物状向镜头前部凸出, 与鱼的眼睛十分相似而得名.鱼眼镜头的视角可达甚至超过180° , 且其价格经济实惠, 现已被广泛使用.同时, 随着计算机软硬件技术的持续发展, 三维重建技术[1, 2]成为数字媒体、科学计算、医学图像处理、计算机视觉等领域的共性科学问题和核心技术.为满足该技术对模型的复杂度和真实度的要求, 研究者将具有优良特性的鱼眼相机和三维重建技术相结合来进行深度恢复和全景漫游[3], 应用于虚拟现实、行车安全及视觉监控等领域[4].
虽然鱼眼镜头可以获得很大的视角, 但是根据物理成像的规律, 焦距越短, 视角越大, 所以, 鱼眼相机采集的图像通常都引入了桶形畸变[5], 所成的图像除了光心四周基本不变外, 其他图像区域都存在一定程度上的畸变[6], 图像不易被理解.因此, 在使用鱼眼图像之前, 首先需要对鱼眼镜头的相关参数进行精确的校正, 这个校正过程在计算机视觉中称为相机标定.相机标定所得的参数将直接影响随后的图像理解过程, 进而影响实际应用主观感受和视觉体验的真实性.
相机标定的内容包括确定相机外部和内部参数等.外部参数指相机的位置和姿态, 包括相机的旋转和平移等; 内部参数是相机内的方位元素和镜头的光学畸变参数, 包括焦距和光心坐标等.其中, 光心是最重要的参数, 它直接影响标定的精准度.现行的标定算法流程如下:为了提高标定的精度, 从不同视角采集多幅鱼眼图像, 使整个特征点集合的范围尽可能的遍布整个图案, 根据每幅标定图像中参照物的位置来建立世界坐标系(不同图像对应的世界坐标系不同), 利用多幅标定图像来同时求解, 得出相机的内外参数, 完成相机标定.但这种方法存在较大的局限性:在许多实际应用场景下, 没办法从多个视角获得鱼眼图像.因此, 该方法不能运用于行车安全和监控等对实时性要求很高的领域, 并且, 当光心坐标的求解不够精确时, 将会产生误差的累积, 影响整个标定的精确性[7].
目前针对鱼眼相机标定的算法有很多研究成果.文献[8]提出了一种鱼眼标定方法, 但该方法仅考虑了径向变形而没有考虑到切向变形等因素, 得到的标定参数精度较低, 无法应用于一些精度要求高的标定场合.文献[9]提出一种通用的基于抛物面模型的鱼眼图像校正算法, 对鱼眼图像中代表空间水平或竖直直线的曲线进行了采样, 并拟合出抛物面的直线, 但是根据文献的实验结果来看, 该方法并没有很好地复原弯曲的直线, 校正效果不够精确.文献[10]提出了平面校正方法, 该方法校正的缺点是比较受视野大小的局限[11].现行的方法及新的研究成果将相机的各个参数等同视之, 没有注意到光心坐标的重要性.
本文作者针对现有标定技术的不足, 在已知粗略相机参数表的情况下, 以光心坐标为切入点, 提出一种边缘直线拟合确定鱼眼镜头光心的方法, 通过提高光心坐标的精准性来得到更好的标定结果.整个过程可以仅用一幅图像即可实现.
相机拍摄图像的过程, 实际上是一个光学成像的过程, 其中涉及到4个坐标系:世界坐标系、相机坐标系、图像坐标系和像素坐标系[12].
1)世界坐标系.系统的绝对坐标系.采集图像时, 相机被安放在实际的三维空间中, 所以需要世界坐标系(
2)相机坐标系(光心坐标系).对镜头建立的三维坐标系.原点是相机的光学中心,
3)图像坐标系.对图像建立的坐标系.
4)像素坐标系. X、Y轴分别平行于图像坐标系的X、Y轴, 用(u, v)表示其坐标值.相机采集的图像将被存储为M× N的数组, M行N列的图像中每一个元素成为像素, 其值代表图像点的灰度.
4个坐标系之间的关系如图1所示[13].
与透视投影不同, 鱼眼镜头的成像是非相似原理.将鱼眼镜头近似看成是一个半球模型, 取世界坐标系中一点
式中:
在点
其中
式中:
本文算法具有一定的实用价值, 是针对全景汽车辅助驾驶系统、实时监控和三维重建等应用提出.由于这类应用对实时性的要求很高, 需采集多张图像的传统标定方法不可用.本文算法仅需一张图像, 便可达到很好的标定效果.
在给定的相机参数表中, 镜头光心即为成像平面的中心点.由于工艺限制, 以及后期镜头座的安装等问题, 经常造成镜头光心不准确, 如果将光心坐标直接作为参数代入到内参矩阵中进行后续使用, 就会存在累积误差, 从而大大影响随后相机的标定及畸变校正的精确性[15].本文算法针对这个问题进行改善, 在部分相机参数已知的情况下, 基于边缘直线拟合技术, 更加简单和精确地计算鱼眼相机镜头的光心, 从而提高鱼眼相机标定的精确性.该算法的流程图如图3所示.
根据相机坐标系和图像坐标系之间的转换关系, 内参矩阵
因为相机参数表可以较为准确地提供每个像素点在图像平面水平轴和垂直轴方向上的物理尺寸
已知:
选用棋盘格为标定参照物, 可以清楚地确定空间物体表面某点的三维几何位置与其在图像中对应点之间的关系.图4为实验中使用的5× 7棋盘格, 每个棋盘格的大小为20 mm× 20 mm.
如图4可知, 实际的棋盘格上, 同一行或者同一列的特征点是处于一条直线上的.由于鱼眼镜头采集的图像存在桶形畸变, 图像会出现外凸状况, 直线也会因此弯曲, 如图5所示.对鱼眼相机进行标定时, 如果标定结果精确度较高, 则在校正图中, 同一行及同一列的特征点, 仍应位于同一条直线上.本文算法中, 利用这一现象, 根据校正后特征点是否仍在一条直线上作为判定标准来衡量标定结果的精度, 进而确定光心.具体操作如下:
1)建立一个容器(其数据类型为点的横、纵坐标值).采集原图中棋盘格的特征点, 将这些特征点的像素坐标值依次存入该容器, 以便后续相关操作.
2)对这些点进行映射处理, 利用线性插值法, 将原图中每一个点到光心的距离对应到校正图的距离中, 舍去映射后不在图像范围内的点, 将满足要求的特征点在校正图中的像素坐标保存在容器中.为便于理解, 给出伪代码如下:
If OrgMaxPointDis< OrgMaxDis
Return xBar, yBar
Else
Return Error
If xBar< 0||yBar< 0||Bar> Wbar||yBar> Hbar
Return Error
Else
Return OK
其中:OrgMaxPointDis为原图中的点到光心的距离; OrgMaxDis为原图中距离光心的最大距离; xBar为校正图中点的横坐标; yBar为校正图中点的纵坐标; Wbar为校正图的宽度; Hbar为校正图的高度.
将上述得到校正后的2D或3D点集输入到直线拟合函数中, 不同的距离函数所对应的直线拟合方法也不一样.该函数的原理采用6种不同的距离函数, 如下式
式中:
通过计算, 找到使
原图经过畸变校正以后, 不同光心对应的距离和之间差异可能很微弱, 为了提高算法的稳定性和健全性, 对不同的点赋予不同的权重, 来扩大不同光心坐标所对应距离和之间的差异.
如图6所示, 位于同一行的6个特征点, 设它们到对应拟合直线的距离从左至右依次为
用校正图中所有特征点到对应拟合直线的加权距离和作为评判该光心坐标精准度的标准.
在2.1节中, 已将求得的内参矩阵中水平轴的尺度因子
为验证本文算法的有效性, 实验部分选择5组图片分析该种相机标定算法的精确性, 同时对得出的数据进行图像化处理, 以便清晰直观地得出结论.
选择第1组图片的图像处理结果进行说明.第1组图片光心的参考坐标为(350, 277), 预先给定的遍历范围是光心横纵坐标
通过图7可以发现, 鱼眼相机采集得到的畸变图7(a)中, 标定板的方格线已经明显发生了弯曲.传统算法的校正图7(b)虽然在很大程度上校正了畸变, 但是圆圈标示的地方还是有轻微的弯曲, 而用本文算法进行标定后的图7(c)中, 取得了较好的效果, 各行、各列的特征点均回归于同一直线.利用输出的结果绘制散点图, 如图8所示.
在实验中, 将光心的横坐标固定, 对光心的纵坐标进行正负20个像素点的遍历, 对应每一个光心横坐标
首先对表1中的数据进行纵向比较, 当光心纵坐标为274时, 使得每一个光心横坐标下, 特征点到拟合直线的加权距离和最小, 即校正的结果最好.再进行横向比较, 即当光心纵坐标为274时, 比较所有的光心横坐标, 找到其中特征点到拟合直线加权距离最小的点, 即为最终所求的校正效果最优的光心.本实验中, 最终得到的校正效果最优的光心坐标为(348, 274), 与参考值(350, 277)非常接近.
![]() | 表1 加权距离和最小的光心坐标值 Tab.1 Minimum weighted distance and the corresponding optic center coordinate |
同理, 实验其他4组图片, 得到表2数据.
![]() | 表2 光心坐标值对比分析 Tab.2 Contrast analysis diagram of optic center coordinate |
本文算法校正后的图像, 计算光心和参考光心的误差明显减小, x方向的误差约为2个像素值, y方向的误差约为3个像素值.
为了进一步验证本文算法的有效性, 将实验结果和传统的相机标定算法进行比较(传统相机标定的数据由经典相机标定工具箱得到[16], 特征点采集时可能存在少许误差).对比数据如表3所示.
![]() | 表3 本文算法和传统算法比较 Tab.3 Comparison between the proposed algorithm and traditional algorithm |
通过表3光心坐标算法得到误差的分析见表4.通过对比, 可以清楚地得到, 本文的算法相比传统算法有了很大地改善, 算法所得光心的横纵坐标的像素差值较传统算法有3~5个像素值的优化.充分证明了本文算法的有效性, 这样所得的标定结果将会更加精确.
1)通过对比光心坐标的参考值可以发现, 本文算法所得的光心坐标值更加精确.
2)本文算法计算的结果较基于小孔成像的传统算法存在明显的优化, 将内参矩阵中光心参数的误差减小至0.7%, 提高了相机标定的准确度.
3)本文算法简单高效, 仅使用单幅图像即可完成光心坐标的确定及后续的相机标定, 可满足对实时性要求较高的场景, 具有很好的实用性.
The authors have declared that no competing interests exist.
[1] |
|
[2] |
|
[3] |
|
[4] |
|
[5] |
|
[6] |
|
[7] |
|
[8] |
|
[9] |
|
[10] |
|
[11] |
|
[12] |
|
[13] |
|
[14] |
|
[15] |
|
[16] |
|