本文回答两个问题:
Σ 2 D = J W Σ 3 D W T J T \Sigma_{2D}=J W \Sigma_{3D} W^{T} J^{T} Σ2D=JWΣ3DWTJT这个公式是怎么来的?
J J J的公式是如何推导出来的呢?
J = ( f x z 0 − f x ⋅ x z 2 0 f y z − f y ⋅ y z 2 0 0 0 ) J=\left(\begin{matrix} \frac{f_x}{z} & 0 & -\frac{f_x \cdot x}{z^2} \\ 0 & \frac{f_y}{z} & -\frac{f_y \cdot y}{z^2} \\ 0 & 0 & 0 \end{matrix}\right) J= zfx000zfy0−z2fx⋅x−z2fy⋅y0
射线空间和相机空间
-
射线空间坐标系 x = ( x 0 , x 1 , x 2 ) T \mathbf{x}=(x_0, x_1, x_2)^T x=(x0,x1,x2)T:
- ( x 0 , x 1 ) (x_0, x_1) (x0,x1) 表示投影平面上的一个点
- x 2 x_2 x2 表示从投影中心到视线上点的欧几里得距离
-
相机空间坐标系 u = ( u 0 , u 1 , u 2 ) T = ( x , y , z ) T \mathbf{u}=(u_0, u_1, u_2)^T= (x, y, z)^T u=(u0,u1,u2)T=(x,y,z)T:
- 原点位于投影中心
- 投影平面是 z = f z = f z=f 平面
两个坐标系之间的投影变换公式:
从相机空间到射线空间 m ( u ) \mathbf{m}(\mathbf{u}) m(u):
( x 0 x 1 x 2 ) = m ( u ) = ( u 0 / u 2 u 1 / u 2 ∥ ( u 0 , u 1 , u 2 ) T ∥ ) \left(\begin{array}{c} x_0 \\ x_1 \\ x_2 \end{array}\right) =\mathbf{m}(\mathbf{u})= \left(\begin{array}{c} u_0 / u_2 \\ u_1 / u_2 \\ \|(u_0, u_1, u_2)^T\| \end{array}\right)
x0x1x2
=m(u)=
u0/u2u1/u2∥(u0,u1,u2)T∥
从射线空间到相机空间 m − 1 ( x ) \mathbf{m}^{-1}(\mathbf{x}) m−1(x):
( u 0 u 1 u 2 ) = m − 1 ( u ) = ( x 0 / l ⋅ x 2 x 1 / l ⋅ x 2 f / l ⋅ x 2 ) \left(\begin{array}{c} u_0 \\ u_1 \\ u_2 \end{array}\right) =\mathbf{m}^{-1}(\mathbf{u})= \left(\begin{array}{c} x_0 / l \cdot x_2 \\ x_1 / l \cdot x_2 \\ f / l \cdot x_2 \end{array}\right)
u0u1u2
=m−1(u)=
x0/l⋅x2x1/l⋅x2f/l⋅x2
其中 l = ∥ ( x 0 , x 1 , f ) T ∥ l = \|(x_0, x_1, f)^T\| l=∥(x0,x1,f)T∥
这样的话,在射线空间中的 ( x 0 , x 1 , x 2 ) (x_0, x_1, x_2) (x0,x1,x2