由摄像机透视投影矩阵到单映性矩阵的推倒过程

单映性矩阵是一个3*3矩阵,描述了摄影几何中平面到平面的映射,其自由度为8,由九个元素组成(为什么是9个元素,8个自由度,下文求解过程会详细说明),通常令最后一个元素为1或者使其F范数为1,该矩阵可将无穷远点投射于有限处,即空间中平行线在图像上相交于有限处.其表达式如下:

                                                                     \large \begin{bmatrix} x1\\ y1\\ 1\\ \end{bmatrix} =\begin{bmatrix} h11 &h12 &h13 \\ h21& h22&h23\\ h31&h32&h33\\ \end{bmatrix}\begin{bmatrix} x2\\ y2 \\ 1\\ \end{bmatrix} \left ( 1 \right )  

其中,单映性矩阵为:

 \large H=\begin{bmatrix} h11&h12 &h13 \\ h21& h22 &h23 \\ h31& h32 &h33 \end{bmatrix}\left ( 2 \right ) 

单映性矩阵一般应用在全景拼接上,所拍摄的全景是相机绕其光心所得,若不满足相机绕光心旋转这一条件,那么全景拼接的效果很差.另外,当H的最后一行为[0,0,1]时,则不能将无穷远点投射于有限处,称为仿射变换(Affine),自由度为6.

图像满足单映性矩阵的条件:当相机拍摄的是平面物体,或者相机绕其光心旋转拍摄,那么图像两帧之间满足单映性条件.

那么如何从符合针孔模型的相机透视投影矩阵推倒出单映性矩阵呢?

在回答这个问题之前,让我们再回顾一下相机的成像模型.一般情况下,相机的数学的模型都符合针孔模型,因此相机透视投影矩阵一般为(世界坐标系到计算机图像坐标系的转换关系):

\large s\begin{bmatrix} u\\ v\\ 1 \end{bmatrix}=\begin{bmatrix} 1/d_{x}&0 &u_{0}\\ 0& 1/d_{y} &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}=\begin{bmatrix} a_{x} & 0 & u_{0} &0 \\ 0& a_{y} & v_{0} & 0\\ 0 & 0 & 1 &0 \\ \end{bmatrix}\begin{bmatrix} R &T \\ 0^{T}&1 \end{bmatrix}=M_{1}M_{2}P_{w} \left ( 3 \right )

其中:

(1)s为缩放因子;

(2)dx,dy表示像素的物理长度一般为毫米单位;

(3)f(mm)为物理焦距;

(4)u0,v0为光轴和图像的交点,在理想情况下为图像中心,比如图像分辨率为640*480,那么u0=320,v0=240

(5)R为3*3的旋转矩阵,T为3*1的平移矩阵;

(6)Pw为世界坐标系中一点;

当相机绕光心旋转时,假设相机之间的旋转矩阵为R(此时没有平移),那么相机坐标系之间的转换关系为:

                                                                \large \begin{bmatrix} x1\\ y1\\ z1\\ 1 \end{bmatrix}=\begin{bmatrix} R &T \\ 0^{T}&1 \end{bmatrix}\begin{bmatrix} x2\\ y2\\ z2\\ 1 \end{bmatrix}=R_T\begin{bmatrix} x2\\ y2\\ z2\\ 1 \end{bmatrix}\left ( 4 \right )

其中:

\large T=\begin{bmatrix} 0\\ 0\\ 0 \end{bmatrix}   ,  \large R_T=\begin{bmatrix} R &T \\ 0^{T}& 1 \end{bmatrix}

因此上面表达式等价于:

                                            \large \begin{bmatrix} x1\\ y1\\ z1 \end{bmatrix}=R\begin{bmatrix} x2\\ y2\\ z2 \end{bmatrix}\left ( 5 \right )

相机坐标系到计算机图像坐标系之间的转换为:

\large z\begin{bmatrix} u\\ v\\ 1 \end{bmatrix}=\begin{bmatrix} f/d_{x} &0 & u_{0}\\ 0& f/d_{y}&v_{0} \\ 0&0 &1 \end{bmatrix}\begin{bmatrix} x\\ y\\ z \end{bmatrix}\left ( 6 \right )

所以:

\large z1\begin{bmatrix} u1\\ v1\\ 1 \end{bmatrix}=\begin{bmatrix} f/d_{x} &0 & u_{0}\\ 0& f/d_{y}&v_{0} \\ 0&0 &1 \end{bmatrix}\begin{bmatrix} x1\\ y1\\ z1 \end{bmatrix}=M\begin{bmatrix} x1\\ y1\\ z1 \end{bmatrix}\left ( 7 \right )

