大家好,又见面了,我是你们的朋友全栈君。
>>>文章索引<<<
相机标定(一)-原理及内参、外参
相机标定(二)-畸变校正,张正友标定法
相机标定(三)-相机成像模型
在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)。无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。因此,做好相机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在。
1 坐标系基础
理解四个坐标系是进行相机标定的基础,它们是:
- 图像像素坐标系
- 图像物理坐标系
- 相机坐标系
- 世界坐标系
1.1 图像像素坐标系、图像物理坐标系
- 图像像素坐标系:是一个二维直角坐标系,反映了相机CCD芯片中像素的排列情况。其原点 O O O位于图像的左上角, u u u、 v v v坐标轴分别余图像的两条边重合。像素坐标为离散值(0,1,2,…),以像素(pixel)为单位。
- 图像物理坐标系:为了将图像与物理空间相关联,需要将图像转换到物理坐标系下。原点 O O O位于图像中心(理想状态下),是相机光轴与像平面的交点(称为主点)。 X X X、 Y Y Y坐标轴分别与 u u u、 v v v轴平行。两坐标系实为平移关系,平移量为 ( u 0 , v 0 ) (u_0,v_0) (u0,v0)。
假设相机感光器件中单个像素的物理尺寸为 d X × d Y dX \times dY dX×dY,有:
{ u = x d X + u 0 v = y d Y + v 0 (1) \begin{cases} u=\frac{x}{dX}+u_0 \\ v=\frac{y}{dY}+v_0 \end{cases} \tag{1} {
u=dXx+u0v=dYy+v0(1)
把上式写成齐次形式,有:
[ u v 1 ] = [ 1 d X 0 u 0 0 1 d Y v 0 0 0 1 ] [ x y 1 ] (2) \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \begin{bmatrix} \frac{1}{dX} & 0 & u_0 \\ 0 & \frac{1}{dY} & v_0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} \tag{2} ⎣⎡uv1⎦⎤=⎣⎡dX1000dY10u0v01⎦⎤⎣⎡xy1⎦⎤(2)
公式(2)完成了图像物理坐标系到图像像素坐标系的转换。
1.2 相机坐标系
相机坐标系(camera coordinate) ( X c , Y c , Z c ) (X_c,Y_c,Z_c) (Xc,Yc,Zc),也是一个三维直角坐标系,原点位于镜头光心处, X c X_c Xc、 Y c Y_c Yc轴分别与像面的两边平行,z轴为镜头光轴,与像平面垂直。
点 P ( X c , Y c , Z c ) P(X_c,Y_c,Zc) P(Xc,Yc,Zc)为空间中任意一点,其通过投影中心的光线投影到图像平面上,在图像物理空间的投影点为 p ( x , y ) p(x,y) p(x,y),扩展到相机坐标系下其坐标为 ( x , y , f ) (x,y,f) (x,y,f)。根据相似三角形原理,有:
Z c f = X c x = Y c y ⇒ { x = f X c Z c y = f Y c Z c (3) \frac{Z_c}{f}=\frac{X_c}{x}=\frac{Y_c}{y} \Rightarrow \begin{cases} x=f\frac{X_c}{Z_c} \\ y=f\frac{Y_c}{Z_c} \end{cases} \tag{3} fZc=xXc=yYc⇒{
x=fZcXcy=fZcYc(3)
转为齐次形式为:
Z c [ x y 1 ] = [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ X c Y c Z c 1 ] (4) Z_c \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}= \begin{bmatrix} f & 0 & 0 & 0\\ 0 & f & 0 & 0\\ 0 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} X_c \\ Y_c \\ Z_c \\ 1 \end{bmatrix} \tag{4} Zc⎣⎡xy1⎦⎤=⎣⎡f000f0001000⎦⎤⎣⎢⎢⎡XcYcZc1⎦⎥⎥⎤(4)
公式(4)完成了相机坐标系到图像物理坐标系的转换。
1.3 世界坐标系
世界坐标系(world coordinate) ( X w , Y w , Z w ) (X_w,Y_w,Z_w) (Xw,Yw,Zw),也称为测量坐标系、参考坐标系,是一个三维直角坐标系,以其为基准可以描述相机和待测物体的空间位置。世界坐标系的位置可以根据实际情况自由确定。
世界坐标系到相机坐标系的变换,实际上就是一个刚体变换,可以由旋转矩阵 R R R和平移矢量 t t t来表示。设 ( X w , Y w , Z w ) T (X_w,Y_w,Z_w)^T (Xw,Yw,Zw)T表示世界坐标系中的点, ( X c , Y c , Z c ) T (X_c,Y_c,Z_c)^T (Xc,Yc,Zc)T表示相机坐标系中的点,则它们之间的转换可由下式表示:
[ X c Y c Z c ] = R [ X w Y w Z w ] + t (5) \begin{bmatrix} X_c \\ Y_c \\ Z_c \end{bmatrix}= R \begin{bmatrix} X_w \\ Y_w \\ Z_w \end{bmatrix} +t \tag{5} ⎣⎡XcYcZc⎦⎤=R⎣⎡XwYwZw⎦⎤+t(5)
即:
[ X c Y c Z c 1 ] = [ R 3 × 3 t 3 × 1 0 1 × 3 1 1 × 1 ] [ X w Y w Z w 1 ] (6) \begin{bmatrix} X_c \\ Y_c \\ Z_c \\ 1 \end{bmatrix}= \begin{bmatrix} R_{3\times3} & t_{3\times1}\\ 0_{1\times3} & 1_{1\times1} \end{bmatrix} \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix} \tag{6} ⎣⎢⎢⎡XcYcZc1⎦⎥⎥⎤=[R3×301×3t3×111×1]⎣⎢⎢⎡XwYwZw1⎦⎥⎥⎤(6)
公式(6)完成了世界坐标系到相机坐标系的转换。
1.4 世界坐标系到像素坐标系
联立上面的(2)、(4)、(6)式,可以得到世界坐标系与像素坐标系之间的转换关系,有:
Z c [ u v 1 ] = [ 1 d X 0 u 0 0 1 d Y v 0 0 0 1 ] [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ R t 0 T 1 ] [ X w Y w Z w 1 ] = M 1 M 2 [ X w Y w Z w 1 ] = M [ X w Y w Z w 1 ] (7) \begin{aligned} Z_c \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} &= \begin{bmatrix} \frac{1}{dX} & 0 & u_0 \\ 0 & \frac{1}{dY} & v_0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} f & 0 & 0 & 0\\ 0 & f & 0 & 0\\ 0 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} R & t\\ 0^T & 1 \end{bmatrix} \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix} \\ &=M_1M_2 \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix} \\ &=M \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix} \end{aligned} \tag{7} Zc⎣⎡uv1⎦⎤=⎣⎡dX1000dY10u0v01⎦⎤⎣⎡f000f0001000⎦⎤[R0Tt1]⎣⎢⎢⎡XwYwZw1⎦⎥⎥⎤=M1M2⎣⎢⎢⎡XwYwZw1⎦⎥⎥⎤=M⎣⎢⎢⎡XwYwZw1⎦⎥⎥⎤(7)
M 1 = [ 1 d X 0 u 0 0 1 d Y v 0 0 0 1 ] [ f 0 0 0 0 f 0 0 0 0 1 0 ] = [ f x 0 u 0 0 0 f y v 0 0 0 0 1 0 ] (8) M_1= \begin{bmatrix} \frac{1}{dX} & 0 & u_0 \\ 0 & \frac{1}{dY} & v_0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} f & 0 & 0 & 0\\ 0 & f & 0 & 0\\ 0 & 0 & 1 & 0 \end{bmatrix}= \begin{bmatrix} f_x & 0 & u_0 & 0 \\ 0 & f_y & v_0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} \tag{8} M1=⎣⎡dX1000dY10u0v01⎦⎤⎣⎡f000f0001000⎦⎤=⎣⎡fx000fy0u0v01000⎦⎤(8)
M 2 = [ R t 0 T 1 ] (9) M_2= \begin{bmatrix} R & t\\ 0^T & 1 \end{bmatrix} \tag{9} M2=[R0Tt1](9)
其中:
- M 1 M_1 M1称为相机的内部参数矩阵
- M 2 M_2 M2称为相机的外部参数矩阵
- M M M称为投影矩阵
- f x f_x fx、 f y f_y fy分别为相机在x、y轴方向上的归一化焦距,单位为像素,具体解释可以参考这里
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/140391.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...