当前位置: 首页 > article >正文

自由度的理解

自由度

在 SLAM 算法里,我们会经常看到自由度这个概念,例如单应矩阵的自由度是8,基础矩阵的自由度是7,但是用旋转矩阵表达的旋转的自由度却是3。我一开始也很迷茫,什么是自由度啊?后面就慢慢理解了一点。

自由度,可以理解为独立信息的维度。下面是一个例子:

小明考了三门课程,语文、数学和英语,三门课程( n = 3 n = 3 n=3)的平均分是60分( x ˉ = 60 \bar{x} = 60 xˉ=60)。我们需要求三门课程的分数分别是多少。

在这个问题下,自由度 F 是多少?

3 吗?不是,是 2。为什么?

由于存在条件 x ˉ \bar{x} xˉ 的限制,在我们猜三门分数的时候,只能猜两门课程的分数。为什么?

因为有条件 x ˉ = 60 \bar{x} = 60 xˉ=60 的约束,我们固定两门分数时,第三门一定是也固定下来的。因此自由度 F = 2 F=2 F=2

一般的情况下,自由度等于变量个数减1, F = n − 1 F = n -1 F=n1

例如计算方差的公式:

S 2 = ∑ ( x i − x ˉ ) 2 n − 1 S^2 = \frac{\sum(x_i - \bar{x})^2}{n-1} S2=n1(xixˉ)2

右式的分母是自由度, F = n − 1 F = n - 1 F=n1

为什么是 n − 1 n - 1 n1 而不是 n n n?

因为分子存在平均值 x ˉ \bar{x} xˉ,已经用掉了一个自由度。因此,剩下的有用信息是n-1维,而不是n维。

单应矩阵

单应矩阵的推导以后写吧,这里直接给出矩阵形式的求解公式:

[ 0 0 0 − u 1 − v 1 − 1 u 1 v 2 v 1 v 2 v 2 u 1 v 1 1 0 0 0 − u 1 u 2 − v 1 u 2 − u 2 ] [ h 1 h 2 h 3 h 4 h 5 h 6 h 7 h 8 h 9 ] = 0 \begin{bmatrix}0 & 0 & 0 & -u_1 & -v_1 & -1 & u_1v_2 & v_1v_2 & v_2 \\ u_1 & v_1 & 1 & 0 & 0 & 0 & -u_1u_2 & -v_1u_2 & -u_2 \end{bmatrix} \begin{bmatrix}h_1 \\ h_2 \\ h_3 \\ h_4 \\ h_5 \\ h_6 \\ h_7 \\ h_8 \\h_9 \end{bmatrix} = 0 [0u10v101u10v1010u1v2u1u2v1v2v1u2v2u2] h1h2h3h4h5h6h7h8h9 =0

单应矩阵 H 3 x 3 H_{3x3} H3x3 一共有 9 个元素,那么它的自由度是多少呢?

公式左右两边同时乘以一个不为 0 的数,公式都恒成立。这叫尺度等价性,这里固定了一个自由度,因此单应矩阵的自由度 F = 9 − 1 = 8 F = 9 - 1 = 8 F=91=8

自由度是 8,因此需要提供 8 个值进行解算,然后一对匹配点可以通过 2 个值,因此只需要 4 对匹配点就可以解算单应矩阵。见单应矩阵应用,就是用了 4 对点进行计算。

基础矩阵

基础矩阵的矩阵形式求解公式如下:

[ u 1 u 2 v 1 u 2 u 2 u 1 v 2 v 1 v 2 v 2 u 1 v 1 1 ] [ f 1 f 2 f 3 f 4 f 5 f 6 f 7 f 8 f 9 ] = 0 \begin{bmatrix} u_1u_2 & v_1u_2 & u_2 & u_1v_2 & v_1v_2 & v_2 & u_1 & v_1 & 1 \end{bmatrix} \begin{bmatrix} f_1 \\ f_2 \\ f_3 \\ f_4 \\ f_5 \\ f_6 \\ f_7 \\ f_8 \\f_9 \end{bmatrix} = 0 [u1u2v1u2u2u1v2v1v2v2u1v11] f1f2f3f4f5f6f7f8f9 =0

