从特征匹配到图像拼接

发布时间:2026/9/13 5:17:59

从特征匹配到图像拼接 经过前面七篇的铺垫我们已经得到了精确匹配的内点集和一个描述图像间几何关系的全局单应性矩阵。虽然在现代拼接管道中仍有很多其他处理步骤和相应算法但就我们目前所拥有的材料已经可以尝试进行一次最简易的图像拼接。复述一下我们现有的材料图像 A 和图像 B二者之间存在重叠区域。经过 USAC 提纯的匹配点集和一个全局单应性矩阵描述了从图像 A 到图像 B 的投影变换关系。而图像拼接的基本思路是这样的选择其中一张图像作为参考坐标系通过单应性矩阵将其他所有图像都变换到这个坐标系下然后填充像素。构建画布#有了单应性矩阵之后不是直接把图像 A 通过单应性矩阵变换到图像 B 上首先要解决的问题是变换后的图像应该放在哪里这并不是简单的按方向拼在一起因为正确的单应性变换会反应真实镜头间的几何关系图像的位置和大小都会发生改变。 例如负坐标、超出了原图范围以及整幅图像的旋转倾斜等。c42d28ac-02ec-4f31-9358-4dfe756d4b3c.png因此在真正开始像素映射之前需要先创建一个足够大的目标画布Canvas。具体做法如下先保持参考图像 B 的位置不变。利用单应性矩阵计算图像 A 四个顶点变换后的坐标。统计所有顶点的坐标范围 将图像 B 的四个角点与图像 A 变换后的四个角点统一放到同一坐标系中分别统计。整体平移坐标系 由于图像数组不能使用负坐标作为索引因此需要对所有图像**统一施加一个平移构建最终画布 根据平移后的坐标范围创建一个能够包围所有图像的最小矩形其宽、高分别为这样得到的矩形便是最终用于拼接的画布bc4b4bcb-029f-4b88-8590-377026baf652.png填充画布#现在我们有了合适的区域去放置变换后的图像而不至于因图像本身的尺寸限制导致裁剪。但目前画布只是一个空的像素数组它本身没有任何图像内容。因此这步才是拼接的重点工作利用两张原始图像去填充这个画布。2.1 参考图像平移复制#参考图像 B 不需要几何变换它只需要根据上一步得到的平移矩阵进行一次整体平移之后直接复制像素值即可。2.2 变换图像反向映射#首先要说明的是这步和上一步并不是前后顺序关系图像 A 并不是在已经包含 B 的画布上映射的而是独立的这和下一步融合有关。有了单应性矩阵后图像 A 变换的最直接想法是这样的遍历原始图像 A 中的每个像素用计算出它在画布中的位置把像素值填过去。这种方法被称为前向映射Forward Warping但前向映射存在一个严重问题变换后的坐标几乎不可能恰好落在整数像素位置上。这样会导致两类常见后果像素可能被映射到目标图像中的缝隙里导致结果中出现大量空洞。多个像素映射到同一个位置导致重叠。bdc75d81-af51-48fe-bbc9-8a9a5042660a.png因此实际工程中几乎从不使用前向映射取而代之的是反向映射Backward/Inverse Warping遍历画布中的每个整数像素位置用计算它在原始图像中的对应位置然后采样像素值。但只有能够映射回原图有效区域的像素才会被赋值。反向映射的过程如下对画布中每个整数像素坐标计算在原始图像 A 的位置插值采样像素值填入画布的。由于的计算结果通常也是浮点数因此仍然会遇到非整数坐标的问题。还是老办法插值在图像拼接中双线性插值往往是性价比最高的选择。393706d5-ec9f-4cad-865c-defec6806be5.png图像融合#经过上一步我们已经完成了从原始图像到画布的映射但这里还有一个明显问题拼接图像 AB 间存在重叠区这部分像素值用谁的怎么处理这便是图像融合部分的逻辑了这里先引入最基础的内容3.1 重叠区识别#重叠区的识别是处理的前提而这其实在上一步填充时同步进行的在图像 AB 分布进行画布填充时同步生成各自掩码指导图像融合可以理解为先分别生成两张已经对齐到同一画布上的图像再根据掩码决定最终输出。具体如下当参考图像复制或变换图像映射完成后为其生成一组和画布尺寸相同的掩码覆盖部分值为 1 反之为 0 。在融合部分根据掩码情况进行相应判别指导最终融合maskA1, maskB0 → 非重叠直接复制 A 值。maskA0, maskB1 → 非重叠直接复制 B 值。maskA1, maskB1 → 重叠区域执行融合处理。warping_visualization.png3.2 融合算法#融合算法本身就像之前的特征匹配、误剔除一样是拼接管道的核心模块其同样拥有丰富的方法以及持续的演进过程简单列举如下方法 核心思想 优点 缺点直接覆盖Direct Copy 重叠区域直接采用一幅图像的像素 实现最简单速度最快 接缝明显亮度变化突兀加权融合Feather Blending 根据距离边界的权重对两幅图进行线性加权 实现简单可有效减弱接缝 存在重影对配准误差较敏感多频带融合Multi-band Blending 利用拉普拉斯金字塔在不同频率分别融合 接缝自然是经典拼接算法的主流方案 计算量较大实现复杂最优缝合Seam Finding 在重叠区寻找最不显眼的拼接缝再进行融合 能有效避开运动物体和明显错位 对曝光差异仍较敏感通常需结合其他融合方法梯度域融合Poisson Blending 保持梯度连续通过求解泊松方程完成融合 光照过渡自然颜色一致性好 求解耗时不适合大规模实时拼接深度学习融合 利用神经网络学习重叠区域的融合方式 对复杂场景具有较好的适应能力 依赖训练数据计算成本高部分具体算法会在之后再详细展开。更多拼接组件#至此我们已经完成了一条最基础的图像拼接流程利用几何变换将两幅图像映射到统一坐标系再通过融合生成最终结果。用一组简单数据测试如下stitched_result.png再试试我们之前一直的那组
延伸阅读

