【3D硬核】四元数(Quaternions)与旋转矩阵(Rotation)——三维空间中的旋转

三维重建、图形学、SLAM、机器人运动控制中有一个基础而又硬核的知识点--旋转与平移。他们经常在一个系统内部交替使用,以发挥它们各自在不同计算阶段的优势。不同的表示方法在内存占用、插值平滑度、求导计算(优化)以及直观理解上有着截然不同的特性。另外这个概念与数学中的李群紧密结合,本文试图以大家看得懂的模式娓娓道来。

一、四元数

旋转矩阵(9参数)太冗余,容易产生舍入误差导致矩阵不再正交!欧拉角(3参数)虽然直观,却存在 万向节死锁(Gimbal Lock)的奇异性。四元数以 4 个参数的代价,完美平衡了计算效率、紧凑性与连续性,它是描述三维旋转最"优雅"的代数形式。

1.0 楔子------刚体旋转与欧拉旋转定理

1.0.1 刚体旋转

在 SLAM、机器人运动学和三维重建中,我们处理的对象通常是刚体(Rigid Body)------比如一台无人机、一个机器人的机械臂,或者三维扫描得到的一个石膏像。

刚体旋转 (Rigid Body Rotation)是指刚体在空间中绕某一点或某根轴做转动,且在转动过程中,刚体内部任意两点之间的距离保持不变

核心几何特性:

  • 保距性(Isometry):物体不会变大,也不会变小,更不会发生扭曲。
  • 保角性:物体内部的夹角保持不变。
  • 手性保持:左手坐标系旋转后依然是左手坐标系,不会变成镜像。

在数学上,这意味着描述刚体旋转的算子(无论是旋转矩阵还是四元数),必须是一个特殊正交算子(Special Orthogonal Operator),其模长(或行列式)必须严格等于 1。

我们定义的旋转即绕某一个对象进行旋转,并且这里约定后续:在二维空间中,旋转是围绕一个二维点的旋转,实际上在二维平面 中,所有的运动都被限制在 xy 平面内。当你进行旋转时,平面内唯一不动的"锚点"就是圆心。

从二维升一维,在三维空间中,旋转是围绕一个旋转轴的旋转,二维空间围绕点旋转就是从三维空间中围绕一个轴旋转的俯视。

1.0.2 欧拉旋转定理

在 1775 年,莱昂哈德·欧拉(Leonhard Euler)提出了一个关于定义:

不管一个三维刚体经过了多么复杂的连续翻滚、旋转(只要不发生平移),它最终的姿态,都可以等效为绕着空间中某一根特定的轴,旋转了一个特定的角度

后面我们还要提到。

1.1 开头------从坐标到算子

在二维平面中,一个复数也就是点 (x,y) z=x+iy 在复平面上既是一个点,也是一个从原点出发的向量。 当我们想让这个点旋转 θ 时,最直观的想法是使用 2×2 旋转矩阵。然而,复数提供了一种更优雅的工具:单位复数算子 q=cosθ+isinθ

根据欧拉公式 ,r是模长,旋转后的新位置即为:

也即:

矩阵形式,把上式展开:

如果我们将实部和虚部重新写成向量形式 ,它完全等同于二维旋转矩阵的操作:

这也就是复数乘法的几何意义:模长相乘,幅角相加

  • 由于 q 是单位复数,其模长为 1,这意味着乘以 q 不会拉伸向量(保模性)。
  • 乘法动作直接作用于相位角,将 θ 叠加到原有的相位上。

欧拉公式不仅是一个优美的等式,它实际上是将三角函数的加法定理 封装进了一个简单的指数符号中。它告诉我们:复数乘法在代数上的自洽性,刚好完美契合了欧拉平面上的几何旋转。

【思考🤔】 :这种"一个乘法解决一个旋转"的算子化思想极其迷人。我们是否能直接迁移这个逻辑到三维空间?比如,给复数再加一个虚轴 j,构造一个三元数?数学家哈密顿曾为此苦恼了十年,直到他意识到三维旋转的本质比二维要复杂得多。

1.2 几何过渡------罗德里格斯公式的深度拆解

在三维空间中,旋转不再是绕着一个"点",而是绕着一根"轴" u。在引入四元数之前,我们必须先从几何层面理解旋转到底发生了什么。

