1. Homography 单应变换

homo

Homography converts one Convex Quadrilateral to another,也称 Projective Transform 投影变换

Convex Quadrilateral 凸四边形

四边形的所有内角 ,所有对角线都在形状内

Assume the transform from Image B Image A with homography is

  • 不变量:4个共线点的 cross-ratio

  • 自由度:8 DOF

    对 Homography 进行 scaling 是不会影响其效果的,因此可以 scale with

    这样得到的新矩阵就只有 8个参数了

 

 

 

1.1 投影 v.s. 透视

pers

补充材料里的 Perspectivity (see 3.2.2) 看起来和 Projectivity (Homography) 非常相似,但是二者并不相同,透视只是投影的一种

  • Projectivity 是纯数学的二维平面变换
  • Perspectivity 有物理限制,是专门描述三维场景映射到二维平面的变换

 

 

1.1.1 Example 1

现实中,多个 Perspectivity 可以组成一个 Projectivity,但不一定仍然是 一个Perspectivity

proj pers

上图中,Image 1 和 Image 2 是在不同角度拍下的 ABC 的照片

  • Perspectivity

    这两个变换都遵循了三维到二维的透视投影

  • Projectivity

    这个变换几乎完全无视物理法则,所以不能直接用 单一的perspectivity 描述了

 

 

1.1.2 Example 2

pers homo ex

  • 左图 Image 1 & Image 2

    相机在不同位置拍摄同一物体得到的图片

    可以通过多个 perspectivity 组合成 perspective homography 用于变换

  • 右图 Image 1 & Image 2

    相机在相同位置旋转后拍摄同一物体得到的图片,有 common center of projection

    但是没有 common plane!两张图片只共同包含了物体的一部分(x 与 x‘),不存在能用 perspectivity 的结构

    只能用 non-perspective homography 变换这两张图的一部分

 

 

 

1.2 矩阵求解 & 图像拼接

1.2.1 Image Stitching

img _stitch

如上图所示,相机绕一个 common center of projection 旋转拍摄三张图片

若想它们投影到一个新的平面 上拼接成一张完整的广角图,那就需要如下 Homography

Homography 按照需要的变换顺序相乘即可合并

 

 

1.2.2 求解 Homography

常用的方法是 Direct Linear Transformation (DLT)

  • Requirement

    a set of AT LEAST 4 pairs of matching points between Image 1 and Image 2

    match pt

  • Computation

    虽然看起来有 9 个未知参数,但是如 1. 开头所言,homography 可以转化为只有 8 个未知量的矩阵

    展开处理后得到

    整理

    然后变回矩阵

    只需要把已有的 Matching Point Pairs 代入上式,然后就可以 Stacking Matrix,最后得到

    • 齐次线性方程组

      求 9 个参数

    • 一般线性方程组

      求 8 个参数

    这是一个 Overdetermined System of Equations,照着补充材料里介绍的解法求就好了 (see 3.1)

 

 

 

 

 

2. Single-View Geometry 单视几何

2.1 无穷

2.1.0 基础定义
  • 定义:直线

    line

    一条直线 可以如此表示

    变成矩阵形式

    这种 的表达式其实就是 在齐次形式下的直线法向量,你从它和直线上点的点乘结果为 0 就可以看出来

  • 定义:交点

    crossing pt

    两条直线 的交点

    证明如下,众所周知 (see 3.3)

    1. Cross Product of two vectors is a vector orthogonal to both
    2. 两个垂直的向量之点乘一定是 0

    因此有

    所以 一定在 上,即两线之交点

  • 定义:平行线

    设定两条直线

    变成比较熟悉的形式

    平行,则一定满足

 

 

2.1.1 无穷远点 (2D)

设定两条平行线

parallel

则其交点

由于两条线平行,所以有

代入两线交点矩阵可知其第三维一定是 0

由于 上,因此它一定满足

而满足这一条件的只有

不信你可以代入点在线上的点乘条件看看,方便起见,我们用前者

 

 

2.1.2 无穷远线 (2D)

infin line

无穷远线定义式

证明如下,所有无穷远点都可以写成

二者点乘可得

满足点在线上的条件, 的确是无穷远线

 

 

2.1.3 结论扩张到 3D

无穷远的结论扩张到 3D 空间非常方便

  • 3D 空间的面

    plane

    变成矩阵形式

    这种 的表达式其实就是 在齐次形式下的平面法向量,你从它和平面上点的点乘结果为 0 就可以看出来

  • 无穷远点

  • 无穷远面

    infin plane

 

 

 

2.2 消失

2.2.0 “无穷” 变换

无穷远点 / 线 分别进行 Perspective / Affine Transform

  • 无穷远点

    点到点的变换, 通过 相互转换

    使用一个非常简单的无穷远点

    • Perspective Transform

      此时变换后的点的

      因此:透视变换后无穷远点不再是无穷远点!

    • Affine Transform

      此时变换后的点的

      因此:仿射变换后无穷远点仍然是无穷远点!

  • 无穷远线

    线到线的变换

    已知 在直线 上, 在直线 上, 通过 相互转换

    众所周知,,非常好用

    由于 ,所以

  • Perspective Transform

    透视变换后无穷远线不再是无穷远线!

  • Affine Transform

    仿射变换后无穷远线仍然是无穷远线!

以上结果其实很好理解:仿射变换会保留平行线的平行性,但是透视变换则不会

 

 

2.2.1 Vanishing Point 影消点

即世界坐标系中的无穷远点 通过透视变换映射到 Image Plane 的投影点

本部分我们主要关注的透视变换为 Camera Matrix

