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

别再混淆了:3D高斯泼溅中的“仿射近似”、透视投影与正交投影

如果你刚开始接触3D Gaussian Splatting(3DGS),大概率会看到这样一句话:

“将非线性透视投影近似为仿射变换。”

同时,如果你做过直接法视觉SLAM(如DSO),可能会在光度误差的雅可比推导里看到一个眼熟的矩阵,心里犯嘀咕:这不就是同一个东西吗?

更让人困惑的是,有些资料说“正交投影是仿射变换”,那3DGS里的“近似成仿射变换”是不是就等于把透视换成了平行光线?仿射变换到底包不包括缩放?

这篇文章就是要把这些疙瘩一次性解开。


1. 非线性透视 vs 仿射变换:它们本来是谁?

非线性透视投影

就是我们最熟悉的针孔相机模型。一个三维点 ((X,Y,Z)) 在图像上的像素坐标是:

这里有一个除以深度 (Z)的操作,因此整个映射是非线性的。这种非线性带来了近大远小的透视效应,但它有一个“麻烦”:如果把一个完整的高斯分布(带有协方差)直接通过这个非线性函数,投影后的分布就不再是高斯了,无法用简单的2D高斯去表达和渲染。

仿射变换

仿射变换的数学形式是“线性变换 + 平移”

线性部分可以是任意矩阵,所以它不仅可以旋转、平移,还可以缩放、剪切、反射。换句话说,仿射变换的范围远比“刚体变换(旋转+平移)”要宽。

在几何上,仿射变换保持直线的平行性,但会改变长度和角度。


2. 3DGS 里的那个神秘雅可比 J

3DGS 为了把3D高斯渲染到屏幕上,需要对每个高斯的中心点做一次局部线性化。这个线性化的核心就是投影函数对三维点的雅可比矩阵

它是一个2×3 矩阵,描述了在某个三维点附近,像素坐标如何随三维位置而变化。

有了,再结合世界到相机的刚体变换,3D协方差 () 投影到2D时就可以写成:

这里的 () 就是那个“局部仿射变换”的线性部分。高斯中心本身仍然用原始非线性投影求像素位置(相当于仿射变换里的“平移”项)。

从一阶泰勒展开看:

我们在当前高斯的中心点处,用切线代替了原本弯曲的透视曲线。因此,这个近似只在当前高斯的小邻域里成立,并且每个高斯有自己的深度 (Z),也就有自己的 ()


3. 直接法视觉SLAM里的“同款”J

如果你熟悉直接法SLAM,比如在DSO中构造光度误差:

为了优化相机位姿或逆深度,需要用链式法则求导,中间必然出现一项:

这正是刚才那个2×3 的雅可比 J

所以,SLAM里看到的 J 和 3DGS 里的 J 在数学上是一模一样的东西,都是针孔投影函数的一阶导数。区别只在于“用途”:

  • SLAM中,它用来计算梯度,指导位姿或深度更新,是迭代优化的临时工具。每一步重新线性化,直到收敛。

  • 3DGS中,它被固化进渲染过程,用来把3D高斯近似地压扁成2D高斯,保持高斯形状以进行高效光栅化。一帧之内不再改变。

一个用来求解,一个用来近似表达


4. 辨析:仿射变换到底包含什么?

很多人下意识以为仿射变换就是“旋转+平移”,这是一个常见的误解。

实际上:

  • 旋转+平移→ 刚体变换(欧氏变换),是仿射变换的一个子集。

  • 仿射变换= 线性变换 + 平移,线性部分可以包含:缩放(均匀或不均匀)、剪切、旋转、反射等任意组合。

在3DGS里,中因为存在 () 和 (),天然包含了深度相关的不均匀缩放和剪切成分。它绝不是一个简单的旋转。


5. 透视投影 vs 正交投影:点光源与平行光

这里有一个物理直觉上的正确对应:

  • 点光源(针孔相机)→ 光线汇聚于一点 →透视投影,需要除以深度,非线性,近大远小。

  • 平行光线(远心镜头/无穷远光源)正交投影,直接扔掉深度坐标或仅做缩放,是线性的,没有近大远小。

而且,正交投影在数学上就是一种仿射变换。一个典型的正交投影可以写成:

没有任何除以 (Z) 的操作,显然是仿射的。

但是,这绝不意味着3DGS里把透视近似成仿射变换,就等于换成了正交投影。