剧透介绍一下这个公式:

罗德里格斯公式描述了三维向量绕单位旋转轴旋转θ角后的结果。

其中,第一项是向量在旋转轴垂直方向的分量按角度旋转,第二项是向量在旋转轴方向的分量保持不变,第三项是向量与旋转轴的叉积产生的旋转分量,。

1.2.1 向量的正交分解

假设我们要绕单位轴 u 旋转向量 v。罗德里格斯公式的第一步是将 v 分解:

  • 平行分量 v∥​ :它是 vu 方向上的投影。在旋转中,它像轴心一样不动。
  • 垂直分量 v⊥​ :它是 v 垂直于轴的部分。旋转的本质,就是这个分量在垂直平面内的二维运动。

1.2.2 构造旋转平面

为了描述 v⊥ ​ 的旋转,我们需要在该平面内找到另一个基向量。通过叉积 w=u×v ,我们得到了一个与 **v⊥**​ 等长且垂直的向量。此时,旋转后的垂直分量可以表示为:


俯视图看刚才的旋转

最终,合成旋转后的向量:

罗德里格斯公式虽然直观,但它是一堆向量运算(点积、叉积、加法)的集合。它缺乏复数那种"一个乘法搞定一切"的代数简洁性。而四元数的出现,就是为了把这串复杂的几何投影封装进一个四维代数系统里。

1.3 代数跃迁------四元数的诞生与哈密顿规则

1843 年之前,哈密顿一直苦苦寻找一种"三维复数"(超复数),形式上他希望它是 a+bi+cj。他认为,既然二维旋转需要一个实部和一个虚轴(1 和 i),那么三维旋转理应需要一个实部和两个虚轴(1、i 和 j)。哈密顿意识到三维旋转无法在三维代数内封闭。

如果我们要定义三元数 q=a+bi+cj,那么计算两个三元数的乘法时,必然会产生一个项:i×j

  • 在二维复数中,i×i=−1,依然留在系统内。
  • 在三维构想中,i×j 等于什么?如果它等于某个常数,或者回到 a,i,j 之中,会发现逻辑无法自洽。这样的构造没有意义!
  • i×j 必须指向一个全新的维度 。1843年,他跳出思维定式,引入了第四个维度。这个新维度既不是 i,也不是 j,而是垂直于它们的 k

这里我们暂且先不讨论四元数的几何意义,后面会提到的!

1.3.1 定义与核心规则

四元数 q 由一个实部 w 和一个三维向量部分 v 组成:

其基本规则 蕴含了非交换性这里的乘法是叉积

1.3.2 乘法中隐藏的几何

设两个四元数分别为 q1​=[w1​,v1​] 和 q2​=[w2​,v2​](其中 w 是实部,v 是虚部向量)。

当我们计算两个四元数乘积 时,

我们先看实部,

这里的点积项 v1​⋅v2​ 对应的是几何中的投影在罗德里格斯公式中,我们需要处理平行分量(投影),而四元数通过实部自动结算了这些投影产生的重叠部分。

再看结果的虚部为:

注意那个叉积项! 它正是罗德里格斯公式中 u×v 项的代数来源。在罗德里格斯公式中,u×v 的作用是在三维空间中临时构建一个垂直于轴的虚轴 。 在四元数乘法里,i,j,k 三者的乘法规则(如 i×j=k)本质上就是单位向量的叉积 。 当 v1​ 和 v2​ 相乘时,算子自动通过叉积项 v1​×v2​ 找到了那个垂直于它们的"第三维度"。这说明四元数乘法天生就具备描述三维空间旋转关系的"几何直觉"。

1.3.3 对齐罗德里格斯公式

回头看看齐罗德里格斯公式

如果我们让 q 作为一个旋转算子,令 w=cosθ 且 ∣v∣=sinθ(暂且不考虑 θ/2),我们发现前面的:

  • 项处理的是旋转中与原向量平行或共面 的线性组合。后面还会提到
  • 项则直接接管了罗德里格斯公式中那个让向量跳出原始方向、进入垂直平面的动力。

