校准质量是通过重投影误差来测量的(有其他选择吗?),这需要一些三维点的知识世界坐标。
有没有一种简单的方法来产生这样的已知点?是否有其他方法来验证校准(例如,张的校准方法只要求校准对象是平面的,系统的几何形状不需要已知)
生成内部校准时使用的图像也可以用于验证。移动机器人编程工具包(MRPT)中的相机校准工具就是一个很好的例子。
根据张的方法,MRPT校准过程如下:
-
处理输入图像:
- 1a。定位校准目标(提取棋盘角)
- 1b。假设目标是一个具有已知交叉点数量的平面棋盘,估计相机相对于目标的姿势
- 1c。在相对三维坐标中将图像上的点指定给校准目标的模型
-
找到一个最能解释1b/c中生成的所有模型的内在校准。
一旦生成了固有校准,我们就可以返回到源图像。
对于每个图像,将估计的相机姿态与固有校准相乘,然后将其应用于1c中导出的每个点。
这将把目标模型的相对3D点映射回2D校准源图像。原始图像特征(棋盘角)和重新投影点之间的差异是校准误差。
MRPT对所有输入图像执行此测试,并将给您一个聚合重投影错误。
如果你想验证一个完整的系统,包括相机内部和相机到世界的转换,你可能需要构建一个夹具,将相机和目标放置在已知的配置中,然后根据真实世界的测量结果测试计算的3D点。
您可以独立于姿势来验证估计的非线性透镜失真参数的准确性。拍摄跨越视场的直边图像(例如铅垂线或平面上的激光条纹)(跨越视场的一种简单方法是旋转相机,保持铅垂线固定,然后添加所有图像)。在所述直线图像上拾取点,不偏移它们的坐标,拟合数学直线,计算误差。
对于线性零件,您还可以以已知的相对姿态捕捉多个平面钻机的图像,可以使用可重复/精确的钻机(例如转台)移动一个平面目标,也可以以已知角度安装多个平面目标(例如三个平面彼此成90度)。
和往常一样,在精度要求和预算之间需要做出妥协。有了足够的钱和附近一家友好的机器商店,你可以用钻机几何体让你的幻想尽情驰骋。我曾经有一个葡萄柚大小的十二面体,由白色塑料加工而成,规格为1/20毫米。用它来校准机器人手臂末端执行器上的相机的姿势,在球体上围绕固定点移动。十二面体在遮挡角方面有非常好的特性。不用说,这都是专利。
关于Engine的问题:姿态矩阵是[R|t]矩阵,其中R是纯3D旋转,t是平移向量。如果你已经从图像中计算出单应性,请参阅张的微软技术报告第3.1节(http://research.microsoft.com/en-us/um/people/zhang/Papers/TR98-71.pdf)给出了一种闭合形式的方法,使用已知的单应性和固有的相机矩阵K来获得R和t。(我不能评论,所以我添加了作为新的答案)
在校准装备姿态具有足够可变性的情况下,应该只是校准(像素重新投影)误差的方差和偏差。最好将这些错误可视化,而不是查看这些值。例如,指向中心的误差矢量将指示错误的焦距。观察曲线可以直观地了解失真系数。
要校准相机,必须共同解决外在和内在问题。后者可以从制造商那里知道,外部(旋转和平移)的求解涉及计算的单应性的分解:在opencv-python 中分解单应性矩阵
在Opencv 中计算只有平移、旋转和缩放的单应性
这里使用单应性,因为大多数校准目标是平坦的。