观察矩阵推导

观察矩阵推导

顾名思义,观察矩阵的作用就是将一个点从世界坐标系转换到观察坐标系,这个点的实际位置并不发生变化。参考上一篇文章,问题就转化成了,假设任意点 p ⃗ \vec p p ,它在世界坐标系 W W W下的坐标为 ( x , y , z ) (x, y, z) (x,y,z),求在观察坐标系 V V V下的坐标 ( x ′ , y ′ , z ′ ) (x', y', z') (x,y,z)。套用公式,可得:
p ⃗ = x ′ i ⃗ V + y ′ j ⃗ V + z ′ k ⃗ V + o ⃗ V = x i ⃗ W + y j ⃗ W + z k ⃗ W + o ⃗ W \vec p = x'\vec i_V + y'\vec j_V + z'\vec k_V + \vec o_V = x\vec i_W + y\vec j_W + z\vec k_W + \vec o_W p =xi V+yj V+zk V+o V=xi W+yj W+zk W+o W
其中 o o o为坐标系的原点坐标。将上述基向量看作世界坐标系 W W W下的向量,可以写成矩阵形式:
[ x , y , z , 1 ] = [ x ′ , y ′ , z ′ , 1 ] ⋅ [ i ⃗ V 0 j ⃗ V 0 k ⃗ V 0 o ⃗ V 1 ] [x,y,z,1] = [x',y',z', 1] \cdot \begin{bmatrix} \vec i_V & 0 \\ \vec j_V & 0 \\ \vec k_V & 0 \\ \vec o_V & 1 \end{bmatrix} [x,y,z,1]=[x,y,z,1]i Vj Vk Vo V0001
其中, i ⃗ V , j ⃗ V , k ⃗ V , o ⃗ V \vec i_V,\vec j_V,\vec k_V, \vec o_V i Vj Vk V,o V是观察坐标系 V V V的基向量和原点在世界坐标系 W W W的表示。一般来说,建立观察矩阵提供的参数是摄像机的世界坐标 ( Q x , Q y , Q z ) (Q_x, Q_y, Q_z) (Qx,Qy,Qz),摄像机观察的目标点的世界坐标 ( T x , T y , T z ) (T_x, T_y, T_z) (Tx,Ty,Tz),代表世界up方向的向量 ( U x , U y , U z ) (U_x, U_y, U_z) (Ux,Uy,Uz)。分别求出上面矩阵的各个向量:
o ⃗ V = ( Q x , Q y , Q z ) \vec o_V = (Q_x, Q_y, Q_z) o V=(Qx,Qy,Qz)

k ⃗ V = ( T x − Q x , T y − Q y , T z − Q Z ) \vec k_V = (T_x - Q_x, T_y - Q_y, T_z - Q_Z) k V=(TxQx,TyQy,TzQZ)

i ⃗ V = u p ⃗ × k ⃗ v \vec i_V = \vec{up} \times \vec k_v i V=up ×k v

j ⃗ v = k ⃗ v × i ⃗ v \vec j_v = \vec k_v \times \vec i_v j v=k v×i v

注意要将它们进行归一化。归一化之后,可以得到
[ x ′ , y ′ , z ′ , 1 ] = [ x , y , z , 1 ] ⋅ [ i ⃗ V 0 j ⃗ V 0 k ⃗ V 0 o ⃗ V 1 ] − 1 = [ x , y , z , 1 ] ⋅ ( [ i ⃗ V 0 j ⃗ V 0 k ⃗ V 0 0 1 ] ⋅ [ 1 0 0 0 0 1 0 0 0 0 1 0 o ⃗ V 1 ] ) − 1 = [ x , y , z , 1 ] ⋅ ( [ 1 0 0 0 0 1 0 0 0 0 1 0 − o ⃗ V 1 ] ⋅ [ i ⃗ V j ⃗ V k ⃗ V 0 0 0 0 1 ] ) = [ x , y , z , 1 ] ⋅ [ i x j x k x 0 i y j y k y 0 i z j z k z 0 − o ⃗ V ⋅ i ⃗ V − o ⃗ V ⋅ j ⃗ V − o ⃗ V ⋅ k ⃗ V 1 ] [x',y',z',1] = [x,y,z,1] \cdot \begin{bmatrix} \vec i_V & 0 \\ \vec j_V & 0 \\ \vec k_V & 0 \\ \vec o_V & 1 \end{bmatrix}^{-1} \\ = [x,y,z,1] \cdot (\begin{bmatrix} \vec i_V & 0 \\ \vec j_V & 0 \\ \vec k_V & 0 \\ 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0\\ & \vec o_V & & 1 \end{bmatrix})^{-1} \\ = [x,y,z,1] \cdot (\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0\\ & -\vec o_V & & 1 \end{bmatrix} \cdot \begin{bmatrix} \vec i_V & \vec j_V & \vec k_V & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}) \\ = [x,y,z,1] \cdot \begin{bmatrix} i_x & j_x & k_x & 0 \\ i_y & j_y & k_y & 0 \\ i_z & j_z & k_z & 0\\ -\vec o_V \cdot \vec i_V & -\vec o_V \cdot \vec j_V & -\vec o_V \cdot \vec k_V & 1 \end{bmatrix} [x,y,z,1]=[x,y,z,1]i Vj Vk Vo V00011=[x,y,z,1](i Vj Vk V00001100010o V0010001)1=[x,y,z,1](100010o V0010001[i V0j V0k V001])=[x,y,z,1]ixiyizo Vi Vjxjyjzo Vj Vkxkykzo Vk V0001
这就是我们最终要求的观察矩阵。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值