\large z2\begin{bmatrix} u2\\ v2\\ 1 \end{bmatrix}=\begin{bmatrix} f/d_{x} &0 & u_{0}\\ 0& f/d_{y}&v_{0} \\ 0&0 &1 \end{bmatrix}\begin{bmatrix} x2\\ y2\\ z2 \end{bmatrix}=M\begin{bmatrix} x2\\ y2\\ z2 \end{bmatrix}\left ( 8 \right )

由(5)(7)(8)得:

\small z1\begin{bmatrix} u1\\ v1\\ 1 \end{bmatrix}=z2*M*R*M^{-1}\begin{bmatrix} u2\\ v2\\ 1 \end{bmatrix}\rightarrow \begin{bmatrix} u1\\ v1\\ 1 \end{bmatrix}=\frac{z2}{z1}*M*R*M^{-1}\begin{bmatrix} u2\\ v2\\ 1 \end{bmatrix}\rightarrow \begin{bmatrix} u1\\ v1\\ 1 \end{bmatrix}=H\begin{bmatrix} u2\\ v2\\ 1 \end{bmatrix}\left ( 9 \right )

至此,推倒完毕.

下面用几何图像形象说明,绕相机中心可以求得单映性矩阵.

上图中O为投影中心,P为世界坐标系中一个物点,P1,P2为P在像平面中的点,由图可知,已知像平面1,2的关系,把像平面统一到同一个坐标系下,可以得到两个平面方程s1和s2,就可以求得直线OP1和像平面2的交点P2.

那有些同学可能要问了,为什么一定要让相机绕光心旋转才能满足单映性条件?因为如果相机两帧之间存在平移,那么图像之间的映射跟深度有关.在这里我也一并给出推倒过程.

我们对(6)进行一个等价变形得到:

\large z\begin{bmatrix} u\\ v\\ 1\\ 1/z \end{bmatrix}=\begin{bmatrix} f/d_{x} & 0& u_{0}& 0\\ 0& f/d_{y} & v_{0} &0 \\ 0&0 &1 &0 \\ 0& 0 &0 &1 \end{bmatrix}\begin{bmatrix} x\\ y\\ z\\ 1 \end{bmatrix}\left ( 10 \right )

那么同理(7)(8)等价变形得到:

\large z1\begin{bmatrix} u1\\ v1\\ 1\\ 1/z1 \end{bmatrix}=\begin{bmatrix} f/d_{x} & 0& u_{0}& 0\\ 0& f/d_{y} & v_{0} &0 \\ 0&0 &1 &0 \\ 0& 0 &0 &1 \end{bmatrix}\begin{bmatrix} x1\\ y1\\ z1\\ 1 \end{bmatrix}=M\begin{bmatrix} x1\\ y1\\ z1\\ 1 \end{bmatrix}\left ( 11 \right )

\large z2\begin{bmatrix} u2\\ v2\\ 1\\ 1/z2 \end{bmatrix}=\begin{bmatrix} f/d_{x} & 0& u_{0}& 0\\ 0& f/d_{y} & v_{0} &0 \\ 0&0 &1 &0 \\ 0& 0 &0 &1 \end{bmatrix}\begin{bmatrix} x2\\ y2\\ z2\\ 1 \end{bmatrix}=M\begin{bmatrix} x2\\ y2\\ z2\\ 1 \end{bmatrix}\left ( 12 \right )

由(4)(11)(12)得:

\large \begin{bmatrix} u1\\ v1\\ 1\\ 1/z1 \end{bmatrix}=\frac{z2}{z1}*M*R_T*M^{-1}\begin{bmatrix} u2\\ v2\\ 1\\ 1/z2 \end{bmatrix}=W\begin{bmatrix} u2\\ v2\\ 1\\ 1/z2 \end{bmatrix}\left ( 13 \right )

其中

\frac{z1}{z2}\approx 1

\large W=\begin{bmatrix} w_{11}& w_{12} & w_{13} & w_{14}\\ w_{21}& w_{22}& w_{23} & w_{24}\\ w_{31}& w_{32}& w_{33}& w_{34}\\ w_{41}& w_{42}& w_{43}& w_{44} \end{bmatrix}

由(13)得:

\large u1=w_{11}*u2+w_{12}*v2+w_{13}+w_{14}*\frac{1}{z2}

\large v1=w_{21}*u2+w_{22}*v2+w_{23}+w_{24}*\frac{1}{z2}

可见,u1,v1依赖于z2.

同样这里依然用几何图形来直观的解释为什么不绕相机中心旋转(也即相机投影中心存在偏移),不能求得单映性矩阵.如下图所示:

