跳转至

全景拼接

全景拼接(Panorama Stitching)是将多张部分重叠的图片拼接成一张连续的全景图像的技术。在进行全景拼接时,通常要满足以下条件:

  • 图片是共面的,即它们位于同一个平面上。
  • 镜头不能有畸变,以保证图像准确对齐。
  • 图像需要具有均匀的光照,以确保亮度和对比度一致。

基本原理

在全景拼接中,我们通常使用线性变换来将一张图片上的点对应到另一张图片上,这个变换由一个可逆矩阵 \(H\) 来表示

\[ X' = H \times X \]

其中,\(H\) 是一个可逆矩阵

算法步骤

  1. 特征点检测:在每张图片中检测特征点,通常是突出的关键点
  2. 特征点描述:为每个特征点提取描述符,以便在不同图片中匹配相同物理点
  3. 特征点匹配:建立不同图片中特征点之间的对应关系,确定它们在物理世界中的对应关系
  4. 计算变换矩阵:使用对应关系,反解出变换矩阵 \(H\)
  5. 应用变换:将变换矩阵应用到一张图片上,使其与另一张图片对齐
  6. 图像拼接:将对齐后的图片进行拼接,形成全景图像

基本变换

齐次坐标

“齐次坐标表示是计算机图形学的重要手段之一,它既能够用来明确区分向量和点,同时也更易用于进行仿射(线性)几何变换。”—— F.S. Hill, JR。

正常点的齐次坐标与非齐次坐标可以相互转换: - 如果一个平面正常点的坐标为 \((x_1, x_2)^T\) , 则它的规范化齐次坐标为 \((x_1, x_2, 1)^T\) ,它的齐次坐标为 \(k(x_1, x_2, 1)^T \quad k \neq 0\)。 - 如果一个平面正常点的齐次坐标为 \((x_1, x_2, x_3)^T\),则它的非齐次坐标表示为 \((x_1/x_3, x_2/x_3)^T\)

正常点和无穷远点:对于二维平面上的点,其齐次坐标的表示为一个三维向量 \((x_1, x_2, x_3)^T\),如果 \(x_3 = 0\),说明这个点为一个无穷远点;如果 \(x_3 \neq 0\),则说明该点为一个正常点。

  • 对于一个正常点来说,虽然它的齐次坐标形式不唯一,但它有唯一的规范化齐次坐标形式。
  • 所谓齐次坐标就是将一个原本是 n 维的向量用一个 n+1 维向量来表示。

旋转变换 Rotation

对于旋转变换,只考虑正常点

\[ X' = R_{2 \times 2} \times X \]

where \(R \times R^T = I\), and \(det(R) = 1\)

\[ \begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{bmatrix} \begin{bmatrix} x \\ y\end{bmatrix} \]

形如,\(f(x) = Ax + b\), where \(A \in \mathbb{R}^{m \times n}\), \(x \in \mathbb{R}^{n}\) , and \(b \in \mathbb{R}^{m}\),则 \(f(x)\) 被称为仿射函数

考虑齐次坐标,规范化齐次坐标为 \(X = (x, y, 1)^T\)

\[ \begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} \cos \theta & -\sin \theta & 0 \\ \sin \theta & \cos \theta & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} \]

简记为:

\[ X' = \begin{bmatrix} R_{2 \times 2} & 0_{2 \times 1} \\ 0_{1 \times 2} & 1 \end{bmatrix} \times X \]

where \(R_{2 \times 2}\) 为正交矩阵且 \(det(R_{2 \times 2}) = 1\)

  • 旋转变换也被称作特殊正交变换
  • 平面内的旋转变换有 1 个自由度,即 \(\theta\)
  • 不变量:distance
  • 旋转 + 旋转 还是 旋转

欧式变换 Euclidean

在数学类书籍中,一般把同时考虑了旋转、反射与平移的几何变换称为欧氏变换。但在计算机视觉与机器人领域,一般不会考虑反射变换。

此处所讲的欧氏变换是由旋转和平移复合而成的,不考虑反射的情况。

对于欧氏变换,一般也只考虑针对正常点的情况

欧式变换:可以看成先经历一个绕原点的逆时针旋转,旋转角度为 \(\theta\),之后又经历了一次平移,平移量为 \((t_x, t_y)^T\)

\[ \begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} \cos \theta & -\sin \theta & t_x \\ \sin \theta & \cos \theta & t_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} \]

简记为:

\[ X' = {\begin{bmatrix} R_{2 \times 2} & t_{2 \times 1} \\ 0_{1 \times 2} & 1\end{bmatrix}} \times X \]

where \(R_{2 \times 2} \times R_{2 \times 2}^T = I\), and \(det(R_{2 \times 2}) = 1\)

  • 不考虑反射的几何变换也被称为特殊欧氏变换
  • 同旋转变换相比,欧氏变换多了两个刻画平移量的自由度
    • 因此平面内的欧氏变换有 3 个自由度
  • 不变量:distance
  • 群具有封闭性,不可能变成另一个群。
    • 因此,一个欧式变换叠加另一个欧式变换还是欧式变换

相似变换 Similarity

在欧式变换的基础上,再加一个缩放

\[ \begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} s\cos \theta & - s\sin \theta & t_x \\ s\sin \theta & s\cos \theta & t_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} \]

