更新:
指定function name和N,可以做n级小波分解
%% wavelet study demo2
% xenoszhATgmail.com
% 2010-05-06
function nWaveletTest(wname,n)
close all;
% get input image
[filename,pathname] = uigetfile('*.jpg;*.jpeg;*.bmp;*.png','Please pick up a picture:');
if ~filename
disp('No input file.');
return;
end
img = imread(strcat(pathname,filename));
% get grayscale image
img = rgb2gray(img);
figure;
imshow(waveRec(img,n,wname));
end
%% sub function to reconstruct n level image
function recimage = waveRec(img,n,wname)
if nargin==3
% get wavelet decomposition filter coefficients, using haar function
[lod,hid] = wfilters(wname,'d');
% n level wavelet decomposition
[c,s] = wavedec2(img,n,lod,hid);
% get the top level approximate signal
an = appcoef2(c,s,wname,n);
an = double2uint8(an);
% reconstruct image recursively
a = an;
for i=n:-1:1
curimg = curRec(a,c,s,i);
a = curimg;
end
% return recontruct image
recimage = curimg;
else
error('please check the input');
end
end
%% sub function to get current level reconstruct image
function curRecimg = curRec(a,c,s,n)
if nargin==4
h = detcoef2('h',c,s,n);
v = detcoef2('v',c,s,n);
d = detcoef2('d',c,s,n);
a = imresize(a,size(h));
curRecimg = [a,h; v,d];
else
error('please check the input');
end
end
%% sub function to convert double image to uint8 image
function uint8image = double2uint8(dblimage)
if nargin==1 && isa(dblimage,'double')
uint8image = 255*(dblimage-min(min(dblimage)))/(max(max(dblimage))-min(min(dblimage)));
uint8image = uint8(uint8image);
else
error('input image must be double');
end
end
适合初学者的c ++语言示例
ReplyDelete用于计算斐波纳契数的算法