四元数乘法里的叉积项不是数学家的随意发明,它正是为了捕获那个'绕轴旋转'时必须产生的垂直分量。哈密顿通过引入 k 这个维度,强行让原本在三维里'无法封闭'的叉积运算,变成了一个自给自足的代数闭环!

  • 在罗德里格斯公式中,u×v 的作用是在三维空间中临时构建一个"虚轴",好让向量在垂直平面内旋转。
  • 而在四元数定义中,哈密顿规定 i×j=k,j×k=i...。当你计算两个虚部向量 v1 和 v2 的乘积时,四元数代数强制要求产生一个叉积项。

不妨这样说,四元数乘法本质上就是一套高度自动化的罗德里格斯公式计算器。

四元数乘法自带的叉积性质,完美承接了罗德里格斯公式中"跳出原始维度"的需求。它不是凑巧长得像,而是四元数代数在设计之初,就内嵌了三维空间旋转的几何手性(Right-hand rule)。

四元数乘法与这个公式的关系,下一节会详细推出!

有了这套代数系统,我们终于可以像操作复数一样操作三维旋转了。但这里有一个巨大的陷阱:如果我们直接左乘一个四元数,结果会产生一个"四维残留",让我们的点跑出三维空间。请接着看下一节。

1.4核心奥义------三明治变换与"半角"之谜

这一节,我们会从公式计算来得出一个惊艳的巧合:三明治变换凑齐了齐罗德里格斯公式!!!

1.4.1 纯四元数

引入四元数以后,三维空间的点 p 被表示为实部为 0 的纯四元数 p=[0,v](三维空间三个维度)。

如果我们定义旋转算子(这个说法类比前面二维复数的情况) (这里先用 α 代替角度 ,悬念留到最后),直接执行左乘 根据四元数乘法公式(实部相乘减点积,标量乘向量加叉积),结果是:

化简:

看看这个实部,变成了 −sinα(u⋅v )。除非我们的原始向量 v 刚好垂直于旋转轴 u(此时点积为 0),否则这个实部绝不为零 。这意味着经过一次单边乘法,我们的三维空间点p"跑出了三维世界,被强行挤入了第四维度(实数轴)! 它不再是一个纯向量了,这就叫维度的污染。

1.4.2 三明治结构的"洗涤"作用

为了解决维度污染,也就是把这个跑到四维空间的向量"拉回来",我们需要一个反向操作。

对于单位四元数,它的逆 刚好等于它的共轭(即实部不变,虚部向量取反):

1.实部

我们执行双边操作:

我们顺着刚才的继续算:

根据四元数乘法公式

最终实部 :

这是一个非常可观的结果,右乘产生的点积项刚好和左乘留下的实部完全抵消,这个乘积使得结果的实部恢复到了0!

2.虚部

再看虚部,为了逻辑清晰,我们把 v 分解为 v∥​ 和 **v⊥**​ 来观察:

把所有虚部项加起来:

化简:

  • 平行部分: (sin2α+cos2α)v∥​ =v∥​
  • 垂直部分: (cos2α−sin2α)v⊥ =cos(2α)v⊥​
  • 叉积部分: (2sinαcosα)(u×v )=sin(2α)(u×v)

于是:=[0,]

3.合起来

我们计算出结果发现:

  • 实部归零 :证明了双边操作是三维空间纯洁性的'洗涤剂',保证了三维向量p仍在三维空间内。
  • :在虚部化旋转效果发生了叠加。化简出了旋转的二倍角!这意味着,如果想让向量旋转 θ,给四元数的初值 α 必须减半。

这个角度叠加可以类比于二维复数旋转算子的情况,一个复数经过旋转算子,得到的值是模不变,角度叠加!

另外,这里的 双边操作 被称为三明治变换!

这个结果是非常惊艳的,注意看这个虚部,和前面的齐罗德里格斯公式比较:

我们发现,三明治变换的结果的虚部就是齐罗德里格斯公式!实际上, 罗德里格斯公式是四元数旋转的几何原型 ,而四元数乘法是罗德里格斯公式在四维空间里的高效封装实现

  • "如果罗德里格斯公式是手动挡,你需要自己分解平行与垂直分量、自己计算叉积、自己组合各项;
  • 那么四元数乘法就是自动挡 。你只需要把旋转轴和角度封装进 q,把坐标封装进 p,执行一次 ,四元数代数内部的'齿轮'(点积控制实部、叉积控制虚部)就会自动完成所有复杂的几何投影和旋转合并
