碎片图像无缝拼合技术的 VC++实现
本文讲述了在 VC++ 6.0 下多幅碎片图像无缝拼合技术的实现原理和过程
摘要:本文讲述了在 Microsoft Visual C++ 6.0 下多幅碎片图像无缝拼合技
术的实现原理和过程,并给出了部分关键代码以供参考。
关键字:Microsoft Visual C++ 6.0、图像、无缝拼合、位图文件
一、 引言
在测绘、文博等行业经常会遇到这样一种情况:观测对象比较大,为保证
分辨率又不能将其全部照下,只能进行局部照相,事后再将这些局部照相的重
合部分去掉,拼合成一幅完整的图像。以前多采用手工拼合,误差较大,往往
不能很好的实现无缝拼合,即使有少量的专业设备,成本也普遍较高。其实只
需将照片通过扫描仪将其录入到计算机中,通过程序处理,完全能很好的实现
多幅图像的无缝拼合,满足实际需要,而且对于文博行业中常会遇到的破碎的、
不规则对象如古旧字画残片等也能很好的进行无缝拼合。本文就对针对该程序
的实现原理及过程做了简要的介绍。
二、 程序设计原理
首先我们从实际出发,我们是通过进行局部照相的手段来保存整体的全部
信息,而要保证这些局部照片所含的信息之和能包括整体的全部信息就必然的
使每两幅邻近的图片有一部分交叠的部分,这样才能保证在将整体对象划分为
若干局部照片而后再拼合成整体图像的过程中不遗漏任何信息,即该划分、拼
合的整个过程是无损的。既然如此,我们只需能保证让两相邻图片的重叠部分
能完全重合,那么我们也就能够肯定在此状态下的这两幅图像实现了无缝拼合。
所以,问题就转换为使相邻图片的重叠部分能完全重合,而判断两相同的图像
片段是否完全重叠可以用光栅掩码来进行直观的判断,比如我们可以采用"异
或"的掩码,当相同位置上的两幅图片的像素相同时就为 0 即黑色,所以可以对
两图片进行移动,只要重叠部分全黑,则表明此时两图像的重叠部分已准确的
重合了,而此时也实现了图像的无缝拼合。此后只需再采用"或"的光栅掩码将
合并后的图像显示出来,再通过拷屏等手段将其存盘即可。在实现拼合的全过
程中主要涉及到图像的拖放、图像文件的读取及显示、光栅掩码、拷屏以及内
存位图的保存等多种技术。接下来就对这些技术的具体应用进行介绍。
三、 程序的具体实现
在进行拼合之前,首先要将从扫描仪录入的图像从文件读取到内存中,并
显示出来。由于在拼合时采取的光栅操作掩码是"异或",所以为保持图像的原