基础矩阵 F 3 x 3 F_{3x3} F3x3 一共有 9 个元素,但是它有两个约束:

  1. 尺度等价性
  2. 基础矩阵的秩为2

因此,基础矩阵的自由度为 9 − 2 = 7 9 - 2 = 7 92=7

因此,最少7对匹配点就可以算出基础矩阵,但是在ORB_SLAM里用了 8 对点。计算方法可见:基础矩阵计算

其他碎碎念

旋转矩阵表示的旋转,自由度是 3 ,但是旋转矩阵有 9 个元素,因此旋转矩阵是冗余的。

但是如果只用 3 个元素表达旋转,例如旋转向量和欧拉角,存在奇异性,有些时候会丢失一个自由度。

因此表达 3 个自由度的旋转,最少需要 4 个元素,SLAM里用的就是大名鼎鼎的 四元数

本质矩阵 E 3 x 3 E_{3x3} E3x3也有9个元素,但是它的自由度为5。为什么?

E = t × R E = t \times R E=t×R,其中平移有3个自由度,而旋转也有3个自由度,因此6个值便可以固定一个本质矩阵。

但是由于 P ~ c 1 T E P ~ c 2 = 0 \tilde{P}_{c1}^T E \tilde{P}_{c2} = 0 P~c1TEP~c2=0对极几何的约束,基础矩阵也存在尺度等价性,因此自由度等于3 + 3 - 1 = 5

大佬的笔记

大佬的网易云笔记
b站视频:自由度的解释


http://www.kler.cn/news/9783.html

相关文章:

  • SM59 RFC 目标 SAP_PROXY_ESR 设置到服务资源库连接的检查列表
  • ChatGTP如此强大,我们普通人如何利用它来赚钱?
  • 小程序页面跳转方法
  • SpringSecurity+OAUTH2集成多种登录方式
  • 穿越不确定性,Serverless已翻过千山万水
  • Mybatis(五)------Mybatis执行Mapper接口的方法流程
  • 学习经验分享【NO.23】深度学习目标检测理论知识(持续更新)
  • DETR【论文阅读】
  • 【Android开发经验】-- 如何实现RecyclerView子项的点击事件?
  • 基于springboot+mybatis的图书购物网站
  • 《Java8实战》第4章 引入流
  • 【voliate 关键字】
  • 行为型模式-命令模式
  • BAT程序员来说一说互联网大厂的秋招和实习,什么时候开始秋招,要不要准备实习? 没找到实习怎么办?实习是不是重要? 如何选择实习的offer?
  • MySQL开发04-MySQL优化器的提示功能
  • 小黑子—Java从入门到入土过程:第六章
  • 【openAI】调用gpt-xxx模型时显示网络连接错误(Error communicating with openAI...)
  • 封仲淹:OceanBase开源技术生态全景解析
  • Java基础教程之Object类是怎么回事?
  • 采用多种方式实现项目的查询多级缓存(四)
  • Java模拟rank() over()函数获取分组排名的方法设计及实现
  • 书 | 图理论 | 2020年GraphSage提出者William L. Hamilton《图表示学习》
  • Systemverilog中Constrained random value generation的记录
  • linux之pthread_join函数
  • 安全防御 --- APT、密码学
  • 《数据库系统概论》第三章课后习题 (4个表+三建工程项目)
  • JAVA所有版本特性【JAVA 1.0 - JAVA 20】
  • 圣戈班Saint-Gobain EDI需求分析
  • 计算机网络 - TCP的效率与特性
  • 从0到1基于ChatGLM-6B使用LaRA进行参数高效微调 审核中