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

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

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

在数学里,我们通过齐次变换来表示这种问题,齐次变换就是将一个原本是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. Curve 分布式存储在 KubeSphere 中的实践

    Curve 介绍 Curve 是网易开发的现代存储系统,目前支持文件存储 (CurveFS) 和块存储 (CurveBS).现在它作为一个沙盒项目托管在 CNCF. Curve 是一个高性能.轻量级操 ...

  2. jacoco代码覆盖率工具配置

    参考文章: https://blog.csdn.net/skh2015java/article/details/121775806 解决引入jacoco依赖并配置后,执行maven clean tes ...

  3. 入门级别 Nginx 常用配置清单

    本文为转发文章,转发来自"https://mp.weixin.qq.com/s/ipUHaFPcDfIM9MsyqDGSEg",觉得不错分享给大家 Nginx 是一个高性能的 HT ...

  4. 洛谷 P1540 [NOIP2010 提高组] 机器翻译

    题目概括 给定 N 个整数,和一个容量为 M 的"字典",从头到尾依次翻译,每次翻译先看自家字典,没有的话再看别人的字典并存到自家字典,如果自家字典满了,当前单词的翻译会代替最早进 ...

  5. 一款.NET开源的屏幕实时翻译工具

    前言 今天大姚给大家推荐一款.NET开源的屏幕实时翻译工具:Translumo. 工具介绍 Translumo是一个.NET开源的高级屏幕翻译工具,能够实时检测和翻译选定区域内的文本(如字幕).Tra ...

  6. aiflow部署文档

    aiflow部署文档 一.简介 本文档用来进行aiflow项目的完全部署 二.安装环境 2.1 安装系统镜像版本 使用Centos镜像文件:CentOS-7-x86_64-DVD-1908.iso c ...

  7. NSScrollView 内容显示不正常问题

    NSScrollView 内容显示不正常,顶部没有对齐已经后边有空隙,说明Layout的方式错误,采用了Automatic导致的.需要采用如下布局方式才可以.

  8. 为什么通常在发送数据埋点请求的时候要用GIF

    为什么通常在发送数据埋点请求的时候使用的是 1x1 像素的透明 gif 图片? 能够完成整个 HTTP 请求+响应(尽管不需要响应内容) 触发 GET 请求之后不需要获取和处理数据.服务器也不需要发送 ...

  9. HTTP服务七层架构技术探讨

    作者: phpkernel  发布时间: 2012-11-26 13:27  阅读: 3998 次  推荐: 8   原文链接   [收藏]   1. 为什么分层? 计算机领域的体系结构普遍采用了分层 ...

  10. wait、notify、notifyAll

    介绍 wait 方法前提需要拥有锁.使用wait方法后,释放锁进行等待队列. notify 方法从等待队列移除一个元素. notifyAll 将等待队列中元素全部进行移出. 注意:notify.not ...