什么是最好的相机校准方法?

时间:2014-12-02 19:05:41

标签: matlab opencv computer-vision camera-calibration matlab-cvst

我理解上述问题是广泛而模糊的。 但要加入背景: 我正在尝试确定相机的姿势和位置估计的准确性。我花了几周时间校准和尝试不同的方法和不同尺寸的电路板,照明,距离等。

我尝试过的方法:

说明

  • 每个
  • 在相机前面使用大约20张各种方向和位置的图像
  • 对于尺寸为25mm,32mm和50mm块的​​9x6棋盘
  • 分辨率为1280x720和1920x1080
  • 对于较小的板,距离范围在500mm之间;对于较大的板,距离范围在2000mm之间

在所有情况下,我都遵循严格的指导原则How to verify the correctness of calibration of a webcam?

在以上因素的所有组合中,我得到几毫米的结果(+ - 15毫米) 对于上述方法,我在1280x720的25mm块的内在函数跨度如下:

  • OpenCV的内置校准方法> fx = 1269.4 fy = 1269.49 cx = 639.5 cy = 359.5
  • Matlab校准工具箱> fx = 1259.53 fy = 1260.76 cx = 661.3 cy = 306.5
  • Matlab校准App> fx = 1255.1 fy = 1254.8 cx = 652.6 cy = 340.7
  • 手动调整值。 >各种结果,除cx = 639.5 cy = 359.5
  • 外没有稳定

不应该是这种情况。当处理1米以下的距离时,相机相对于电路板原点的位置应精确到平均毫米或2毫米(如果不是亚毫米精度)。除非我弄错了?

我的问题是,对于高清网络摄像头来说,什么是理想的简单校准方法,几乎​​没有失真?

2 个答案:

答案 0 :(得分:10)

有许多可能的错误来源。

首先,虽然您尝试过的所有三种校准实施都使用了基本相同的算法,但是有足够的差异可以解释结果中的差异。

主要区别在于棋盘角检测。 Caltech校准工具箱没有自动棋盘检测,并使用第二个优化过程来细化角点。 OpenCV和Camera Calibrator App都会自动检测棋盘,但Camera Calibrator App中使用的算法要好得多。它更加强大,这意味着当OpenCV没有时,它可能会检测到一块电路板,并且它的子像素定位更精确。我的观点是,在这三种方法中,您使用不同的数据点进行校准。因此,您的结果不同也就不足为奇了。

校准后,您会得到什么样的重投影错误? Camera Calibrator应用程序会显示重投影错误的条形图。您应该查看它,并排除导致高错误的图像。理想情况下,您希望平均重投影误差小于半个像素。越低越好。

现在我要问你如何测量从相机到棋盘的距离?您从校准中获得的外显子代表从棋盘的坐标系到相机坐标系的转换,其坐标系的原点是相机外壳内,在其光学中心。这很难准确测量。更好的方法是place a flat object of a known size on the checkerboard and measure it using the camera。实际上,您可以测量检测到的棋盘角之间的距离。请注意,检测精度是另一个误差来源。

另外,请务必不要将校准图像保存为jpeg。压缩瑕疵会影响棋盘角点检测的准确性。使用像tiff或png这样的无损格式。

答案 1 :(得分:3)

迟到了这个派对,但是如果它可以帮助......

差异并不是那么令人惊讶,因为这三个应用程序虽然主要依赖于相同的算法(并且,对于OpenCV和Matlab工具包,甚至共享作者),但具有不同的实现,具有不同的性能。如果您有兴趣进行公平的比较,您至少应该使用相同的测量集(即检测到的角的位置,子像素细化)驱动它们,这样输出的任何差异纯粹是由于实现。已经正确地指出,通过使用不同的图像格式,您可以有效地使用不同的测量集。

您在主要观点中观察到的变化也不足为奇:很难准确估计它,因为

  • 重投影错误对其位置不是很敏感,即您尝试优化的成本函数主要是"平坦"在最佳周围的(cx,cy)子空间中(参见this paper中的深入讨论),和
  • 它本质上与非线性失真的中心以及与世界到相机平移的图像平面平行的分量相混淆。

后一点意味着主点的小但难以检测的变化将导致显着的3D位置误差,除非添加额外的约束,这使得约束误差函数对于量子不是平坦的感兴趣的,即相机相对于校准装置的绝对位置和方向。

要添加的方便约束是:

  • 校准目标和相机的相对运动的先前模型。例如,如果您的棋盘目标附加到转盘,您可以优化其运动的中心和轴(3 + 2参数),而不是针对各个目标位置姿势的6 x num_images参数。
  • 相对于非平面固定装备的多个摄像机位置(或与钻机相关的点和方向,如上所述)。