QiuQiu

Robotics - multiview geometry - projective geometry

  1.   表示:

  - 三行线性无关;

  - 输出空间有三个独立方向;

  - (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) 方向的无穷远点,所以前三列分

  > 别是这些方向的消失点;第四个基向量表示世界原点,所以第四列是世界原点的像。  

  “消失点”和“原点的像”只是这些基向量在射影几何中的具体含义。