透视变换原理、相机成像、灭点

相机成像

设世界坐标为 ( X w , Y w , Z w ) (X_w,Y_w,Z_w) (Xw,Yw,Zw),相机坐标为 ( X c , Y c , Z c ) (X_c,Y_c,Z_c) (Xc,Yc,Zc),则世界坐标系和相机坐标系需要一个矩阵变换R以及一个位移矩阵T,公式如下:
[ X c Y c Z c 1 ] = [ R T 0 1 ] [ X w Y w Z w 1 ] \begin{bmatrix} X_c\\Y_c\\Z_c\\1 \end{bmatrix} = \begin{bmatrix} R & T\\0 & 1 \end{bmatrix} \begin{bmatrix} X_w\\Y_w\\Z_w\\1 \end{bmatrix} XcYcZc1=[R0T1]XwYwZw1
透视变换原理、相机成像、灭点_第1张图片

相机坐标和平面坐标系根据三角形相似原理:

Z c [ x y 1 ] = [ f 0 0 0 f 0 0 0 1 ] [ X c Y c Z c ] Z_c \begin{bmatrix} x\\ y \\ 1 \end{bmatrix} = \begin{bmatrix} f & 0 & 0\\ 0 & f & 0 \\0 & 0 & 1 \end{bmatrix} \begin{bmatrix} X_c\\Y_c\\Z_c\\ \end{bmatrix} Zcxy1=f000f0001XcYcZc

透视变换原理、相机成像、灭点_第2张图片

从平面坐标系到图像坐标系:

设(u,v)代表图像坐标系坐标,设每一个像素的物理尺寸为dx、dy,则有:
u = x / d x + u 0 v = y / d y + v 0 u 0 和 v 0 图 像 长 宽 的 一 半 u= x/dx + u_0 \\ v= y/dy + v_0 \\ u_0和v_0 图像长宽的一半 u=x/dx+u0v=y/dy+v0u0v0
所有等式综合起来得到图像上点坐标(u,v)与世界坐标系的关系
[ u v 1 ] = 1 Z c A R [ X w Y w Z w ] \begin{bmatrix} u\\v \\1 \end{bmatrix} = \frac{1}{Z_c}AR \begin{bmatrix} X_w\\Y_w\\Z_w \end{bmatrix} uv1=Zc1ARXwYwZw
将前面三个数表示为一个9x9矩阵,然后化简:
u = m 0 , 0 X w + m 0 , 1 Y w + m 0 , 2 Z w m 2 , 0 X w + m 2 , 1 Y w + m 2 , 2 Z w v = m 1 , 0 X w + m 1 , 1 Y w + m 1 , 2 Z w m 2 , 0 X w + m 2 , 1 Y w + m 2 , 2 Z w u = \frac{m_{0,0}X_w + m_{0,1}Y_w + m_{0,2}Z_w}{m_{2,0}X_w + m_{2,1}Y_w + m_{2,2}Z_w} \\ v = \frac{m_{1,0}X_w + m_{1,1}Y_w + m_{1,2}Z_w}{m_{2,0}X_w + m_{2,1}Y_w + m_{2,2}Z_w} \\ u=m2,0Xw+m2,1Yw+m2,2Zwm0,0Xw+m0,1Yw+m0,2Zwv=m2,0Xw+m2,1Yw+m2,2Zwm1,0Xw+m1,1Yw+m1,2Zw

对于世界坐标系下平行的两条直线,设方向为 D { d x , d y , d y } D\{d_{x},d_{y},d_{y}\} D{dx,dy,dy}则给定直线上一点 A ( a x , a y , a z ) A(a_x,a_y,a_z) A(ax,ay,az),该直线上任意一点表示为 X ( λ ) = A + λ D X(\lambda)= A + \lambda D X(λ)=A+λD,带入上式得:
u = m 0 , 0 ( a x + λ d x ) + m 0 , 1 ( a y + λ d y ) + m 0 , 2 ( a z + λ d z ) m 2 , 0 ( a x + λ d x ) + m 2 , 1 ( a y + λ d y ) + m 2 , 2 ( a z + λ d z ) v = m 1 , 0 ( a x + λ d x ) + m 1 , 1 ( a y + λ d y ) + m 1 , 2 ( a z + λ d z ) m 2 , 0 ( a x + λ d x ) + m 2 , 1 ( a y + λ d y ) + m 2 , 2 ( a z + λ d z ) u = \frac{m_{0,0}(a_x+\lambda d_x) + m_{0,1}(a_y+\lambda d_y) + m_{0,2}(a_z+\lambda d_z)}{m_{2,0}(a_x+\lambda d_x) + m_{2,1}(a_y+\lambda d_y) + m_{2,2}(a_z+\lambda d_z)} \\ v = \frac{m_{1,0}(a_x+\lambda d_x) + m_{1,1}(a_y+\lambda d_y) + m_{1,2}(a_z+\lambda d_z)}{m_{2,0}(a_x+\lambda d_x) + m_{2,1}(a_y+\lambda d_y) + m_{2,2}(a_z+\lambda d_z)}\\ u=m2,0(ax+λdx)+m2,1(ay+λdy)+m2,2(az+λdz)m0,0(ax+λdx)+m0,1(ay+λdy)+m0,2(az+λdz)v=m2,0(ax+λdx)+m2,1(ay+λdy)+m2,2(az+λdz)m1,0(ax+λdx)+m1,1(ay+λdy)+m1,2(az+λdz)
当世界坐标系下 X ( λ ) 中 λ X(\lambda)中\lambda X(λ)λ趋于无穷大时,可以得到极限:
u = m 0 , 0 d x + m 0 , 1 d y + m 0 , 2 d z m 2 , 0 d x + m 2 , 1 d y + m 2 , 2 d z v = m 1 , 0 d x + m 1 , 1 d y + m 1 , 2 d z m 2 , 0 d x + m 2 , 1 d y + m 2 , 2 d z u = \frac{m_{0,0}d_x + m_{0,1}d_y + m_{0,2}d_z}{m_{2,0}d_x + m_{2,1}d_y + m_{2,2} d_z} \\ v = \frac{m_{1,0}d_x + m_{1,1}d_y + m_{1,2}d_z}{m_{2,0}d_x + m_{2,1}d_y + m_{2,2} d_z}\\ u=m2,0dx+m2,1dy+m2,2dzm0,0dx+m0,1dy+m0,2dzv=m2,0dx+m2,1dy+m2,2dzm1,0dx+m1,1dy+m1,2dz
所以对于三维世界平行线上无穷远的点来说,通过相机映射后,两条平行线最终会相交于一点,该点为图像的灭点。

参考博客

你可能感兴趣的:(图像处理,计算机视觉,矩阵,线性代数)