6. 3DGS 的仿射近似并不是变成了平行光线

这是最容易被错误关联的一点。

3DGS 的局部仿射矩阵中,元素里依然包含 () 和 (),会随深度变化而显著改变。因此:

  • 不是一个全局统一的正交投影(那会完全丢弃深度影响)。

  • 它只是在单个高斯的小范围内,把局部的一小段透视曲线拉直成一条直线(仿射映射)。

  • 不同深度的不同高斯,有完全不同的。整幅图像拼在一起,依然完美地保留了近大远小的透视效果。

你可以这样形象理解:

真实的透视投影是一条完整的曲线;正交投影是另一条从头到底的直线。而3DGS的做法,是在曲线上的每个采样点处,用一小段切线(直线)去贴合曲线。整条曲线还是弯的,但每一小段是直的。

因此,3DGS的“仿射近似”是一种局部线性化,底层的光学模型依然是点光源透视,与把整个成像模型换成正交投影有本质区别。


结语

回到最初的那句话——“将非线性透视近似为仿射变换”,我们现在可以准确地解读它了:

  • 非线性透视是带除法的针孔投影。

  • 仿射变换是任意线性变换加平移,包含缩放、剪切等。

  • 这处近似是通过投影函数的雅可比 J在一阶泰勒展开下完成的,只在局部成立。

  • 这个 J 和直接法SLAM中用于梯度计算的 J 完全相同,只是被分别赋予了“渲染近似”和“优化引导”的不同使命。

  • 它不会把透视变成正交投影,只是用“小直线段”去逼近“大曲线”。

理解了这些,再去看3DGS的论文或代码,那些围绕着协方差投影、雅可比、仿射近似的模块就会变得非常通透。希望这篇博客能帮你扫清这些常见的概念雷区。

http://www.cnnetsun.cn/news/4083573.html

相关文章:

  • 锤子助手第064个开关:字体注入网页的位置、验证方法与网页显示安全边界
  • 窗口置顶工具 Topit 实测:把 Mac 上“不听话“的窗口钉在眼前
  • 点一次鼠标省下3小时:Pulover‘s Macro Creator 免费录制式自动化快速上手
  • 微信防撤回补丁怎么装?RevokeMsgPatcher 上手手记,5 分钟讲透
  • 软文发稿投放踩坑汇总|2026四大平台实力比对推荐
  • Motrix 开源项目教程
  • 给网页请一位“动画导演“:AOS 滚动动画库完整指南
  • 适老化做一个「药盒」而不是「健康中台」|爸妈的药盒上线笔记
  • League Akari 英雄联盟助手实战清单:从倒计时超时到秒选锁定的三天体验
  • CPU 优化:物理与动画——两个“偷偷吃 CPU“的大户
  • 你的围棋AI为什么又慢又飘?手把手KataGo引擎配置与调优完整指南
  • 【2014-04-28】kali linux 安装要点笔记
  • 别让笔记烂在Zotero里:ZotCard卡片笔记实战指南
  • BMS电池管理系统核心技术解析:从硬件设计到算法策略
  • douyin-downloader 批量下载实战指南:200 个视频,从两小时缩到八分钟
  • C# 学习8.7 泛型
  • Koodo Reader 阅读设置调校指南:按场景搭出一间专属书房
  • 窗口死活拖不动、改不了大小?用 Window Resizer 强制调整窗口大小,一步到位
  • 界面控件DevExpress WinForm——轻松构建类Visual Studio UI(三)
  • Sunshine 游戏串流应用配置终极指南:从第一次添加游戏到一键流畅串流
  • 迁移学习实战思路:如何用预训练模型完成文本分类
  • 67.QT-QSharedMemory
  • 加密音乐打不开?3个问题带你彻底搞懂
  • Java设计模式---代理模式
  • 第 4 篇:「当数据库坏了」— 优雅降级与七层防守
  • 《C++深度解构02》类和对象(上)——定义规范、内存对齐与 this 指针全解
  • AI智能体开发指南:企业如何构建智能体系统
  • nxdumptool 终极指南:3 步完成 Switch 卡带与数字游戏的完整备份
  • protal:基于比对的超快速宏基因组物种与菌株分辨分析谱工具
  • League Akari 完整上手指南:本地化英雄联盟辅助工具从安装到精通