在通过二维像素坐标恢复三维坐标的过程中,经常出现这个齐次坐标系、尺度不变性的概念。这篇博客讲的比较好。

一、关于齐次坐标系的直观感受

在我们的世界里,两平行线是永远不会相交的,但是在投影空间里,两条平行线在无穷远处是相交的,如这个铁轨一样:

在数学里,我们通过齐次变换来表示这种问题,齐次变换就是将一个原本是n维的向量用一个n+1维向量来表示。
为了制作二维齐次坐标,我们只需在现有坐标中添加一个额外的变量 w。 因此,笛卡尔坐标中的点 (X, Y) 变为齐次坐标中的 (x, y, w),这两个坐标描述的是同一点。 为了将齐次坐标 (x, y, w) 转换为笛卡尔坐标,我们只需将 x 和 y 除以 w:

例如,笛卡尔坐标系下(1,2)的齐次坐标可以表示为(1,2,1),如果点(1,2)移动到无限远处,在笛卡尔坐标下它变为(∞,∞),然后它的齐次坐标表示为(1,2,0),因为(1/0, 2/0) = (∞,∞),我们可以不用”∞”来表示一个无穷远处的点了。

二、关于其次坐标的尺度不变性

转化齐次坐标到笛卡尔坐标的过程中,我们可以发现:

齐次坐标系点 (1, 2, 3), (2, 4, 6) 和 (4, 8, 12) 对代表欧几里得空间(或笛卡尔空间)中的同一点(1/3, 2/3)。

三、相差一个尺度因子的含义

在SLAM或者其它视觉感知的问题中常常会出现这样子的齐次坐标系构成的等式,如:

其中H或E为一个三乘以三的矩阵,应该有9个变量。这个时候经常会看到一句话,说由于尺度等价性,H或E只有8个自由度,这是什么意思呢?
上式的(u, v, 1)为齐次坐标,其乘以任意常数意义不变(等式依然成立),对应的H或E也应该满足这一点。说得更加具体一点,H或E可以有无数解,但这些解都是倍数关系,例如H或E的解可以为:

这么多解肯定不是我们想要的,所以我们进行一个归一化,规定H或E矩阵的最后一个元素的值为1,这样我们的解就唯一了。
至于为什么叫做“尺度等价性”,因为我们将这个值设置为1对应到真实世界中的长度可能是5cm,也可能是40m,这就需要额外的深度信息介入进行确定,这个以t的长度作为单位的尺度世界只和真实世界之间相差一个“尺度因子”。
所以我们在计算的时候说,由于“尺度不变性”,该三乘以三的矩阵有八个自由度(也就是有8个元素是未知量),还有一个元素作为尺度被设置为1(这个1乘以一个“尺度因子”就是实际的尺度)。

参考文献:齐次坐标、对极约束、基本矩阵与本质矩阵、单应矩阵

