文章:Fisheye-Calib-Adapter: An Easy Tool for Fisheye Camera Model Conversion
作者:Sangjun Lee
编辑:点云PCL
欢迎各位加入知识星球,获取PDF论文,欢迎转发朋友圈。文章仅做学术分享,如有侵权联系删文。
公众号致力于点云处理,SLAM,三维视觉,高精地图等领域相关内容的干货分享,欢迎各位加入,有兴趣的可联系dianyunpcl@163.com。文章未申请原创,未经过本人允许请勿转载,有意转载联系微信920177957。
摘要
随着机器人技术和自动驾驶等领域对鱼眼相机需求的不断增加,提出了多种鱼眼相机模型。尽管相机模型的发展促进了这一领域多样化系统的建设,但不同鱼眼相机模型之间缺乏适配,意味着每次使用时都必须重新标定,这一过程繁琐。本文介绍了一种针对多种已提出鱼眼相机模型的转换工具。该工具用户友好,操作简单,但却极其快速和精确,提供了比现有工具更广泛的模型转换能力。我们已验证,使用该系统转换的模型在诸如 SLAM 等应用中能正确运行。通过利用我们的系统,研究人员可以直接从输入参数中获得输出参数,而无需图像集和任何重新标定过程,从而在不同鱼眼相机模型之间架起了桥梁,适用于各种研究领域。我们将该系统作为开源工具提供,地址为:https://github.com/eowjd0512/fisheye-calib-adapter
主要贡献
鱼眼相机由于其广视场(FoV)被广泛应用于机器人技术和自动驾驶等领域,相较于针孔相机,它能够提供更多的环境信息,特别是在视觉里程计(Visual Odometry)和同步定位与地图构建(SLAM)等技术中,鱼眼相机用于估计移动过程中的位置变化。在计算机视觉领域,关于使用鱼眼图像训练神经网络的研究也在积极进行。
定义鱼眼相机模型至关重要,因为它能够通过使用准确表示鱼眼相机的模型,数学地解决各种问题。近年来已提出了几种鱼眼相机模型[。每当引入一种新的模型时,通常会伴随出现基于该模型的系统新版本。将数据集应用到这些系统时,通常需要相机模型的系数,因此必须进行标定过程。
标定对于获得鱼眼相机模型是必不可少的。它涉及通过已知物体的实际尺寸与其二维图像像素之间的对应关系来获取模型的系数。标定可以使用基于目标的方法(如棋盘格)或基于非目标的方法,后者利用地标信息。然而,在某些情况下,标定不可行。例如,如果提供的研究数据集仅包含特定鱼眼相机模型的系数,而没有提供标定数据集,则无法进行标定。当提出的数据集固定于某一特定模型时,通常会遇到这种情况。此外在使用该数据集进行实验时,由于无法与使用新相机模型的系统进行比较,往往会面临挑战。
为了解决这些问题,我们提出了一种鱼眼相机模型适配器,允许当前最常用的鱼眼相机模型之间的直接转换,包括:UCM、EUCM、双球面模型、Kannala-Brandt模型、OCamCalib模型,以及针孔相机模型的径向切向畸变模型。该工具通过投影与反投影,只需要转换模型的系数,而不需要任何图像进行重新标定过程。本文的贡献如下:
相关内容
鱼眼相机模型
3D 点通过预定义的相机模型投影到图像平面上。反过来,图像平面上的 2D 像素点可以通过使用相机模型进行反投影,恢复成 3D 光线,基本的投影模型,通常称为针孔模型,可以使用径向切向畸变模型来考虑畸变。然而该模型是为视场较窄的相机(如针孔相机)设计的,因此在广角覆盖情况下效果较差。为了解决这一问题,提出了多种鱼眼相机模型,这些模型是针孔相机模型的扩展。
Kannala-Brandt 模型(在 OpenCV 中广泛使用的鱼眼相机模型),也被视为针孔相机的等距畸变模型,已被提出用于广角鱼眼镜头畸变。该模型专注于径向畸变的多项式模型,省略了切向畸变项。同样OCamCalib 模型包括了一个仿射变换项来纠正传感器的对准误差。
图像径向切向、Kannala-Brandt 和 OCamCalib 等模型需要估计多项式项的系数,因此需要许多参数。统一相机模型(UCM)[8] 作为一种照相机模型,能够通过一个单一的畸变参数,使用抛物线、双曲线、椭圆形和平面镜建模针孔相机和鱼眼相机。然而为了完美地建模鱼眼相机,还需要额外的畸变参数,因此提出了增强型统一相机模型(EUCM)和双球面模型(Double Sphere)。
鱼眼相机模型转换
最近发现了与鱼眼相机模型转换相关的研究。该系统提出了三种模型之间的转换:Kannala-Brandt、UCM 和 OCamCalib。然而,转换只能通过依赖关系进行:从 Kannala-Brandt 到 UCM,再从 UCM 到 OCamCalib。我们提出的方法能够在 Kannala-Brandt、UCM、EUCM、双球面、OCamCalib 和径向切向(RT)模型之间直接进行转换,而无需任何依赖关系。
内容概述
图1.系统概述
提出的鱼眼相机模型适配器(FCA)经过如图1所示的过程。如图1所示,FCA接收输入模型并导出输出模型。该转换可以表示为:
其中,iin和iout 分别代表输入模型和输出模型的参数。
FCA模块基于给定的输入模型进行N个采样点的反投影,并使用这些得到的3D点进行输出模型的初始化和优化。初始化和优化过程都由输出模型的投影函数驱动。在假设输入相机模型和目标输出相机模型用于在同一环境中拍摄图像的前提下,这种建模是可能的。从输入模型恢复的光线将投影到相同的位置,无论光线在哪个位置上放置深度。此外,由于投影点用于在输入模型中恢复,因此其配对信息已经是已知的。利用这一点,光线上的任意点可以与其投影的对应点匹配,从而估计输出相机模型。在提出的FCA中,进行转换的相机模型定义如下。最近定义了最常用的几种鱼眼相机模型,包括:Kannala-Brandt、统一相机模型(UCM)、增强型统一相机模型(EUCM)、双球面模型、OCamCalib模型以及针孔相机的径向切向畸变模型。
统一相机模型(UCM)
统一相机模型(UCM)的内参和畸变系数定义如下:i=(fx,fy,cx,cy,α),其中 α∈[0,1]。
UCM的投影函数和反投影函数分别定义为:
其中
增强统一相机模型(EUCM)
EUCM的参数在UCM的基础上增加了一个额外的参数β:i=(fx,fy,cx,cy,α,β),其中α∈[0,1],β>0。
EUCM的投影函数和反投影函数如下:
其中
双球面(Double Sphere)
与UCM相比,双球面(DS)模型的参数增加了一个额外的参数ξ:i=(fx,fy,cx,cy,α,ξ),其中α∈[0,1],α∈[0,1]。
DS模型的投影函数和反投影函数如下:
其中
Kannala-Brandt 相机模型
Kannala-Brandt(KB)模型的内参和畸变系数如下:i=(fx,fy,cx,cy,k1,k2,k3,k4)
KB模型的投影函数定义如下:
其中
CamCalib 相机模型
OCamCalib(OCC)模型的参数如下:i=(c,d,e,cx,cy,a,k)与其他模型不同,OCC模型不使用焦距fx和fy,而是使用一个仿射变换矩阵[c,d;e,1]来进行传感器对齐。a=(a0,a1,a2,a3,a4)是反投影函数中使用的多项式函数的系数,k=(k0,k1,k2,k3,k4,…,kp)是投影函数中使用的多项式函数的系数。OCC模型的投影函数和反投影函数定义如下:
其中
径向切向畸变模型(Radial-Tangential Distortion Model)
径向切向(RT)畸变模型的内参和畸变系数如下:i=(fx,fy,cx,cy,k1,k2,k3,p1,p2),RT模型的投影函数为:
其中
自定义相机模型
所提出的FCA模块是模块化的,以支持各种相机模型的反投影、投影、初始化和优化。例如WoodScape数据集提供的鱼眼相机模型与KB模型相似,但有一些细微差别。WoodScape数据集模型的d(θ)实现定义如下:
d(θ)=k1θ+k2θ2+k3θ3+k4θ4。
除此之外,投影、反投影、初始化和优化过程可以像KB模型一样进行。
实验
本系统采用C++实现,运行环境为配备AMD Ryzen 7 5800U CPU和16GB内存的设备。优化采用了Ceres Solver。
评估
为提出的模型获取了样本点数量 N。为获取样本点,我们比较了参数误差和执行时间。样本点通过将给定图像尺寸均匀划分为网格单元提取,以确保样本均匀分布。参数误差通过 L2范数计算。
Kalibr 数据集实验
实验使用了 Kalibr 数据集,由于 Kalibr 校准工具支持直接校准 KB、EUCM、DS 和 RT 模型,因此我们使用 Kalibr 工具获得的参数作为真实值。此处,i^ 是从输入模型转换得到的输出模型参数,输入和输出模型对以连字符表示(如 EUCM-DS)。
图 2. 为比较每个样本点 N 的参数误差和执行时间,结果分为两部分展示:(a) 每个样本点的参数误差;(b) 每个样本点的执行时间。标记 A−B 表示从输入模型 AAA 到输出模型 B的转换。参数误差大约在 N=30时开始趋于饱和,而执行时间从大约 N=1000开始显著增加。
图 2 显示了实验结果,表明参数误差在 N=30左右趋于饱和。速度在 N=1000以内保持在 10 ms 以内,随后呈线性增长。我们在 N=500时观察到更详细的结果。针对输入-输出模型的真实值,评价指标包括 PSNR、SSIM、重投影误差(RE)和参数误差(PE),通过原始图像和使用输出模型恢复的图像计算得出。恢复图像通过将原始图像的所有像素反投影到输入模型,再使用输出模型进行投影获得。图 3 展示了恢复图像的示例。
图 3. 恢复图像的示例。第一行为来自 Kalibr 数据集的图像,第二行为来自 OCamCalib 数据集的图像。输入模型固定为 KB,输出模型对应于图像的每一列。
实验结果总结于表 I 中。结果显示,我们提出的模型的 RE 接近零,PSNR 和 SSIM 与原始图像表现优秀,估计速度快于 4 ms,参数误差平均为 2.63,与实际校准工具结果相当。结果表明 EUCM 与 KB 模型及 DS 模型之间的转换效果令人满意。
对于 RT 模型(针孔模型的畸变建模),从鱼眼相机模型到其转换的性能相比其他模型有所下降。尤其是在转换为 DS 模型时,焦距估计与实际值偏差较大,导致最终参数误差高于其他转换模型。
OCamCalib 数据集实验
对于 OCC 模型的实验,我们使用了来自 OCamCalib 数据集的 190 度大视场图像。OCC 的真实值通过 OCamCalib 校准工具获得。然而,由于工具不支持 KB、EUCM 和 DS 模型,这些模型的真实值无法获得。因此,我们将输入模型获取为 iin=FCA(iOCC∗),再使用此输入模型获得 i^OCC。此实验未对 RT 模型进行比较,因为其使用大视场角 FoV。
OCC 的实验结果如表 II 所示。结果显示,各种输入模型估计的参数平均 PSNR 为 34.5,SSIM 为 0.84,RE 为 0.33,PE 为 4.76,表现良好。
与最先进方法的比较
我们将 fisheye 相机模型转换方法与 libPeR中的现有方法进行了比较。表 III 展示了畸变系数与真实值的比较,实验结果表明我们的方法在 RMSE 方面具有更高的精度。
应用
验证了提出模型在实际应用中对鱼眼相机模型进行转换的性能。Fisheye ORB-SLAM 使用 EUCM 模型作为鱼眼相机的参数。我们利用 TUM Visual Inertial (VI) 数据集提供的 KB 模型,基于 KB-EUCM 模型参数和直接获取的 EUCM 模型参数,在 VI 数据集的 calib-cam1 序列上执行 fisheye ORB-SLAM。使用 evo 包计算获得关键帧轨迹的绝对位姿误差(APE)和相对位姿误差(RPE)。实验使用 VI 数据集中的 corridor4 和 room2 序列,这些相对小的空间具有闭环潜力,不太可能因 Fisheye ORB-SLAM 中 RANSAC 引入的随机性而出现显著轨迹偏差。
实验结果如表 IV 所示,直接获得的 EUCM 模型与我们的 KB-EUCM 模型之间的平均 APE 差异约为 3 cm,RPE 差异约为 0.1 cm。这些差异在系统的正常误差范围内,验证了我们的模型能够正确地转换鱼眼相机模型。
图 4 显示了使用直接获取的 EUCM 参数和通过 KB-EUCM 转换获得的 EUCM 参数进行 Fisheye ORB-SLAM 的结果图像。结果表明,使用转换后的 EUCM 参数成功完成了正常的 SLAM 操作,轨迹和结构生成良好。
图 4. 鱼眼 ORB-SLAM 示例。(a) 使用直接获取的 EUCM 参数的结果。(b) 使用通过本模型进行的 KB-EUCM 转换获得的 EUCM 参数的结果。
局限性
提出的 FCA 模块通过输入模型获取输出模型的参数。此过程依赖于从输入模型恢复的环境信息。因此,输入模型校准参数的质量会直接影响输出模型的结果。随着输入模型校准结果准确性的提高,输出模型的质量也会随之提升。
总结
本文提出了一种名为 Fisheye-Calib-Adapter 的工具,用于简化鱼眼相机模型的转换。该系统基于待转换相机模型的内参快速准确地估计输出模型参数,无需任何图像集。该方法支持广泛使用的模型(如 UCM、EUCM、Double Sphere、Kannala-Brandt、OCamCalib 和 Radial-Tangential),并提供了其他自定义模型的接口。通过该系统获得的转换模型参数可以直接应用于 SLAM 等实际应用中。该模块将为研究人员弥合鱼眼相机模型之间的差距,并在各种研究中得到应用,因为它允许获取目标模型的参数而无需重新校准。