简记为:

\[ X' = {\begin{bmatrix} s \times R_{2 \times 2} & t_{2 \times 1} \\ 0_{1 \times 2} & 1\end{bmatrix}} \times X \]

where \(R \times R^T = I\), and \(det(R) = 1\)

  • 同欧氏变换相比,相似变换多了一个控制缩放比例的自由度
    • 因此平面内的相似变换有 4 个自由度
  • 不变量:相似比 similarity ratio
  • 相似 + 相似 还是 相似

仿射变换 Affine

在欧氏变换中,要求这个 \(2 \times 2\) 的子矩阵是个能表达旋转的矩阵 (正交且行列式为 1) , 而在相似变换中, 只要求这个 \(2 \times 2\) 的子矩阵是旋转矩阵的常数倍即可。 如果我们继续放松对 \(2 \times 2\) 这个子矩阵的要求,只要求它是一个 \(2 \times 2\) 的非奇异矩阵,那么得到的相应矩阵所能刻画的线性几何变换就称为仿射变换。(降低要求:任意非奇异矩阵 \(A\)

相对于相似变换,再加一个错切

只考虑针对正常点来定义仿射变换

\[ \begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} a_{11} & a_{12} & t_x \\ a_{21} & a_{22} & t_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} \]

简记为:

\[ X' = {\begin{bmatrix} A_{2 \times 2} & t_{2 \times 1} \\ 0_{1 \times 2} & 1\end{bmatrix}} \times X \]

where \(A\) is nonsingular

  • 矩阵 \(A\) 包括了 4 个独立的元素,\(t_{2 \times 1}\) 是一个二维向量, 所以平面内的仿射变换总共有 6 个自由度
  • 不变量:简单比 simple ratio(共线的三点,比例不变)
  • 仿射 + 仿射 还是 仿射

射影变换 Projective

表达线性几何变换的矩阵 \(H\) 都有一个共同的特点,那就是最后一行是 \((0, 0, 1)\)。如果继续放松对矩阵 \(H\) 的要求,只要求它是一个非奇异的 \(3 \times 3\) 的矩阵,那么此时 \(H\) 所能表达的线性几何变换称为射影变换。

与前面讨论的几种变换不同,射影变换不但可以定义在正常点上,也可以定义在无穷远点上。在射影变换下,不再区分正常点和无穷远点,它可以把正常点变换到无穷远点,也可以把无穷远点变换到正常点。因此,我们对点的坐标表达就不再限定为规范化齐次坐标了(因为无穷远点没有规范化齐次坐标) ,而是使用一般化的齐次坐标表达。

\[ c \begin{bmatrix} x' \\ y' \\ z' \end{bmatrix} = \begin{bmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & a_{33} \end{bmatrix} \begin{bmatrix} x \\ y \\ z \end{bmatrix} \]

简记为:

\[ c \times X' = H_{3 \times 3} \times X \]

where \(H\) is nonsingular

作业:验证欧式是一个群 #TODO

  • 射影变换是最一般的线性变换,有8个自由度(虽然有9个未知数,但只与具体比率有关)
    • 将其中一个元素固定为1,一个比例对应一个自由度
  • 不变量:交比 cross ratio(共线四点的交比不变)

总结

变换类型 矩阵表达式 限制条件 方向性不变性条件
旋转变换 \(\begin{bmatrix}R_{n \times n} & 0_{n \times 1} \\0_{1 \times n} & 1\end{bmatrix}\) \(R\) 是正交矩阵且 \(det(R)=1\) \(det(R) = 1\)
欧氏变换 \(\begin{bmatrix} R_{n \times n} & t_{n \times 1} \\ 0_{1 \times n} & 1\end{bmatrix}\) \(R\) 是正交矩阵且 \(det(R)=1\) \(det(R) = 1\)
相似变换 \(\begin{bmatrix} sR_{n \times n} & t_{n \times 1} \\ 0_{1 \times n} & 1\end{bmatrix}\) \(R\) 是正交矩阵且 \(det(R)=1\) \(det(R) = 1\)
仿射变换 \(\begin{bmatrix} A_{n \times n} & t_{n \times 1} \\ 0_{1 \times n} & 1\end{bmatrix}\) \(A\) 是非奇异矩阵且 \(det(R)>0\) \(det(R) > 0\)
射影变换 \(H_{(n+1) \times (n+1)}\) \(H\) 是非奇异矩阵 无法判定
变换类型 二维情况下自由度个数 三维情况下自由度个数 不变量
旋转变换 1 3 长度、角度、面积(体积)
欧氏变换 3 6 长度、角度、面积(体积)
相似变换 4 7 相似比、角度、面积(体积)比
仿射变换 6 12 简单比、面积(体积)比、平行关系
射影变换 8 15 交比、共线关系