更多相关文章

2026/9/8 2:29:36

C#与C++混合编程:WebSocket实时数据传输实践

1. 项目背景与核心需求在工业控制、游戏开发、金融交易等实时性要求较高的场景中,C#与C的混合编程是一种常见的技术方案。C#凭借其高效的开发效率和丰富的类库在业务逻辑层表现出色,而C则因其接近硬件的执行效率在算法密集型任务中占据优势。WebSocket作…

2026/9/10 4:16:33

Unity高性能glTF模型加载指南:glTFast核心原理与工程实践

1. 项目概述:为什么glTFast是Unity开发者的新宠?如果你正在Unity里折腾3D模型,尤其是从各种建模软件(比如Blender、Maya)或者网上下载的模型资源,那你一定对模型导入这个环节又爱又恨。爱的是,精…

2026/9/10 11:41:20

Vue.js入门指南:从零构建响应式前端应用

1. Vue.js入门精要:从零开始掌握现代前端框架作为一名长期奋战在一线的全栈开发者,我至今记得2016年第一次接触Vue.js时的惊艳感。当时Angular的复杂性令人望而生畏,React的学习曲线陡峭,而Vue.js就像一股清流——它保留了React的…

2026/9/13 5:17:19

医疗KBQA实战:知识图谱构建、意图识别与实体抽取全流程解析

简介:面向希望快速入门知识图谱问答(KBQA)的开发者与AI学习者,这份资源以医疗领域为场景,完整展示了从实体关系构建到意图识别、答案检索的落地流程。项目包含7类实体、约3.7万实体节点与21万实体关系,并基…

2026/9/13 5:17:19

SQL Server CDC完整落地指南:启用、监控与排错

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/13 5:17:19

CPU占用高排查实战:从进程到线程的深挖指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/13 5:17:19

nRF24LE1的Enhanced ShockBurst配置与排坑指南

简介:一套基于Nordic NRF24LE01芯片的增强型ShockBurst协议示例工程,面向无线通信开发者和物联网初学者,用于理解2.4GHz收发场景下的可靠数据传输设计。压缩包共6个文件,包含4个Keil工程文件(uvproj)和2个C…

2026/9/13 5:17:19

郊游活动题解析:容量受限最短路与枚举限重+Dijkstra

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/13 5:12:19

企业级LLM选型指南:从需求分析到模型匹配

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/13 0:01:16

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/13 0:01:16

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/12 14:32:17

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/12 6:37:43

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码