• Image Processing --- Gaussian Pyramid & Laplacian Pyramid


    一、高斯金字塔

    image

    目标:把图像分解成多个尺寸来抽取各特征

    输入:size为(2N+1)*(2N+1)的原始图像I

    输出:N个图像g0,…,g1。gi的大小为:(2N-i+1)*(2N-i+1)

    高斯金字塔分解步骤:

    a.高斯(模板/权矩阵/卷积核)平滑——对整个图像滑动加权平均(卷积:f(x)⊙h(x)=∫f(x)h(t-x)dt

      模板顺时针旋转180度,移动至待处理像素上方,滑动加权相加,直至处理完所有像素。(边缘等值扩充)

    b.下采样:每隔一个点采一个样

    *应用:图像特征分解

    g(i+1)=(g(i).smoothing).downsampling

    二、拉普拉斯金字塔

    3LDAGRA)MS(59$9%YTPDS)F

    上4图为高斯金字塔,下4图为拉普拉斯金字塔。步骤:

    1.上采样:每隔一个点补0或本身

    2.作差:上采样的高斯图与上级高斯图相减

    L(i)=g(i)-g(i+1).expand

    *应用:图像重构(需要L(1),…L(n)和g(n+1))

    g(3)=L(3)+g(4).expand; g(2)=L(2)+g(3).expand; g(1)=L(1)+g(2).expand;

    *代码copy from http://www.cnblogs.com/tiandsp/archive/2013/06/07/3123755.html:

     1 clear all; close all; clc;
     2 
     3 img=double(imread('lena.jpg'));
     4 [m n]=size(img);
     5 
     6 w=1/256*[1  4  6  4 1;      %拉普拉斯滤波器
     7 16 24 14 4;
     8 24 36 24 6;
     9 16 24 16 4;
    10  4  6  4 1];
    11 
    12 imgn{1}=img;
    13 for i=2:5                   %滤波,下采样
    14    imgn{i}=imfilter(imgn{i-1},w,'replicate');
    15    imgn{i}=imgn{i}(1:2:size(imgn{i},1)-1,1:2:size(imgn{i},2)-1); %i-1级近似
    16 end
    17        
    18 for i=5:-1:2        %调整图像大小
    19    imgn{i-1}=imgn{i-1}(1:2*size(imgn{i},1),1:2*size(imgn{i},2)); 
    20 end
    21 
    22  for i=1:4          %获得残差图像,i级预测残差
    23     imgn{i}=imgn{i}-expand(imgn{i+1},w);     
    24  end
    25  
    26 for i=4:-1:1        %残差图像重构原图像
    27     imgn{i}=imgn{i}+expand(imgn{i+1},w);
    28 end
    29 
    30 imshow(uint8(imgn{1}));
     1 function re=expand(img,w)
     2 
     3     img=double(img);
     4     w=w*4;
     5     
     6     [m n]=size(img);
     7     [M N]=size(w);
     8     
     9     %插入滤波器                                   
    10     w_up_left=w(1:2:M,1:2:N); 
    11     w_up_right=w(1:2:M,2:2:N); 
    12     w_down_left=w(2:2:M,1:2:N); 
    13     w_down_right=w(2:2:M,2:2:N); 
    14 
    15     img_up_left=imfilter(img,w_up_left,'replicate','same');
    16     img_up_right=imfilter(img,w_up_right,'replicate','same');   
    17     img_down_left=imfilter(img,w_down_left,'replicate','same');  
    18     img_down_right=imfilter(img,w_down_right,'replicate','same');  
    19   
    20     re= zeros(m*2,n*2);             %上采样
    21     re(1:2:m*2,1:2:n*2)=img_up_left;
    22     re(2:2:m*2,1:2:n*2)=img_up_right;
    23     re(1:2:m*2,2:2:n*2)=img_down_left;
    24     re(2:2:m*2,2:2:n*2)=img_down_right;
    25 
    26 end
  • 相关阅读:
    程序员的希波克拉底誓言[精华]
    怎样成为优秀的软件模型设计者
    C#中Delegate浅析与思考
    程序员是一个美好的职业[精华]
    hdu 1421(搬寝室)
    hdu 4022(map一对多)
    hdu 1114(完全背包)
    hdu 1159(最长公共子序列)
    hdu 2844(多重背包)
    hdu 1257(最长递增子序列)
  • 原文地址:https://www.cnblogs.com/jizhiyuan/p/3454961.html
Copyright © 2020-2023  润新知