高斯金字塔·

 
高斯金字塔·
2008-05-16 19:40

%高斯金字塔分成两步: 一对图像做高斯平滑,   二向下采样
%以演示开始.后面是处理过程
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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值