相关笔记
高斯金字塔:
repeat{
1.对图像进行高斯滤波(平滑化);
2.抛除偶数行和列,依次缩小图片尺寸。
// 每进行一轮循环,得到一层金字塔,每层金字塔图像大小都是上一层的一半。
// 该过程称为下采样,金字塔底层即原图。
}
拉普拉斯金字塔:
repeat{
1.对某一层的图像进行扩充,变为其原大小二倍,中间新增的行列补0。
2.对图像进行高斯滤波(实现细节:滤波器放大倍数)。
3.用对应层级、对应大小的高斯金字塔图像,与该操作得到的图像作差,插值即属于拉普拉斯金字塔。
// 拉普拉斯金字塔的顶层(即图像尺寸最小的那一层),直接使用高斯金字塔的顶层图像(最小的那一层)。
//此过程为上采样。
}
关于拉普拉斯金字塔的认识:
认识1:一个金字塔,就是一系列(N个)图像的集合。 // 图像大小逐层递减(1/2)
认识2:拉普拉斯金字塔的意义,类似于“残差”图,保留的是与“原图”的差异。拉普拉斯金字塔的L_i层图像,就是高斯金字塔G_i+1层图像上采样后的G’_i图像与原高斯金字塔中G_i层图像的差值图像。
认识3:只需要有一个拉普拉斯金字塔,就可以自底向上地重构出一个完整的原图。//因为拉普拉斯金字塔的顶层并非残差,而是高斯金字塔顶层(原图的直接缩小化)。
图像融合
融合图X,融合图Y,二值掩模图像B。假设构造金字塔层数为N
融合操作:
1.对图X、图Y分别构造拉普拉斯金字塔LX,LY。 // 有N层的图像集合
2.对二值掩模图像B构造高斯金字塔GB。 // 有N层的图像集合
3.对上述的每一层进行插值 RES = LX .* GB + LY .* (1-GB)。 // RES也是有N层的图像集合
4.对金字塔RES实现拉普拉斯金字塔的重构,得到的最大图像原图即为融合图像。
matlab实现
完整代码:
mainBlend.m
clear;clc;
% 通过各种方式控制图片大小为(2^N)的倍数,这里采取N层金字塔。设置N到blend.m中。
Iapple = imread('1.jpg');
Iorange = imread('2.jpg');
Apple = im2single(Iapple);
Orange = im2single(Iorange);
[M, N, ~] = size(Apple);
% imshow(Apple);
% 手动绘制二值掩模
maskB = zeros(M,N);
maskB(:,(N/2+1):end) = 1.0;
%maskB(M/4:M*3/4,N/4:N*3/4) = 1.0;
%maskB(M/2+1:end,:) = 1.0;
%for i=1:M
% for j=1:N
% if (i-M/2)^2+(j-N/2)^2 < (N/4)*(N/2)
% maskB(i,j) = 1.0;
% end
% end
%end
%imshow(</