注意: 的研究的目的是为了求出点在世界坐标系下的信息,也就是 P w \;P_w Pw 是要求出来的量。
以光心为原点的一组相似三角形(对顶角的),取它的 x o z \; xoz xoz 或者 y o z \; yoz yoz 投影上图(右):
成像过程: 空间中一点(以相机为坐标系看) P = [ X , Y , Z ] T ⟹ \; \boldsymbol {P=[X,Y,Z]^T} \\\qquad\qquad \Longrightarrow P=[X,Y,Z]T⟹ 投影到物理成像平面 P ′ = [ X ′ , Y ′ , Z ′ ] T 由上图, Z ′ = f ( 焦距 ) ⟹ \; \boldsymbol {P'=[X',Y',Z']^T}由上图,Z'=f(焦距)\\\qquad \qquad \Longrightarrow P′=[X′,Y′,Z′]T由上图,Z′=f(焦距)⟹缩放和光心平移到(像素坐标系) p ′ = [ u , v ] T \boldsymbol {\; p'=[u, v]}^T p′=[u,v]T
\; 本来推导出的相似三角形应该有负号(针孔模型–倒立),但是我们选择为正(将对顶角对称到同侧(同角)),如下:
由相似关系:
Z Z ′ 即 Z f = X X ′ = Y Y ′ \frac {Z}{Z'}即\frac {Z}{f}= \frac {X}{X'} = \frac {Y}{Y'} Z′Z即fZ=X′X=Y′Y
整理(这就是相机坐标系下点P到成像平面的步骤,对应上边第一个 ⟹ \Longrightarrow ⟹):
X ′ = f X Z , Y ′ = f Y Z ( 1 ) X'= f\frac {X}{Z},\quad Y'= f\frac {Y}{Z} \qquad\qquad\qquad(1) X′=fZX,Y′=fZY(1)
像素坐标系:和成像平面只差 缩放 \;\textbf {缩放}\;\; 缩放(X缩放 α \alpha α得到 u u\;\; uY缩放 β \beta β得到 v v\;\; v)和 光心(原点) \;\;\textbf {光心(原点)}\;\; 光心(原点)的平移 [ c x , c y ] T \;\; [c_x,c_y]^T [cx,cy]T,看不懂直接看下边式子:
{ u = α X ′ + c x = 带入式 1 α f X Z + c x = 记 a f 为 f x f x X Z + c x v = β Y ′ + c y = 带入式 1 β f Y Z + c x = 记 β f 为 f y f y Y Z + c y ⇓ 写成矩阵形式如下 ( 齐次坐标 ) ( u v 1 ) = 1 Z ( f x 0 c x 0 f x c y 0 0 1 ) ( X Y Z ) ≜ 1 Z K P ⇓ 更经常的我们会这么写 Z ( u v 1 ) = ( f x 0 c x 0 f x c y 0 0 1 ) ( X Y Z ) ≜ K P ( 2 ) \begin{cases} u=\alpha X'+c_x \overset{带入式1}{=} \alpha f\frac {X}{Z} +c_x \overset{记af为f_x} {=}f_x\frac {X}{Z}+c_x\\ v=\beta Y'+c_y \overset{带入式1}{=} \beta f\frac {Y}{Z} +c_x \overset{记\beta f为f_y} {=}f_y\frac {Y}{Z}+c_y \end{cases}\\ \quad \\ \Downarrow 写成矩阵形式如下(齐次坐标) \\ \quad \\\begin{pmatrix}u\\v\\1\end{pmatrix} = \frac{1}{Z} \begin{pmatrix}f_x&0&c_x \\0&f_x&c_y \\0&0&1 \end{pmatrix} \begin{pmatrix}X\\Y\\Z\end{pmatrix} \triangleq \frac {1}{Z}KP\\ \quad \\ \Downarrow 更经常的我们会这么写 \\ \quad \\Z\begin{pmatrix}u\\v\\1\end{pmatrix} = \color{red} \begin{pmatrix}f_x&0&c_x \\0&f_x&c_y \\0&0&1 \end{pmatrix}\color{blue} \begin{pmatrix}X\\Y\\Z\end{pmatrix} \triangleq \color{red} K\color{blue} P \color{b}\qquad\qquad (2) {u=αX′+cx=带入式1αfZX+cx=记af为fxfxZX+cxv=βY′+cy=带入式1βfZY+cx=记βf为fyfyZY+cy⇓写成矩阵形式如下(齐次坐标) uv1 =Z1 fx000fx0cxcy1 XYZ ≜Z1KP⇓更经常的我们会这么写Z uv1 = fx000fx0cxcy1 XYZ ≜KP(2)
\quad 上边的坐标 P \;P P 都是在相机坐标系下进行的,而相机是运动的,所以实际中我们需要世界坐标系中的点 P w \;P_w Pw 来进行这个过程。即:世界坐标 P w \;P_w Pw 到相机坐标(也就是上式可用的 P \;P P )的变换。
\quad 这种: 变换上节介绍过,就是 P w ⟹ 经过旋转 R 和平移 T 转换到 P \;P_w \overset{经过旋转R和平移T} {\Longrightarrow} 转换到P Pw⟹经过旋转R和平移T转换到P(相机坐标系) 的过程。如下:
R P w + t = P RP_w+t = P RPw+t=P
这其中求得 R \;R R 和 t \;t t就是相机的位姿,也是相机的外参(Camera Extrinsics),带入上式(2)有
Z P u v = Z [ u v 1 ] = K ( R P w + t ) = K T P w ⇓ 齐次坐标乘以系数表达相同含义,故 P u v = K T P w ZP_{uv} = Z\begin{bmatrix}u\\v\\1\end{bmatrix}=K(RP_w+t) = KTP_w \\ \Downarrow 齐次坐标乘以系数表达相同含义,故\\\quad \\P_{uv} = KTP_w ZPuv=Z uv1 =K(RPw+t)=KTPw⇓齐次坐标乘以系数表达相同含义,故Puv=KTPw
注意 : 这里的 P w 不再是 [ X , Y , Z ] , 为了保证它和 K 相乘,它做一个归一化处理 , P w = [ X Z , Y Z , 1 ] \color{red}注意: 这里的P_w 不再是[X,Y,Z], 为了保证它和K相乘,它做一个归一化处理,P_w = [\frac {X}{Z},\frac {Y}{Z},1] 注意:这里的Pw不再是[X,Y,Z],为了保证它和K相乘,它做一个归一化处理,Pw=[ZX,ZY,1],这个点所在的平面也成为归一化平面,经过这样处理的点可以看成一个二维的其次坐标,位于 z = 1 z=1 z=1平面上,故称为归一化坐标。
\quad
下面对以上内容进行总结:
\qquad 1. 透镜自身形状对光线传播的影响 ⟹ \Longrightarrow ⟹ 径向畸变(分为桶形畸变和枕形畸变)
\qquad 2. 这种畸变是径向对称的
\qquad 3. 将点看做极坐标下的 [ r , θ ] \;[r,\theta] [r,θ] 的话,径向畸变是 r \;r r 发生了畸变 δ r \;\delta r δr。
误差随着距离中心的距离而变化,可以利用这个特性纠正:
归一化平面上的点 [ x , y ] [x,y] [x,y] , 纠正完毕的点 [ x c , y c ] [x_c, y_c] [xc,yc], c c c 就是 c o r r e c t e d corrected corrected
{ x c = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) y c = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) \begin{cases} x_c = x(1+k_1r^2 + k_2r^4 + k_3r^6)\\\quad\\ y_c = y(1+k_1r^2 + k_2r^4 + k_3r^6) \end{cases} ⎩ ⎨ ⎧xc=x(1+k1r2+k2r4+k3r6)yc=y(1+k1r2+k2r4+k3r6)
中心区域畸变小 k 1 \;k_1 k1 起作用,畸变较大的用 k 2 \;k_2 k2 起作用
\qquad 1. 组装过程中透镜和成像平面不完全平行 ⟹ \Longrightarrow ⟹ 切向畸变
\qquad 3. 将点看做极坐标下的 [ r , θ ] \;[r,\theta] [r,θ] 的话,径向畸变是 θ \;\theta θ 发生了畸变 δ θ \;\delta \theta δθ。
切向畸变纠正如下:
{ x c = x + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) y c = x + p 1 ( r 2 + 2 y 2 ) + 2 p 2 x y \begin{cases} x_c = x+2p_1xy+p_2(r^2+2x^2)\\\quad\\ y_c = x+p_1(r^2+2y^2)+2p_2xy \end{cases} ⎩ ⎨ ⎧xc=x+2p1xy+p2(r2+2x2)yc=x+p1(r2+2y2)+2p2xy
合并径向和切向畸变:
{ x c = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) y c = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + p 1 ( r 2 + 2 y 2 ) + 2 p 2 x y ⇓ 归一化平面 ⇒ 像素平面 { u = f x ⋅ x c + c x v = f y ⋅ y c + c y \begin{cases} x_c = x(1+k_1r^2 + k_2r^4 + k_3r^6)+2p_1xy+p_2(r^2+2x^2)\\\quad\\ y_c = y(1+k_1r^2 + k_2r^4 + k_3r^6)+p_1(r^2+2y^2)+2p_2xy \end{cases}\\\quad\\\Downarrow 归一化平面\Rightarrow像素平面 \\\quad\\ \begin{cases} u = f_x\cdot x_c + c_x\\ v = f_y\cdot y_c + c_y \end{cases} ⎩ ⎨ ⎧xc=x(1+k1r2+k2r4+k3r6)+2p1xy+p2(r2+2x2)yc=y(1+k1r2+k2r4+k3r6)+p1(r2+2y2)+2p2xy⇓归一化平面⇒像素平面{u=fx⋅xc+cxv=fy⋅yc+cy
\quad 至此,用5个畸变项就完成了,实际中k甚至可以取一个。灵活搭配即可
\quad 上边的相机模型从光心到归一化平面连线上的所有点都可以投影到该像素(2式中的 Z Z Z值是齐次的)。因此只有确定了P的深度,才能知道位置信息。
z = f b d d = − u L + u R z=\frac {fb}{d}\qquad\qquad d=-u_L+u_R z=dfbd=−uL+uR
计算量大,计算量主要用于精准定位左右眼的匹配点。