⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_denoising.m

📁 我找到的matlab的最新工具箱
💻 M
字号:
% test for wavelet based denoising

name = 'lena';
rep = 'result_denoising/';

save_images = 1;
if save_images && exist(rep)~=7
    mkdir(rep);
end

n = 256;
M = load_image(name, n);
M = rescale(M, 10,245);

sigma = 15;
Mn = M + sigma * randn(n);



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% redundant wavelet transform

Jmin = 4;
options.wavelet_vm = 3;
options.wavelet_type = 'biorthogonal';
disp('Computing fwd transform.');
MW = perform_atrou_transform(Mn,Jmin,options);

% test several threshold and keep only best one
T_list = [2.5 3 3.5] * sigma;
err = [];
for T = T_list
    MWt = keep_above(MW, T);
    disp('Computing bwd transform.');
    M1 = perform_atrou_transform(MWt,Jmin,options);
    err = [err, psnr(M,M1)];
end

[tmp,I] = max(err);
T = T_list(I);
MWt = keep_above(MW, T);
disp('Computing bwd transform.');
M_wav_inv = perform_atrou_transform(MWt,Jmin,options);


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% orthogonal wavelet transform


Jmin = 4;
options.wavelet_vm = 4;
options.wavelet_type = 'biorthogonal';
disp('Computing fwd transform.');


use_rwt = 0;

if use_rwt
    h = daubcqf(4,'min');
    L = 3;
    [MW,L] = mdwt(Mn,h,L);
else
    MW = perform_wavelet_transform(Mn,Jmin,1,options);
end

% test several threshold and keep only best one
err = [];
for T = T_list
    MWt = keep_above(MW, T);
    disp('Computing bwd transform.');
    if use_rwt
        M1 = midwt(MWt,h,L);
    else
        M1 = perform_wavelet_transform(MWt,Jmin,-1,options);
    end
    err = [err, psnr(M,M1)];
end

[tmp,I] = max(err);
T = T_list(I);
MWt = keep_above(MW, T);
disp('Computing bwd transform.');
if use_rwt
    [M_wav_orth,L] = midwt(MWt,h,L);
else
    M_wav_orth = perform_wavelet_transform(MWt,Jmin,-1,options);
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% filtering

% FFT-based wiener filtering (using the oracle fourier coefficients)
Mf = fft(Mn);
PMf = abs(Mf.*Mf); % power spectra
H = PMf./(PMf + n*sigma^2); % filter fourier transform
% compute convolution
Mnf = fft(Mn);
HMf = Mnf.*H;
M_wiener = real( ifft(HMf) );

% Matlab wiener filtering
disp('Computing Matlab Wiener filtering.');
M_wiener_matlab = wiener2(Mn,[5 5]);

% gaussian convolution 
err = [];
s = 4; % #pixels
h = build_gaussian_filter_2d(51, s/n, n);
M_smooth = perform_convolution(Mn,h);



clf;
subplot(2,3,1);
imagesc(M);
axis image; axis off;
title('Original');

subplot(2,3,2);
imagesc(Mn);
axis image; axis off;
title( sprintf('Noisy (err=%.2fdB)', psnr(M,Mn)) );

subplot(2,3,3);
imagesc(M_wiener);
axis image; axis off;
title( sprintf('Wiener oracle Smoothing (err=%.2fdB)', psnr(M,M_wiener)) );

subplot(2,3,4);
imagesc(M_wiener_matlab);
axis image; axis off;
title( sprintf('Bloc-Wiener Denoised (err=%.2fdB)', psnr(M,M_wiener_matlab)) );


subplot(2,3,5);
imagesc(M_wav_orth);
axis image; axis off;
title( sprintf('Orthogonal Wavelet Denoised (T=%.2f, err=%.2fdB)', T, psnr(M,M_wav_orth)) );

subplot(2,3,6);
imagesc(M_wav_inv);
axis image; axis off;
title( sprintf('Redundant Wavelet Denoised (T=%.2f, err=%.2fdB)', T, psnr(M,M_wav_inv)) );

colormap gray(256);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -