日期
06/20
2024
咨询
  • QQ扫一扫

  • Vision小助手
    (CMVU)

相机标定工具的综述与比较研究
收藏
2024-06-20 16:19:33来源: 中国机器视觉网

在许多基于相机的应用中,需要通过几何相机标定(GCC)来确定入射光线与图像像素之间的几何关系(投影模型)。本研究旨在提供实用的标定指南,对现有的GCC工具进行了调查和评估。调查涵盖了相机模型、标定目标和这些工具中使用的算法,突出了它们的特性以及GCC开发的趋势。评估比较了六个基于目标的GCC工具,即BabelCalib、Basalt、Camodocal、Kalibr、MATLAB标定器和基于OpenCV的ROS标定器,使用模拟和真实数据对具有三种传统投影模型的广角和鱼眼镜头相机进行了测试。这些测试揭示了这些相机模型的优缺点以及这些GCC工具的可重复性。在调查和评估结果基础上,还讨论了未来GCC研究方向。

主要贡献

从遥感、测绘、机器人技术到内窥镜等一系列应用中都是不可或缺的。这些应用通常需要了解相机中真实世界点和它们在图像中的几何关系(图1)。为了解决这种几何映射问题,引入了几何相机标定(GCC),作为计算机视觉、物联网和机器人技术的交汇点之一,自20世纪70年代以来,GCC一直受到广泛关注,并且至今仍然在积极研究,可能是由于各种应用需求不断发展的推动。

微信图片_20240620162256.png

根据工作原理的不同,有传统相机、深度相机、事件相机、热像相机等。

根据视场角(AOV),相机可以粗略地分为传统相机(通常<64°)、广角相机(<100°)、鱼眼相机和全景相机(≥ 180°),相邻组之间存在模糊的边界。传统和广角相机通常通过针孔模型(即透视模型)很好地表示。全景相机包括视场角≥ 180°的鱼眼相机,以及由镜头和镜子(“cata”表示镜子反射,“dioptric”表示透镜折射)组成的反射折射相机。还有由多个相机组成的相机架,通过拼接图像实现较大的视场角。根据所有入射光线是否经过单个点,相机可以分为中心相机(具有单个有效视点,即光学中心)和非中心相机。中心相机包括传统相机、视场角≤ 195°的鱼眼相机,以及通过组合针孔相机和双曲线、抛物线或椭圆镜子构建的许多反射折射相机。非中心相机的实例包括使用球面镜构建的反射折射相机。

目前已经提出了许多几何相机模型,从几十个参数的具体全局模型到数千个参数的通用局部模型不等。传统的几何相机模型是针对特定镜头类型量身定制的,通常由通常<100个参数的封闭形式函数表示。它们是全局模型,因为参数的变化会影响每个入射光线的投影。这些模型得到了现有标定工具和运动结构(SfM)软件包的良好支持。相反,通用模型可以通过使用大量参数来建模广泛范围的相机,每个参数确定了局部区域内入射光线的投影,例如B样条模型。已经开发了许多用于进行GCC的工具,每个工具都具有一组独特的功能。它们通常以专有程序的形式提供,例如MATLAB中的相机标定器和Agisoft Metashape,或者是开源程序,例如Kalibr。就相似性而言,现有工具通常支持全局相机模型和一些平面目标的标定。值得注意的是,许多工具都基于相同的基础包,例如OpenCV,因此它们往往具有类似的限制。

总的来说,目前缺乏对现有GCC工具的定性概述和定量比较,以阐明选择适当的相机模型和标定工具,为了填补这一空白,我们从几个实践角度广泛调研了现有的GCC工具,并使用模拟和真实数据对几个流行的工具进行了基准测试。为了限制范围并便于广大读者参考,本文重点关注传统的近距离灰度或彩色单目相机,在此领域中这些相机得到广泛研究,它们的标定方法通常可以适应其他类型的相机。

本文的贡献总结如下:首先,本综述对用于GCC工具的相机型号、标定目标和标定算法进行了分类,为这些方面提供了简明的参考。其次,我们从定性角度揭示了这些标定工具的优势和相似之处,希望能够避免未来重复开发工作。接着,我们通过模拟和真实数据测试评估了六种不同标定工具在室内摄像机中的准确性和可重复性,并清晰展示了三种流行全局几何相机模型的优缺点,指出适用于近距离应用的标定工具。最后,基于综述和评估结果,我们提出了GCC未来研究方向上值得关注的问题。

内容概述

相机标定组件:相机标定过程中涉及的一些关键概念和定义。其中包括:焦距(Focal Length):被定义为相机光学中心与传感器之间的距离,对于中心相机而言,焦距是一个重要参数。

主光轴/光学轴(Principal/Optical Axis):被定义为通过光学中心并垂直于传感器芯片的线,是相机成像的中心线。

图像平面(Image Plane):对于针孔相机而言,传感器经常被倒置方式放置在光学中心的前方,形成成像平面。

镜面轴(Mirror Axis):对于反射折射相机,指的是镜子的对称轴。

