map2dfsuion 解读
1. 相机位姿的数学表示以及如何从世界坐标系投影到图像坐标系的变换
这段内容主要介绍了相机位姿的数学表示方式,以及如何从世界坐标系投影到图像坐标系的变换过程。我们可以拆分成几个部分来理解。
1. 相机位姿的表示(Lie 群与李代数)
相机的位姿(位置和朝向)通常用 刚体变换(Rigid Transformation) 来描述。刚体变换由一个 平移向量 和一个 旋转矩阵 组成:
- 平移部分:\({v}_{1},{v}_{2},{v}_{3}\) 代表相机在 3D 空间中的平移(X、Y、Z 方向的位移)。
- 旋转部分:\({q}_{1},{q}_{2},{q}_{3}\) 代表旋转信息,它们可以通过李代数(Lie Algebra)转换为旋转矩阵 \(\mathbf{R} \in SO(3)\) 或四元数表示。
这里使用的是 李代数 \(se(3)\) 的扭转坐标(Twist Coordinates)\(\xi\) 来表示相机的位姿:
- 其中,前三个分量表示平移,后三个分量表示旋转。
- 旋转矩阵 \(\mathbf{R}\) 可以通过李代数的指数映射(Exponential Map)从 \({q}_{1},{q}_{2},{q}_{3}\) 计算得到。
在实际计算中,我们常使用李代数 \(\mathfrak{se}(3)\) 和李群 \(SE(3)\) 之间的映射来转换位姿。
2. 坐标变换(世界坐标 → 相机坐标)
为了将世界坐标系中的点 \(\mathbf{P} = (X, Y, Z)^T\) 变换到相机坐标系,我们使用 刚体变换:
其中:
- \(\mathbf{R}\) 是旋转矩阵(表示相机朝向)。
- \(\mathbf{t}\) 是平移向量(表示相机的位置)。
- 这种变换可以用李群的指数映射来表示:\[{\mathbf{P}}^{\prime } = \exp(\mu) \mathbf{P} \]这里的 \(\exp(\mu)\) 表示 李代数到李群的指数映射,它可以将 扭转坐标 \(\xi\) 转换成 \(SE(3)\) 的变换矩阵。
这一步的作用是 将世界坐标转换到相机坐标系,也就是相机视角下的三维点坐标。
3. 投影变换(相机坐标 → 图像坐标)
在标准针孔相机模型下,三维点 \(\mathbf{P}_C = (X_C, Y_C, Z_C)^T\) 在相机坐标系中投影到图像坐标系:
其中:
- $ f_x, f_y $ 是焦距(单位通常是像素)。
- $ x_0, y_0 $ 是相机主点(光轴投影到图像上的中心)。
- 这是 透视投影(Perspective Projection),可以理解为 相机的透视效果,远处的物体投影后更小。
这一步的作用是 将三维点转换成二维图像坐标,即像素坐标。
4. 逆投影(图像坐标 → 归一化相机坐标)
如果我们知道 图像坐标 \(\mathbf{p} = (x, y)\),我们可以计算对应的 归一化相机坐标(即假设 $ Z_C = 1 $ 时的三维点坐标):
- 这里的 \(Z_C = 1\) 仅用于归一化,实际的三维点深度 \(Z_C\) 需要从其他信息(如深度传感器或双目相机)中计算。
- 这个过程称为 反投影(Inverse Projection),常用于 3D 视觉任务,如深度估计、三角测量等。
总结
-
相机位姿表示
- 用李代数 \(se(3)\) 进行紧凑表示,包含平移和旋转信息。
- 旋转部分 \(\mathbf{R}\) 通过指数映射计算得到。
-
坐标变换
- 世界坐标 \(\mathbf{P}\) 经过旋转 \(\mathbf{R}\) 和平移 \(\mathbf{t}\) 转换为相机坐标系。
-
投影变换
- 使用针孔相机模型,将 3D 点投影到 2D 图像坐标。
-
逆投影
- 通过反投影从图像坐标恢复 归一化相机坐标,用于 3D 视觉计算。
你可以把它看成 “世界坐标 → 相机坐标 → 图像坐标” 的一个完整变换链。如果你在做视觉 SLAM、VINS、深度估计等任务,这些概念是基础。
2. 视频帧准备与跟踪
这段内容主要介绍了一个基于特征点的视觉 SLAM(Simultaneous Localization and Mapping)系统的姿态估计和关键帧管理方法,涉及 特征提取、PnP 问题、误差优化、关键帧距离计算 等。我们逐步解析其中的关键概念和公式。
1. 线程分离:降低计算负担
为了减轻主线程的计算负担,系统 在单独的线程中进行预处理,包括:
- 图像去畸变(undistortion):如果摄像头有径向或切向畸变,需要先进行校正。
- 特征提取(feature extraction):使用 ORB(Oriented FAST and Rotated BRIEF)特征 进行关键点检测和描述。
ORB 结合了 FAST 角点检测器和 BRIEF 描述子:
- FAST 提供角点检测,计算速度快。
- BRIEF 通过二进制描述提高匹配效率,并结合旋转信息增强鲁棒性。
这一步的目的是为后续 匹配、位姿估计、地图构建 提供基础数据。
2. 地图初始化
在 SLAM 中,地图由 关键帧(Keyframe, 记为 \(\mathbf{K}\))和地图点(Map-Point, 记为 \(\mathbf{P}\)) 组成。地图初始化过程如下:
- 选取第一帧 \(K_1\) 和第二帧 \(K_2\) 作为关键帧。
- 利用两帧关键帧 \(K_1, K_2\) 进行双目或单目初始化,建立 3D 地图点 \(\mathbf{P}\)。
- 初始化完成后,在后续帧中使用 PnP 进行位姿估计。
3. 视觉里程计:基于 PnP 计算相机位姿
在地图初始化完成后,新的帧通过 Perspective-n-Point(PnP) 问题进行 相机位姿(pose, 记为 \(\mu\))估计。
PnP 问题:已知 3D-2D 点对 \((\mathbf{P}, \mathbf{p})\),求解相机位姿 \(\mu\),即:
- \(\mathbf{P}\):来自地图的 3D 点(在世界坐标系下)。
- \(\mathbf{p}\):当前帧检测到的 2D 关键点(在图像坐标系下)。
步骤:
-
从 ORB-SLAM [22] 的匹配策略中借鉴:
- 在当前帧和上一个关键帧 \(K_{i-1}\) 之间进行 窗口搜索,找到初步的 3D-2D 匹配点。
- 通过 PnP 求解初步位姿。
-
局部地图匹配:
- 收集所有 可见该地图点的关键帧,构造局部地图(local sub-map)。
- 用初步估计的位姿将局部地图点投影到当前帧,寻找更多的匹配点,以提高精度。
4. 误差优化:最小化加权残差
给定 3D 地图点 \(\mathbf{P}\) 和 2D 关键点 \(\mathbf{p}\) 之间的匹配,可以通过最小化 加权误差函数 来优化相机位姿 \(\mu\):
-
目标:找到最优相机位姿 \(\mu^*\),使误差最小。
-
误差项:
\[{\mathbf{e}}_{i} = {\mathbf{p}}_{i} - {\mathbf{p}}_{i}^{\prime } = \left\lbrack \begin{array}{l} {x}_{i} \\ {y}_{i} \end{array}\right\rbrack - \operatorname{Proj}\left( {\exp \left( \mu \right) {\mathbf{P}}_{\mathbf{i}}}\right). \tag{6} \]- \(\mathbf{p}_i\):观测到的 2D 关键点。
- \(\mathbf{p}_i'\):由当前估计的位姿 \(\mu\) 预测得到的 2D 关键点。
-
加权因子:
- \(w_i\):通过金字塔层级(pyramid level)来确定,给高层级关键点较小的权重,以减少不可靠匹配的影响。
- 信息矩阵 \(\sum_i^{-1}\):用于衡量观测噪声对优化的影响。
优化通常采用 非线性最小二乘方法(如 Gauss-Newton 或 Levenberg-Marquardt) 来求解。
5. 关键帧管理
SLAM 需要根据帧间的相对运动来判断 是否需要插入新的关键帧,这里采用 LSD-SLAM [18] 的相对距离计算方法:
- \(\mu_{ji}\):当前帧和上一个关键帧 \(K_{i-1}\) 之间的相对位姿(包含平移和旋转)。
- \(\mathbf{W}\):权重矩阵,对不同的运动参数赋予不同的影响。
- 旋转和位移的影响不同,需要不同的缩放因子。
- 平移项的权重根据平均深度缩放,以适应不同的尺度。
关键帧插入策略:
- 如果当前帧到上一个关键帧的距离超过阈值,则插入一个新的关键帧 \(K_i\),以保证关键帧之间有足够的重叠区域,提高建图精度。
总结
- 多线程优化:特征提取和图像去畸变在单独的线程进行,提高效率。
- ORB 特征匹配:使用 ORB 进行特征检测、描述和匹配,作为后续姿态估计的基础。
- 地图初始化:利用前两帧初始化 3D 地图点,后续帧通过 PnP 计算位姿。
- 位姿优化:通过加权最小二乘方法优化相机位姿,减少误差影响。
- 关键帧管理:计算相对运动量,如果超过阈值则插入新的关键帧,确保关键帧覆盖足够的环境信息。
这一框架与 ORB-SLAM、LSD-SLAM 等主流 SLAM 方法类似,核心在于 特征匹配+PnP+优化+关键帧管理 的结合,实现高效的视觉 SLAM。
3. 关键帧处理与局部优化
这部分描述的是 SLAM(同时定位与建图)系统中的 地图扩展与优化 过程,具体涉及 关键帧插入、新地图点创建、数据关联、局部优化 等方面。下面我们详细解析这些内容。
1. 关键帧插入与新地图点创建
当系统决定插入一个新的关键帧 $ K_i $ 时,需要尽快添加新的地图点 $ \mathbf{P} $ ,以便在后续的帧中匹配到足够的特征点进行跟踪。
新地图点的创建过程:
-
寻找未匹配的关键点:
- 在跟踪过程中,一些关键点(特征点)可能没有找到对应的地图点。
- 这些未匹配的关键点需要被关联到地图中,以丰富 SLAM 系统的特征点数量。
-
极线搜索:
- 在相邻关键帧(时间上相近的关键帧)中,沿着极线(epipolar line)寻找这些关键点的匹配点。
- 由于两帧之间存在几何约束(本质矩阵、单应矩阵等),这些关键点的匹配应该出现在一条特定的极线上。
-
词袋(BoW)加速搜索:
- 计算 Bag-of-Words(BoW)特征向量,并使用数据库匹配技术来加速关键点搜索。
- BoW 能够快速判断两幅图像之间是否具有较高的相似性,从而减少搜索范围,提高匹配效率。
-
三角化(Triangulation):
- 通过两帧的匹配点计算 3D 坐标,即使用三角测量法(triangulation)计算这些点的空间位置,从而生成新的地图点。
2. 数据关联与地图点优化
当新的地图点创建后,进行 数据关联(Data Association),以进一步优化地图:
-
增加观察(Adding More Observations):
- 通过检测地图中已有的关键帧,尝试找到更多的观测到新地图点的关键帧,以提高数据的冗余度和鲁棒性。
-
合并冗余点(Merging Redundant Map Points):
- 如果不同的关键帧之间观测到的点高度相似(误差小于某个阈值),则可以将它们合并成同一个地图点,减少冗余,提高精度。
-
移除不良地图点(Removing Bad Map Points):
- 由于错误匹配、噪声等原因,一些地图点可能是不可靠的。这些点需要在优化后被剔除,以保证地图的质量。
3. 局部优化(Local Bundle Adjustment, LBA)
在 SLAM 中,为了确保地图的精度和一致性,需要不断优化关键帧的位姿和地图点的位置。局部束调整(Local Bundle Adjustment, LBA)用于优化局部子地图。
局部子地图由 局部关键帧 $ K_L $ 和地图点 $ P_L $ 组成:
- 局部关键帧 $ K_L $:当前帧附近的一些关键帧(比如最近的 5~10 帧)。
- 局部地图点 $ P_L $:被局部关键帧观测到的地图点。
优化过程如下:
-
最小化加权残差(Weighted Residuals):
- 目标是同时优化 关键帧的位姿 $ \mu $ 和 地图点的位置 $ \mathbf{P} $ 。
- 误差由 所有局部关键帧和地图点的投影误差 组成:\[\left\{ {{\mu }^{ * },{\mathbf{P}}^{ * }}\right\} = \mathop{\operatorname{argmin}}\limits_{{\mu ,\mathbf{P}}}\mathop{\sum }\limits_{{{P}_{i} \in {P}_{L}}}\mathop{\sum }\limits_{{{K}_{j} \in {K}_{L}}}{w}_{ij}{\mathbf{e}}_{ij}^{T}{\sum }_{ij}^{-1}{\mathbf{e}}_{ij} \]
- 其中:
- $ \mathbf{e}_{ij} $ 是误差项,即地图点 $ P_i $ 在关键帧 $ K_j $ 中的观测误差。
- $ w_{ij} $ 是权重,用于降低大误差点的影响(鲁棒优化)。
- $ \sum_{ij}^{-1} $ 是信息矩阵,衡量观测的置信度。
-
GPS 约束(第二项):
- 在公式 (8) 中,第二项:\[\mathop{\sum }\limits_{{{K}_{j} \in {K}_{L}}}\gamma {\left( j\right) }^{T}{\Lambda }_{j}^{-1}\gamma \left( j\right) \]
- 这一项表示 GPS 约束,在 SLAM 过程中加入外部 GPS 信息,提高系统的全局定位精度。
- GPS 误差项 $ \gamma(j) $ 受到 协方差矩阵 $ \Lambda_j^{-1} $ 的加权,以调整 GPS 数据在优化中的影响。
- 在公式 (8) 中,第二项:
4. 优化方法(G2O)
- 上述局部优化的求解采用 G2O(General Graph Optimization) 框架,这是一个常用的优化库,适用于 位姿图优化、SLAM、BA 等问题。
- G2O 通过 非线性优化(如高斯-牛顿或 Levenberg-Marquardt 方法),迭代求解位姿和地图点的位置,使得整体误差最小化。
5. 总结
这一部分主要介绍了 SLAM 系统中的 关键帧插入、地图点创建、数据关联、局部优化 过程:
- 关键帧插入时,需要尽快添加新的地图点,以增强系统的跟踪能力。
- 通过 极线搜索、BoW 词袋模型、三角化 生成新的 3D 地图点。
- 进行 数据关联,增加观测、合并冗余点、删除错误点。
- 局部束调整(LBA) 通过优化关键帧位姿和地图点位置,提高地图精度。
- GPS 约束 用于提升全局定位能力。
- 优化采用 G2O 框架 进行高效求解。
这一部分的核心目的是 提高 SLAM 地图的精度和鲁棒性,确保后续的跟踪和定位更加稳定。
4. 闭环检测与融合
高质量地图的生成与全局优化
1. 轨迹漂移问题
在 视觉 SLAM(Simultaneous Localization and Mapping,实时定位与建图) 过程中,随着时间的推移,由于传感器噪声、遮挡、照明变化等因素,跟踪漂移(Tracking Drift) 是不可避免的。虽然在短时间内漂移可能较小,但在长距离或大规模场景中,这种漂移会累积,最终导致不可接受的对齐误差(Misalignment Error),影响地图的质量。
为了解决这个问题,通常有两种方法:
- 融合 GPS 数据 来全局优化累积的漂移(将在下一节介绍)。
- 使用回环检测(Loop Closure)和全局优化 来改善大规模场景中的一致性。
在 SLAM 系统中,回环检测(Loop Closure) 是识别 UAV 经过已知位置的能力,全局优化(Global Optimization) 则用于修正所有关键帧的误差,以提高地图的一致性。
2. 回环检测(Loop Closure Detection)
回环检测的目标 是找到 UAV 过去曾经到过的地点,即 当前帧(Keyframe)与历史关键帧的匹配,以减少累计的漂移误差。
2.1 关键帧匹配
在回环检测中,需要找到与当前位置最接近的关键帧,但由于漂移的存在,直接估计 UAV 轨迹中的交叉点并不容易。因此,需要使用基于视觉的方法进行相似性匹配。
主要的方法有:
- FabMap(概率模型)
- DBoW2(视觉词袋模型,Bag of Words, BoW)
本工作采用 DBoW2 进行回环检测:
-
构建视觉词袋模型
- 使用 DBoW2 生成视觉单词(Visual Words),即将图像中的局部特征(SIFT、ORB 等)映射到词汇库中。
- 关键帧之间如果共享相同的视觉单词,则它们具有较高的视觉相似性。
-
计算相似性得分
- 收集所有共享视觉单词的关键帧。
- 计算当前关键帧与历史关键帧的相似性得分。
- 按照相似性进行排序,得出可能的回环候选帧。
-
邻域一致性检查(Robust Candidate Selection)
- 为了提高鲁棒性,只有当某个关键帧的邻居(相邻关键帧)也是候选帧时,它才会被选为回环候选帧。
- 这样可以避免单个错误匹配导致的误差传播。
3. 关键帧姿态优化(Pose Optimization)
找到回环候选帧后,需要估计关键帧的相对位姿(Relative Pose),并对整个 SLAM 轨迹进行全局优化。
3.1 计算相似变换(Similarity Transformation)
-
建立匹配点对(Feature Correspondences)
- 计算当前关键帧与回环候选帧的匹配特征点对。
-
使用 RANSAC 进行姿态估计
- 通过 RANSAC(随机采样一致性算法)剔除误匹配点对。
- 计算粗略的相似变换(Similarity Transformation, SIM(3)),包括旋转、平移和尺度变换。
-
优化相对位姿
- 选择内点最多的候选帧作为最终的回环关键帧。
- 最小化地图点的投影误差,优化关键帧之间的相对姿态。
4. 全局优化(Global Optimization)
4.1 数据关联(Data Association)
在执行全局优化之前,需要进行数据关联(Data Association):
- 由于 UAV 可能多次经过同一地点,因此会有多个重复的地图点。
- 需要将这些重复的地图点进行融合,减少冗余信息,提高地图质量。
4.2 关键帧优化
由于直接对所有关键帧进行全局 Bundle Adjustment(BA,束调整) 计算量巨大,效率低,因此采用基于图优化(Pose Graph Optimization)的方法来优化 UAV 轨迹:
-
构建姿态图(Pose Graph)
- 关键帧作为节点(Nodes)。
- 关键帧之间的相对变换作为边(Edges)。
-
优化姿态图
- 采用 g2o(General Graph Optimization) 或类似的方法,对姿态图进行优化。
- 减少关键帧的漂移,提升 UAV 轨迹的全局一致性。
-
优化后的轨迹调整地图点
- 在完成全局优化后,利用新的 UAV 轨迹调整地图点位置,使地图更精准。
5. 结果
通过上述方法,UAV 的轨迹会更加准确,从而:
- 减少漂移误差,提高 UAV 的定位精度。
- 提高地图质量,使其在大规模场景下更加一致。
- 加速地图拼接,减少不必要的计算量,使 UAV SLAM 运行更高效。
总结
- 由于 SLAM 具有漂移问题,需要回环检测(Loop Closure) 和 全局优化(Global Optimization) 进行校正。
- DBoW2 视觉词袋模型 用于查找回环候选帧。
- RANSAC 计算粗略的相似变换(SIM(3)),然后进行局部优化。
- 基于图优化(Pose Graph Optimization) 进行全局调整,减少 UAV 轨迹漂移。
- 最终结果:优化 UAV 轨迹,减少漂移,提高地图的一致性和质量。
这一方法在 UAV 大规模 SLAM 场景中尤其重要,例如:
- 无人机测绘(Aerial Mapping)
- 城市建模(Urban Reconstruction)
- 精准农业(Precision Agriculture)
- 无人机巡检(Infrastructure Inspection)
你在 UAV SLAM 过程中遇到的漂移问题,应该也可以通过这些方法进行优化。你现在是遇到哪方面的问题?
5. GPS 和平面拟合
这部分内容主要讲的是 GPS 时间同步 和 相似变换(SIM(3))优化,用于将 UAV(无人机)的 SLAM 轨迹对齐到 WGS84 全球坐标系,同时减少轨迹漂移。下面我分步骤详细讲解:
1. GPS 和相机的时间同步
在 UAV 视觉 SLAM 中,GPS 轨迹和相机的时间戳通常不同步,这意味着我们不能直接使用 GPS 位置作为地面真值,需要估计一个时间偏移$ t_{vg} $ 来对齐两者的时间。
-
设 视频关键帧$ K_j $ 在 SLAM 地图中的时间戳是$ t_j $ ,其在 SLAM 地图中的位置是$ \mathbf{P}_{t_j}^{map} $。
-
该帧在 GPS 轨迹 中的对应时间应是:
\[t_g = t_j + t_{vg} \] -
这样,在 GPS 坐标系下,这个关键帧的全局位置应该是:
\[\mathbf{S}_{vg} \mathbf{P}_{t_j}^{map} \]其中$ \mathbf{S}_{vg} $ 是 相似变换矩阵(SIM(3)),用于将 SLAM 地图变换到 WGS84 坐标系。
-
目标是找到 最优的$ t_{vg} $ 和$ \mathbf{S}_{vg} $,使得 SLAM 轨迹和 GPS 轨迹的误差最小:
\[\gamma(j) = \mathbf{P}_{t_g}^{gps} - \mathbf{S}_{vg} \mathbf{P}_{t_j}^{map} \]最小化所有关键帧的加权残差平方和:
\[\mathop{\operatorname{argmin}}\limits_{{{t}_{vg},{\mathbf{S}}_{vg}}} \sum_{K_j \in \mathbf{K}} \gamma (j)^T \Lambda_j^{-1} \gamma(j) \]这里$ \Lambda_j^{-1} $ 控制全局坐标中不同分量的权重。
2. 粗略校准(Coarse Calibration)
为了高效优化$ t_{vg} $ 和$ S_{vg} $,先执行粗略校准:
- 假设时间偏移不会太大(一般 < 60s),所以枚举$ t_{vg} \in [-60, 60] $ 的可能值。
- 对于每个\(t_{vg}\),用 快速 SIM(3) 求解器 计算$ S_{vg} $。
- 选出最优的\((t_{vg}^*, S_{vg}^*)\) 作为初值。
3. 精确优化(Fine Optimization)
- 在得到初始$ (t_{vg}, S_{vg}) $ 后,使用 G2O(General Graph Optimization) 进一步优化,使得 GPS 轨迹和 SLAM 轨迹的误差最小。
- 这样得到最终的\((t_{vg}^*, S_{vg}^*)\),然后用$ S_{vg} $ 变换所有地图点和关键帧。
4. 局部优化 & GPS 约束
- 在 SLAM 过程中,每次局部优化(Local BA)时,都会将 GPS 约束(公式 (8))引入,以减少轨迹漂移,提高定位精度。
5. 地面平面拟合(Ground Plane Estimation)
- 2D 地图拼接 & 可视化 需要一个地面平面(Ground Plane)。
- 使用 RANSAC 方法从地图点中拟合一个地面平面,以便在 2D 视图中进行地图拼接。
总结
- 由于 GPS 和相机不同步,需要估计时间偏移$ t_{vg} $。
- 需要估计 相似变换$ S_{vg} $,将 SLAM 地图对齐到 WGS84 坐标。
- 采用粗略校准 + 精确优化(G2O) 方法,提高效率和精度。
- 在局部优化时引入 GPS 约束,减少漂移。
- 拟合地面平面 以便进行 2D 地图拼接和可视化。
这个方法主要用于 视觉 SLAM + GPS 融合 的 UAV 定位场景,既能利用 SLAM 提供高频视觉里程计,又能用 GPS 提供全局约束,最终实现高精度 UAV 轨迹估计。
6. 即时航空影像马赛克(mosaicing) 的增量拼接方法
这一部分讲的是即时航空影像马赛克(mosaicing) 的增量拼接方法。核心目标是在传统全景拼接的基础上,针对航拍影像的特点,实现高效、增量式、正交化的拼接,同时减少由于场景不平整和相机运动导致的错位问题。
核心挑战
-
实时性要求
拼接必须足够快,以满足航拍即时应用需求。 -
增量拼接
影像要逐步拼接,并在融合(blending)和可视化(visualization)方面做到增量更新,而不是一次性全局计算。 -
非理想平面 & 相机运动
- 场景通常不是完全平坦的,例如城市中的高楼会造成投影变形。
- 相机除了旋转,还伴随着平移运动,导致影像错位难以避免。
-
正交化(Ortho)与动态更新
- 最终马赛克影像应尽可能接近正交投影,减少几何畸变。
- 拼接结果需要能够不断更新,以适应航拍过程中场景的变化。
拼接流程
整个拼接过程由矩形块(patches)进行增量式融合,主要步骤如下:
-
计算矩形边缘(Marginal expansion)
根据相机的相对姿态(relative pose)计算影像的矩形边缘,当新影像的边缘超出已有拼接区域时,马赛克区域就会扩展。 -
计算加权图像 & 影像变换(Weighted Image & Warping)
- 计算一个自适应加权图像,加权因子取决于高度、视角和像素位置,这样可以尽可能保证影像拼接的准确性。
- 计算单应性矩阵(Homography Matrix) 并对彩色图像和加权图像进行变换。
-
拉普拉斯金字塔融合(Laplacian Pyramid Blending)
- 计算影像的拉普拉斯金字塔和权重金字塔,用于处理曝光差异、错位问题,同时保留影像细节。
- 采用最佳加权值融合(Best Weighted Fusion)而非简单的加权求和,使拼接结果更自然。
-
恢复最终影像
- 使用金字塔的所有层级恢复最终影像:\[G_0 = \sum_{l=0}^{k} L_l \]
- 在融合时,还需要考虑邻近的矩形块,以保证拼接一致性。
- 使用金字塔的所有层级恢复最终影像:
与传统方法对比
- 传统的接缝切割(seam cutting) 方法计算开销大,不适用于实时应用。
- OpenCV 的羽毛混合(Feathering) 和 多带混合(Multi-band Blending) 无法处理高楼等结构造成的错位,容易出现模糊失真。
- 本文的方法虽然没有使用接缝切割(seam cutting),但仍然能够高效地减少影像错位,并保留更多细节。
总结
本方法主要采用拉普拉斯金字塔 + 自适应权重 进行增量式影像拼接,核心特点:
- 实时增量计算,适合即时航空影像拼接。
- 避免全局计算,通过矩形块(patches)局部融合加快计算速度。
- 减少错位与模糊,比 OpenCV 自带方法更适合复杂场景(如高楼)。
- 无需接缝切割,但依然能获得较好的拼接质量。
简单来说,这个方法在航拍影像拼接中实现了高效、增量、细节保留的融合,是一个优化版的图像拼接技术。