相机标定中各种标定板介绍以及优缺点分析

描述

导读

各种标定板的解释和分析。

准确标定像机对于所有的机器/计算机视觉的成功应用都是非常重要的。然而,对于标定板,有不同的模式可供选择。为了方便进行选择,本文将解释每种方法的主要好处。

相机

标定板的选择,有CharuCo,棋盘格,不对称的圆和棋盘格。

标定板尺寸

在选择标定板时,一个重要的考虑因素是它的物理尺寸。这最终关系到最终应用的测量视场(FOV)。这是因为相机需要聚焦在特定的距离上标定。改变焦距长度会轻微地影响对焦距离,这会影响之前的标定。即使是光圈的改变通常也会对标定的有效性产生负面影响,这就是为什么要避免改动它们。

为了精确的标定,当摄像机看到标定目标填充大部分图像时,摄像机模型最好是受到约束的。通俗来说,如果使用一个小的标定板,许多相机参数的组合可以解释所观察到的图像。根据经验,当正面观察时,标定板的面积至少应该是可用像素面积的一半。

标定板类型

多年来已经引入了不同的标定板,每种标定板都有独特的属性和好处。

要选择正确的类型,首先要考虑使用哪种算法和算法实现。在OpenCV或MVTec Halcon等通用库中,标定板有一定的自由度,它们有各自的优点和局限性。

棋盘格

这是最流行、最常见的图案设计。通常通过首先对摄像机图像进行二值化并找到四边形(黑色的棋盘区域)来找到棋盘角点的候选点。过滤步骤只保留那些满足特定大小标准的四边形,并组织在一个规则的网格结构中,网格结构的尺寸与用户指定的尺寸匹配。

在对标定板进行初步检测后,可以以非常高的精度确定角点位置。这是因为角(数学上:鞍点)基本上是无限小的,因此在透视变换或镜头失真下是无偏的。

在OpenCV中,整个棋盘必须在所有图像中可见才能被检测到。这通常使得从图像的边缘获取信息变得困难。这些区域通常是很好的信息来源,因为它们适当地约束了镜头失真模型。

在检测出棋盘格后,可以进行亚像素细化,以找到具有亚像素精度的鞍点。这利用了给定角点位置周围像素的确切灰度值,并且精度比整数像素位置所允许的精度要精确得多。

你可以查看OpenCV棋盘检测器的源代码:https://github.com/opencv/opencv/blob/master/modules/calib3d/src/calibinit.cpp。关于棋盘格目标的一个重要细节是,为了保持旋转不变,行数必须是偶数,列数必须是奇数,或者相反。例如,如果两者都是偶数,则存在180度旋转的歧义。对于单台相机的校准,这不是一个问题,但如果相同的点需要由两个或更多的相机识别(对于立体校准),这种模糊性必须不存在。这就是为什么我们的标准棋盘目标都具有偶数/奇数行/列的属性。

圆形网格

圆形网格也是一种流行且非常常见的校准目标设计,它基于圆形,或者是白色背景上的白色圆形,或者是白色背景上的黑色(黑色)圆形。在图像处理术语中,圆可以被检测为图像中的“斑点”。在这些二元斑点区域上应用一些简单的条件,如面积、圆度、凸度等,可以去除候选的坏特征点。

在找到合适的候选对象后,再次利用特征的规则结构对模式进行识别和过滤。圆的确定可以非常精确,因为可以使用圆外围的所有像素,减少了图像噪声的影响。然而,与棋盘中的鞍点不同的是,在相机视角下,圆形被成像为椭圆。这种观点可以通过图像校正来解释。然而,未知的镜头畸变意味着圆不是完美的椭圆,这增加了一个小的偏置。然而,我们可以将畸变模型看作是分段线性的(服从透视变换/单应性),因此在大多数透镜中,这种误差非常小。

对称圆网格和非对称圆网格的一个重要区别是,对称圆网格具有180度的模糊性,正如“棋盘”一节中所解释的那样。因此,对于立体校正,非对称网格是必要的。否则,这两种类型的性能都不会有太大的差别。

圆形网格检测的OpenCV源代码:https://github.com/opencv/opencv/blob/master/modules/calib3d/src/circlesgrid.cpp。

CharuCo

CharuCo标定板克服了传统棋盘的一些限制。然而,它们的检测算法有点复杂。幸运的是,CharuCo检测是OpenCVs contrib库的一部分(从OpenCV 3.0.0开始),这使得集成这个高级方法非常容易。

CharuCo的主要优点是所有光检查器字段都是唯一编码和可识别的。这意味着即使是部分遮挡或非理想的相机图像也可以用于校准。例如,强烈的环形光可能会对标定目标产生不均匀的光照(半镜面反射区域),这将导致普通棋盘格检测失败。使用CharuCo,剩余的(好的)鞍点检测仍然可以使用。鞍点定位可以像棋盘一样使用亚像素检测来细化。

对于接近图像角落的观察区域,这是一个非常有用的属性。由于目标的定位使得摄像机只能看到它的一部分,所以我们可以从摄像机图像的边缘和角落收集信息。这通常会带来确定镜头失真参数时的非常好的鲁棒性。因此,我们强烈推荐使用CharuCo标定板,OpenCV 3.x是可用的。

自然,CharuCo目标可以用于立体校准。在这种情况下,需要执行一些代码来找到在每个摄像头中单独检测到的点,以及在两个摄像头中都检测到的点(交点)。

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分