视场角(Angle of View,AOV):是进入镜头的光线形成的最大角度,对于相机而言,是指与传感器曝光像素对应的光线形成的最大角度,通常分为水平视场角、垂直视场角和对角视场角。

相机模型 

这里描述了在近距离应用中使用的各种相机模型,这些模型已经在本文调研的几何相机标定工具中采用。用于遥感的相机模型,例如仿射相机模型 、RPC模型、检测器方向模型。我们从中心相机的全局模型开始,这些模型主导了几何相机标定工具,最后介绍通用模型。这些全局模型通常以(正向)投影方式定义,即给定世界点或射线,制定图像点,尽管相同的公式也可以反过来使用,即给定图像点得到射线,即反向投影/反向投影/反投影,然而,对于局部模型,反向投影通常用于表达相机模型,因为正向投影可能非常复杂。对于图3中列出的相机模型,我们描述正向或反向模型,除非两者都是闭合的形式,需要注意的是反向操作通常需要迭代优化。

微信图片_20240620162300.png

广角相机的全局模型:AOV <100°的常规和广角相机模型,通常表现出较小的失真,非常符合针孔模型。

全局鱼眼相机模型:鱼眼相机通常AOV ≥ 100°,且可以达到280°。不过它们虽然很常见,但存在较大的畸变问题,因此,提出了相当多的全局模型,最流行的可能是KB模型和FOV模型。

全局全景相机模型:全景相机的HAOV ≥ 180°,DAOV可达360°。目前,已经为这样的相机开发了几种模型。

局部通用相机模型:前述的全局相机模型由于比较简单,基本在各种几何相机标定工具中都可用,只是它们的准确性也受到限制。为了提供准确度,目前提出了具有数千个参数的通用模型,但笼统地说,它们在几何相机标定工具中的可用性以及下游应用的支持方面仍然落后于全局模型。

标定板

几何相机标定通常依赖于被动或主动的人工目标,例如遥感中的地面控制点或近距离标定中的平面目标。最近的一些自动标定方法,利用随机出现的环境特征进行检测,而基于基础设施的方法则利用环境的先验地标地图。由于人造目标在提高精度控制方面仍然被广泛使用,因此本节调查了几何相机标定工具支持的各类目标,如图4所示。

微信图片_20240620162304.png

棋盘格:棋盘格是最常见的标定目标之一,通常由黑白交替的方块组成。检测棋盘格的角点可以通过在图像中找到黑白方块的交界处来完成。棋盘格的一个缺点是需要保证所有角点在图像中完全可见,以便准确确定其坐标。通常为了避免在180°旋转后看起来相同,会采用奇数行偶数列或偶数行奇数列的布局。

圆形网格:圆形网格通常由圆心对称或不对称分布的圆组成。检测圆形网格的目标点可以通过圆心的几何特征,如面积、圆形度等来实现。但圆形网格的缺点是要求图像中所有的圆都必须是可见的,并且由于透视效应和镜头畸变,检测到的圆心可能存在偏心误差。

Charuco板:Charuco板是将棋盘格与Aruco标记结合起来的标定目标。它利用棋盘格的方便检测与Aruco标记的唯一性,来应对不准确的角点位置和遮挡的情况。

AprilGrid:AprilGrid是一种由AprilTag标记组成的数组,标记之间由黑色方块连接。AprilGrid具有抗遮挡能力,并且其角点位置准确,因为角点被两个黑色方块包围。

Deltille网格:Deltille网格是由交替颜色填充的相邻正三角形组成的图案。相较于棋盘格,Deltille网格的优点是角点密度更高、角点位置更精确。但它的广泛应用受到了现有标定工具接口调整的限制。

微信图片_20240620162308.png

标定算法

传统几何方法和基于学习的方法:传统几何方法以及基于学习的方法是几何相机标定算法的两大类别。传统几何方法通常具有较高的解释性和精度,而基于学习的方法则更加灵活和鲁棒。

标定目标类型:根据标定目标的类型,几何相机标定算法可以分为三类:基于人工目标、基于映射自然场景以及无目标的自标定算法。基于人工目标的方法是最常见和广泛支持的,通常包括线性初始化和迭代非线性精细化两个阶段。基于映射自然场景的方法需要进行准确的三维重建,并提供相机的粗略内在参数值。自标定算法通过观察机会性地标记进行标定,包括递归精细化方法、仅恢复相机内在参数的方法以及恢复结构、运动和相机内在参数的方法。

算法示例:传统几何方法的示例包括DLT方法以及迭代精细化方法。基于学习的方法通常更加灵活和鲁棒,但也可能更加复杂。自标定算法通常利用捆绑调整,因此具有更高的准确性,常用于结构从运动软件包中。

标定工具

这一部分审查了用于几何相机标定(GCC)的工具,这些工具主要实现了使用人工目标或无目标捆绑调整的算法,几个基于学习的GCC工具也被引用作为这个热度较高的研究领域示例。

