1157
{{thumb}}
0
相机标定含义
在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)。
相机标定意义(解决为什么要进行相机标定)
计算机视觉的基本任务之一是从摄像机获取的图像信息出发计算三维空间中物体的几何信息,并由此重建和识别物体,而空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系是由摄像机成像的几何模型决定的,这些几何模型参数就是摄像机参数。
在大多数条件下,这些参数必须通过实验与计算才能得到。无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。
因此,做好相机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在。
常用相机标定的方法
相机标定方法有:传统相机标定法、主动视觉相机标定方法、相机自标定法。
摄像机相对于世界坐标系的方位。标定精度的大小,直接影响着计算机视觉(机器视觉)的精度。
迄今为止,对于摄像机标定问题已提出了很多方法,摄像机标定的理论问题已得到较好的解决,对摄像机标定的研究来说,当前的研究工作应该集中在如何针对具体的实际应用问题,采用特定的简便、实用、快速、准确的标定方法。
传统的标定方法这里不再赘述,相机坐标系转换如下:
相机坐标系是以 X ,Y,Z三个轴组成的且原点在 C点;
像平面坐标系是以 x,y两个轴组成的且原点在 p 点;
图像坐标系一般指图片相对坐标系,在这里可以认为和像平面坐标系在一个平面上。
使用衍射光DOE设备提出相机标定的新维度,通过平移不变的特性,只需一张图片即可进行标定,且覆盖各种景深距离的镜头。
为了在机器视觉中使用基于相机的测量,高精度几何相机校准是绝对必要的。目标是确定将 3D 世界坐标映射到 2D 图像坐标所需的内部相机参数。常见的方法是使用预定义的校准网格进行摄影测量校准 d和r,再通过最小化非线性误差函数来估计相机参数需要多个不同方向的观测。由于有限的网格大小,该技术或多或少限于近距离相机校准。另一种适用于远场相机校准的方法使用准直仪-测角仪布置来照亮一组单个像素 ( n × m)。知道准直光的方向,就可以估计相机参数d和投影d',他们提供了对相机校准关键发展的更全面总结。此处报告的校准程序结合了校准网格排列和单像素照明的特殊优势。通过使用衍射光学元件作为分束器,只需要一张具有n × m衍射点的图像来估计内部相机参数。
衍射光学元件 (DOE) 可用于将波长为λ的入射激光束分成许多具有众所周知的传播方向的光束。由于传感器上的图像是夫琅禾费衍射图案,因此每个投影图像点代表无穷远处的一个点,在 3D 投影空间 P 3 中由齐次坐标d =[ X , Y , Z ,0] T 表示,其中
f=(fx,fy)表示在 DOE 中编码的空间频率。
上面公式仅当入射光波是具有均匀强度分布的平面波时才有效,完全垂直于 DOE 表面。在实际设置中,光束的延伸是有限的,并且通常具有不均匀的强度分布,通常是高斯分布。此外,很难避免 DOE 相对于入射光束的轻微倾斜。加入入射角度进行计算
用角α和β在准直器坐标系下旋转DOE坐标系的x轴和y轴。衍射光束的方向现在得到如下
在DOE坐标系中,通过简单的矩阵运算直接计算衍射光束的方向,因此我们将省略由此得到的有些冗长的表达式。
为了将光束方向转换为摄像机坐标系,需要考虑摄像机在DOE坐标系下的外部方向:其中 R 是定义相机方向的 3×3 旋转矩阵,t是相机位置的平移向量。公式(4)表明,无限远理想点的映射对于平移是不变的,这是计算步骤的必要条件。与经典校准网格相比,这也是一个很大的优势,因为只需要一张图像就足以校准,因此需要估计的参数更少。
相机对衍射光DOE拍摄实例
这里描述了一种几何传感器校准的新方法,该方法使用定制的衍射光学元件作为具有精确已知衍射角的分束器。由于衍射光束的虚拟源是无限远的点,因此被成像的物体类似于星空,这使得图像具有平移不变性。
与棋盘格测量数据对比示例
这一特殊功能允许使用单个图像进行完整的相机校准,避免复杂的束调整,从而实现非常快速和可靠的校准过程。取得的结果与使用针孔相机模型和径向畸变模型的经典相机标定一致。我们的分析中也包含了偏心失真,但结果没有改善。
结果表明,可以获得一个可靠的解决方案,它允许将内部方向的参数与 DOE 的旋转和相机的外部方向分开。因此,校准设置组件的复杂对准不是必需的,这简化了校准过程并且原则上允许现场校准。
本文转载自《Image Engineering 图像工程》,上海研鼎可提供相关测试设备,详情咨询sales@rdbuy.com。
{{CommentDatavv.name+' '+(CommentDatavv.to_user_id!=CommentDatav.user_id?('回复'+CommentDatavv.to_name):'')}}: