How can I achieve simple, accurate, and robust projector-camera calibration?
摘要:来源 http:mesh.brown.educalibrationfilesProjector Calibration Presentation.pdf 概述 对于一个最简单的面结构光系统来说,其通常由一个相机(camera)和一
来源
http://mesh.brown.edu/calibration/files/Projector Calibration Presentation.pdf
概述
对于一个最简单的面结构光系统来说,其通常由一个相机(camera)和一台投影仪(projector)所构成,所需的几何标定任务(geometric calibration)包括:
相机内参 \(K_{cam}\) 的标定
投影仪的内参 \(K_{proj}\) 的标定
投影仪坐标系到相机坐标系转换的外参,即旋转矩阵 \(R\),平移矩阵 \(T\) 。
面结构光三维扫描重建
利用面结构光进行三维扫描重建的步骤通常包括如下4步:
graph LR
A[图像采集] --> B[图像解码] --> C[三角化点云重建] --> D[点云网格化]
图像采集:投影仪投射一些列编码图案到被测物体上,相机捕获到经被测物调制后的编码图案。
图像解码:对调制后的编码图案进行解码,解算这些图案在投影仪和相机之间的对应关系。
三角化点云重建:根据图案在投影仪和相机之间的对应关系,以及提前标定的参数,通过三角测量方法(triangulation),重建出被测物点云。
点云网格化:从不同角度所拍摄的被测物重建出的点云可以融合为一个完整的点云,点云经过网格化(mesh)处理后,可以生成三维模型。
相机标定
相机标定是非常常见的标定任务,主要用到的是针孔相机模型(Pinhole model)以及镜头畸变模型(radial distortion)。
通常定义世界坐标系中的一三维点为 \(X\) ,镜头畸变参数为 \(k_1,k_2,k_3,k_4\) ,相机内参为 $ K = \left[ {\matrix{{{f_x}} & s & {{c_x}} \cr 0 & {{f_y}} & {{c_y}} \cr 0 & 0 & 1 \cr } } \right]$ , 三维点 \(X\) 按照针孔相机模型和镜头畸变模型投影到相机的像平面上,得到二维点 \(x\) ,该过程可以描述为:
\[x=K\cdot L(X;k_1,k_2,k_3,k_4)
\]
其中 \(L\) 表示畸变。
在上述模型中,只有 \(X\) (通常是平面标定板或其他方式已知三维坐标)和 \(x\) (从图像中提取标定板二维点)是已知的,因此要标定剩下的未知模型参数,需要从多个不同的角度去拍摄标定板得到一系列 \(X \leftrightarrow x\) 这样的三维二维点对,构成一系列等式:
\[\matrix{
{x_1=K\cdot L(R_1X+T_1;k_1,k_2,k_3,k_4)} \cr
{x_2=K\cdot L(R_2X+T_2;k_1,k_2,k_3,k_4)} \cr
{x_3=K\cdot L(R_3X+T_3;k_1,k_2,k_3,k_4)} \cr
{\cdots} \cr
}
\]
通过求解上述等式,可求得相机内参 \(K\) 和畸变参数 \(k_1,\cdots,k_4\)。
投影仪标定
对于投影仪来说,其投影过程是编码图案投射出的光线经过镜头折射后,打在被测物上,形成调制图案。投影过程实际上是相机成像的逆过程。投影仪投影到被测物被调制的图案三维点可以看作世界坐标系中的三维点 \(X\) ,经投影仪镜头产生畸变,最后得到投影的原始图案,原始图案所在位置就是像平面,得到的投影点为 \(x\) 。
因此投影仪也可以利用针孔相机模型和畸变模型来建模,只需要把它看作一个 “逆相机”。这样建模的好处是,我们可以按照相机标定的方法对投影仪进行标定。
令投影仪内参为 $ K_{proj} = \left[ {\matrix{{{f_x}} & s & {{c_x}} \cr 0 & {{f_y}} & {{c_y}} \cr 0 & 0 & 1 \cr } } \right]$ ,那么对于投影仪同样有
\[x=K_{proj}\cdot L(X;k_1,k_2,k_3,k_4)
\]
然而,我们知道投影仪是不可以采集图像的,如何构建世界坐标系中的三维点 \(X\) 和 投影仪像平面上的二维点 \(x\) 之间的对应关系 \(X \leftrightarrow x\) 呢?这成了逆相机标定投影仪方法的难点。
投影仪标定已有的一些相关工作
对于投影仪的标定,目前已有的一些工作主要可以分为三大类:
基于相机标定。
