图像重磅
图像拼接可以概括为以下几个主要步骤:
全景拼接是将多张视野重叠的图像组合起来,生成全景图或高分辨率图像的过程。要组合视野重叠的图像,我们需要检测图像对中的匹配特征和关键点。
从上面的两张图片很容易看出,如果我们选择海洋作为兴趣点,很难将左图的海洋斑块与右图进行具体匹配(因为海洋在广阔的空间区域中看起来相同)。我们还注意到,选择诸如小岩石的顶峰(橙色圆圈)等区域能够为我们以后的匹配提供更有价值的信息。
重点特征
a) 可重复的兴趣点
b)兴趣点的独特性
c) 尺度和旋转不变性
事实证明,角点实际上是一个很好的特征,可以作为兴趣点!有一种名为 Harris Corner Detector 的算法可以帮助我们在图像中找到这样的角点作为兴趣点。
Harris Corner 对旋转(因为 H 矩阵的特征值在旋转后保持不变)、平移和强度的附加变化具有不变性。但是,它对强度和比例的缩放不具有不变性。
其他方法如 SIFT 使用高斯差 (DoG) 来检测不同尺度的兴趣点,并且对尺度具有不变性。
描述符基本上是矢量表示,以数学方式描述图像中的某个区域。描述符也应该对旋转、缩放和平移具有不变性。
特征匹配
一旦检测到每个查询和训练图像的关键点和特征,就需要一个匹配器对象来匹配图像对的相应特征。这称为特征对应。有各种匹配器对象,如强力匹配器、基于 FLANN 的匹配器等。
暴力匹配器 (BF) 的作用正如其名称所示。给定 2 组特征(分别来自图像 A 和图像 B),将 A 组中的每个特征与 B 组中的所有特征进行比较。默认情况下,BF 匹配器会计算两点之间的欧几里得距离。
然而,如果我们想要考虑多个候选匹配,我们可以使用基于 KNN 的匹配程序。KNN 不会返回给定特征的单个最佳匹配,而是返回 k 个最佳匹配。
匹配率测试
为了确保 KNN 返回的特征具有很好的可比性,SIFT 论文的作者提出了一种称为比率测试的技术。基本上,我们迭代 KNN 返回的每一对并执行距离测试。对于每对特征(f1,f2 ),如果f1和f2之间的距离在某个比率范围内,我们保留它,否则,我们将其丢弃。此外,必须手动选择比率值。
单应性矩阵
想象两种场景。
(1) — 每次拍照时,向左走一步,同时保持相机静止。
(2) — 站在固定位置,手持相机旋转身体,在旋转的同时捕捉不同的照片。
如果我们想在 (1) 中将图像拼接在一起,我们可以简单地将一张照片叠加在另一张照片上,这样就能得到很好的效果。然而在 (2) 中,如果我们想通过简单地将图像叠加在一起来将图像拼接在一起,我们会发现拼接的结果很糟糕(由于捕获图像的平面不同,某些区域会被遗漏)。因此,我们需要使用单应性将一幅图像投影到另一幅图像的同一平面上,然后再将它们拼接在一起。
因此,一旦找到最精确、最准确的特征对,就会应用变换矩阵将两幅图像放在同一平面上。这种变换称为单应性矩阵。简而言之,单应性是一个 3x3 矩阵,可用于许多应用,例如相机姿势估计、透视校正和图像拼接。单应性是一种 2D 变换。它将点从一个平面(图像)映射到另一个平面。
计算单应性矩阵
然而,单应性矩阵对异常值很敏感。我们可以使用随机样本一致性 (RANSAC) 产生稳健的结果,其中我们在 H 矩阵的计算中只包括内点(True positive matches)。
我们可以使用随机样本共识 (RANSAC) 产生稳健的结果,其中我们在 H 矩阵的计算中只包括内点(True positive matches)。
线性回归等模型使用最小二乘估计来将最佳模型与数据拟合。我们可以看到,线性回归模型很容易受到异常值的影响。这是因为它试图减少平均误差。因此,它倾向于选择最小化所有数据点与模型本身的总距离的模型。这包括异常值。
因此,如果异常值的数量很大,它可能会失败。RANSAC 通过仅使用数据中的内点子集来估计参数来解决此问题。
图像变换
一旦我们得到了估计的单应性矩阵,我们就需要将其中一张图片变换到一个公共平面上。
在这里,我们将对其中一张图片应用透视变换。基本上,透视变换可以结合一个或多个操作,如旋转、缩放、平移或剪切。其理念是变换其中一张图片,使两张图片合并为一张。