2D-3D 转换中,为什么世界坐标要扩充成四维, 图像坐标要扩充成三维?

在这里插入图片描述

总结

在计算机视觉和图形学中,将世界坐标扩充成四维,以及图像坐标扩充成三维,是为了便于运用齐次坐标(homogeneous coordinates)进行坐标变换。这样的做法简化了投影变换的数学表示和计算,特别是在三维场景和二维图像间的转换中。

一、为什么世界坐标要扩充成四维, 图像坐标要扩充成三维

1. 世界坐标扩充成四维

世界坐标系统描述三维空间中的点。在使用三维坐标 (X, Y, Z) 进行表示时,转换操作(如平移和旋转)通常需要单独处理。为了统一这些操作,可以将三维坐标扩充到四维齐次坐标 (X, Y, Z, W)。在齐次坐标中:

平移、旋转、缩放 以及其他线性变换可以通过一个 4x4 矩阵来表示和处理。

当 W=1 时,(X, Y, Z, 1) 直接对应于 (X, Y, Z)。

使用四维坐标,可以通过矩阵乘法来组合多个变换,这在计算机图形和机器视觉中非常有用。

2. 图像坐标扩充成三维

图像坐标系通常是二维的,表示为 (x, y)。为了将这些坐标与三维世界坐标系中的点对应起来,并方便地进行透视投影变换,可以扩充图像坐标到三维齐次坐标 (x, y, w)。

在图像处理和计算机视觉中,使用齐次坐标可以简化相机的投影模型。例如,透视投影可以通过一个 3x4 投影矩阵与四维世界坐标的点相乘来实现。

三维齐次图像坐标允许通过简单的矩阵乘法实现从世界坐标到图像坐标的转换。w 分量在进行投影变换时起到了归一化的作用,使得变换后可以通过除以 w 来回到常规的二维坐标形式。

总的来说,使用齐次坐标系统是为了在处理几何变换时增加数学上的便利性和效率,特别是在涉及多步骤变换和不同坐标系之间的转换时。这种方法广泛应用于计算机图形、图像处理、计算机视觉以及机器人技术中。

二、几何变换的矩阵表示

在三维计算机图形中,使用 4x4 矩阵进行平移、旋转和缩放等变换是常见的方法,这些矩阵可以单独使用,也可以组合来表示复杂的变换序列。

1. 旋转变换矩阵(以 Z 轴为例)

旋转矩阵可以围绕任意轴进行旋转,但最常见的是围绕主轴(X轴、Y轴、Z轴)的旋转。例如,围绕 Z 轴旋转 𝜃度的旋转矩阵是:
cos ⁡ ( θ ) − sin ⁡ ( θ ) 0 0 sin ⁡ ( θ ) cos ⁡ ( θ ) 0 0 0 0 1 0 0 0 0 1 \begin{matrix} \cos(\theta) & -\sin(\theta) & 0 & 0 \\ \sin(\theta) & \cos(\theta) & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} cos(θ)sin(θ)00sin(θ)cos(θ)0000100001

2. 缩放变换矩阵

如果你想改变一个物体的大小,缩放矩阵允许你在每个方向上独立地调整尺寸。缩放矩阵如下所示:

s x 0 0 0 0 s y 0 0 0 0 s z 0 0 0 0 1 \begin{matrix} s_x & 0 & 0 & 0 \\ 0 & s_y & 0 & 0 \\ 0 & 0 & s_z & 0 \\ 0 & 0 & 0 & 1 \end{matrix} sx0000sy0000sz00001

可以看到在旋转和缩放变换中,使用4*4的矩阵是毫无意义的,那为什么还要使用4*4的矩阵呢?
是因为另一个非常常用的变换–平移–需要使用到第四维。

3. 平移变换矩阵