4.**奇妙的对称性,**为什么是 θ/2?

因为 p 在公式中被左右各"操作"了一次,旋转角会叠加。为了得到总角度 θ,我们构造 q 时必须使用半角

这不仅解决了代数封闭性,还引出了四元数的双倍覆盖(Double Cover)特性:q 和 −q 在三明治变换下对 p的作用是完全一样的:在三明治变换 中,如果我们把 q 替换为 −q,

所以,从代数结果看,q 和 −q 对向量 p 产生的位移完全一致。但在四元数空间里,q 和 −q 却是两个截然不同的点(互为镜像)。

5.还有一个问题

到这里,我们做了:从二维复平面举例了围绕点的旋转算子,在三维空间中回顾了齐罗德里格斯公式 ,然后跟着哈密顿定义了四元数,并且发现这个定义导致了三明治变换的虚部=齐罗德里格斯公式,

为什么我们要对一个纯四元数来进行这样乌漆嘛黑费尽巴脑的操作? 简单直接的回答是:因为"纯四元数"就是三维向量在四元数空间里的唯一合法化身。

只有当 p 是纯四元数时,这个变换才表现为"完美的刚体旋转"。如果你传入一个实部不为 0 的普通四元数 P=[w,v],三明治变换的结果会变成:

实部 w 根本没有变! 三明治变换就像一个"滤波器",它会自动跳过实部,只对虚部(向量部分)进行旋转叠加。

既然实部在旋转中完全不参与演化,我们为了计算三维空间的点,自然就令起始实部为 0,这样结果的实部也是 0,省去了处理多余维度的麻烦。

这是代数意义上的,从直观上讲,三明治变换**** 得到的虚部,就是齐罗德里格斯公式的代数实现!当然这个实现是基于哈密顿构造的四元数!所以我们不用关心这个p的实部。

6. 例子

假设你要将向量 绕单位轴 旋转角度 θ。

由三明治变换公式 =[0,],

第一步:构造旋转四元数 q(算子化)

这是将旋转意图包装成四元数。根据半角公式:

注意: 轴 u 必须是单位向量(模长为 1)。如果不是,请先进行归一化。

第二步:构造纯四元数 p(向量化)

将你要旋转的空间向量 v 包装成实部为 0 的形式,不需要再归一化:

p=[0,x,y,z]

第三步:执行"三明治"变换

计算旋转后的四元数 p′:

由于 q 是单位四元数,其逆 q−1 等于共轭

旋转后的新位置 v′ 就藏在 p′ 的虚部(后三个分量)中:

1.5 它到底是什么样子?------直观意义

1. 4D 空间中的"单位矢量

如果说复数 是"带有旋转性质的数字",那么四元数 在几何上就是:三维空间中"旋转算子"的终极封装。

四元数 q=[w,x,i,j] 几何上存在于一个四维空间中的一个单位球面:

  • 单位约束:所有的旋转四元数都落在四维空间的"单位超球壳"(3-Sphere)上。
  • 几何直觉:你可以把四元数想象成一根从四维原点指向超球面上某个点的"指针"。
  • 旋转的本质 :这个指针在四维球面上的位置,唯一确定了三维空间中物体的一个姿态
2."轴-角"描述的代数化身

四元数的四个分量并不是孤立的,它们是对旋转几何要素的重新编码:

  • 实部 w=cos(θ/2):代表了旋转的"量"。它决定了旋转在四维空间中向"实轴"偏移的程度。

  • 虚部 v=sin(θ/2)u:代表了旋转的"质"。它的方向完全指向旋转轴 u,其长度则取决于旋转角度的大小。

3."坐标系变换"的传送门

这是工程中最核心的几何意义。

  • 单边 qp:几何上相当于把向量 v 从我们的三维世界"踢"向了四维空间的一个中间状态。

  • 双边 qpq−1 :几何上是一场镜像对称操作。左乘 q 开启了旋转,右乘 q−1 像一面镜子一样,把所有偏离三维空间的"分量"全部反射回来,并在旋转平面内完成了角度的叠加。

