基于小波变换的MATLAB图像融合实现方法
基于小波变换的MATLAB图像融合实现方法,包含手动实现和内置函数两种方法
一、核心代码实现(手动分解法)
%% 参数设置
clear; clc;
img1 = imread('lena.jpg'); img2 = imread('lena_noise.jpg');
img1 = imresize(img1, [256,256]); img2 = imresize(img2, [256,256]);
img1 = im2double(img1); img2 = im2double(img2);
level = 3; % 分解层数
wavelet = 'db4'; % 小波基函数
%% 小波分解
[c1, s1] = wavedec2(img1, level, wavelet);
[c2, s2] = wavedec2(img2, level, wavelet);
%% 融合规则
fused_coeffs = zeros(size(c1));
for i = 1:level
% 低频分量融合(取平均)
low1 = appcoef2(c1, s1, wavelet, i);
low2 = appcoef2(c2, s2, wavelet, i);
fused_low = (low1 + low2) / 2;
% 高频分量融合(取绝对值最大)
[cH1, cV1, cD1] = detcoef2('all', c1, s1, i);
[cH2, cV2, cD2] = detcoef2('all', c2, s2, i);
fused_high = max(abs(cH1), abs(cH2));
% 重构融合系数
fused_coeffs(1:s1(1,i)) = [fused_low, fused_high(:)];
end
%% 小波重构
fused_img = waverec2(fused_coeffs, s1, wavelet);
%% 后处理
figure;
subplot(1,3,1); imshow(img1); title('原始图像1');
subplot(1,3,2); imshow(img2); title('原始图像2');
subplot(1,3,3); imshow(fused_img); title('融合结果');
二、使用内置函数实现(wfusimg)
%% 参数设置
img1 = imread('lena.jpg'); img2 = imread('lena_noise.jpg');
img1 = imresize(img1, [256,256]); img2 = imresize(img2, [256,256]);
img1 = im2double(img1); img2 = im2double(img2);
level = 3; % 分解层数
wavelet = 'sym4'; % 小波基函数
%% 融合参数设置
rule = {'max', 'max'}; % 高频取最大值,低频取最大值
trim = 'on'; % 自动裁剪
%% 执行融合
tic;
fused_img = wfusimg(img1, img2, wavelet, level, rule{1}, rule{2}, trim);
toc;
%% 显示结果
figure;
subplot(1,3,1); imshow(img1); title('原始图像1');
subplot(1,3,2); imshow(img2); title('原始图像2');
subplot(1,3,3); imshow(fused_img); title('融合结果');
三、参数说明
| 参数 | 取值范围 | 推荐值 | 作用说明 |
|---|---|---|---|
level |
1-5 | 3 | 分解层数影响细节保留程度 |
wavelet |
Daubechies系列 | db4/db5 | 影响频带划分特性 |
rule |
max | 高频分量融合策略 | |
trim |
'on'/'off' | on | 自动去除边界黑边 |
四、融合规则详解
-
低频分量处理:
- 平均法:保留整体结构信息
- 加权平均:根据能量分布调整权重
% 加权平均示例 weight1 = energy(img1); weight2 = energy(img2); fused_low = (weight1*low1 + weight2*low2) / (weight1+weight2); -
高频分量处理:
- 绝对值最大:保留显著边缘特征
- 区域方差最大:增强纹理信息
% 区域方差法 var1 = localvar(img1); var2 = localvar(img2); fused_high = (var1 > var2) .* cH1 + (var2 >= var1) .* cH2;
参考代码 matlab源程序,通过小波变换进行图像融合 www.youwenfan.com/contentcnm/79027.html
该方法通过小波多分辨率分析实现图像特征融合,实际应用中建议根据具体场景调整分解层数和融合规则。
浙公网安备 33010602011771号