Image Processing --- Gaussian Pyramid & Laplacian Pyramid
一、高斯金字塔
目标:把图像分解成多个尺寸来抽取各特征
输入: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
二、拉普拉斯金字塔
上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
posted on 2013-12-03 00:08 Jizhiyuan 阅读(1740) 评论(0) 编辑 收藏 举报