准确标定相机对于任何机器/计算机视觉设置的成功都很重要。但是,有不同的标定板可供选择。为了让您更轻松地进行选择,本文解释了每种方法的主要优点。
标定板尺寸
在选择标定板时,一个重要的考虑因素是它的物理尺寸。这与最终应用的测量视场 (FOV) 相关。这是因为相机需要专注于该特定距离并进行标定。改变对焦距离会略微影响焦距,这会导致之前的任何标定失效。即使是光圈变化通常也会对标定有效性产生负面影响,这就是应该避免它们的原因。
为了准确标定,如果摄像机看到标定目标填充图像的大部分,那么相机模型是最受约束的。通俗地说,如果使用一个小的标定板,许多相机参数的组合都可以解释观测到的图像。根据经验,从正面观察时,校准板的面积至少应为可用像素面积的一半。
标定板图案类型
多年来,已经引入了不同的模式,每种模式都具有独特的特性和优势。
选择正确的类型首先要考虑您将使用哪种算法和算法实现。在Calib 的 Camera Calibrator等软件和libCalib、OpenCV 或 MVTec Halcon等库中,模式具有一定的自由度,并且它们具有各自的优点和局限性。
棋盘目标
这是最流行和最常见的标定板图案类型。棋盘候选角点通常是通过对相机图像进行二值化并找到四边形(黑色棋盘域)来找到的。过滤步骤只保留那些满足特定尺寸标准的四边形,并以规则的网格结构组织,其尺寸与用户指定的尺寸相匹配。
在对图案进行初始检测后,可以以非常高的精度确定角点位置。这是因为角点(数学上:鞍点)基本上无限小,因此在透视变换或镜头畸变下是无偏的。
在 OpenCV 中,整个棋盘必须在所有图像中都可见才能被检测到。这通常使得很难从图像的边缘获取信息。这些区域通常很适合从中获取信息,因为它们会适当地限制镜头畸变模型。
在检测到棋盘格之后,可以执行亚像素细化以找到具有亚像素精度的角点(鞍点)。这利用了给定角点位置周围像素的精确灰度值,并且精度比整数像素位置允许的精度要准确得多。
关于棋盘格目标的一个重要细节是,为了保持旋转不变,行数必须是偶数,列数必须是奇数,反之亦然。例如,如果两者都是偶数,则存在 180 度旋转歧义。对于单相机标定,这不是问题,但是如果需要两个或多个相机识别相同的点(用于立体标定),则必须不存在这种歧义。这就是为什么我们的标准棋盘格目标都具有偶数/奇数行/列的这种属性的原因。
CharuCo 目标
CharuCo 图案克服了经典棋盘格的一些局限性。然而,他们的检测算法稍微复杂一些。幸运的是,CharuCo 检测是 OpenCVs contrib 库(自 OpenCV 3.0.0 起)的一部分,使得集成这种高级方法变得非常容易。
CharuCo 的主要优点是所有检查器字段都是唯一编码和可识别的。这意味着即使是部分被遮挡或非理想的相机图像也可用于标定。例如,强环形灯可能会在标定目标(半镜面反射区域)上产生不均匀的照明,这将导致普通棋盘检测失败。使用 CharuCo,仍然可以使用剩余的(好的)角点(鞍点)检测。鞍点定位可以像棋盘一样使用亚像素检测来细化。
观测点接近图像角落时,这是一个非常有用的属性。由于目标的定位可以使相机只看到它的一部分,我们可以从相机图像的边缘和角落收集信息。这通常会导致对镜头畸变参数的非常好的和稳健的确定。因此,当 OpenCV 3.x 可用时,我们强烈建议使用 CharuCo 目标。
当然,CharuCo 目标可用于立体标定。在这种情况下,需要实现一些代码来找到在每个相机中单独检测到的点,以及在两者中都找到的点(点的交集)。
棋盘标记目标
它们基于传统的棋盘格,可以使用相同的检测算法。此外,它们的中心包含三个圆圈,即使在棋盘的部分视图中也允许绝对参考(只要在所有图像中都可以看到圆圈)。因此,可以包括来自图像外围的数据,这确保拟合的镜头模型在图像的那些部分也是有效的。
对于许多立体标定任务,棋盘格标记目标带来了编码目标(如 ChArUco)的所有优点。它在 OpenCV 4.5+ 中得到支持。
圆形网格
圆形网格也是一种流行且非常常见的标定目标设计,基于圆圈,要么在深色背景上带有白色圆圈,要么在白色背景上带有深色(黑色)圆圈。在图像处理方面,圆圈可以被检测为图像中的“斑点”。这些二进制 blob 区域上的一些简单条件,例如面积、圆形度、凸度等,可用于去除不良候选特征。这在找到合适的候选者后,再次使用特征的规则结构来识别和过滤模式。由于可以使用圆圈外围的所有像素,因此可以非常准确地确定圆圈,从而减少图像噪声的影响。然而,与棋盘中的鞍点相比,圆在相机视角下被成像为椭圆。这种透视可以通过图像校正来解释。然而,此外,未知的镜头畸变意味着圆圈不会被成像为完美的椭圆,这会增加一个小的偏差。但是,我们可以将畸变模型视为局部线性(服从透视变换/单应性),因此该误差在大多数镜头中非常小。
对于高精度标定,椭圆形状和投影圆心都需要考虑在内,尤其是对于短焦距镜头和大圆。OpenCV 两者都不做,默认情况下使用简单的斑点检测器来查找椭圆斑点的质心。Calib Camera Calibrator确实考虑了这些影响,并且能够为圆形目标产生更准确的结果。
对称和非对称圆形网格之间的一个重要区别是,前者具有 180 度的歧义,如“棋盘”部分所述。因此,对于立体标定,非对称网格是必要的。否则,两种类型的性能应该没有太大差异。
参考目录
https://calib.io/blogs/knowledge-base/calibration-patterns-explained