1.6现代工程的利器------Slerp 插值

在 SLAM 相机轨迹优化或 3D 动画中,我们需要在两个姿态 q0​ 和 q1​ 之间平滑过渡。

1.6.1 线性插值(Lerp)的局限

直接对 4 个分量取平均再归一化(Nlerp),虽然简单,但会导致角速度不均匀(中间快,两头慢),在精密传感器融合中会导致畸变。

1.6.2 球面线性插值(Slerp)

由于单位四元数分布在一个四维超球面上,Slerp 沿着球面的大圆弧进行等弧长滑动。

这种方式保证了匀角速度旋转

二、旋转矩阵

2.1 基本知识

旋转矩阵 (Rotation Matrix) 是三维视觉、计算机图形学和机器人学中最基础的数学工具之一。它在代数上是一个矩阵,但在几何上,它完美地描述了刚体在空间中的姿态变化,或者两个坐标系之间的相对朝向。

在数学上,三维空间中的旋转矩阵属于特殊正交群 SO(3) (Special Orthogonal Group)。

2.1. 1 核心数学性质

我们类比前面二维空间中的旋转,

类似地,一个 3×3 的矩阵 R 要想成为一个旋转矩阵,必须严格满足以下两个条件:

2.1.2. 几何直觉:旋转矩阵的列向量就是"新基底"

很多人觉得旋转矩阵是一堆枯燥的三角函数组合。但其实,理解旋转矩阵最直观的方式是把它看作三个列向量的组合

当你用旋转矩阵 R 乘以一个坐标轴的单位向量(比如 X 轴 [1,0,0]T)时,得到的结果正是 rx​。

  • 旋转矩阵的第一列,就是旋转后的新 X 轴在原坐标系下的坐标;第二列是新 Y 轴的坐标;第三列是新 Z 轴的坐标。
  • 这也解释了为什么它必须是正交矩阵:因为现实中刚体的 X、Y、Z 轴永远是互相垂直且长度为 1 的,所以 R 的三个列向量也必须是互相正交的单位向量。

2.2 再探欧拉旋转定理

