单应矩阵H

📅 2026/7/15 19:58:52 👁️ 阅读次数 📝 编程学习
单应矩阵H

一、为什么需要单应矩阵?

张正友标定

单应矩阵(Homography)是3×3 齐次矩阵,描述同一个平面两幅图像之间的像素齐次坐标映射

如果说:

  • DLT解决的是"如何建立投影方程"
  • PnP解决的是"已知3D-2D求位姿"
  • 本质矩阵E解决的是"双目运动"
  • 基础矩阵F解决的是"未标定双目"

单应矩阵的核心价值在于:它充分利用了平面场景这一特殊几何约束,把原本需要三维恢复的问题降维为二维到二维的映射,使得许多视觉任务(标定、拼接、透视校正、SLAM初始化等)都可以用一个 3×3 矩阵高效解决;而在已知相机内参的情况下,它又能进一步恢复相机相对于平面的姿态(R,tR,tR,t),成为连接二维图像与三维几何的重要桥梁。

为什么需要单应矩阵

先看一个最简单的问题。

有一张A4纸:

问题:

为什么同一张纸,
像素坐标完全变化了?不能简单: x'=x+10

因为:

不是平移 也不是旋转 ,而是

透视变化(Perspective Transform)

例如:

近处放大 远处缩小

所以:

需要一个新的变换: Homography

二、它解决了什么问题?

它把:

Plane ↓ Image1 ↓ Image2

全部统一起来。

消掉世界坐标以后,得到:

好处1:相机标定,没有Homography,就没有张正友标定,先求H 再求K

好处2:透视矫正

三、Homography数学模型

Homography的来历

这是张正友标定最大的前提。

棋盘格:

于是世界点

因此三维投影

采用齐次坐标:

设 世界平面 (X,Y) 转换成齐次之后就是P=[X,Y,1]^T

图片: (u,v) 转换成 p=[u,v,1]^T

定义:

展开

透视投影。

为什么只有8个自由度?

H和2H 完全一样。

所以: 整体比例没有意义 9-1=8

四、如何求解H(DLT)

方程式

每个点:

(X,Y) ↓ (u,v)

给两个方程。

那我们假设:

SVD求解A

由于 h=0 没有意义,所以我们需要加上约束:

那么

五、为什么H可以分解出R、t,K?

1、为什么能分解出

设世界点位于 Z=0

那么相机投影模型就是:

2、H 为什么能帮助求 K?

如何由 H 求 K

利用旋转矩阵性质

旋转矩阵满足:

正交

等长

第一条约束

第二条约束

同样:

一张图片得到两条约束

因此:

每一张棋盘图片可以得到:

如何解出 K?

因此:

一张图片提供:2 个约束。

至少需要:3 张图片(提供 6 条约束)。

实际工程:

一般:10~20 张。

将所有图片的约束写成:

由 B 恢复 K

利用 Cholesky 分解(或 Zhang 论文中的闭式公式):

得到: K

3、如何分解R t

现在:

已经知道:K以及:H。

根据:

a、消除内参

左乘:K−1

b、计算尺度

由于:旋转向量长度:

所以:

c、求 t

4、最后一步:LM 优化

上面的 K、R、t 都是线性初值

张正友标定最后还会进行一次非线性优化:

目标函数:

六、算法流程

棋盘格(Z=0) │ ▼ DLT │ ▼ 单应矩阵 H │ ▼ H = λK[r1 r2 t] │ ▼ 旋转矩阵正交约束 r1⊥r2 |r1|=|r2| │ ▼ Vb = 0 │ ▼ SVD │ ▼ B = K⁻ᵀK⁻¹ │ ▼ 恢复 K │ ▼ λ = 1 / ||K⁻¹h1|| │ ▼ r1 = λK⁻¹h1 r2 = λK⁻¹h2 r3 = r1 × r2 t = λK⁻¹h3 │ ▼ LM优化(最小化重投影误差)