如何验证相机校准是否正确? (或如何估计重投影的错误)

时间:2013-08-05 07:06:50

标签: computer-vision camera-calibration

校准质量是通过重投影误差来测量的(有替代吗?),这需要一些3d点的知识世界坐标。

有没有简单的方法来产生这样的已知点?有没有办法以其他方式验证校准(例如,张的校准方法只要求校准对象是平面的,系统的几何形状不需要知道)

5 个答案:

答案 0 :(得分:6)

用于生成内在校准的图像也可用于验证它。一个很好的例子是移动机器人编程工具包(MRPT)中的camera-calib工具。

Per Zhang的方法,MRPT校准过程如下:

  1. 处理输入图像:

    • 1a上。找到校准目标(提取棋盘角)
    • 1b中。假设目标是具有已知交叉点数量的平面棋盘,估计相机相对于目标的姿势。
    • 1c上。将图像上的点分配给相对3D坐标中的校准目标模型。
  2. 找到最能解释1b / c中生成的所有模型的内在校准。

  3. 生成内在校准后,我们​​可以返回源图像。

    对于每个图像,将估计的相机姿态与固有校准相乘,然后将其应用于1c中导出的每个点。

    这会将目标模型的相对3D点映射回2D校准源图像。原始图像特征(棋盘角)和重新投影点之间的差异是校准误差。

    MRPT对所有输入图像执行此测试,并会给出聚合重投影错误。

    如果您想验证一个完整的系统,包括相机内在函数和相机到世界的变换,您可能需要构建一个将相机和目标放置在已知配置中的夹具,然后测试计算出的3D点反对现实世界的测量。

答案 1 :(得分:6)

您可以独立于姿势验证估计的非线性镜头失真参数的准确性。捕获跨越视野的直边(例如铅垂线或平面上的激光条纹)的图像(跨越FOV的简单方法是旋转相机,保持铅垂线固定,然后添加所有图像) 。在所述线图像上拾取点,不改变它们的坐标,拟合数学线,计算误差。

对于线性部分,您还可以以已知的相对姿势捕获多个平面钻机的图像,或者使用可重复/精确的装备(例如转盘)移动一个平面目标,或者以每个已知角度安装多个平面目标其他(例如彼此成90度的三个平面)。

与往常一样,在准确度要求和预算之间需要妥协。有了足够的钱和附近友好的机械店,你可以让你的幻想与钻机几何形状一起狂野。我曾经有一个十二面体大小的葡萄柚大小,用白色塑料加工到1/20毫米规格。用它来校准机器人手臂末端执行器上的摄像机姿势,将其移动到固定点周围的球体上。十二面体在遮挡角方面具有非常好的性质。不用说,它都是专利的。

答案 2 :(得分:2)

On Engine的问题:姿势矩阵是[R | t]矩阵,其中R是纯3D旋转,t是平移向量。如果您已经从图像中计算出单应性,则Zhang的Microsoft技术报告(http://research.microsoft.com/en-us/um/people/zhang/Papers/TR98-71.pdf)的3.1节给出了一种封闭形式的方法,以使用已知的单应性和内在相机矩阵K来获得R和t。 (我无法评论,所以我添加了新答案)

答案 3 :(得分:0)

鉴于校准台架姿势具有足够的可变性,应该只是校准(像素重新投影)误差的方差和偏差。可视化这些错误胜于查看值。例如,指向中心的误差矢量将指示错误的焦距。观察曲线可以直观地了解失真系数。

答案 4 :(得分:0)

要校准摄像机,必须共同解决外部和固有问题。后者可以从制造商处得知,对于外部(旋转和平移)的求解涉及到所计算的单应性的分解:Decompose Homography matrix in opencv python

Calculate a Homography with only Translation, Rotation and Scale in Opencv

此处使用单应性,因为大多数校准目标都是平坦的。