相对定向中的tij到底是什么

之前一直搞不清公式里各种 \(t\) 的实际含义,最近仔细推导了一遍,记录一下。

基本公式

  • 世界坐标系 -> 相机坐标系 \[ \begin{equation} \begin{bmatrix}X_c\\Y_c\\Z_c \end{bmatrix} = R\cdot \begin{bmatrix}X_w\\Y_w\\Z_w\end{bmatrix} +t \end{equation} \] 写成齐次化的形式: \[ \begin{equation} \begin{bmatrix}X_c\\Y_c\\Z_c\\1 \end{bmatrix} = \begin{bmatrix} R&t\\ 0&1 \end{bmatrix} \cdot \begin{bmatrix}X_w\\Y_w\\Z_w\\1\end{bmatrix} \end{equation} \] 其中 \(R\)global rotation matrix 全局旋转矩阵,\(t\)global translation 全局平移量。这里的 \(R\) 很好理解,其将世界坐标系旋转到了相机坐标系下,而 \(t\) 的含义为:相机坐标系下世界坐标系原点的位置,比较难懂。怎么理解呢,可以脑补一下,由于 \(R\) 正交矩阵的性质,坐标系旋转时,原点位置不变,向量长度不变,也就是旋转后的世界坐标系和相机坐标系完全平行,只差一个平移量 \(t\),这个平移量就是相机坐标系下世界坐标系原点的坐标。

    摄影测量中外方位元素中的线元素,我们通常用 \(C\) 来表示,其含义为:世界坐标系下相机坐标系原点的位置,也就是世界坐标系下相机的位置。 这样一来,两者的转换公式也就一目了然: \[ \begin{equation} t=-R\cdot C \end{equation} \]

    \[ \begin{equation} C=-R^T\cdot t \end{equation} \]

  • 相机坐标系 -> 相机坐标系 \[ \begin{equation} \begin{bmatrix}X_j\\ Y_j\\ Z_j \end{bmatrix} = R_{ij}\cdot \begin{bmatrix}X_i\\ Y_i\\ Z_i \end{bmatrix}+ t_{ij} \end{equation} \] 写成齐次化的形式: \[ \begin{equation} \begin{bmatrix}X_j\\ Y_j\\ Z_j\\1 \end{bmatrix} = \begin{bmatrix} R_{ij}&t_{ij}\\ 0&1 \end{bmatrix} \cdot \begin{bmatrix}X_i\\ Y_i\\ Z_i\\1 \end{bmatrix} \end{equation} \] 其中 \(R_{ij}\)relative rotation matrix 相对旋转矩阵,\(t_{ij}\)relative translation 相对平移量。和世界坐标系 -> 相机坐标系类似,\(R_{ij}\) 表示将 \(i\) 坐标系旋转至 \(j\) 坐标系,\(t_{ij}\) 表示 \(j\) 相机坐标系下 \(i\) 相机坐标系原点的位置

    同样的,我们常说的相对定向线元素 \(C_{ij}\) 表示 \(i\) 相机坐标系下 \(j\) 相机坐标系原点的位置。两者的转换公式为: \[ \begin{equation} t_{ij}=-R_{ij}\cdot C_{ij} \end{equation} \]

    \[ \begin{equation} C_{ij}=-R_{ij}^T\cdot t_{ij} \end{equation} \] 那么 \(R_{ij}\)\(t_{ij}\) 怎么通过全局旋转平移量来表达呢?

相对定向元素

有了公式(6)后,我们将两张影像 \(i,j\) 与物方关系的方程写出: \[ \begin{equation} \begin{bmatrix}X_i\\Y_i\\Z_i\\1 \end{bmatrix} = \begin{bmatrix} R_{i}&t_{i}\\ 0&1 \end{bmatrix} \cdot \begin{bmatrix}X_w\\Y_w\\Z_w\\1\end{bmatrix} \end{equation} \]

\[ \begin{equation} \begin{bmatrix}X_j\\Y_j\\Z_j\\1\end{bmatrix} =\begin{bmatrix} R_{j}&t_{j}\\ 0&1 \end{bmatrix}\cdot \begin{bmatrix}X_w\\Y_w\\Z_w\\1\end{bmatrix} \end{equation} \]

