一、为什么需要单应矩阵?
张正友标定
单应矩阵(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优化(最小化重投影误差)