Robotics - multiview geometry - projective geometry
- 表示:
- 三行线性无关;
- 输出空间有三个独立方向;
- (P) 的像空间是整个 (\mathbb R^3);
- 它已经达到 (3\times4) 矩阵可能具有的最大秩。
因此它是 full row rank,但不可能可逆,因为输入四维、输出三维。
## 对图像意味着什么?
齐次像点是:
[
\mathbf x=(x,y,w)^T
]
三个分量只在比例意义下有效,因此表示二维射影平面 (\mathbb P^2)。
rank 3 保证 (P\mathbf X) 不会永远被限制在 (\mathbb R^3) 中的某个二维平面或一维直线上,也就是
相机能够产生完整的二维射影图像。
### 如果 rank 2
这时存在非零向量 (\mathbf l),满足:
[
\mathbf l^TP=0
]
于是对于所有世界点:
# [
\mathbf l^T\mathbf x
\mathbf l^TP\mathbf X
=0
]
而:
[
\mathbf l^T\mathbf x=0
]
正是一条二维图像线的方程。
所以 rank 2 意味着:
> 所有三维世界点都被投到同一条图像线上。
### 如果 rank 1
所有输出都只能是同一个向量的倍数:
[
P\mathbf X\sim\mathbf x_0
]
所以所有世界点都退化为同一个射影像点。
因此:
rank 射影输出
━━━━━━ ━━━━━━━━━━━━━━━━━━
3 完整二维图像平面
────── ──────────────────
2 一条图像线
────── ──────────────────
1 一个图像点
## rank 3 还带来唯一相机中心
根据 rank-nullity theorem:
[
\dim\ker P+\operatorname{rank}(P)=4
]
因为:
[
\operatorname{rank}(P)=3
]
所以:
[
\dim\ker P=4-3=1
]
也就是说,存在一个非零齐次向量 (\mathbf C),并且所有零空间向量都是它的倍数:
[
P\mathbf C=0
]
在射影空间中,所有非零倍数代表同一个点,因此这个一维线性零空间对应一个唯一射影点:
[
\boxed{\mathbf C=\text{相机中心}}
]
注意这个转换:
R⁴ 中的一维线性子空间
↓ 去掉整体比例
P³ 中的一个射影点 C
## 为什么相同像点对应一条空间射线?
假设世界点 (\mathbf X_0) 投影到 (\mathbf x):
[
P\mathbf X_0=\mathbf x
]
因为:
[
P\mathbf C=0
]
所以:
# [
P(\mathbf X_0+\lambda\mathbf C)
# P\mathbf X_0+\lambda P\mathbf C
\mathbf x
]
因此所有形如:
[
\mathbf X(\lambda)=\mathbf X_0+\lambda\mathbf C
]
的点都投影到相同像点。
在射影几何中,它们组成经过 (\mathbf X_0) 和相机中心 (\mathbf C) 的空间直线——也就是反投影射
线。
## 但透视投影不是普通欧氏线性变换
需要注意:
[
\mathbf x\sim P\mathbf X
]
在齐次坐标中是线性矩阵乘法。
但转换回普通像素坐标时还要做透视除法:
[
u=\frac{x}{w},\qquad v=\frac{y}{w}
]
因此:
- 齐次坐标里的映射 (P) 是线性的;
- 普通三维坐标到二维像素坐标的映射包含除法,不是普通线性变换。
一句话总结:
> rank 3 表示这个齐次线性映射能够覆盖完整的二维射影图像;同时它恰好丢失一个齐次方向,这个一维
> 零空间对应唯一的相机中心。
› 如果rank = 2的话, 输出就是一条线(dof=2)? 而如果rank = 3, 输出可以span 到R^2? 没看懂
• 你混在一起的是两种维度:
1. 齐次向量所在的线性空间维度;
2. 去掉整体比例以后,射影对象的自由度。
关键规则是:
[
\boxed{\text{射影维度}=\text{线性维度}-1}
]
因为齐次坐标整体乘一个非零数仍代表同一个对象。
## rank 3
(P) 的输出是三维齐次向量:
[
\mathbf x=(x,y,w)^T\in\mathbb R^3
]
rank 3 表示这些输出可以张成整个 (\mathbb R^3)。
但齐次坐标有比例冗余:
[
(x,y,w)\sim(\lambda x,\lambda y,\lambda w)
]
所以三个数减去一个整体尺度:
[
3-1=2\text{ DOF}
]
因此:
# [
\mathbb R^3\setminus{0};/\sim
\mathbb P^2
]
当 (w\neq0) 时,可以归一化:
[
(u,v)=\left(\frac{x}{w},\frac{y}{w}\right)
]
这就是普通二维图像平面 (\mathbb R^2)。
所以你可以理解为:
[
\boxed{\operatorname{rank}(P)=3
\Rightarrow
\text{输出覆盖完整 }\mathbb P^2
\Rightarrow
\text{有限部分看起来是 }\mathbb R^2}
]
## rank 2
rank 2 表示输出不能张成整个 (\mathbb R^3),只能落在 (\mathbb R^3) 中某个固定的二维子空间里。
假设这个二维子空间由两个向量 (\mathbf a,\mathbf b) 张成:
[
\mathbf x=\alpha\mathbf a+\beta\mathbf b
]
看起来有两个参数 (\alpha,\beta),但齐次比例没有意义:
[
(\alpha,\beta)\sim(\lambda\alpha,\lambda\beta)
]
因此只剩比例:
[
\alpha:\beta
]
也就是:
[
2-1=1\text{ DOF}
]
所以 rank 2 的输出是:
[
\mathbb P^1
]
而 (\mathbb P^1) 在二维射影图像中就是一条固定直线。
[
\boxed{\operatorname{rank}(P)=2
\Rightarrow
\text{输出点只能沿一条固定图像线移动}
\Rightarrow
1\text{ DOF}}
]
## 一个具体例子
考虑:
[
P=
\begin{bmatrix}
1&0&0&0\
0&1&0&0\
1&1&0&0
\end{bmatrix}
]
它只有两列方向独立,因此 rank 是 2。
输出为:
# [
\mathbf x=P\mathbf X
\begin{pmatrix}
X\
Y\
X+Y
\end{pmatrix}
]
令:
[
\mathbf x=(x,y,w)^T
]
那么所有输出都满足:
[
x+y-w=0
]
这是二维射影图像里的一条线。
当 (w\neq0) 时,做透视除法:
[
u=\frac{x}{w},\qquad v=\frac{y}{w}
]
得到:
[
u+v=1
]
所以输出只能落在普通二维图像中的这条直线上:
v
│ ●
│ ●
│ ●
│ ●
└────────── u
u+v=1
虽然像素坐标写成两个数 ((u,v)),但它们受到:
[
u+v=1
]
约束,所以只有一个变量可以自由变化。即 1 DOF。
## rank 1
如果 rank 1,输出只能写成:
[
\mathbf x=\alpha\mathbf a
]
去掉齐次尺度 (\alpha) 后,所有输出都表示同一个射影点:
[
\mathbf x\sim\mathbf a
]
因此:
[
1-1=0\text{ DOF}
]
也就是固定的一个像点。
## 完整对应关系
(P) 的 rank 线性输出空间 去掉齐次尺度 图像中的几何对象 输出点 DOF
━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━
3 (\mathbb R^3) (\mathbb P^2) 完整图像平面 2
───────────── ─────────────────────────── ─────────────── ────────────────── ────────────
2 (\mathbb R^3) 中的二维子 (\mathbb P^1) 一条固定图像线 1
空间
───────────── ─────────────────────────── ─────────────── ────────────────── ────────────
1 (\mathbb R^3) 中的一维子 (\mathbb P^0) 一个固定像点 0
空间
还有一个容易混淆的地方:
> “一条直线需要 2 DOF 来确定”和“在一条固定直线上的点有 1 DOF”是两回事。
二维图像中,选择“哪一条线”需要 2 DOF;但 rank-2 相机的输出线已经被 (P) 固定了,输出点只能沿这
条线移动,所以只有 1 DOF。
最简记忆:
[
\boxed{\text{输出点的射影 DOF}=\operatorname{rank}(P)-1}
]
› 为什么说它输出的是P, 这个是规定吗, 我不能说输出的是R^3吗
• 你完全可以说矩阵乘法的输出在 (\mathbb R^3) 中。只是要区分两个层次:
[
\boxed{
P\mathbf X\in\mathbb R^3
\quad\text{是齐次代表向量}
}
]
而:
[
\boxed{
[P\mathbf X]\in\mathbb P^2
\quad\text{才是相机输出的射影像点}
}
]
这里不是说输出“矩阵 (P)”,而是说输出属于射影平面 (\mathbb P^2)。
## 线性代数层面:输出确实是 (\mathbb R^3)
矩阵:
[
P\in\mathbb R^{3\times4}
]
执行普通矩阵乘法:
[
P:\mathbb R^4\rightarrow\mathbb R^3
]
所以:
# [
\mathbf y=P\mathbf X
\begin{pmatrix}
x\y\w
\end{pmatrix}
\in\mathbb R^3
]
如果:
[
\operatorname{rank}(P)=3
]
那么:
[
\operatorname{im}(P)=\mathbb R^3
]
这是完全正确的线性代数表述。
## 为什么相机模型说输出是 (\mathbb P^2)?
因为 (\mathbb R^3) 中相差整体非零尺度的向量,被认为是同一个像点:
[
(x,y,w)\sim(\lambda x,\lambda y,\lambda w)
]
例如:
[
(1,2,1),\qquad(2,4,2),\qquad(-3,-6,-3)
]
是三个不同的 (\mathbb R^3) 向量,但透视除法后都是:
[
\left(\frac{x}{w},\frac{y}{w}\right)=(1,2)
]
所以它们表示同一个图像点。
射影点写成等价类:
# [
[(1,2,1)]
{,\lambda(1,2,1)\mid\lambda\neq0,}
]
所有这样的等价类组成:
# [
\mathbb P^2
(\mathbb R^3\setminus{0})/\sim
]
## 为什么必须去掉尺度?
因为输入 (\mathbf X) 本身也是齐次坐标。
同一个三维射影点可以写成:
[
\mathbf X
\quad\text{或}\quad
\lambda\mathbf X
]
矩阵乘法给出:
# [
P(\lambda\mathbf X)
\lambda P\mathbf X
]
如果把输出当成普通 (\mathbb R^3) 向量,那么:
[
P\mathbf X
\neq
\lambda P\mathbf X
]
同一个世界点会因为输入齐次坐标尺度不同而产生不同输出,相机映射就没有良好定义。
但在 (\mathbb P^2) 中:
# [
[P\mathbf X]
[\lambda P\mathbf X]
]
所以映射才不依赖输入代表向量的选择。
这不是随意规定,而是为了让齐次坐标映射保持一致。
## 最严谨的两层写法
### 底层线性映射
[
\widetilde P:\mathbb R^4\rightarrow\mathbb R^3,
\qquad
\mathbf X\mapsto P\mathbf X
]
输出是三维向量。
### 射影相机映射
[
P:\mathbb P^3\setminus{C}\rightarrow\mathbb P^2,
\qquad
[\mathbf X]\mapsto[P\mathbf X]
]
输出是二维射影点。
相机中心 (C) 要排除,因为:
[
P\mathbf C=0
]
而零向量不能表示射影点。
## 代码中是什么情况?
实际代码通常先计算:
(x, y, w) = P X
这是 (\mathbb R^3) 中的齐次向量。
然后执行:
u = x / w
v = y / w
得到普通二维坐标:
[
(u,v)\in\mathbb R^2
]
所以三个层次是:
PX ∈ R³ 齐次代表向量
↓ 去掉整体尺度
[PX] ∈ P² 射影像点
↓ 选择 w=1 图表
(u,v) ∈ R² 普通有限图像坐标
因此最准确的说法是:
> rank-3 的矩阵 (P) 在线性代数上把 (\mathbb R^4) 映满到 (\mathbb R^3);把输出向量按非零尺度等
> 价以后,它诱导出从 (\mathbb P^3) 到完整二维射影图像平面 (\mathbb P^2) 的相机映射。
› 所以这个其实也是规定, 因为要的就是P^2
• 对,这是一个建模规定,但不是随便规定的。逻辑顺序是:
我们要描述二维图像
→ 把二维图像扩充成射影平面 P²
→ P² 用 R³ 中的齐次向量表示
→ 所以输出使用三个齐次分量
然后输入三维世界也扩充成:
[
\mathbb P^3
]
它使用四维齐次向量表示。于是要求齐次表示之间是线性映射:
[
\mathbb R^4\rightarrow\mathbb R^3
]
自然得到:
[
P\in\mathbb R^{3\times4}
]
最后,为了让输出覆盖完整的二维射影平面,而不是退化成线或点,再规定:
[
\operatorname{rank}(P)=3
]
所以完整的“规定链条”是:
[
\boxed{
\text{世界用 }\mathbb P^3
\quad\longrightarrow\quad
\text{图像用 }\mathbb P^2
\quad\longrightarrow\quad
P\text{ 是 }3\times4
\quad\longrightarrow\quad
\operatorname{rank}(P)=3
}
]
## 为什么不直接规定输出是 (\mathbb R^2)?
当然可以。
最初的针孔模型就是:
[
(X,Y,Z)
\mapsto
\left(\frac{fX}{Z},\frac{fY}{Z}\right)
\in\mathbb R^2
]
这也是完全正确的相机模型。
但它有两个不方便:
1. 包含除法,不是线性映射;
2. (Z=0) 或无穷远方向不好统一处理。
改成齐次形式:
# [
\begin{pmatrix}
*fX*
*fY*
Z
\end{pmatrix}
\begin{bmatrix}
f&0&0&0\
0&f&0&0\
0&0&1&0
\end{bmatrix}
\begin{pmatrix}
X\Y\Z\1
\end{pmatrix}
]
就可以写成:
[
\mathbf x\sim P\mathbf X
]
透视除法被推迟到最后执行。
## (\mathbb P^2) 不是物理传感器
真实传感器的有限像素坐标通常在:
[
(u,v)\in\mathbb R^2
]
而 (\mathbb P^2) 是它的数学扩充:
# [
\mathbb P^2
\mathbb R^2
+
\text{无穷远线}
]
普通有限像素对应:
[
(u,v)
\longleftrightarrow
(u,v,1)
]
无穷远方向对应:
[
(x,y,0)
]
因此选择 (\mathbb P^2) 是为了:
- 把透视投影写成矩阵乘法;
- 统一有限点和无穷远点;
- 让平行线也有交点;
- 方便表达消失点、极线和基础矩阵。
所以你现在的理解是对的:
> 并不是先从物理相机推导出“输出天然必须是 (\mathbb P^2)”;而是我们选择用 (\mathbb P^2) 建模二
> 维图像,然后由这个选择得到齐次三维输出、(3\times4) 矩阵以及 rank-3 非退化条件。
─ Conversation recap ──────────────────────────────────────────────────────────────────────────
目标是理解相机投影为何输出 P²:二维图像射影化后以 R³ 中三个齐次分量表示,这是建模规定。下一步
可继续梳理三维世界 P³ 到图像 P² 的投影关系。
› P 的列是特殊像点
稳定核心
若 P 的四列为 p₁,p₂,p₃,p₄,则前三列是世界 X、Y、Z 轴方向的消失点,p₄ 是世界原点的像。
P
=
[
p
1
p
2
p
3
p
4
]
P=[p
1
p
2
p
3
p
4
]
P=[\mathbf p_1;\mathbf p_2;\mathbf p_3;\mathbf p_4] 这句话有点莫名其妙
• 你觉得莫名其妙是对的。这句话跳过了两个关键前置知识:
1. 矩阵的第 (i) 列,就是第 (i) 个标准基向量经过该矩阵后的输出;
2. 三维齐次坐标中,前三个标准基向量表示三个坐标轴方向的无穷远点。
所以它不是某个突然出现的相机性质,首先只是线性代数。
## 1. 矩阵的列是什么?
写成:
[
P=
\begin{bmatrix}
\mathbf p_1&
\mathbf p_2&
\mathbf p_3&
\mathbf p_4
\end{bmatrix}
]
对于齐次世界点:
[
\mathbf X=
\begin{pmatrix}
X\Y\Z\W
\end{pmatrix}
]
矩阵乘法可以展开成:
# [
P\mathbf X
X\mathbf p_1
+Y\mathbf p_2
+Z\mathbf p_3
+W\mathbf p_4
]
因此四列就是四个标准基向量的像:
[
P\mathbf e_1=\mathbf p_1,\quad
P\mathbf e_2=\mathbf p_2,\quad
P\mathbf e_3=\mathbf p_3,\quad
P\mathbf e_4=\mathbf p_4
]
这和任意矩阵一样:
> 矩阵的列,就是标准基向量经过线性变换后去了哪里。
## 2. 四个标准基向量在 (\mathbb P^3) 中表示什么?
三维齐次坐标中:
齐次向量 几何意义
━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━
((1,0,0,0)^T) 世界 (X) 轴方向的无穷远点
─────────────── ───────────────────────────
((0,1,0,0)^T) 世界 (Y) 轴方向的无穷远点
─────────────── ───────────────────────────
((0,0,1,0)^T) 世界 (Z) 轴方向的无穷远点
─────────────── ───────────────────────────
((0,0,0,1)^T) 有限世界原点 ((0,0,0))
注意最后一个齐次坐标:
- (W=1):有限三维点;
- (W=0):方向或无穷远点。
所以:
# [
P
\begin{pmatrix}
1\0\0\0
\end{pmatrix}
\mathbf p_1
]
表示:
> 世界 (X) 轴方向的无穷远点,被相机投影到图像中的 (\mathbf p_1)。
而方向的无穷远点在图像中的投影,正是消失点。
因此:
[
\boxed{\mathbf p_1=\text{世界 X 方向的消失点}}
]
同理:
[
\mathbf p_2=\text{世界 Y 方向的消失点}
]
[
\mathbf p_3=\text{世界 Z 方向的消失点}
]
## 3. 为什么“方向的像”是消失点?
考虑一组平行于世界 (X) 轴的点:
[
\mathbf X(t)=
\begin{pmatrix}
X_0+t\Y_0\Z_0\1
\end{pmatrix}
]
当 (t\rightarrow\infty) 时,将齐次坐标除以 (t):
[
\mathbf X(t)
\sim
\begin{pmatrix}
1+X_0/t\
Y_0/t\
Z_0/t\
1/t
\end{pmatrix}
\rightarrow
\begin{pmatrix}
1\0\0\0
\end{pmatrix}
]
所以所有平行于 (X) 轴的直线,共享同一个无穷远点:
[
\mathbf D_X=(1,0,0,0)^T
]
投影后:
# [
P\mathbf D_X
# P\mathbf e_1
\mathbf p_1
]
因此这些平行线在图像里共同趋向 (\mathbf p_1),这就是 (X) 方向的消失点。
## 4. 为什么 (\mathbf p_4) 是世界原点的像?
普通世界原点是:
[
(0,0,0)
]
它的齐次坐标是:
# [
\mathbf O=
\begin{pmatrix}
0\0\0\1
\end{pmatrix}
\mathbf e_4
]
因此:
# [
P\mathbf O
# P\mathbf e_4
\mathbf p_4
]
所以:
[
\boxed{\mathbf p_4=\text{世界坐标原点的像}}
]
但有一个边界:如果世界原点恰好就是相机中心,那么:
[
\mathbf p_4=0
]
此时相机中心没有定义良好的像点,不能说它是一个普通图像点。
## 更好的表述
原来的:
> (P) 的前三列是三个世界轴方向的消失点,第四列是世界原点的像。
最好改成:
> 矩阵的列是世界齐次标准基向量的像。前三个基向量表示世界 (X,Y,Z) 方向的无穷远点,所以前三列分
> 别是这些方向的消失点;第四个基向量表示世界原点,所以第四列是世界原点的像。
一句话记忆:
[
\boxed{\text{P 的列 = 世界齐次坐标基向量经过相机后的像}}
]
“消失点”和“原点的像”只是这些基向量在射影几何中的具体含义。 › Ask Codex to do anything gpt-5.6-sol xhigh fast · ~/Projects/StartUpProjects/SematicDebugger
/ T R A N S C R I P T / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / [
\boxed{\mathbf p_4=\text{世界坐标原点的像}}
] 但有一个边界:如果世界原点恰好就是相机中心,那么: [
\mathbf p_4=0
] 此时相机中心没有定义良好的像点,不能说它是一个普通图像点。 ## 更好的表述 原来的: > (P) 的前三列是三个世界轴方向的消失点,第四列是世界原点的像。 最好改成: > 矩阵的列是世界齐次标准基向量的像。前三个基向量表示世界 (X,Y,Z) 方向的无穷远点,所以前三列分
> 别是这些方向的消失点;第四个基向量表示世界原点,所以第四列是世界原点的像。
“消失点”和“原点的像”只是这些基向量在射影几何中的具体含义。