1. %% Implementation of Decision-Based Algorithm for Removal of High-Density
%% Impulse Noises
%% Base Paper : "A New Fast and Efficient Decision-Based Algorithm for
% Removal of High-Density Impulse Noises", IEEE Sigmal Pricessing Letter,
% Vol. 14,No. 3, Mar 2007.
%% Function Y = DBAIN(x)
%% input x = Given an Image
%%
%% Example: Y = DBAIN(x);
%% Posted date : 23 - 10 - 2008
%% Modified date :
%%
%% Developed By : K.Kannan (kannan.keizer@gmail.com)
%% & Jeny Rajan (jenyrajan@gmail.com)
%% Medical Imaging Research Group (MIRG), NeST,
%% Trivandrum.
%%
%% Decision-Based Algorithm for Removal of High-Density Impulse Noises
function Y = DBAIN(x)
%% Demo
disp('Noise density lies between 0 and 1');
%% Noise Generation
disp(' ');
ND = input('Enter Noise Density [0.5] : ');
if isempty(ND)
ND = 0.5;
end
y = imnoise(x,'salt & pepper',ND);
y = double(y);
Y = y;
[R C] = size(x);
%% Implementation
for i = 2:R-1
for j = 2:C-1
clear tmp;
tmp = Y(i-1:i+1,j-1:j+1);
flg = 0;
S = sort(tmp(:));
if Y(i,j) == 0 || Y(i,j) == 255
flg = 1;
end
if flg == 0 % if the Pixel is uncorrupted.
if S(1) < Y(i,j) && Y(i,j) < S(5) && 0 < S(1) && S(9) < 255 % The
% P(X,Y) is an uncorrupted pixel if Pmin < P(X,Y) < Pmax,
% Pmin > 0 and Pmax < 255; the pixel being processed is
% left unchanged. Otherwise, P(X,Y) is a corrupted pixel.
Y(i,j) = Y(i,j);
end
else % if the Pixel is corrupted.
if S(1) < S(5) && S(5) < S(9) && 0 < S(5) && S(5) < 255 % If P(X,Y)
% is a corrupted pixel, it is replaced by its median value
% if Pmin < Pmed < Pmax and 0 < Pmed < 255.
Y(i,j) = S(5);
end
if S(1) >= S(5) || S(5) >= S(9) || S(5) == 255 && S(5) == 0
% If Pmin < Pmed < Pmax is not satisfied or 255 < Pmed = 0,
% then is a noisy pixel. In this case, the P(X,Y) is replaced
% by the value of neighborhood pixel value.
Y(i,j) = Y(i,j-1);
end
end
end
end
%% Border Correction
2. Y(1,:) = Y(2,:);
Y(R,:) = Y(R-1,:);
Y(:,1) = Y(:,2);
Y(:,C) = Y(:,C-1);
f = medfilt2(y,[3 3]);
figure;subplot(2,2,1);imshow(x,[]);title('Given Image');
subplot(2,2,2);imshow(y,[]);title(strcat('Noisy : Noise Density -
',num2str(ND)));xlabel(PSNR(x,y));
subplot(2,2,3);imshow(f,[]);title('Traditional Median');xlabel(PSNR(x,f));
subplot(2,2,4);imshow(Y,[]);title('DBA');xlabel(PSNR(x,Y));
%% PSNR
function P = PSNR(A,B)
A = double(A);B = double(B);
error = abs(A - B);
P = 20*log10(255/(sqrt(mean(mean(error.^2)))));