BabelCalib是一款单目相机标定工具,采用反投影模型作为各种相机模型的代理,支持多种相机模型,处理异常值的方式是使用Huber损失。

Basalt是一个能够进行单目相机标定的软件包,支持多种相机模型,采用Levenberg-Marquardt算法进行标定,处理异常值的方式是使用Huber损失。

calio.io是一款商业标定工具,具备直观的图形用户界面,支持多种相机模型和标定目标,处理异常值的方式是使用Huber损失。

Camodocal是一个支持单目和立体GCC的软件包,采用Cauchy损失处理异常值,对标定目标相对容易扩展。

Kalibr应用非常广泛,可以选择信息丰富的图像进行标定,支持多种投影和畸变模型,处理异常值的方式是移除超过一定阈值的重投影误差的角点。

MATLAB相机标定器支持单目和立体相机标定,拥有易于跟随的GUI和许多可视化功能,支持多种标定目标,处理异常值的方式是使用Huber损失。

ROS相机标定工具

介绍了OpenCV库提供的相机标定函数,包括用于单目和立体相机的针孔理性径向切向模型、鱼眼相机的KB-8模型以及全向相机的Mei模型。指出了OpenCV中全向模块的功能,支持多相机设置,并可看作是对MATLAB工具的重新实现。强调了OpenCV中KB-8模型的局限性,不支持非正深度点。 描述了ROS相机标定器的特点,是对OpenCV标定函数的简单包装,支持交互式和批处理模式,并提供对棋盘格、圆格和Charuco板的支持。提及了基于OpenCV的其他程序,包括MRPT相机标定器,后者扩展了棋盘格检测以支持多个棋盘格。

自标定工具与SfM

介绍了自标定工具通常基于SfM流水线实现,在商业软件或开源程序中都有代表性。

概述了几个专业摄影测量软件,如Agisoft的Metashape、PhotoModeler和Pix4D mapper,它们支持自标定,并提供了不同的相机模型和标定方法。

提及了流行的开源SfM软件包,如colmap和最近的SCNeRF,它们也支持相机自标定,提供了不同的相机模型和标定算法。

微信图片_20240620162312.png

总结

鉴于不断发展的GCC,我们从相机模型、校准目标和算法的角度对最近的GCC工具进行了调查研究,概述了这些工具的优势和局限性。我们还评估了六种知名的校准工具,包括BabelCalib、Basalt、Camodocal、Kalibr、MATLAB校准器和基于OpenCV的ROS校准器,以研究它们在模拟和真实数据上的一致性和重复性。最后,我们总结了以下几点:

异常值处理对于基于优化的相机校准工具至关重要。这些异常值通常是检测到的角点与其实际图像位置相差几个像素,在某种程度上模糊的图像中经常发生。幸运的是,大多数GCC工具都可以处理异常值。

GCC工具Camodocal、Kalibr和MATLAB校准器很好地支持针孔径径向切向模型。BabelCalib和Camodocal很好地支持KB-8模型,而TartanCalib则针对DAOV < 180◦的相机很好地支持KB-8模型。Camodocal、TartanCalib和OpenCV很好地支持Mei模型,但该模型存在参数不稳定性和冗余性。此外,针孔径径向切向模型对于DAOV > 100◦的相机可能不再适用。在需要获得全局相机模型时,KB-8模型通常更受欢迎,因为它在大DAOV的相机上具有广泛的支持和良好的准确性。

未来的发展方向

交互式校准:众所周知,高质量数据和信息丰富的数据对于GCC至关重要。但我们却经常遇到图像模糊和数据不足这两个问题,前者可能是由于快速运动或对焦不准引起,后者可能是数据不足引起。该解决这些问题呢?交互式校准或许是一个答案,它可以实时检查数据质量,选择高质量的数据,并给出下一步操作建议。无论是基于目标还是无目标的校准都适用。AprilCal 就是一个针对基于目标校准设计的工具,能够帮助我们进行交互式校准。

静态校准:基于静态标定的校准通常涉及不可重复的繁琐运动,可以通过至少两种方法避免:使用编程机器人臂进行校准和静态校准。关于使用机器人臂进行校准的研究已在文献中进行了讨论。静态校准通常依赖于主动目标。在文献中已开发出针对特定应用的此类方法。我们认为在静态校准方面仍有许多可以探索的空间。

场景重建的标定:在实验室中,我们通常需要对设备进行校准,但这和现场的设置是不一样的。比如说,焦距(景深)、曝光、捕获模式(快照或视频)、光圈大小以及感兴趣物体的尺寸等都可能有所不同。虽然已经有一些工作在尝试解决这些差异,比如文献中关于处理失焦问题的研究 。最终的解决方案可能是自动校准或者基于先前地图进行校准。这些方法都依赖于一个支持校准功能的重建引擎。传统捆绑调整技术就是其中之一,例如colmap。

(论文链接:https://www.researchgate.net/publication/371606321_A_Review_and_Comparative_Study_of_Close-Range_Geometric_Camera_Calibration_Tools)