将公式(9)(10)代入公式(6)中得到: \[ \begin{equation} \begin{bmatrix} R_{j}&t_{j}\\ 0&1 \end{bmatrix}\cdot \begin{bmatrix}X_w\\Y_w\\Z_w\\1\end{bmatrix} =\begin{bmatrix} R_{ij}&t_{ij}\\ 0&1 \end{bmatrix} \cdot \begin{bmatrix} R_{i}&t_{i}\\ 0&1 \end{bmatrix}\cdot \begin{bmatrix}X_w\\Y_w\\Z_w\\1\end{bmatrix} \end{equation} \]

物方点坐标相同,消掉后: \[ \begin{equation} \begin{bmatrix} R_{j}&t_{j}\\ 0&1 \end{bmatrix} =\begin{bmatrix} R_{ij}&t_{ij}\\ 0&1 \end{bmatrix} \cdot \begin{bmatrix} R_{i}&t_{i}\\ 0&1 \end{bmatrix} \end{equation} \] 将等号右边乘开: \[ \begin{equation} \begin{bmatrix} R_{j}&t_{j}\\ 0&1 \end{bmatrix} =\begin{bmatrix} R_{ij}\cdot R_i & R_{ij}\cdot t_i+t_{ij}\\ 0&1 \end{bmatrix} \end{equation} \] 这样就得到了相对定向元素与全局旋转平移量的关系: \[ \begin{equation} R_j=R_{ij}\cdot R_i \end{equation} \]

\[ \begin{equation} t_j = R_{ij}\cdot t_i+t_{ij} \end{equation} \] 即: \[ \begin{equation} R_{ij}=R_{j}\cdot R_i^T \end{equation} \]

\[ \begin{equation} t_{ij}=t_{j}-R_{ij}\cdot t_i \end{equation} \] 考虑 \(t_{ij}\) 尺度影响: \[ \begin{equation} s\cdot t_{ij}=t_{j}-R_{ij}\cdot t_i \end{equation} \]

应用

使用GPS坐标做全局线元素初值

我们认为当前的全局坐标系与GPS坐标系只差了一个旋转关系,则有: \[ \begin{equation} R_{gps}=R_{glo2gps}\cdot R_{global} \end{equation} \]

\(R_{glo2gps}\) 可以通过两两相机间的向量求解,写出GPS坐标系 -> 相机坐标系的关系: \[ \begin{equation} \begin{bmatrix}X_i\\Y_i\\Z_i\\1 \end{bmatrix} = \begin{bmatrix} R_{gps_i}&t_{gps_i}\\ 0&1 \end{bmatrix}\cdot \begin{bmatrix}X_{gps}\\Y_{gps}\\Z_{gps}\\1\end{bmatrix} \end{equation} \]

\[ \begin{equation} \begin{bmatrix}X_j\\Y_j\\Z_j\\1 \end{bmatrix} = \begin{bmatrix} R_{gps_j}&t_{gps_j}\\ 0&1 \end{bmatrix}\cdot \begin{bmatrix}X_{gps}\\Y_{gps}\\Z_{gps}\\1\end{bmatrix} \end{equation} \]

将以上两个公式代入公式(6)中: \[ \begin{equation} \begin{bmatrix} R_{gps_j}&t_{gps_j}\\ 0&1 \end{bmatrix}\cdot \begin{bmatrix}X_{gps}\\Y_{gps}\\Z_{gps}\\1\end{bmatrix}= \begin{bmatrix} R_{ij}&t_{ij}\\ 0&1 \end{bmatrix}\cdot \begin{bmatrix} R_{gps_i}&t_{gps_i}\\ 0&1 \end{bmatrix}\cdot \begin{bmatrix}X_{gps}\\Y_{gps}\\Z_{gps}\\1\end{bmatrix} \end{equation} \]

物方点坐标相同,消掉后: \[ \begin{equation} \begin{bmatrix} R_{gps_j}&t_{gps_j}\\ 0&1 \end{bmatrix}= \begin{bmatrix} R_{ij}&t_{ij}\\ 0&1 \end{bmatrix}\cdot \begin{bmatrix} R_{gps_i}&t_{gps_i}\\ 0&1 \end{bmatrix} \end{equation} \]

即: \[ \begin{equation} R_{gps_j}=R_{ij}\cdot R_{gps_i} \end{equation} \]

