%高斯金字塔分成两步: 一对图像做高斯平滑, 二向下采样
%以演示开始.后面是处理过程
function memo()
imbase=imread('Guas.jpg');
imbase=rgb2gray(imbase);
imsmooth=Guassion(imbase);
im1=DownSample(imsmooth);
im1=uint8(im1);
imwrite(im1,'128.jpg');
imsmooth=Guassion(im1);
im1=DownSample(imsmooth);
im1=uint8(im1);
imwrite(im1,'64.jpg');
imsmooth=Guassion(im1);
im1=DownSample(imsmooth);
im1=uint8(im1);
imwrite(im1,'32.jpg');
imsmooth=Guassion(im1);
im1=DownSample(imsmooth);
im1=uint8(im1);
imwrite(im1,'16.jpg');
imsmooth=Guassion(im1);
im1=DownSample(imsmooth);
im1=uint8(im1);
imwrite(im1,'8.jpg');
%一
%对高斯平滑分成两步: 一得到高斯平滑函数的矩阵
% 二对图像做平滑操作,对图像的边界的处理方法是对称
%权值之和为零
function r=GuassionMatrix(delta,radius)
radius=ceil(radius);
n=2*radius+1;
r=zeros(n,n);
%tempMatrix=zeros(radius,radius);
for i=-radius:radius
for j=-radius:radius
r(i+radius+1,j+radius+1)=exp(-(i^2+j^2)/2*delta^2);
end
end;
r=round(100*r);
r=r/sum(sum(r));
function r=Guassion(im)
radius=5;
delta=1;
GuassionSmooth=GuassionMatrix(delta,radius);
%怎样把循环优化了呢---------------------------------------
im=double(im);
[m,n,z]=size(im);
r=zeros(m,n,z);
for i=1:m
for j=1:n
for k=-radius:radius
for l=-radius:radius
x1=i+k+1;
if x1<1
x1=x1-2*k+1;
end
if x1>m
x1=x1-2*k-1;
end
x2=j+l+1;
if x2<1
x2=x2-2*l+1;
end
if x2>n
x2=x2-2*l-1;
end
r(i,j,:)=r(i,j,:)+im(x1,x2,:)*GuassionSmooth(k+radius+1,l+radius+1);
end
end
end
end
%----------------------------------------------
%向下采样
function r=DownSample(im)
[m,n,z]=size(im);
r=zeros(m/2,n/2,z);
for i=1:m/2
for j=1:n/2
r(i,j,:)=im(2*i,2*j,:);
end
end