zoukankan      html  css  js  c++  java
  • 【矩阵】RQ/QR 分解

    Multiple View Geometry in Computer Vision A.4.1.1 (page 579)

    将一个 3x3 矩阵 $ A $ 进行 RQ 分解是将其分解成为一个上三角阵 $ R $ 与一个正交阵(orthogonal matrix) $ Q $ 的乘积。要求矩阵 $ A $ 的秩为3,即满秩。

    所谓矩阵 $ Q $ 正交是指 $ Q^TQ=I $, $ Q $ 可以看作是一个旋转矩阵。此旋转矩阵由三个子旋转矩阵点乘而来,即 $ Q = Q_xQ_yQ_z $ 。$ Q_x, Q_y, Q_z $ 如下:

    [Q_x = egin{bmatrix} 1 & 0 & 0 \ 0 & cos (roll) & -sin (roll)\ 0 & sin (roll) & cos (roll) \ end{bmatrix} ]

    [Q_y = egin{bmatrix} cos (pitch) & 0 & sin (pitch) \ 0 & 1 & 0 \ -sin (pitch) & 0 & cos (pitch) \ end{bmatrix} ]

    [Q_z = egin{bmatrix} cos (yaw) & -sin (yaw) & 0 \ sin (yaw) & cos (yaw) & 0 \ 0 & 0 & 1 \ end{bmatrix} ]

    将矩阵 $ A $ 右乘一个矩阵,相当于将 $ A $ 进行一次初等列变换。

    (A = RQ = RQ_z^TQ_y^TQ_x^T)(AQ_xQ_yQ_z = R)

    将 $ A $ 右乘 $ Q_x $ 是将 $ A $ 的第一列保持不变,第二列和第三列进行线性组合,解释如下:

    [ A = egin{bmatrix} A_{11} & A_{12} & A_{13} \ A_{21} & A_{22} & A_{23} \ A_{31} & A_{32} & A_{33} end{bmatrix} ]

    [ AQ_x = egin{bmatrix} A_{11} & cA_{12} + sA_{13} & -sA_{12} + cA_{13} \ A_{21} & cA_{22} + sA_{23} & -sA_{22} + cA_{23} \ A_{31} & cA_{32} + sA_{33} & -sA_{32} + cA_{33} end{bmatrix} ]

    上式省略了 $ roll $ ,将 $ [AQ_x]_{32} $ 置为0。加上 (c^2 + s^2 = 1) 的条件,可以算出 (c, s),求得 $ Q_x $ 。

    $ AQ_x $ 的结果右乘 $ Q_y $ 是将第二列保持不变,第一列和第三列进行线性组合,将 $ [AQ_xQ_y]_{31} $ 置为0,求得 $ Q_y $ 。

    $ AQ_xQ_y $ 的结果右乘 $ Q_z $ 是将第三列保持不变,第一列和第二列进行线性组合,将 $ [AQ_xQ_yQ_z]_{21} $ 置为0,求得 $ Q_x $ 。

    经过三次右乘(初等列变换)可以得到上三角阵 $ R $ 。

    最后由计算得到的 $ Q_x, Q_y, Q_z $ 通过 (Q = Q_z^TQ_y^TQ_x^T) ,得到 (A) 的 RQ 分解。

    对于 QR、LQ、QL 分解使用类似的方式进行计算。QR 与 QL 分解是将矩阵 $ A $ 进行初等行变换。

  • 相关阅读:
    进程和线程的区别?什么时候用进程?什么时候用线程?----看到好的复制到自己的园子里哈哈
    HTTPS详细讲解一篇就够了
    MySQL存储过程
    Spring注入全局的HttpServletRequest
    Java进阶必备
    Java8新特性
    java.time包常用类API学习记录
    Maven常用插件
    maven-dependency-versions-check-plugin, Maven 插件查找依赖版本冲突
    Jackson自定义注解
  • 原文地址:https://www.cnblogs.com/JingeTU/p/6390920.html
Copyright © 2011-2022 走看看