【问题标题】:How to verify that the camera calibration is correct? (or how to estimate the error of reprojection)如何验证相机校准是否正确? (或如何估计重投影的误差)
【发布时间】:2013-08-05 07:06:49
【问题描述】:

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

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

【问题讨论】:

    标签: computer-vision camera-calibration


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      1. 处理输入图像:

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

      一旦生成了内在校准,我们就可以返回到源图像。

      对于每张图像,将估计的相机位姿乘以内在校准,然后将其应用于在 1c 中导出的每个点。

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

      MRPT 对所有输入图像执行此测试,并为您提供聚合重投影错误。

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

      【讨论】:

      • 我正在解决同样的问题我已经校准了相机我得到了内在矩阵,我想检查校准是否良好。但是在您的回答中,您说我们应该将相机姿势与相机矩阵相乘,以便获得 2D 图像角!你从哪里得到相机姿势?提前感谢您的帮助
      【解决方案3】:

      关于 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。(我无法评论,所以我添加了一个新答案)

      【讨论】:

        【解决方案4】:

        考虑到校准装置姿势的足够可变性,应该只是校准(像素重投影)误差的方差和偏差。最好将这些错误可视化而不是查看值。例如,指向中心的误差向量将指示错误的焦距。观察曲线可以直观地了解失真系数。

        【讨论】:

          【解决方案5】:

          要校准相机,必须共同解决外在和内在问题。后者可以从厂商处得知,外在(旋转和平移)的求解涉及计算单应性的分解:Decompose Homography matrix in opencv python

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

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

          【讨论】:

            猜你喜欢
            • 2017-10-08
            • 2014-04-12
            • 2016-05-13
            • 2011-03-12
            • 1970-01-01
            • 2012-08-08
            • 2015-09-16
            • 1970-01-01
            • 2021-03-09
            相关资源
            最近更新 更多