TartanCalib: Iterative Wide-Angle Lens Calibration using Adaptive SubPixel Refinement of AprilTags
广角相机以小、轻、经济高效的外形提供丰富的信息,在移动机器人被广泛选用。内参和外参的精确标定是使用广角镜头边缘进行深度感知和里程测量的关键先决条件。使用当前最先进的技术标定广角镜头会产生较差的结果,这是由于边缘处的极度失真,因为大多数算法假设镜头的低到中等失真(更接近针孔投影)。在这项工作中12,作者提出了精确广角标定的方法。论文的 pipelines 生成一个中间模型,并利用它迭代改进特征检测,最终改进相机参数。作者使用了三种利用中间相机模型的关键方法:(1)将图像分解为虚拟针孔相机,(2)将目标重新投影到图像帧中,以及(3)自适应亚像素细化。将自适应子像素细化和特征重投影相结合,可将重投影误差显著提高26.59%,帮助检测到最多42.01%的特征,并提高密集深度映射下游任务的性能。最后,TartanCalib 是开源的,并在一个易于使用的标定工具 Kalibr3 中实现。系统模型流程如下。
TartanCalib(上图)的思想是通过利用中间相机模型来改进目标检测,其中迭代优化中间相机模型包括无失真去畸变、目标重投影、角点滤波和亚像素细化的关键组件。
1. 去畸变
在广角相机标定中改进目标检测的一种直观方法是将图像分解为多个针孔重投影,这种方法应该可以消除高度失真目标造成的一些困难。为了消除图像失真,采用模拟一个虚拟针孔相机,它有四个参数 ${\bf i} = [f_x, f_y, c_x, c_y]^T$ ,投影函数定义为: $$ \pi({\bf x}, {\bf i}) = \begin{bmatrix} f_x \cfrac xz \newline f_y \cfrac yz \end{bmatrix} +\begin{bmatrix} c_x \newline c_y \end{bmatrix} \tag{1}\label{1} $$ 其中 $f_x, f_y$ 是焦距,$c_x, c_y$ 是相机关系,$x,y,z$ 是标定板子的特征角点。一个标准的去畸变重映射操作,将原始畸变图像映射到虚拟针孔相机上,以获取无畸变未失真的图像。
2. 目标重投影
为了获取比原始提取匹配的标定特征角点更多的角点用于后续优化,作者并不是在上一步去畸变的的图像上进行二次提取。而是根据相机初始估计的位恣将目标标定板中的角点重新投影回虚拟图像帧中。
$$ {\bf u} = \pi({\bf x}, {\bf i}) = \pi ( T_{\_c\_tar} \cdot {\bf x}_{tar}, {\bf i}) \tag{2} \label{2} $$
上式为使用虚拟相机模型将目标标定板中的角点重新投影到虚拟图像坐标上。其中,$T_{\_c\_tar}$ 是从目标标定板到相机的坐标系转换。
3. 角点滤波
虽然使用中间相机模型将目标重新投影到图像帧中可能会产生一些准确的估计,但不确定是否所有目标都在帧中可见。因此需要一个过滤策略,只保留帧中出现的特征(角点)。并且通过以下步骤实现稳健过滤:1)遍历所有检测到的四边形(检测到的正方形),2)检查每个四边形的所有 4 个角是否都接近重新投影的目标角,以及 3)对所有角执行亚像素细化。
4. 亚像素细化
需要亚像素细化来将使用中间模型重新投影的特征转换为与图像中所见的角点实际匹配的特征,论文提出了两种算法:1) 对 OpenCV 的 cornerSubPix() 函数的简单修改,2) 一种专门为高失真透镜设计的基于对称的细化方法。
4.1 自适应窗口
由于 cornerSubPix() 函数需要计算搜索窗口内的图像梯度,以便向 corner 迭代收敛。为此,搜索窗口的大小是一个关键的参数:如果搜索窗口太小,算法可能永远找不到角点,而大窗口会产生不准确的结果,甚至会收敛到另一个角点。窗口大小通常是一个固定的参数,对于不同的图像分辨率或失真级别不会改变,因此当窗口大小选择不当时会产生角点定位不准确的问题。作者介绍了针对 cornerSubPix() 函数的窗口自适应改进版本,它根据图像帧中的标签外观来更改窗口大小。
$$ w_{{{\bf x} _{tar}}} = \min _{{\bf x} _{tar}^* \in Q} s \cdot (\pi ( T _{\_c\_tar} \cdot {\bf x} _{tar}, {\bf i}) - \pi ( T _{\_c\_tar} \cdot {\bf x} _{tar}^*, {\bf i})) \tag{3} \label{3} $$
上式显示了如何确定调整大小窗口的大小,该算法将所有目标特征重新投影到图像帧中,并针对每个特征在图像帧中找到其最近的邻居。然后,根据上式,使用该信息来缩放搜索窗口。其中,$s$ 是自定义系数,$\bf x^*$ 属于除了当前目标 $\bf x$ 之外所有标定板角点子集 $Q$ 中的坐标。
4.2 基于对称细化
基于对称的目标函数如下,
$$ C_{sym}({\bf x}_{tar}) = \sum _{k=1}^n( I(\pi ( T _{\_c\_tar} \cdot ({\bf x} _{tar} + s_k), {\bf i})) - I (\pi ( T _{\_c\_tar} \cdot ({\bf x} _{tar} - s_k), {\bf i})))^2 \tag{4}\label{4} $$
这里的 ${\bf x}_{tag}$ 是特征在目标空间中的位置,使用 $T _{\_c\_tar}$ 将其转换为相机坐标系下,并使用投影函数 $\pi$ 投影到图像帧。这个等式中的所有步骤都是可微分的,我们用它来直接优化目标帧中的特征位置。
5 总结
作者给出了经过一些类细化处理后角点精确的对比图如下,
由此归结流程为,该模块采用了 $1\sim4$ 中的方式对特征角点进行更准确的提取,然后将这些精确化后的角点重新返回到相机模型优化求解器中进行参数的再一次估计优化,进而得到更加准确的模型参数。
Reference
Duisterhof, Bardienus P and Hu, Yaoyu and Teng, Si Heng and Kaess, Michael and Scherer, Sebastian. TartanCalib: Iterative Wide-Angle Lens Calibration using Adaptive SubPixel Refinement of AprilTags. 5.Oct.2022. ↩︎