1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 \begin{matrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \end{matrix} 100001000010txtytz1
其中 t x t y t z \begin{matrix} t_x\\t_y\\t_z \end{matrix} txtytz是沿 X, Y, Z 轴的平移距离。

4. 平移变换的矩阵乘法表示

1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 ⋅ X Y Z 1 = X + t x Y + t y Z + t z 1 \begin{matrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \end{matrix} \cdot \begin{matrix} X \\ Y \\ Z \\ 1 \end{matrix}= \begin{matrix} X + t_x \\ Y + t_y \\ Z + t_z \\ 1 \end{matrix} 100001000010txtytz1XYZ1=X+txY+tyZ+tz1

在这里我们终于看到了第四维的应用,而且这里只能通过4*4方式来进行矩阵运算,不管是第四行还是第四列,对于平移变换来说都是必需的。

5. 组合运算

这些矩阵可以通过矩阵乘法组合来实现复杂的变换。例如,一个物体先围绕 Z 轴旋转 45 度,然后沿 X 轴平移 5 单位,最后在所有方向上缩放 2 倍,可以通过以下矩阵乘法来实现:
S c a l e × T r a n s l a t e × R o t a t e Scale×Translate×Rotate Scale×Translate×Rotate
计算出的结果矩阵将包含所有这些变换的效果。

这些变换的实际应用包括在计算机图形、机器人路径规划、空间分析等领域。在实践中,这样的矩阵运算可以通过各种图形API或数学库(如OpenGL、DirectX、glm库等)来实现。

那么使用4*4的矩阵结构来进行运算的优势已经很明显了,总的来说就是:
可以统一处理各种变换
在传统的三维坐标系统中,旋转和缩放可以通过乘以一个 3x3 矩阵来实现,但平移变换需要单独处理,通常是通过加上一个向量来完成。这意味着,如果你想要组合多种变换(例如,先旋转后平移),就必须单独计算每一种变换,这在编程和算法设计中会增加复杂性。

使用四维齐次坐标,多个变换可以组合成一个矩阵,这样一个物体的多个变换可以预先计算并存储为一个矩阵。这对于图形渲染效率至关重要,因为它减少了在渲染每个物体时需要执行的计算量。

另外,还有一个使用4*4结构的原因是关于透视投影的。

在三维计算机图形中,将三维场景投影到二维屏幕上是一个核心任务。齐次坐标使得透视投影(其中物体大小随距离变化)也可以通过矩阵乘法实现。透视投影通常涉及除以深度值(z坐标),在齐次坐标中,这可以通过简单地将坐标除以齐次坐标的最后一个分量(通常是 w)来自动完成。关于w分量的作用可以自行查询。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3032226.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

软件从立项申报到验收交付全资料整理(项目经理)

软件文档交付清单是指在软件开发项目完成后,开发团队需要准备的一份详细清单,用于确保交付的软件产品符合客户需求并达到预期的质量标准。以下是软件文档交付清单中可能包含的一些关键要素 项目启动阶段: 项目计划书/立项报告:描…

来看一段有趣的代码

最近实现发票连续打印时,直接copy其他项目代码来用,主要是对文件的处理,这部分可以不涉及数据库操作,这种功能也很方便写单元测试。在写单元测试图片转PDF功能时,发现了一段有趣的代码: protected void sc…

瑞芯微 rk3588 Linux系统备份还原 StepbyStep

1.系统备份 1.1 将瑞芯微平台嵌入式系统的root ssh 权限开通 step1:sudo vi /etc/ssh/sshd_config step2: 找到PermitRootLogin,把开关打开: PermitRootLogin yes step3:重启ssh服务 sudo systemctl restart sshd 1.2.使用瑞芯微的打包脚本把嵌入式系统系统打包 这…

操作系统实战(二)(linux+C语言)

实验内容 通过Linux 系统中管道通信机制,加深对于进程通信概念的理解,观察和体验并发进程间的通信和协作的效果 ,练习利用无名管道进行进程通信的编程和调试技术。 管道pipe是进程间通信最基本的一种机制,两个进程可以通过管道一个在管道一…

代码审计平台sonarqube的安装及使用

docker搭建代码审计平台sonarqube 一、代码审计关注的质量指标二、静态分析技术分类三、使用sonarqube的目的四、sonarqube流程五、docker快速搭建sonarqube六、sonarqube scanner的安装和使用七、sonarqube对maven项目进行分析八、sonarqube分析报告解析九、代码扫描规则定制十…

激光雷达赋能盲人导航:精准安全与实施挑战并存

在当今科技的推动下,一款名为“蝙蝠避障”专门为盲人设计的辅助应用正逐渐成为他们独立出行的重要工具,特别是那些融入了激光雷达技术的应用,为盲人导航提供了前所未有的支持。然而,任何技术都有其两面性,接下来我们将…

Fcos源码训练编译问题

训练fcos代码时出现问题 ImportError: cannot import name ‘_C’ 原因是没有对代码进行编译 运行python setup.py develop --no-deps进行代码编译 编译过程中出现报错: fcos_core/csrc/cuda/ROIAlign_cuda.cu:5:10: fatal error: THC/THC.h: No such file or dire…

【Hugging Face】编写 shell 脚本在 huggingface 镜像站快速下载模型文件

前言 我们使用 Git LFS 和 wget 结合的方法,小文件使用 Git 下载,大文件使用 wget 下载 Git 下载的优缺点: 优点:相当简单 缺点:不支持断点续传 直接 wegt 下载比较稳定,但是欠缺优雅 我们可以将这两…

python + word文本框中文字识别并替换【真替换,不只是识别】

1. 简单描述 在一些转换场景下,文本框不会被转换,需要先识别成文字内容。 【识别的文字段落可能会和实际看到的效果有些差异,后续还需校对,如下图】。 不足:除了上面说的那个情况(上图说的问题&#xff0…

pytest + yaml 框架 - 录制接口转 yaml 用例实现

pytest yaml 框架基本不用写 python 代码,只需写yaml 文件用例就能实现接口自动化。 现在引入接口录制功能,连 yaml 文件也不用写了,点点点就能生成 yaml 用例文件了。 录制功能在v1.3.4版本上实现 pip instal pytest-yaml-yoyo 环境准备 …

LLM 可以从简单数据中学习吗?

在 10 月份的一次周会结束后,我提到 SFT 训练后的 Loss 曲线呈现阶梯状,至于为什么,并没有人有合理的解释,加上当时的重心是提升次日留存率,Loss 曲线呈现阶梯状与次日留存率的关系还太远,即使有问题&#…

微信小程序按钮去除边框线

通常我们去掉按钮边框直接设置 border:0 但是在小程序中无效,设置outline:none也没用,当然可能你会说加权重无效 实际上该样式是在伪元素::after内,主要你检查css 还看不到有这个关系,鹅厂就是坑多 类样式::after {border: non…

halcon获取Licenses--每月一换

转到https://www.51halcon.com/ 点击授权,根据你的版本选择progress或者steady进行下载 记住每月一换哦

Ubuntu磁盘剩余空间不足,空间异常

近日发现用了3年的Ubuntu系统笔记本磁盘空间极度告急,上网搜了一下都是讲解如何扩容、如何重新挂载空间,但是博主发现/home目录明明分配了200G的空间,但是只剩下6G可用,查询所有的文件夹发现,所有文件加起来已使用50G左…

使用Baidu Comate五分钟 , 工作时间摸鱼8小时

Baidu Comate:引领智能编码新时代 文章目录 Baidu Comate:引领智能编码新时代一、明日工具,今日领先——百度Comate智能编码助手二、万变不离其宗——适配场景需求三、功能研究3.1 指挥如指掌——指令功能3.2 助手增援——插件功能使用3.3 实…

本地运行.net项目

有时候需要我们自己做一个.net的课设项目,但是我们有了代码后却不知道怎么运行。我们0基础来学习一下如何运行一个.net项目 1.安装visual studio 2022 不用安装老版本,新版就可以。安装好了2022版本,这是一个支持web的IDE,我们可…

【数据结构初阶】直接插入排序

最近浅学了直接插入排序,写个博客做笔记!笔记功能除外若能对读者老爷有所帮助最好不过了! 直接插入排序是插入排序的一种,那么介绍直接插入排序之前先介绍一下常见的排序算法! 目录 1.常见的排序算法 2.直接插入排…

【LeetCode:2391. 收集垃圾的最少总时间 + 二分】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

值得收藏!!《软考信息处理技术员》必背100母题,轻松45+

距离软考考试的时间越来越近了,趁着这两周赶紧准备起来 今天给大家整理了——软考信息处理技术员100道经典母题,年年从里面抽,有PDF,可打印,每天刷几道。 第一章 电脑的基本操作 1、( )不是国产…

特产销售|基于Springboot+vue的藏区特产销售平台(源码+数据库+文档)​

目录 基于Springbootvue的藏区特产销售平台 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道…