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

3DGS之齐次坐标

一、齐次坐标是什么?

        齐次坐标是一种用 N+1维向量表示N维空间中的点或向量 的数学工具。例如,3D笛卡尔坐标系中的点 (x,y,z)在齐次坐标系中会被扩展为四维向量 (x,y,z,w),其中 w 是比例因子(通常设为1)。

其核心特性包括:

  1. 统一性:通过引入第四维分量 w,齐次坐标可以统一表示点、向量以及无穷远点:
    • 当 w=1 时,四维坐标 (x,y,z,1) 对应3D点 (x,y,z);
    • 当 w=0 时,四维坐标 (x,y,z,0) 表示向量或无穷远点(如平行线的交点) 。
  2. 比例不变性:齐次坐标允许通过缩放所有分量表示同一个点,例如 (2,4,6,2) 和 (1,2,3,1)对应同一个3D点 (1,2,3)。
二、为什么3DGS需要将3D点转换为齐次坐标?

        在3DGS等图形学应用中,齐次坐标的核心价值在于 通过4x4矩阵统一表示所有几何变换,具体原因如下:

1. 统一仿射变换的数学表达
  • 笛卡尔坐标的局限性:在普通3D坐标中,平移变换需用向量加法(如 x′=x+tx),而旋转和缩放是矩阵乘法。这种混合操作无法通过单一矩阵统一描述。
  • 齐次坐标的矩阵统一性:引入齐次坐标后,平移、旋转、缩放等变换均可表示为4x4矩阵乘法:
    • 平移矩阵:​​​​​​

    • 旋转/缩放矩阵

        这种统一性允许通过矩阵连乘实现复杂的组合变换(如先旋转再平移)。

2. 支持透视投影与相机模型

        在3DGS中,场景需要投影到2D图像平面(如渲染过程):

  • 透视投影的数学需求:透视变换是非线性的(物体近大远小),而齐次坐标通过4x4矩阵可编码透视投影参数(如视场角、近远裁剪面),最终通过齐次除法(x/w,y/w,z/w)将点映射到标准化的设备坐标系。
  • 相机位姿建模:相机的位置和朝向变换(如从世界坐标系到相机坐标系)可通过齐次矩阵一次性完成,无需分步计算平移和旋转。
3. 计算效率与代码简洁性
  • 批量处理点云:在3DGS中,场景可能包含数百万个点(形状为[P, 3]),转换为齐次坐标[P, 4]后,所有变换操作均可通过矩阵乘法实现,便于GPU并行加速。
  • 避免条件分支:齐次坐标的固定维度消除了对点和向量的特殊处理(如平移仅作用于点),简化代码逻辑。
三、实际案例:3DGS中的坐标变换流程

        假设3DGS需要对场景中的点云进行旋转、平移和透视投影:

  1. 输入数据:原始点云为[P, 3]的笛卡尔坐标。
  2. 转换为齐次坐标:添加第四维 w=1,得到[P, 4]的齐次坐标。
  3. 应用变换矩阵
    • 通过4x4矩阵组合旋转和平移;
    • 投影矩阵将3D点映射到2D屏幕空间。
  4. 齐次除法:将结果坐标的 x,y,z 分量除以 w,得到最终的归一化坐标。
四、总结

        齐次坐标通过 增加第四维度统一矩阵运算,解决了笛卡尔坐标无法统一表示仿射变换的问题,特别是在处理平移和投影时。在3DGS中,这种表示方法能够简化数学运算,提高计算效率,并支持复杂的变换组合,使得场景重建和渲染更加高效和灵活。

http://www.xdnf.cn/news/1327.html

相关文章:

  • 【Java面试笔记:基础】13.谈谈接口和抽象类有什么区别?
  • 基于nodeJS代码的通过爬虫方式实现tiktok发布视频(2025年4月)
  • 云原生时代的双轮驱动
  • 基于GMM的语音识别
  • 抱佛脚之学SSM五
  • Linux之彻底掌握防火墙-----安全管理详解
  • 【KWDB 创作者计划】_上位机知识篇---MQTT协议
  • 软考资料分享
  • K8S安全认证
  • 【论文阅读】Hierarchical Group-Level Emotion Recognition
  • 国产RK3568+FPGA以 ‌“实时控制+高精度采集+灵活扩展”‌ 为核心的解决方案
  • 远程控制Firefox浏览器实例的挑战与Playwright的CDP和Selenium Marionette解决方案
  • Python中的“,”
  • 【OceanBase相关】02-OceanBase数据库NFS备份实践
  • C++笔记-stack_queue(含deque,priority_queue,仿函数的讲解)
  • ADW600防护等级与电气安全设计要点详解
  • 深入探究Linux项目自动化构建工具:make与Makefile
  • Kafka 主题设计与数据接入机制
  • windos端远程控制ubuntu运行脚本程序并转发ubuntu端脚本输出的网页
  • Uniapp 中缓存操作指南
  • 【笔记】CentOS7部署K8S集群
  • unity编辑器的json验证及格式化
  • 明远智睿2351开发板:性价比之选,赋能智能硬件创新
  • QT6 源(45):分隔条 QSplitter 允许程序的用户修改布局,程序员使用 IDE时,就是分隔条的用户,以及其 QSplitter 源代码
  • 【playwright】学习--持续汇总
  • CMake 入门指南:从零开始配置你的第一个项目
  • 动态贴纸+美颜SDK的融合实现:底层架构与性能优化技术全解析
  • Redis-cli常用参数及功能的详细说明
  • 基于Flask与Ngrok实现Pycharm本地项目公网访问:从零部署
  • Redis常见命令