计算机视觉中由基本矩阵F或者本质矩阵E计算摄像机投影矩阵时,经常提到“相差一个尺度因子”的含义的更多相关文章

  1. Android OpenGL ES(六)----进入三维在代码中创建投影矩阵和旋转矩阵

    我们如今准备好在代码中加入透视投影了. Android的Matrix类为它准备了两个方法------frustumM()和perspectiveM(). 不幸的是.frustumM()的个缺陷,它会影 ...

  2. OpenGL中投影矩阵基础知识

    投影矩阵元素Projection Matrix 投影矩阵构建: 当f趋向于正无穷时: 一个重要的事实是,当f趋于正无穷时,在剪裁空间中点的z坐标跟w坐标相等.计算方法如下: 经过透视除法后,z坐标变为 ...

  3. 介绍Unity中相机的投影矩阵与剪切图像、投影概念

    这篇作为上一篇的补充介绍,主要讲Unity里面的投影矩阵的问题: 上篇的链接写给VR手游开发小白的教程:(三)UnityVR插件CardboardSDKForUnity解析(二) 关于Unity中的C ...

  4. NumPy之计算两个矩阵的成对平方欧氏距离

    问题描述 设 \({X_{m \times k}} = \left[ {\vec x_1^T;\vec x_2^T; \cdots ;\vec x_m^T} \right]\) (; 表示纵向连接) ...

  5. OpenGL中投影矩阵的推导

    本文主要是对红宝书(第八版)第五章中给出的透视投影矩阵和正交投影矩阵做一个简单推导.投影矩阵的目的是:原始点P(x,y,z)对应后投影点P'(x',y',z')满足x',y',z'∈[-1,1]. 一 ...

  6. [Deep-Learning-with-Python]计算机视觉中的深度学习

    包括: 理解卷积神经网络 使用数据增强缓解过拟合 使用预训练卷积网络做特征提取 微调预训练网络模型 可视化卷积网络学习结果以及分类决策过程 介绍卷积神经网络,convnets,深度学习在计算机视觉方面 ...

  7. (转)思考:矩阵及变换,以及矩阵在DirectX和OpenGL中的运用问题:左乘/右乘,行优先/列优先,...

    转自:http://www.cnblogs.com/soroman/archive/2008/03/21/1115571.html 思考:矩阵及变换,以及矩阵在DirectX和OpenGL中的运用1. ...

  8. hession矩阵的计算与在图像中的应用

    参考的一篇博客,文章地址:https://blog.csdn.net/lwzkiller/article/details/55050275 Hessian Matrix,它有着广泛的应用,如在牛顿方法 ...

  9. 计算机视觉中的边缘检测Edge Detection in Computer Vision

    计算机视觉中的边缘检测   边缘检测是计算机视觉中最重要的概念之一.这是一个很直观的概念,在一个图像上运行图像检测应该只输出边缘,与素描比较相似.我的目标不仅是清晰地解释边缘检测是怎样工作的,同时也提 ...

  10. 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵

    题目描述: 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵(矩阵中元素个数为矩阵面积) 输入: 每个案例第一行三个正整数N,M<=100,表示矩阵大小,和一个整数K 接下 ...

随机推荐

  1. 『玩转Streamlit』--环境配置

    尽管Streamlit的使用非常直观,但正确的环境配置对于充分发挥其潜力仍然至关重要. 本篇将介绍如何从头开始配置Streamlit环境,以及Streamlit开发过程中常用的几个命令. 最后通过一个 ...

  2. python reqeusts 请求时headers指定content length后 请求不响应

    解释: HTTP头部中的Content-Length字段表示请求体的大小,用字节来表示.当你在使用Python的requests库进行请求时,如果你手动设置了Content-Length,但实际发送的 ...

  3. C#/.NET/.NET Core技术前沿周刊 | 第 10 期(2024年10.14-10.20)

    前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...

  4. Redhat 7.6安装11G RAC GI时遇到此类报错

    环境:Redhat Linux 7.6 + Oracle 11.2.0.4 RAC 现象:图像化安装过程中,按照提示执行root.sh脚本,报错中断. 1. 具体现象 2. 定位问题 3. 解决问题 ...

  5. 异源数据同步 → DataX 同步启动后如何手动终止?

    开心一刻 刚刚和老婆吵架,气到不行,想离婚女儿突然站出来劝解道:难道你们就不能打一顿孩子消消气,非要闹离婚吗?我和老婆同时看向女儿,各自挽起了衣袖女儿补充道:弟弟那么小,打他,他又不会记仇 需求背景 ...

  6. 4-11.3 C++中的显式类转换

    目录 static_cast 1.用来改变基本类型:一般是高精度转低精度 2.恢复void* 指针类型 const_cast 用来去除底层const(low-level const) reinterp ...

  7. P8392 BalticOI 2022 Day1 Uplifting Excursion

    P8392 BalticOI 2022 Day1 Uplifting Excursion 贪心加动规,好题,这两个甚至完全相反的东西可以融进一道题-- 思路 物品较少,贡献较小,体积较小,但总体积巨大 ...

  8. php生成树状层级子孙树-迭代篇

    关于简单的方式获取树状层级子孙树的方案我已经写过了,在这里,当时是用简单的递归实现的,但是现在回头想想,如果层级很多,数据也很多,用递归感觉还是会不稳妥,这就有必要想办法转换为迭代来实现了. 以下是迭 ...

  9. 深入源码之JDK Logging

    JDK从1.4开始提供Logging实现,据说当初JDK打算采用Log4J的,后来因为某些原因谈判没谈拢,然后就自己开发了一套,不知道是为了报复而故意不沿用Log4J的命名方式和抽象方式,还是开发这个 ...

  10. px转换为rem,响应式js

    (function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? ...