拉普拉斯金字塔重构
一、概述
拉普拉斯金字塔的重构主要是包括三部分,第一部分是高斯金字塔的构造,第二部分是构造拉普拉斯金字塔,第三部分是利用高斯—拉普拉斯金字塔进行重构。
二、详细步骤详解
1.构造高斯金字塔
高斯金字塔的构造原理类似于动态压缩过程,主要包括几个过程。
- 对输入图像进行高斯卷积滤波。
- 对原图像采用步数为2下采样过程,得到压缩后的图像。
- 重复上面步骤,得到N层图像,我们称之为N层高斯金字塔。
2.构造拉普拉斯金字塔
- 根据得到的高斯金字塔,按顺序叠放,我们可以用细胞数组来存储图层。
- 将高斯金字塔从底层图像进行处理,采取上采样过程,将得到和高斯金字塔倒数第二层尺寸同样的图像。
- 采用高斯卷积滤波进行对步骤二得到的图像进行处理,将得到的图像作为拉普拉斯金字塔的一层。
- 用高斯金字塔相同尺寸的图像减去上一步骤滤波后的图像,得到的是结果我们称之为残差。
- 重复上面步骤到高斯金字塔的最顶层,会发现拉普拉斯金字塔会比高斯金字塔少一层。
3、拉普拉斯金字塔重构图像
- 前几步过程类似2的过程,将高斯金字塔进行上采样,然后进行高斯卷积滤波。
- 将得到的每一层图像对与拉普拉斯金字塔存放的残差进行对应相加。
-重复上面步骤得到拉普拉斯重构后的图像。
4、注意点
- 在进行上采样和上采样过程的时候,对于步数 的采用可能会导致金字塔数组不匹配,所以建议采用与上层相同尺寸的图像之间表示,size很容易解决(一开始遇到这个问题,也是询问师兄后得以解决)。
三、 图片结果展示:
左边是原图,右边是拉普拉斯重构后的图像,发现没有什么变换,其实重构重构过程就是图像的复原过程。
四、matlab代码
%%
clc
clear
I=im2double(imread('three.png'));
num=4;
Gau=cell(num,1);
N=1;
Gau{N}=I;
h=fspecial('gaussian',[5,5],64);
for N=2:num
temp=imfilter(Gau{N-1},h,'conv','same','replicate');
Gau{N}=temp(1:2:end,1:2:end,:);
end
temp=Gau{size(Gau,1)};
% for N=1:num
% figure;
% imshow(Gau{N});
% end
%将残差放入拉普拉斯金字塔当中
laplas=cell(num-1,1);
for index=num-1:-1:1
temp=imresize(Gau{index+1},[size(Gau{index},1),size(Gau{index},2)],'bilinear');%上采样构造拉普拉斯金字塔
temp=imfilter(temp,h,'conv','same','replicate');
laplas{index}=Gau{index}-temp;
end
%利用拉普拉斯金字塔重构
img=Gau{N};
for index2=N:-1:2
temp=imresize(Gau{index2},[size(Gau{index2-1},1),size(Gau{index2-1},2)],'bilinear');
temp=imfilter(temp,h,'conv','same','replicate');
img=temp+laplas{index2-1};
end
imshow([I img]);