全景拼接¶
全景拼接(Panorama Stitching)是将多张部分重叠的图片拼接成一张连续的全景图像的技术。在进行全景拼接时,通常要满足以下条件:
- 图片是共面的,即它们位于同一个平面上。
- 镜头不能有畸变,以保证图像准确对齐。
- 图像需要具有均匀的光照,以确保亮度和对比度一致。
基本原理¶
在全景拼接中,我们通常使用线性变换来将一张图片上的点对应到另一张图片上,这个变换由一个可逆矩阵 \(H\) 来表示
其中,\(H\) 是一个可逆矩阵
算法步骤¶
- 特征点检测:在每张图片中检测特征点,通常是突出的关键点
- 特征点描述:为每个特征点提取描述符,以便在不同图片中匹配相同物理点
- 特征点匹配:建立不同图片中特征点之间的对应关系,确定它们在物理世界中的对应关系
- 计算变换矩阵:使用对应关系,反解出变换矩阵 \(H\)
- 应用变换:将变换矩阵应用到一张图片上,使其与另一张图片对齐
- 图像拼接:将对齐后的图片进行拼接,形成全景图像
基本变换¶
齐次坐标¶
“齐次坐标表示是计算机图形学的重要手段之一,它既能够用来明确区分向量和点,同时也更易用于进行仿射(线性)几何变换。”—— 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¶
对于旋转变换,只考虑正常点
where \(R \times R^T = I\), and \(det(R) = 1\)
形如,\(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\)
简记为:
where \(R_{2 \times 2}\) 为正交矩阵且 \(det(R_{2 \times 2}) = 1\)
- 旋转变换也被称作特殊正交变换
- 平面内的旋转变换有 1 个自由度,即 \(\theta\)
- 不变量:distance
- 旋转 + 旋转 还是 旋转
欧式变换 Euclidean¶
在数学类书籍中,一般把同时考虑了旋转、反射与平移的几何变换称为欧氏变换。但在计算机视觉与机器人领域,一般不会考虑反射变换。
此处所讲的欧氏变换是由旋转和平移复合而成的,不考虑反射的情况。
对于欧氏变换,一般也只考虑针对正常点的情况
欧式变换:可以看成先经历一个绕原点的逆时针旋转,旋转角度为 \(\theta\),之后又经历了一次平移,平移量为 \((t_x, t_y)^T\)
简记为:
where \(R_{2 \times 2} \times R_{2 \times 2}^T = I\), and \(det(R_{2 \times 2}) = 1\)
- 不考虑反射的几何变换也被称为特殊欧氏变换
- 同旋转变换相比,欧氏变换多了两个刻画平移量的自由度
- 因此平面内的欧氏变换有 3 个自由度
- 不变量:distance
- 群具有封闭性,不可能变成另一个群。
- 因此,一个欧式变换叠加另一个欧式变换还是欧式变换
相似变换 Similarity¶
在欧式变换的基础上,再加一个缩放
简记为:
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\))
相对于相似变换,再加一个错切
只考虑针对正常点来定义仿射变换
简记为:
where \(A\) is nonsingular
- 矩阵 \(A\) 包括了 4 个独立的元素,\(t_{2 \times 1}\) 是一个二维向量, 所以平面内的仿射变换总共有 6 个自由度
- 不变量:简单比 simple ratio(共线的三点,比例不变)
- 仿射 + 仿射 还是 仿射
射影变换 Projective¶
表达线性几何变换的矩阵 \(H\) 都有一个共同的特点,那就是最后一行是 \((0, 0, 1)\)。如果继续放松对矩阵 \(H\) 的要求,只要求它是一个非奇异的 \(3 \times 3\) 的矩阵,那么此时 \(H\) 所能表达的线性几何变换称为射影变换。
与前面讨论的几种变换不同,射影变换不但可以定义在正常点上,也可以定义在无穷远点上。在射影变换下,不再区分正常点和无穷远点,它可以把正常点变换到无穷远点,也可以把无穷远点变换到正常点。因此,我们对点的坐标表达就不再限定为规范化齐次坐标了(因为无穷远点没有规范化齐次坐标) ,而是使用一般化的齐次坐标表达。
简记为:
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 | 交比、共线关系 |