影消点对应的是现实世界里的无穷远点,但它本身不是无穷远点

vanishing pt

设定 为相机坐标系下平行线的方向

设定 世界坐标系 = 相机坐标系,因此投影所用的 Camera Matrix 为

方便起见,设定

那么影消点 平行线方向 的关系为

两种写法都可以

 

 

2.2.2 Vanishing Line 影消线

即世界坐标系中的无穷远线 通过透视变换 映射到 Image Plane 的投影线

本部分我们主要关注的透视变换为 Camera Matrix

影消线对应的是现实世界里的无穷远线,但它本身不是无穷远线

vanishing ln

下图中黄色的线为影消线

vanishing ln real

除了Image Plane 上的影消线 ,上图中还有一个以橙色标记出的平面 ,这个平面穿过影消线以及相机光心

vanishing ln pl

那么影消线 穿过影消线的平面 的关系如下

三维世界中 上的点记为 , 设定 世界坐标系 = 相机坐标系,Camera Matrix 记为

二维 Image Plane 中 上的点记为

与之前的 “点在面上” 公式对比可得

的定义式对比可知此时

在平面法向量里代表 offset,此平面过相机光心,那么 offset = 0 就非常合理了

定义平面法向量 方向(如上图),则有

 

2.2.3 Summary
  • Image Plane 上影消点 与对应三维世界里平行线方向 的关系为

  • Image Plane 上影消线 与对应三维世界里穿过相机光心的平面法向量方向 的关系为

Remainder: 为相机内参

 

 

 

2.3 单视重构

2.3.1 两组平行线的夹角

下图中 为影消点, 为影消点对应的无穷远点, 为无穷远点对应的平行线方向, 为相机光心

求这两组平行线的夹角

parallel angle

  • 已知

    平行线方向可表示为 (see 2.2.3)

    两个矩阵点乘可表示为 (see 3.3.1)

  • 求解

    由于 本身就是单位向量,所以不再需要分母上的模了

    设定 ,展开整理可得

以下是一些重要的,能利用的特性

  • 夹角 的性质

  • 公式 的性质

    以下性质与相机 Intrinsic Matrix 相关

    1. 对称矩阵

    2. 若 Image Plane 是零倾斜,则

    3. 若 Image Plane 是正方形像素,则

    4. 有 5 个自由度

      因为构成 一共只有 5 DOF

 

 

2.3.2 单视图场景恢复

scene

  • Step 1: 求 Intrinsic Matrix

    从上图可以找出三组相互垂直 (即夹角 ) 的平行线

    scene with parallels

    依据夹角 的性质一共可以得到三组公式

    但是 Intrinsic Matrix 一共有 5 DOF,光给 3 个公式作为约束是不够的!

    所以额外增加两个假设

    1. Image Plane 零倾斜
    2. Image Plane 为正方形像素

    追加两个新的约束条件

    这样一来 就变成只有 3 DOF 了!

    可以考虑整体除一下 ,然后就只有 3 个未知量了,反正对 做 scaling 不会影响其效果

    得到 之后就可以分解,然后得到 Intrinsic Matrix

  • Step 2: 恢复场景平面

    现在有 Intrinisc Matrix ,有 Vanishing Line

    取两组同一平面上的平行线的影消点 Vanishing Point,就能找到影消线

    scene vanishing ln

    那么找到相机参考系中的三个场景平面法向量方向 就很好求了

  • Result

    最后恢复出来一个 可以拖动查看的 3D 平面场景,下图是其中一个视角

    res

 

 

2.3.3 单视重构的弊端

需要很多先验信息:

  • 手动选择 Vanishing Lines / Points
  • 手动判断 点/线/面 对应关系
  • 难以找出以上信息的实体恢复不了

下图中,红框和绿框内的平面可以恢复,但是黄框内的人是恢复不出来的!

scene partial recover

 

 

 

 

 

3. 补充材料

3.1 最小二乘法 Least Squares

The method to solve problems in the form

3.1.1 线性方程组

已知线性方程组

转化成 matrix form

若此时矩阵 列满秩,且 为超定方程组,则此时方程数 > 未知量数,无解

此时可求满足方程组条件的最小二乘解

[解法]:

  1. SVD 奇异值分解

  2. 定义并计算如下内容

    • 为 Diagonal Matrix 上的第 个元素

 

 

3.1.2 齐次线性方程组

已知齐次线性方程组

转化成 matrix form

若此时矩阵 列满秩,且 为超定方程组,则此时方程数 > 未知量数,除 ”0解“ 以外无解

此时可求满足方程组条件的最小二乘解

为何设定 的 magnitude = 1?

well,反正 的scale 多大多小都不会影响结果为 0,而设定 magnitude = 1 会非常方便

那就这么设定叭 ()

[解法]:

  1. SVD 奇异值分解
  2. 的最后一列

 

 

 

3.2 Projection Geometry 投影变换

3.2.1 仿射变换 Affine Transform

Transformation Matrix 的最后一行保持

2d affine

不变量:平行线之平行性,平行线之长度比,各区域面积比

自由度:6 DOF

 

 

3.2.2 透视变换 Perspective Transform

Transformation Matrix 的 0 部分变成一个全新的参数组

2d perspective

不变量:4个共线点的 cross-ratio

自由度:8 DOF

 

 

 

3.3 矩阵点乘 & 叉乘

很难绷,但是我还是写在这里吧

 

3.3.1 矩阵点乘

Given

二者点乘为

或者用几何上的定义

其值相当于:

向量 于向量 上之投影的长度 向量 的长度

 

 

3.3.2 矩阵叉乘

cross product

Given

二者叉乘为

或者也可以表示为