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 = \begin{bmatrix}
1 & 0 & 0 \\
0 & \cos (roll) & -\sin (roll)\\
0 & \sin (roll) & \cos (roll) \\
\end{bmatrix}
\]

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

\[
Q_z = \begin{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 = \begin{bmatrix}
A_{11} & A_{12} & A_{13} \\
A_{21} & A_{22} & A_{23} \\
A_{31} & A_{32} & A_{33}
\end{bmatrix} \]

\[ AQ_x = \begin{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 $ 进行初等行变换。

【矩阵】RQ/QR 分解的更多相关文章

  1. 矩阵的QR分解

    #include <cstdio> #include <cstdlib> #include <algorithm> #include <cmath> # ...

  2. 矩阵的QR分解(三种方法)Python实现

    1.Gram-Schmidt正交化 假设原来的矩阵为[a,b],a,b为线性无关的二维向量,下面我们通过Gram-Schmidt正交化使得矩阵A为标准正交矩阵: 假设正交化后的矩阵为Q=[A,B],我 ...

  3. QR 分解

    将学习到什么 介绍了平面旋转矩阵,Householder 矩阵和 QR 分解以入相关性质.   预备知识 平面旋转与 Householder 矩阵是特殊的酉矩阵,它们在建立某些基本的矩阵分解过程中起着 ...

  4. 机器学习中的矩阵方法03:QR 分解

    1. QR 分解的形式 QR 分解是把矩阵分解成一个正交矩阵与一个上三角矩阵的积.QR 分解经常用来解线性最小二乘法问题.QR 分解也是特定特征值算法即QR算法的基础.用图可以将分解形象地表示成: 其 ...

  5. 矩阵QR分解

    1 orthonormal 向量与 Orthogonal 矩阵 orthonormal 向量定义为 ,任意向量  相互垂直,且模长为1: 如果将  orthonormal 向量按列组织成矩阵,矩阵为  ...

  6. QR分解与最小二乘

    主要内容: 1.QR分解定义 2.QR分解求法 3.QR分解与最小二乘 4.Matlab实现   一.QR分解 R分解法是三种将矩阵分解的方式之一.这种方式,把矩阵分解成一个正交矩阵与一个上三角矩阵的 ...

  7. QR分解与最小二乘(转载自AndyJee)

    转载网址:http://www.cnblogs.com/AndyJee/p/3846455.html 主要内容: 1.QR分解定义 2.QR分解求法 3.QR分解与最小二乘 4.Matlab实现 一. ...

  8. QR分解

        从矩阵分解的角度来看,LU和Cholesky分解目标在于将矩阵转化为三角矩阵的乘积,所以在LAPACK种对应的名称是trf(Triangular Factorization).QR分解的目的在 ...

  9. QR分解迭代求特征值——原生python实现(不使用numpy)

    QR分解: 有很多方法可以进行QR迭代,本文使用的是Schmidt正交化方法 具体证明请参考链接 https://wenku.baidu.com/view/c2e34678168884868762d6 ...

随机推荐

  1. Python基础【3】:Python中的深浅拷贝解析

    深浅拷贝 在研究Python的深浅拷贝区别前需要先弄清楚以下的一些基础概念: 变量--引用--对象(可变对象,不可变对象) 切片(序列化对象)--拷贝(深拷贝,浅拷贝) 我是铺垫~ 一.[变量--引用 ...

  2. Embarcadero Delphi 7 Enterprise 7.0.4.453 中文版

    在 win7下可能报错请大家按下面的方式 delphi7运行不正常的提示unable to rename'c:\program files\Borland\delphi7\Bin\delphi32.$ ...

  3. MySQL中varchar最大长度是多少

    一. varchar存储规则: 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) 5.0版本以上,varchar(20),指的是20字符,无 ...

  4. Qss 样式表的尝试

    QLineEdit{ border:1px solid #137eb6; padding:2px; background-color:#F5F5F5; } QToolTip{ border:1px s ...

  5. Qt环境配置 + Qt使用教程

    官方下载链接有以下: http://download.qt.io/official_releases/qt/5.8/5.8.0/ http://download.qt.io/official_rele ...

  6. 【51Nod1773】A国的贸易 解题报告

    [51Nod1773]A国的贸易 Description 给出一个长度为 \(2^n\) 的序列,编号从\(0\)开始.每次操作后,如果 \(i\) 与 \(j\) 的二进制表示只差一位则第 \(i\ ...

  7. HDU.1796 How many integers can you find ( 组合数学 容斥原理 二进制枚举)

    HDU.1796 How many integers can you find ( 组合数学 容斥原理 二进制枚举) 题意分析 求在[1,n-1]中,m个整数的倍数共有多少个 与 UVA.10325 ...

  8. Linux日常维护命令

    对于程序员来说,掌握一些基本的Linux命令是必不可少的,即使现在用不到,在不久的将来也应该会用到.由于Linux有很多命令,每个命令基本可以用一篇文章介绍,所以本文仅总结一些常用命令的常用用法,如有 ...

  9. 【Asp.net入门02】搭建Asp.net开发环境

    本节主要讲解: 什么是asp.net asp.net开发和运行环境介绍 1.什么是ASP.NET Asp.net不是一种编程语言,而是一种开发技术.我们可以利用这种技术所提供的类库,使用C#或者VB编 ...

  10. tp5.1 高级查询之 表里2字段比较大小

    $map = [ 'status' => 1, 'is_show' => 1,]; $result = Db::name('coupon') ->where($map) ->w ...