相机模型
从世界到相机
假设相机坐标系的三个正交单位向量分别是 x^c,y^c 和 z^c,那么可以得知世界坐标系变为相机坐标系的变换矩阵为 [x^c,y^c,z^c],其逆矩阵就是相机的旋转矩阵 R,也就是相机的方向
R=x^cy^cz^c=r11r21r31r12r22r32r13r23r33
令 xw 表示一个点在世界坐标系中的坐标,xc 表示该点在相机坐标系中的坐标,cw 表示相机在世界坐标系中的坐标,那么有
xc=R(xw−cw)=Rxw−Rcw=Rxw+t
其中 t 是世界坐标系的原点在相机坐标系中的位置
t=−Rcw=txtytz
整个方程可以通过一个外参矩阵(extrinsic matrix)表示
x~c=xcyczc1=r11r21r310r12r22r320r13r23r330txtytz1xwywzw1=Mextrx~w
从相机到像素
我们可以通过透视投影将三维坐标转换为二维坐标
xi=f⋅xc/zcyc/zc1
令 mx,my 分别为 x 和 y 方向上的像素密度(像素/毫米),(cx,cy) 为主点(Principal Point),即光轴与传感器的交点,那么最终的二维坐标为
u=[uv]=[mxfzcxc+cxmyfzcyc+cy]
令 fx=mxf,fy=myf,则该方程可以通过一个内参矩阵(intrinsic matrix)以齐次坐标的形式表示
u~=u~v~1≡fx000fy0cxcy1000xcyczc1=Mintrx~c
最终,我们可以得到一个投影矩阵(projection matrix)
u~≡MintrMextrx~w=P3×4x~w
从像素到光线
若我们不知道相机的内参矩阵,可以尝试从图像的大小和视角计算出来。假设图像的宽度为 W,相机的水平视角(FOV,Field of View)为 θx,图像某一角的像素点在相机坐标系中的坐标为 (x0,y0,z0),那么我们有
fxz0x0=21W
⇒tan2θx=z0x0=2fxW
⇒fx=2tan(θx/2)W
类似地,我们可以得到 fy,然后就可以构建出内参矩阵。
假设我们已经知道某一相机在世界坐标系的位置为 o,该相机中某一像素的坐标为 (u,v),那么我们可以通过内参矩阵得到该像素点在相机坐标系中的坐标
x^c=xcyc1=1/fx0001/fy0−cx/fx−cy/fy1uv1=MF−1u~
x~c=xcyc11
再通过外参矩阵得到该像素点在世界坐标系中的坐标,并由此计算出从相机中心出发的光线方向
x~w=Mextr−1x~c=xwywzw1
d=∥xw−o∥xw−o
最后,即可得到光线的参数方程
x=o+td