单应矩阵的推导与理解
转载自知乎 [北麓牧羊人] 的文章:https://zhuanlan.zhihu.com/p/138266214)
〇 、单应矩阵介绍
单应矩阵 H (Homography),约束了同一 3D 空间点在两个像素平面的 2D 齐次坐标。
展开:
正比于符号可以理解为单应矩阵 H 约束了和的方向是同方向,而不约束尺度。可通过叉乘计算消去齐次的尺度因子,因此上面的约束还可以表达为如下形式:
因为和同方向,所以其叉乘结果为向量。
依据推导可得,单应矩阵 H 由两相机旋转和平移信息(R,t),两相机内参矩阵 K,平面参数 (n,d) 组成:
下面给出上述单应矩阵公式的推导和理解过程。
一、基本设定
1. 相机系坐标
3D 空间点在相机系下的坐标 p 为:
2. 像素系坐标
相机系坐标投影到像素系的齐次坐标:
其中:
- q 为像素系齐次坐标;
- K 为相机内参矩阵:。
3. 平面参数
3D 空间点 p 所在的平面在相机系下的平面参数为:
其中:
- n 为平面法向量;
- d 为相机系原点到平面距离。
3D 空间点 p 位于平面 { n,d} 上,由以下方程表达:
二、平面参数:由像素系计算相机系
1. 由像素系坐标计算相机系坐标:
由于存在未知的深度 z ,因此无法由像素系计算出相机系坐标。
2. 平面参数计算深度
结合(1.4)(2.1)得:
整理得:
可见:通过 3D 点所在平面参数和像素系坐标 q 可以计算出 3D 点的深度 z 。
结合(2.1)(2.4)得:
可知,加入平面信息 { n,d } 后,可完全由像素坐标还原出相机系坐标。
三、单应矩阵:由像素系 a 计算像素系 b
1. 由 a 系像素计算 b 系像素
有相机系 a 下的点和 相机系 b 下的点:
其中:
- 表示:1. b 系下 a 系的姿态。2. a 系到 b 系的坐标旋转变换;
- 表示:1. b 系下 a 系的位置。2. a 系到 b 系的坐标平移变换。
转到对应像素系,有关系:
可得到,由 a 系像素表达的 b 系像素:
但是存在未知数,所以无法直接通过 a 系像素得到 b 系像素。
2. 加入平面参数
结合(2.4)(3.4)
上面推导用到的理论:
- 齐次坐标与系数无关,因此可省去
可见,加入 3D 点的平面参数后,可由 a 系下像素坐标完全计算出对应的 b 系下像素坐标。
3. 定义单应矩阵
符号简化:
其中为由像素系 a 到像素系 b 的 单应矩阵:
单应矩阵包含了相机内参矩阵、旋转、平移和平面参数信息。引入单应矩阵后,可以直接通过 a 系像素得到 b 系像素。
四、求解单应矩阵
(3.7)给出的单应矩阵的定义是通过旋转平移信息计算的,现实中有时不知道旋转平移信息,而知道两张图像中的匹配点,可以由匹配点计算出单应矩阵。
对于图片上的一对匹配点有如下关系:
展开得:
1. 单应矩阵有 8 个未知数
因为转换的是齐次坐标,所以单应矩阵 H 与尺度无关,也即 aH 与 H 的作用是相同的,因此自由度为 8,使用来进行归一化。
故 H 共 8 个未知数,需要 8 个方程来解。
2. 一对匹配点提供 2 个方程
由于是齐次坐标,所以展开是这种形式:
3. 四对匹配点提供 8 个方程
解此线性方程组,可得 单应矩阵 H。