【发布时间】:2013-08-05 07:06:49
【问题描述】:
校准的质量是通过重投影误差来衡量的(有替代方法吗?),这需要一些 3d 点的知识世界坐标。
有没有一种简单的方法来产生这样的已知点?有没有其他方法可以验证校准(例如张的校准方法只要求校准对象是平面的,不需要知道系统的几何形状)
【问题讨论】:
标签: computer-vision camera-calibration
校准的质量是通过重投影误差来衡量的(有替代方法吗?),这需要一些 3d 点的知识世界坐标。
有没有一种简单的方法来产生这样的已知点?有没有其他方法可以验证校准(例如张的校准方法只要求校准对象是平面的,不需要知道系统的几何形状)
【问题讨论】:
标签: computer-vision camera-calibration
您可以独立于姿态验证估计的非线性镜头畸变参数的准确性。捕获跨越视场的直边图像(例如铅垂线或平面上的激光条纹)(跨越 FOV 的一种简单方法是旋转相机保持铅垂线固定,然后添加所有图像) .在所述线图像上选取点,不扭曲它们的坐标,拟合数学线,计算误差。
对于线性部分,您还可以以已知的相对姿势捕获多个平面装备的图像,或者使用可重复/精确的装备(例如转盘)移动一个平面目标,或者从每个平面以已知角度安装多个平面目标其他(例如三个相互成 90 度的平面)。
与往常一样,需要在准确性要求和预算之间进行折衷。有足够的钱和附近的友好机加工店,您可以让您的幻想在钻机几何上狂奔。我曾经有一个葡萄柚大小的十二面体,用白色塑料加工成 1/20 毫米规格。用它来校准机械臂末端执行器上相机的姿势,将其在围绕固定点的球体上移动。十二面体在遮挡角度方面具有非常好的特性。不用说,这都是专利。
【讨论】:
用于生成内在校准的图像也可用于验证它。移动机器人编程工具包 (MRPT) 中的 camera-calib 工具就是一个很好的例子。
按照Zhang的方法,MRPT校准过程如下:
处理输入图像:
找到最能解释 1b/c 中生成的所有模型的内在校准。
一旦生成了内在校准,我们就可以返回到源图像。
对于每张图像,将估计的相机位姿乘以内在校准,然后将其应用于在 1c 中导出的每个点。
这会将目标模型的相对 3D 点映射回 2D 校准源图像。原始图像特征(棋盘角)与重投影点之间的差异是校准误差。
MRPT 对所有输入图像执行此测试,并为您提供聚合重投影错误。
如果您想验证一个完整的系统,包括相机内在函数和相机到世界的变换,您可能需要构建一个夹具,将相机和目标置于已知配置中,然后测试计算的 3D 点与真实世界的测量结果对比。
【讨论】:
关于 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。(我无法评论,所以我添加了一个新答案)
【讨论】:
考虑到校准装置姿势的足够可变性,应该只是校准(像素重投影)误差的方差和偏差。最好将这些错误可视化而不是查看值。例如,指向中心的误差向量将指示错误的焦距。观察曲线可以直观地了解失真系数。
【讨论】:
要校准相机,必须共同解决外在和内在问题。后者可以从厂商处得知,外在(旋转和平移)的求解涉及计算单应性的分解:Decompose Homography matrix in opencv python
Calculate a Homography with only Translation, Rotation and Scale in Opencv
这里使用单应性,因为大多数校准目标都是平坦的。
【讨论】: