以投影变换(Homography)为例:DLT与SVD的区别与联系

1. 投影变换(Homography)的背景

投影变换是计算机视觉中用于描述两幅图像之间平面到平面的映射关系的一种变换。数学上,2D 投影变换由一个 3×3 的矩阵 H 表示,定义为:

x' ~ Hx

其中,x = [x, y, 1]^Tx' = [x', y', 1]^T 是两幅图像上对应的点(以齐次坐标表示),~ 表示等价(忽略尺度因子)。H 是一个 3×3 的矩阵,包含 9 个元素,但由于齐次坐标的尺度无关性,实际自由度为 8。

为了估计 H,通常需要至少 4 对对应点(每对点提供 2 个线性约束)。DLT(直接线性变换)和 SVD(奇异值分解)是解决这一问题的两种关键方法。

2. DLT(直接线性变换)

2.1 原理

DLT 是一种直接求解 H 的线性方法。它通过将投影变换的方程重写为一个线性系统来求解 H 的元素。

对于一对对应点 (x_i, x'_i),即 ([x_i, y_i, 1]^T, [x'_i, y'_i, 1]^T),投影变换满足:

[ x'_i ]
[ y'_i ]
[ w'_i ]
=
H
[ x_i ]
[ y_i ]
[ 1 ]

H 展开为一个 9 维向量 h = [h_1, h_2, ..., h_9]^T,并利用交叉乘积表示投影关系 x'_i × (Hx_i) = 0,可以得到以下线性方程:

[ 0 0 0 -x_i -y_i -1 y'_i x_i y'_i y_i y'_i ]
[ x_i y_i 1 0 0 0 -x'_i x_i -x'_i y_i -x'_i ]
h = 0

每个点对提供 2 个线性方程。对于 n ≥ 4 对点,构造一个 2n × 9 的矩阵 A,使得:

Ah = 0

由于 H 的尺度无关性,通常约束 ||h|| = 1,并通过解这个齐次线性方程组来估计 h

2.2 求解

DLT 直接通过线性代数方法求解 Ah = 0。通常,这需要找到 A 的右零空间(right null space),即 A 的一个非零向量 h。这正是 SVD 发挥作用的地方。

3. SVD(奇异值分解)

3.1 原理

SVD 是一种矩阵分解方法,将任意 m × n 矩阵 A 分解为:

A = U Σ V^T

其中:

在 DLT 问题中,A 是一个 2n × 9 的矩阵。SVD 的右奇异向量(V 的列)对应于 A 的右零空间。当 A 的秩为 8 时,V 的最后一列(对应于最小的奇异值,通常接近 0)就是 h 的解。

3.2 应用到 DLT

在 DLT 中,SVD 用于求解 Ah = 0。具体步骤为:

  1. 对矩阵 A 进行 SVD 分解:A = U Σ V^T
  2. V 的最后一列(对应最小奇异值),即 h
  3. h 重塑为 3×3 的矩阵 H,并归一化(例如,除以 h_9)。

4. DLT 和 SVD 的区别

方面 DLT SVD
定义 一种求解投影变换 H 的线性方法,通过构造线性方程组 Ah = 0 一种通用的矩阵分解方法,用于分解任意矩阵并提取其零空间。
作用 提供问题建模,将投影变换问题转化为线性方程组。 提供数值解法,用于求解 DLT 构造的线性方程组。
适用范围 专用于投影变换等齐次线性方程的求解。 通用方法,适用于线性代数中的多种问题(如 PCA、最小二乘、零空间求解等)。
输出 构造的线性方程组 Ah = 0 分解结果 U Σ V^T,用于提取 h

5. DLT 和 SVD 的联系

  1. DLT 依赖 SVD 求解:DLT 将投影变换问题转化为一个齐次线性方程组 Ah = 0,SVD 是求解这个方程组的数值工具,通过提取 A 的右零空间(V 的最后一列)来得到 h
  2. 数值稳定性:SVD 是数值稳定的方法,能够处理 A 可能存在的病态条件(例如,点对噪声或接近退化的情况)。DLT 本身只是问题建模,依赖 SVD 来保证解的可靠性。
  3. 实际应用:在计算机视觉中,DLT 和 SVD 几乎总是结合使用。DLT 负责构造线性系统,而 SVD 负责求解。例如,OpenCV 的 findHomography 函数内部就使用 DLT 构造矩阵,并通过 SVD 求解 H
  4. 预处理:DLT 通常需要对输入点进行归一化(Normalization,例如 Hartley 归一化),以提高数值稳定性。这一步也会间接影响 SVD 的计算精度。

6. 总结