O1和O2是两个相机的投影中心,S1和S2为其对应的像平面,S21为S2的延长面,P为世界坐标系中的一物点,其在S1和S2以及S21上的投影分别为P1,P2,P3,从几何上很直观的可以看到,已知S1,S2,直线O1P1,只能求得P3,无法求得P2,所以无法获得单映射性矩阵.

以上通过数学推倒以及几何上的直观解释,说明了单映性矩阵的适用条件,若有不对的地方或者不足的地方,欢迎大家批评指正.

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
透视投影变换矩阵的推导过程如下: 假设有一个三维点 $(X,Y,Z)$,它在相机坐标系中的坐标为 $(X_c,Y_c,Z_c)$。相机坐标系的原点为相机位置,$Z_c$ 轴指向相机朝向的反方向,$X_c$ 和 $Y_c$ 轴分别与相机的右方向和下方向对齐。 为了把相机坐标系中的点映射到图像平面上,我们需要进行透视投影变换。首先,我们将相机坐标系中的点转换为齐次坐标 $(X_c,Y_c,Z_c,1)$。然后,我们将它乘以一个投影矩阵 $P$,得到一个新的齐次坐标 $(u,v,w,1)$: $$ \begin{bmatrix} u \\ v \\ w \\ 1 \\ \end{bmatrix} = P \cdot \begin{bmatrix} X_c \\ Y_c \\ Z_c \\ 1 \\ \end{bmatrix} $$ 其中,$u$ 和 $v$ 分别表示图像平面上的坐标,$w$ 用来进行透视除法,保证 $u$ 和 $v$ 的值在图像平面上。 投影矩阵 $P$ 可以分解为相机内参矩阵 $K$ 和相机外参矩阵 $[R|t]$ 的乘积: $$ P = K [R|t] $$ 其中,$K$ 是一个 $3 \times 3$ 的矩阵,包含了相机的内部参数,如焦距、主点等。$[R|t]$ 是一个 $3 \times 4$ 的矩阵,包含了相机的外部参数,如相机的旋转和平移。 为了推导 $P$ 的具体形式,我们可以先考虑一个简单的情况:相机坐标系的原点与图像平面重合,且相机的朝向与图像平面平行。这种情况下,投影矩阵可以表示为: $$ P = \begin{bmatrix} f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} $$ 其中,$f$ 是焦距,表示相机到图像平面的距离。 当相机坐标系的原点和图像平面不重合时,我们可以使用相机外参矩阵 $[R|t]$ 来把相机坐标系的原点变换到图像平面上。具体来说,我们可以将相机坐标系的原点变换为 $(X_c',Y_c',Z_c')$,其中 $(X_c',Y_c',0)$ 是图像平面上的点。这个变换可以表示为: $$ \begin{bmatrix} X_c' \\ Y_c' \\ Z_c' \\ 1 \\ \end{bmatrix} = [R|t] \cdot \begin{bmatrix} 0 \\ 0 \\ 0 \\ 1 \\ \end{bmatrix} $$ 然后,我们可以把 $(X,Y,Z)$ 变换为 $(X',Y',Z')$,其中 $(X',Y')$ 是图像平面上的坐标。这个变换可以表示为: $$ \begin{bmatrix} X' \\ Y' \\ Z' \\ 1 \\ \end{bmatrix} = [R|t] \cdot \begin{bmatrix} X \\ Y \\ Z \\ 1 \\ \end{bmatrix} $$ 最后,我们可以将 $(X',Y',Z')$ 投影到图像平面上,得到一个新的齐次坐标 $(u,v,w,1)$。这个投影可以表示为: $$ \begin{bmatrix} u \\ v \\ w \\ 1 \\ \end{bmatrix} = K \cdot \begin{bmatrix} X'/Z' \\ Y'/Z' \\ 1 \\ \end{bmatrix} $$ 将以上三个变换组合起来,我们可以得到透视投影变换矩阵的形式: $$ P = K [R|t] = \begin{bmatrix} f_x & 0 & c_x & 0 \\ 0 & f_y & c_y & 0 \\ 0 & 0 & 1 & 0 \\ \end{bmatrix} \begin{bmatrix} r_{11} & r_{12} & r_{13} & t_1 \\ r_{21} & r_{22} & r_{23} & t_2 \\ r_{31} & r_{32} & r_{33} & t_3 \\ \end{bmatrix} $$ 其中,$f_x$ 和 $f_y$ 是 $K$ 矩阵的对角线元素,分别表示 $x$ 和 $y$ 方向上的焦距;$c_x$ 和 $c_y$ 是 $K$ 矩阵的中心点,表示图像平面上的主点;$r_{ij}$ 和 $t_i$ 是 $[R|t]$ 矩阵的元素,表示相机的旋转和平移。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值