基于拉普拉斯金字塔分解的MATLAB图像融合系统
项目简介
本项目实现了一套基于拉普拉斯金字塔(Laplacian Pyramid)变换的图像融合算法。该系统使用MATLAB编写,能够将两幅具有不同对焦区域的图像(多聚焦图像)融合为一幅全清晰图像。程序不仅包含了完整的金字塔分解、融合规则与重构算法,还内置了多聚焦图像模拟生成模块,能够利用单一源图像自动生成测试所需的源图像对,方便快速验证算法效果。
功能特性
- 自动化测试数据生成:程序内置了基于高斯模糊和掩膜(Mask)的图像退化模拟功能,能够直接读取系统内置图像并生成左侧清晰/右侧模糊和右侧清晰/左侧模糊的测试图像对,无需手动准备多张源图。
- 多尺度金字塔分解:实现了标准的高斯金字塔(Gaussian Pyramid)构建与拉普拉斯金字塔(Laplacian Pyramid)分解,支持自定义分解层数(当前默认为4层)。
- 多通道处理支持:算法具备自适应能力,能够检测输入图像是灰度图还是RGB彩色图。对于彩色图像,系统会自动逐通道(R、G、B)进行独立的金字塔融合处理。
- 混合融合策略:针对不同频带及其包含的图像特征,采用差异化的融合规则:
*
低频分量(顶层):采用平均法,保持图像的基础亮度和色彩平滑。
*
高频分量(细节层):采用基于像素绝对值最大的选择策略,有效保留边缘锐度和细节信息。
- 全流程可视化与评估:程序运行结束后,会直观地并行展示源图像A、源图像B以及最终的融合结果,并输出算法执行耗时,结果会自动保存为本地文件。
系统要求
- MATLAB R2016a 或更高版本(因使用了基础图像处理工具箱函数)。
- Image Processing Toolbox(用于
imresize, imfilter, fspecial, im2double 等函数)。
使用方法
- 确保MATLAB的当前工作路径包含本项目的
main.m 文件。 - 直接运行
main 函数。 - 程序将自动执行以下步骤:
* 读取并预处理内置图像(默认为
peppers.png)。
* 生成两幅模拟的多聚焦源图像。
* 执行拉普拉斯金字塔融合算法。
* 弹出窗口显示对比结果,并在控制台输出耗时。
* 在当前目录下生成名为
fused_result.png 的结果文件。
算法实现细节与逻辑分析
本项目的核心逻辑封装在 main.m 及其子函数中,具体实现流程分析如下:
1. 图像预处理与数据模拟
在进入融合流程前,系统首先进行严格的数据适配:
- 尺寸规整:为了保证金字塔分解过程中上下采样尺寸的完全匹配,程序会自动将源图像裁剪为 $2^N$(N为金字塔层数)的整数倍。
- 多聚焦模拟:既定逻辑并非读取两张外部图片,而是读取单张图片后,利用
fspecial('disk') 生成模糊版本,再通过构建带有平滑过渡(高斯平滑)的左右半区掩膜,合成出两幅互补的模拟源图像。
2. 高斯金字塔构建 (build_gaussian_pyramid)
该函数通过迭代方式生成多尺度分辨率序列:
- 第1层为原始图像。
- 后续每一层基于上一层图像进行
Reduce 操作。 - Reduce操作 (
pyr_reduce):先使用一维高斯核 [1 4 6 4 1]/16 分别在行和列方向进行卷积(低通滤波),然后进行隔行隔列的下采样(Downsampling),使图像尺寸缩减为原来的1/4。
3. 拉普拉斯金字塔构建 (build_laplacian_pyramid)
该步骤旨在分离图像的高频细节:
- 遍历高斯金字塔的各层(除了顶层)。
- 对于第 k 层,将其下一层(k+1层)进行
Expand 操作(上采样),使其尺寸恢复到与第 k 层一致。 - Expand操作 (
pyr_expand):首先通过插值零填充将图像尺寸扩大2倍,然后使用放大倍数为4的高斯核进行卷积平滑,以保持能量守恒。 - 差分计算:将当前高斯层减去扩展后的下一高斯层,得到的差值即为拉普拉斯层,它包含了仅在当前尺度下可见的细节特征。
- 金字塔的最顶层直接保留为高斯金字塔的顶层(低频概貌)。
4. 融合规则实现
程序在
laplacian_pyramid_fusion 函数中对分解后的系数进行融合:
- 顶层(低频基带):由于包含图像的主要能量和其概貌,采用算术平均法
0.5 * (LA + LB),避免亮度突变。 - 底层及中间层(高频带):这些层包含边缘和纹理。算法比较两幅源图像在对应位置拉普拉斯系数的绝对值大小,构建二值掩膜 (
mask)。 - 最大值选择:
LA .* mask + LB .* (~mask),即哪个像素点的反应更强烈(细节更丰富),就保留哪个像素点的值。
5. 图像重构 (reconstruct_from_pyramid)
这是分解的逆过程,用于从融合后的金字塔系数恢复最终图像:
- 从金字塔顶层开始,自上而下进行。
- 将当前层图像进行
Expand 操作(上采样+滤波)。 - 将上采样结果与下一层融合后的拉普拉斯细节层相加。
- 重复该过程直到达到原始分辨率。
- 数值截断:最后对输出图像进行数值范围限制,将溢出 [0, 1] 范围的像素值强制截断,防止显示异常。