金字塔变换的图像融合Matlab源码.pdf
附录1 金字塔变换图像融合方法程序
% 拉普拉斯金字塔融合函数
function Y = fuse_lap(M1, M2, zt, ap, mp)
% M1、M2为源图像
% zt为融合层数,ap为高频子带图像选择系数,mp为低频子带图像选择系数
[z1 s1] = size(M1);
[z2 s2] = size(M2);
if (z1 ~= z2) || (s1 ~= s2)
error('输入源图像大小不一致');
end;
% 高斯窗口函数
w = [1 4 6 4 1] / 16;
E = cell(1,zt);
for i1 = 1:zt
[z s] = size(M1);
zl(i1) = z; sl(i1) = s;
% 图像尺寸为奇数还是偶数
if (floor(z/2) ~= z/2), ew(1) = 1; else ew(1) = 0; end;
if (floor(s/2) ~= s/2), ew(2) = 1; else ew(2) = 0; end;
% 若为奇数,扩展为偶数
if (any(ew))
M1 = adb(M1,ew);
M2 = adb(M2,ew);
end;
% M1与M2低通滤波
G1 = conv2(conv2(es2(M1,2), w, 'valid'),w', 'valid');
G2 = conv2(conv2(es2(M2,2), w, 'valid'),w', 'valid');
% G1与G2下采样、上采样低通滤波后的膨胀序列
M1T = conv2(conv2(es2(undec2(dec2(G1)), 2), 2*w, 'valid'),2*w', 'valid');
M2T = conv2(conv2(es2(undec2(dec2(G2)), 2), 2*w, 'valid'),2*w', 'valid');
% 高频子带图像系数选择
E(i1) = {selg(M1-M1T, M2-M2T, ap)};
% G11与G2下采样
M1 = dec2(G1);
M2 = dec2(G2);
end;
% 低频子带图像系数选择
M1 = selh(M1,M2,mp);
% 图像重构
for i1 = zt:- 1:1
1
M1T = conv2(conv2(es2(undec2(M1), 2), 2*w, 'valid'), 2*w', 'valid');
M1 = M1T + E{i1};
% 选择图像有效区域
M1 = M1(1:zl(i1),1:sl(i1));
end;
Y = M1;
end;
% 对比度金字塔融合函数
function Y = fuse_con(M1, M2, zt, ap, mp)
[z1 s1] = size(M1);
[z2 s2] = size(M2);
if (z1 ~= z2) | (s1 ~= s2)
error('输入图像尺寸大小不一致');
end;
w = [1 4 6 4 1] / 16;
eps = 1e-6;
E = cell(1,zt);
for i1 = 1:zt
[z s] = size(M1);
zl(i1) = z; sl(i1) = s;
if (floor(z/2) ~= z/2), ew(1) = 1; else, ew(1) = 0; end;
if (floor(s/2) ~= s/2), ew(2) = 1; else, ew(2) = 0; end;
if (any(ew))
M1 = adb(M1,ew);
M2 = adb(M2,ew);
end;
G1 = conv2(conv2(es2(M1,2), w, 'valid'),w', 'valid');
G2 = conv2(conv2(es2(M2,2), w, 'valid'),w', 'valid');
M1T = conv2(conv2(es2(