\[ \begin{equation} t_{gps_j}=R_{ij}\cdot t_{gps_i}+t_{ij} \end{equation} \]

可以看出,方程的基本形式没有变化,这里要注意,全局坐标系的旋转不影响相对定向中 \(R_{ij}\)\(t_{ij}\) 的数值,可以从它们的实际意义去思考一下。

ARCore坐标系转真实世界坐标系

之前我们遇到的问题都是物方坐标相同,求两个相机坐标系之间的关系,这个问题是相机坐标系相同,求两个世界坐标系之间的关系。ARCore的世界坐标系(记为Local)为开启软件一瞬间的手机位置,我们想把它转为我们自定义的世界坐标系(记为Global)以实现室内定位。

我们现有的数据为:

  • Local坐标系 -> 相机坐标系的 \(R_{L}\)\(t_{L}\)
  • Global坐标系 -> 相机坐标系的\(R_G\)\(t_G\)

待求的值为:

  • Local坐标系 -> Global坐标系的 \(R_{LG}\)\(t_{LG}\)

先写出两世界坐标系转换的方程: \[ \begin{equation} \begin{bmatrix}X_G\\ Y_G\\ Z_G\\1 \end{bmatrix} = \begin{bmatrix}R_{LG}&t_{LG}\\0&1\end{bmatrix}\cdot \begin{bmatrix}X_L\\ Y_L\\ Z_L\\1 \end{bmatrix} \end{equation} \] 再写出两个世界坐标系转相机坐标系的方程: \[ \begin{equation} \begin{bmatrix}X^{'}\\Y^{'}\\Z^{'}\\1 \end{bmatrix} = \begin{bmatrix} R_{L}&t_{L}\\ 0&1 \end{bmatrix} \cdot \begin{bmatrix}X_L\\Y_L\\Z_L\\1\end{bmatrix} \end{equation} \]

\[ \begin{equation} \begin{bmatrix}X^{'}\\Y^{'}\\Z^{'}\\1 \end{bmatrix} = \begin{bmatrix} R_{G}&t_{G}\\ 0&1 \end{bmatrix} \cdot \begin{bmatrix}X_G\\Y_G\\Z_G\\1\end{bmatrix} \end{equation} \]

和上文一样,代入后得到: \[ \begin{equation} \begin{bmatrix} R_{G}&t_{G}\\ 0&1 \end{bmatrix}^{\text{-1}}\cdot \begin{bmatrix}X^{'}\\Y^{'}\\Z^{'}\\1 \end{bmatrix} = \begin{bmatrix} R_{LG}&t_{LG}\\ 0&1 \end{bmatrix}\cdot \begin{bmatrix} R_{L}&t_{L}\\ 0&1 \end{bmatrix}^{\text{-1}}\cdot \begin{bmatrix}X^{'}\\Y^{'}\\Z^{'}\\1 \end{bmatrix} \end{equation} \] 相机坐标系相同,消掉后: \[ \begin{equation} \begin{bmatrix} R_{G}&t_{G}\\ 0&1 \end{bmatrix}^{\text{-1}} = \begin{bmatrix} R_{LG}&t_{LG}\\ 0&1 \end{bmatrix}\cdot \begin{bmatrix} R_{L}&t_{L}\\ 0&1 \end{bmatrix}^{\text{-1}} \end{equation} \] 即: \[ \begin{equation} \begin{bmatrix} R_{L}&t_{L}\\ 0&1 \end{bmatrix} = \begin{bmatrix} R_{G}&t_{G}\\ 0&1 \end{bmatrix}\cdot \begin{bmatrix} R_{LG}&t_{LG}\\ 0&1 \end{bmatrix} \end{equation} \] 乘开: \[ \begin{equation} \begin{bmatrix} R_{L}&t_{L}\\ 0&1 \end{bmatrix} = \begin{bmatrix} R_{G}\cdot R_{LG}&R_{G}\cdot t_{LG}+t_{G}\\ 0&1 \end{bmatrix} \end{equation} \] 得到: \[ \begin{equation} R_{LG}=R_G^T\cdot R_L \end{equation} \]

\[ \begin{equation} t_{LG}=R_G^T\cdot (t_L-t_G) \end{equation} \]

小结

  1. markdown+latex写公式很nice

  2. 感受到了公式齐次化的优美与强大之处:D​