www.gusucode.com > matlab非局部均值工具箱 > matlab非局部均值工具箱/matlab非局部均值工具箱/toolbox_nlmeans/tests/test_impulsive.m

    % test for impulsive noise removing
%
%   Copyright (c) 2007 Gabriel Peyre

path(path, 'toolbox/');

if not(exist('name'))
    name = 'peppers';
    name = 'polygons_blurred';
    name = 'boat';
    name = 'barb';
    name = 'lena';
end

%% load image
n = 40;
n0 = [];
M = load_image(name, n0);
c = size(M)/2;
if strcmp(name, 'lena') && n==128
    c = [120 200]; % lena hat
end
if strcmp(name, 'mandrill') && n==128
    c = [350 350];
end
eta = 0; % .12;
M0 = rescale( crop(M,n,c), eta, 1-eta );


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% impulse noise
noise_type = 'impulse';
noise_type = 'laplacian';
switch noise_type
    case 'impulse'
        p = 0.05;
        M = compute_impulse_noise(M0,p);
    case 'laplacian'
        % exponent
        alpha = 1.6;
        % variance
        sigma = 0.07 * max( M0(:) );
        beta = 0;
        % deviation
        delta = 0;
        noise = stabrnd(alpha, beta, sigma, delta, n, n);
        noise = noise/std(noise(:)) * sigma;
        M = M0 + noise;
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% median filter
k = 1;
disp('--> Median denoising.');
% Mmed = medfilt2(M, [w w], 'symmetric');
Mmed = perform_median_filtering(M,1);



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% NL median
disp('--> NLMedian denoising.');
options.max_dist = 6;
options.ndims = 25;
options.k = 3;
options.T = 0.04;
options.do_median = 1;

if 0
options.k = 1;
options.max_dist = k;
options.P = []; options.Psi = [];
options.Ha = ones(n+2*k);
options.H = ones(n+2*k);
Mnlmed = symmetric_extension(M,k);
end

Mnlmed = M;
[Mnlmed,Wx,Wy] = perform_nl_means(Mnlmed, options);

% Mnlmed = Mnlmed(k+1:end-k,k+1:end-k);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% NL mean
disp('--> NLMeans denoising.');
options.do_median = 0;
Mnlmean = M;
[Mnlmean,Wx,Wy] = perform_nl_means(Mnlmean, options);

pnoisy = psnr(M,M0);
pmed = psnr(M0,Mmed);
pnlmed= psnr(M0,Mnlmed);
pnlmean= psnr(M0,Mnlmean);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Display
display_image_layout({M0 M Mmed Mnlmean Mnlmed}, ...
    {'Original' sprintf('Noisy,psnr=%.2f', pnoisy) sprintf('Median,psnr=%.2f', pmed) ...
        sprintf('NLmean,psnr=%.2f(+%.2f)', pnlmean, pnlmean-pmed) ...
        sprintf('NLmed,psnr=%.2f(+%.2f)', pnlmed, pnlmed-pmed) });