欧拉旋转定理 (Euler's Rotation Theorem) 是刚体运动学和三维空间几何中一个非常核心且优雅的定理。简单来说,它证明了三维空间中任何两个共原点的参考系,都可以通过绕某一个固定轴的一次旋转来相互转换。

换句话说:不管一个三维刚体经过了多么复杂的连续翻滚、旋转(只要不发生平移),它最终的姿态,都可以等效为绕着空间中某一根特定的轴,旋转了一个特定的角度

2.2. 1数学表述与几何直觉

欧拉旋转定理 (Euler's Rotation Theorem) 是刚体运动学和三维空间几何中一个非常核心且优雅的定理。简单来说,它证明了三维空间中任何两个共原点的参考系,都可以通过绕某一个固定轴的一次旋转来相互转换。

换句话说:不管一个三维刚体经过了多么复杂的连续翻滚、旋转(只要不发生平移),它最终的姿态,都可以等效为绕着空间中某一根特定的轴,旋转了一个特定的角度

在数学上,三维空间中的旋转通常由一个 3×3 的正交矩阵 R 来表示,且满足 det(R)=1(特殊正交群 SO(3))。欧拉旋转定理的本质是指出:

对于任何旋转矩阵 R,必然存在一个非零向量 v,使得

这意味着:

  • 这个向量 v 在旋转操作下保持不变。
  • 这个保持不变的方向,就是旋转轴
  • 既然 Rv =1⋅v ,说明旋转矩阵 R 必然有一个特征值为 λ=1,而旋转轴就是对应于这个特征值的特征向量

2.2.2轴角、罗德里格斯与四元数

欧拉旋转定理直接奠定了三维旋转的轴角表示法 (Axis-Angle Representation) 的理论基础。既然任何旋转都可以用一个单位向量 u(旋转轴)和一个标量 θ(旋转角)来描述,我们就可以衍生出极为强大的数学工具:

罗德里格斯旋转公式 (Rodrigues' Rotation Formula): 欧拉定理告诉我们轴和角的存在,而罗德里格斯公式则提供了从三维向量 v 绕轴 u 旋转 θ 角度后的精确代数计算方法,并能直接推导出等效的旋转矩阵 R。它建立起了轴角和旋转矩阵之间的显式桥梁。

四元数 (Quaternions): 轴角表示法可以非常自然地转化为单位四元数 q=(cos2θ​,usin2θ​)。在处理大规模三维重建和视觉定位任务时(例如 Structure from Motion 中的全局 Bundle Adjustment,或 3D Gaussian Splatting 的位姿优化),直接对 3×3 的旋转矩阵进行梯度下降是非常困难的,因为很难保持矩阵的正交性。而四元数利用了欧拉定理的本质,不仅计算极其高效、避免了万向节死锁,还能提供平滑的连续梯度(通过球面线性插值 Slerp 等方式),这是现代 3D 视觉算法的基石。

2.4 到底是哪个?绕轴旋转还是新坐标系基底

答案:两者描述的是同一件事情的过程与结果,绕轴旋转是过程,新坐标系基底是结果,我们设原始三维空间坐标系也就是世界坐标系为w1,无论是坐标系中的一个刚体还是坐标系中某个点,绕某个轴旋转得到新的坐标位置,都相当于这个刚体和该点进入了新的坐标系w2,而w1转换到w2的矩阵,还是这个旋转矩阵!旋转矩阵的列向量构成了w2的基底。

我们还可以这样理解,刚体和坐标系原点就是绑定的,刚体围绕转轴旋转也就相当于坐标系在旋转!

2.4 旋转矩阵与四元数的转换

2.4.1 四元数到旋转矩阵(q→R)

由单位四元数构造旋转矩阵是一个纯代数多项式展开的过程,完全避免了三角函数的计算,因此在计算图(如 CUDA 并行渲染或神经网络前向传播)中执行效率极高。

设单位四元数为 q=[w,x,y,z]T。将其与欧拉旋转定理中的轴角参数化对齐:w=cos(2θ​),[x,y,z]T=usin(2θ​)。通过将其代入罗德里格斯公式并利用半角公式化简,可以直接得到对应的 3×3 旋转矩阵 R:

在 3DGS 等基于可微渲染的大规模场景重建算法中,为了保证 3D 高斯的协方差矩阵 始终半正定,通常将旋转状态定义为 4 个独立的可优化参数(四元数)。在每次前向传播渲染时,底层 CUDA 代码会强制对这 4 个参数进行 L2 归一化(使其成为单位四元数),随后直接套用上述公式生成旋转矩阵 R,进而完成后续的投影计算。这种参数化不仅计算极快,且天然保证了反向传播时梯度的连续性。

2.3.2 旋转矩阵到四元数(R→q)

从 3×3 矩阵 反推四元数的过程,本质上是求解上述方程组的逆问题。由于 q 和 −q 代表三维空间中的同一个物理旋转(双重覆盖性质),因此反解结果会有符号上的多态性。

为了求解,我们首先观察矩阵的迹(Trace):

由此可解得实部 w:

观察非对角线元素的差值,可以分离出 x,y,z:

在实际的程序实现(如 Eigen 库或 Ceres Solver 的底层实现)中,直接使用上述公式除以 4w 是极度危险的。当旋转角接近 180∘ 时,w→0(即 Tr(R)→−1),会导致严重的除零溢出。

因此,严谨的 R→q 算法必须引入分支逻辑(Pivoting),寻找模长最大的四元数分量作为分母来计算其他分量,具体在这里不做展开了,现在大多数第三方库都有对应方法。

2.5 colmap中的R与t

2.5.1 w2c与c2w

作为3DGS的研究者,我们不得不提一下SfM,他的目的是利用已有图像的特征,来估计相机位姿R与t以及据此进行三维重建。这里的旋转矩阵利用点就是坐标系的转换,比如,我们在colmap界面查看的时候,是从世界坐标系来看的,所以相机姿态R是一个world to camera(w2c)矩阵,也就是任意点被w2c左乘都会把这个点变换到相机坐标系下,

X_cam = * X_world +

反之,为c2w矩阵,也就是相机坐标系下任意点,被c2w左乘,都会变到世界坐标系下:

X_world = * X_cam +

2.5.2齐次坐标

我之前的mvg篇提到过,不同于SLAM和机器人领域,计算机视觉中设定了这个R与t是在射影空间内,也就是欧式空间加了一个scale的"属性",这样使得空间变得完整并且符合我们人类肉眼的感知,也就是任意两条直线必相交!但在欧式空间内两条直线还有可能平行。

射影空间下坐标为齐次坐标,我们因此也把旋转与平移放在一起:

展开后等价于:。 这清晰地展示了:点首先被旋转,然后被平移。

由于 R 是正交矩阵,齐次矩阵的逆 具有解析解,不需要进行复杂的矩阵求逆:

2.5.3 colmap gui

推导那么多干什么呢?主要是为了直观展示colmap gui界面中的相机外参,尤其是位置。

我们打开一个点云,注意看世界坐标系原点rgb轴的位置,在鸟头顶的附近:

打开图片:

里面rotation为相机旋转的四元数转换过去就是,transiation是

我们在看一下这个公式:X_cam = * X_world + ,把世界坐标系的原点带入,就会发现,原点在相机坐标系的位置刚好就是这个!!!

所以说,我们以图片为坐标中心去看刚才那个世界坐标系原点的时候,这个点就位于=[0.00302111,-1.2168,3.41264],也就是,这个点在相机坐标系原点的上方偏左的位置。

那么,相机中心位于世界坐标系的位置呢?答案是:camera_center = -R^T * t,这是根据前面的公式计算的:

2.5.4 相机内外参的计算

相机内参包括cx,cy(图片分辨率的一半),fx,fy(x,y方向的焦距),外参数就是R,t,我们如何估计他们呢,一般来说内参包含在图片信息中可以获取,在colmap中也可以估计,我们假设内参已知,梳理一下估计外参的过程,根据极几何

首先,通过PnP(Perspective-n-Point)算法通过几对特征点x来求解基础矩阵F(3*3矩阵):

F自由度为8,故可以用8对特征点来求解。这个F包含了相机内参K和外参的信息,利用图像间的特征点匹配关系,我们可以得到一个本质矩阵E,E 在代数上隐式包含了平移和旋转:

然后SVD分解得到R,t:

有了相对位姿,就可以通过三角化 (Triangulation) 算出初始的 3D 点云,这就为后续新图片的 PnP 估计打下了基础。

2.5.5 colmap的bundle adjustment简介

在处理类似 COLMAP 的稀疏重建任务时,我们面对的是一堆完全未知的图片,内参(包括畸变)、外参、3D 点坐标全都是未知的。这就是所谓的自标定 (Self-Calibration) 过程。

就是让所有 3D 点投影回 2D 图像上的位置(算子),与 SuperPoint/SIFT 提取出的真实 2D 像素位置 之间的误差,在整体上达到最小。

经过 Ceres Solver 等后端优化器的多次雅可比矩阵求导和迭代更新,最初"粗糙"的 cx,cy,fx,fy 会慢慢收敛到最符合真实物理镜头的精确值,甚至能精准捕捉到微小的畸变系数。

参考文献

https://krasjet.github.io/quaternion/quaternion.pdf

相关推荐
极光代码工作室2 小时前
基于机器学习的垃圾短信识别系统
人工智能·python·深度学习·机器学习
咕噜签名-铁蛋2 小时前
大模型Token Plan详解:选型、优化与成本控制全攻略
大数据·运维·人工智能
Coremail邮件安全2 小时前
CACTER重磅升级|以 AI 原生重构邮件安全,开启认知防护新时代
人工智能
水上冰石2 小时前
【智能体开发】【开发工具】【入门】7.Codex CLI入门
人工智能
key_3_feng2 小时前
鸿蒙NEXT原生AI智能家庭助手开发方案
人工智能·华为·harmonyos
MRDONG12 小时前
深入理解 RAG(Retrieval-Augmented Generation):原理、工程体系与实践指南
人工智能·算法·语言模型·自然语言处理
bryant_meng2 小时前
【Reading Notes】(8.9)Favorite Articles from 2025 September
人工智能·深度学习·llm·资讯
互联网科技看点2 小时前
诸葛智能入选IDC最新报告:以营销智能体驱动金融增长
大数据·人工智能·金融
东离与糖宝2 小时前
静态语言与动态语言基础:核心区别对比
人工智能