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://www.mzph.cn/diannao/10154.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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

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

【桌面应用开发】Rust+Tauri框架项目打包操作

1.项目npm install下载项目依赖(需要配置好node.js环境) 可参考:https://blog.csdn.net/m0_64346565/article/details/138319651 2.自定义图标(项目初始化开始第一次需要配置生成,后面可跳过这一步骤) Ta…

ESP32引脚入门指南(七):从理论到实践(IIC)

引言 IIC(Inter-Integrated Circuit),又称为IC,是一种简单而高效的多主控器串行通信协议,常用于微控制器和各种外围设备之间的通信。在ESP32系列芯片中,IIC协议被广泛应用于连接各种传感器、存储器和其他支…

机器学习-Numpy

机器学习-Numpy 如果一个人拒绝提高自己的思想觉悟,那么他只能处在弱小、可怜、凄惨的境地。 目录 机器学习-Numpy 1.Numpy:生成矩阵 做矩阵运算 1)创建矩阵 ①使用列表创建 ②使用元组创建 2)矩阵取值 3)numpy…

GitHub搭建免费博客

一、GitHub仓库准备 ​ 搭建博客需要准备两个仓库。一个存放博客图床的仓库,另一个存放博客网站的仓库。 1.1、图床创建 新建仓库 第一步: ​ 第二步: 生成Token令牌 点击右上角头像->Settings->下拉,直到左侧到底&#…

ESP32 + ST7789 LCD

1、准备 ESP32 单片机开发板 ST7789 LCD 模块(240 * 320 像素) 杜邦线 2、接线 LCD功能ESP32VCC 供电电压正极 3.3V 、 5V GND 供电电压负极 GNDIDN / MOSI SPI 接口数据 引脚 23CLK 串行接口时钟信号 18CS 芯片选择引脚;低电平有效 5DC 显…

如何在MAXScript中随机选择集合的百分比?

有时,你希望随机选择对象的子集来应用材质或效果。手动操作随机选择是一件麻烦的事,而且随机的效果也不理想,最好的方法是编写一个脚本来执行。以下是MAXScript随机选择函数的示例。 function getRandomFromCollection collection percentag…

以太网技术介绍

随着通信和计算机技术的不断发展,无论是骨干网还是接入网,以太网都已成为应用场景最多,应用范围最广泛的技术之一。对于初次应用以太网的读者,本文主要给出以太网技术的基础知识,并对以太网涉及的部分协议进行简要说明…

收音机套件焊接和装调的总结

很早之前买了一个小收音机,今天翻出来焊接上。 还好,质量挺好的,电路板没有氧化。 一。静态电流 pcb上面留有ABCD四个测电流的位置。方便调试。 焊接后,V1电流偏大,如果电流过大,会导致R2的压降过大&am…

GT2505HS-VTBD 三菱触摸屏手持式5.7寸型

GT2505HS-VTBD 三菱触摸屏手持式5.7寸型 GT2505HS-VTBD参数,GT2505HS-VTBD用户手册,GT2505HS-VTBD使用手册GT2505HS-VTBD参数说明:手持式5.7吋型,VGA 640*480,TFT彩色液晶屏,65536色,内存32MB,DC24V,内置以太网接口。 GT2505HS-VT…

agiletc部署

数据库创建及运行 启动命令 cd /AgileTC/case-server&& nohup mvn spring-boot:run &查看是否启动成功 http://192.168.101.:8094/case/caseList/1需要安装java javac等 一、安装java 1 安装java11 sudo yum install java-11-openjdk-devel -y2 切换到java11 …

【零基础】system generator①设置卡解析

1.在matlab中我们输入的是双精度浮点型数据,经过gateway后变成定点型。十六位十四个小数位,整个数据有十六位,其中十四位给了小数 2.fixed-point定点型;signed有符号;2’s comp补码 3.量化误差 truncate,舍…

同时安装多个nodejs版本可切换使用,或者用nvm管理、切换nodejs版本(两个详细方法)

目录 一.使用nvm的方法: 1.卸载nodejs 2.前往官网下载nvm 3.安装nvm 4.查看安装是否完成 5.配置路径和淘宝镜像 6.查看和安装各个版本的nodejs 7.nvm的常用命令 二.不使用nvm,安装多个版本: 1.安装不同版本的nodejs 2.解压到你想放…

Ubuntu 22.04 下,VS Code 配置 C++ 编译及 CMake

一、VS Code 安装以及 C 编译环境配置 1. 在 Ubuntu 中安装 VS Code 笔者直接在 Ubuntu Software 中心安装 VS Code。也可以从VS Code官网下载 deb,解压 dpkg -i 安装。 2. VS Code 中配置 g/gcc 1) 安装 C/C 扩展 (CtrlShiftX) 2&#x…

差速机器人模型LQR 控制仿真(c++ opencv显示)

1 差速机器人状态方程构建 1.1差速机器人运动学模型 1.2模型线性化 1.3模型离散化 2离散LQR迭代计算 注意1:P值的初值为Q。见链接中的: 注意2:Q, R参数调节 注意3:LQR一般只做横向控制,不做纵向控制。LQR输出的速度…

辅助阅读代码

辅助代码工具: 1、sourcetrail 2、valgrind , qcachegrind sourcetrail,可以生成类图,以及类之间,函数之间的调用关系 1、安装 2、使用该工具需要使用cmake 编译一次 cmake -DCMAKE_EXPORT_COMPILE_COMMANDSON 其他…

手机同步与数据安全:让手机和电脑完美结合!

在当今这个高度信息化的社会,手机和电脑不仅为我们提供了丰富的信息资源,让我们能够随时随地获取所需的信息,还为我们的生活带来了极大的便利。无论是工作、学习还是娱乐,手机和电脑都发挥着至关重要的作用。 然而,随…

Paddle 实现DCGAN

传统GAN 传统的GAN可以看我的这篇文章:Paddle 基于ANN(全连接神经网络)的GAN(生成对抗网络)实现-CSDN博客 DCGAN DCGAN是适用于图像生成的GAN,它的特点是: 只采用卷积层和转置卷积层&#x…

优先队列——大小堆—— priority_queue

本人博客主页 本篇博客相关博客 二叉树--讲解 文章目录 目录 文章目录 前言 一、priority_queue是什么? 二、priority_queue的使用 1、相关函数 2、代码使用 3、堆的插入删除 三、模拟实现 1、大框架 2、仿函数 3、向下调整 4、向下调整 总结 前言 在我们学习二叉…

免费SSL证书怎么签发

大家都知道SSL证书好,作用大,安全性高,能加权重,等保必须的参考值。但是如何选择合适且正确的证书也是至关重要的,网站更适合单域名证书、多域名证书、泛域名证书、还是多域名通配符证书。 首先大家要清楚&#xff0c…