11

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

 3 years ago
source link: https://mp.weixin.qq.com/s/rr_rP6wYDYK1vm8RIUokfg
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

ronghuaiyang 3D视觉工坊 2/21

点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达



作者:Jakob W

编译:ronghuaiyang(AI 公园)

导读

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

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

640?wx_fmt=jpeg

标定板的选择,有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目标可以用于立体校准。在这种情况下,需要执行一些代码来找到在每个摄像头中单独检测到的点,以及在两个摄像头中都检测到的点(交点)。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK