%function[] = mainnn(x)
% Filter Parameters.
sigmas=1.8; %%% Spatial (Geometric) Sigma.
mult_factor_sigmar=5; %%% Multiplication factor for SigmaR.
ksize=11; %%% Kernal Size.
%%% Wavelet Transform Parameters.
Nlevels=3; %% 3 levels.
pairs=1;
NoOfBands=3*Nlevels+1;
wname='db8'; % data binary =8 bit
sorh='s'; % crop
x = imread('input.bmp');
if(size(x,3)==3)
x=rgb2gray(x);
end
figure
[M,N]=size(x);
mean_val=0;
Square_scaled_para=[0:0.01:0.2]
%Square_scaled_para=Square_scaled_para/10;
for Square_scaled_para = 1:numel(Square_scaled_para) % for loop range= 1 to
length of
sizeA = size(x);
xn = double(x) + (((Square_scaled_para)^2)*randn(sizeA)) + mean_val;
%%
xn = max(0,min(xn,255));
xn_mse=sum(sum((double(x)-double(xn)).^2))/(M*N);
xn_psnr=10*log10(255^2./xn_mse)
tic
%%% Noise Level Estimation using Robust Median Estimator.
[ca,ch,cv,cd]=dwt2(xn,wname);
tt1=cd(:)';
median_hh2=median(abs(tt1));
std_dev2=(median_hh2/0.6745);
sigmar=mult_factor_sigmar*std_dev2;
[yb yg]= Linear_filt2D(xn,sigmas,sigmar,ksize);
yd=double(xn)-yb;
%%% General Wavelet Decomposition.
dwtmode('per');
[C,S]=wavedec2(yd,Nlevels,wname);
k=NoOfBands;
CW{k}=reshape(C(1:S(1,1)*S(1,2)),S(1,1),S(1,2));
k=k-1;
st_pt=S(1,1)*S(1,2);
for i=2:size(S,1)-1
slen=S(i,1)*S(i,2);
CW{k}=reshape(C(st_pt+slen+1:st_pt+2*slen),S(i,1),S(i,2));
CW{k-1}=reshape(C(st_pt+1:st_pt+slen),S(i,1),S(i,2));
CW{k-2}=reshape(C(st_pt+2*slen+1:st_pt+3*slen),S(i,1),S(i,2));
st_pt=st_pt+3*slen;
k=k-3;
end
tt2=CW{1}(:)';
median_hh2=median(abs(tt2)); %% HH1->Subband containing finest level diagonal
details.
std_dev2=(median_hh2/0.6745);
cw_noise_var=std_dev2^2; %% var=std^2
for i=1:NoOfBands-1
thr=bayesthf(CW{i},cw_noise_var);
yw{i}=threshf(CW{i},sorh,thr,2);
end
yw{i+1}=CW{i+1};
if(isequal(wname,'DCHWT'))
ydr=dchwtf2(yw,-Nlevels);
else
k=NoOfBands;
xrtemp=reshape(yw{k},1,S(1,1)*S(1,2));
k=k-1;
for i=2:size(S,1)-1
xrtemp=[xrtemp reshape(yw{k-1},1,S(i,1)*S(i,2))
reshape(yw{k},1,S(i,1)*S(i,2)) reshape(yw{k-2},1,S(i,1)*S(i,2))];
k=k-3;
end
ydr=(waverec2(xrtemp,S,wname));
end
ybw=yb+ydr;
ybwn=uint8(ybw);
yb1=yb;
yb=uint8(yb);
toc
%%%% MSE Computation.
yb_mse=sum(sum((double(x)-double(yb)).^2))/(M*N);
ybw_mse=sum(sum((double(x)-double(ybwn)).^2))/(M*N);
%%%% PSNR Computation.
psnr_lfilt=10*log10(255^2./yb_mse);
psnr_lf_mnt=10*log10(255^2./ybw_mse);
mean_org=mean(x(:));
var_org=sum((x(:)-mean_org).^2)/(M*N-1);
mean_lfilt=mean(yb(:));
var_lfilt=sum((yb(:)-mean_lfilt).^2)/(M*N-1);
cross_var_lfilt=sum((x(:)-mean_org).*(yb(:)-mean_lfilt))/(M*N-1);
IQI_lfilt=(4*cross_var_lfilt*mean_org*mean_lfilt)/
((var_org+var_lfilt)*(mean_org^2+mean_lfilt^2));
mean_bwt=mean(ybwn(:));
var_bwt=sum((ybwn(:)-mean_bwt).^2)/(M*N-1);
cross_var_bwt=sum((x(:)-mean_org).*(ybwn(:)-mean_bwt))/(M*N-1);
IQI_bf_mnt=(4*cross_var_bwt*mean_org*mean_bwt)/
((var_org+var_bwt)*(mean_org^2+mean_bwt^2));
mse=sum(sum((double(x)-double(ybw)).^2))/(M*N);
psnr_linear=10*log10(255^2./mse)
plot(Square_scaled_para,xn_psnr,'b-o')
xlabel('SQUIRED SCALE PARAMETER');
ylabel('PSNR (dB)');
hold on;
plot(Square_scaled_para,psnr_linear,'k','marker','*')
hold on;
%weiner
xn = double(x) + (((Square_scaled_para)^2).*randn(sizeA)) + mean_val;
xn = max(0,min(xn,255));
ab=wienerfilter(xn,[3,3],((Square_scaled_para)^2));
xn_mse=sum(sum((double(x)-double(xn)).^2))/(M*N);
xn_msee=sum(sum((double(x)-double(ab)).^2))/(M*N);
psnr_wein=10*log10((255^2)./xn_msee)
plot(Square_scaled_para,psnr_wein,'m','marker','x')
xlabel('SQUIRED SCALE PARAMETER');
ylabel('PSNR (dB)');
hold on;
%median
sizeA = size(x);
xn = double(x) + (((Square_scaled_para)^2).*randn(sizeA)) + mean_val;
xn = max(0,min(xn,255));
ab=medfilterr(xn,[3,3]);
xn_mse=sum(sum((double(x)-double(xn)).^2))/(M*N);
xn_psnr=10*log10((255^2)./xn_mse);
xn_msee=sum(sum((double(x)-double(ab)).^2))/(M*N);
psnr_med=10*log10((255^2)./xn_msee)
plot(Square_scaled_para,psnr_med,'r','marker','+')
%axis([0 0.2 0 60])
xlabel('SQUIRED SCALE PARAMETER');
ylabel('PSNR (dB)');
hold on;
end
legend('No Filter','Linear','wiener','median','Location','Best');
%end

Main code

  • 1.
    %function[] = mainnn(x) %Filter Parameters. sigmas=1.8; %%% Spatial (Geometric) Sigma. mult_factor_sigmar=5; %%% Multiplication factor for SigmaR. ksize=11; %%% Kernal Size. %%% Wavelet Transform Parameters. Nlevels=3; %% 3 levels. pairs=1; NoOfBands=3*Nlevels+1; wname='db8'; % data binary =8 bit sorh='s'; % crop x = imread('input.bmp'); if(size(x,3)==3) x=rgb2gray(x); end figure [M,N]=size(x); mean_val=0; Square_scaled_para=[0:0.01:0.2] %Square_scaled_para=Square_scaled_para/10; for Square_scaled_para = 1:numel(Square_scaled_para) % for loop range= 1 to length of sizeA = size(x); xn = double(x) + (((Square_scaled_para)^2)*randn(sizeA)) + mean_val; %% xn = max(0,min(xn,255)); xn_mse=sum(sum((double(x)-double(xn)).^2))/(M*N); xn_psnr=10*log10(255^2./xn_mse) tic %%% Noise Level Estimation using Robust Median Estimator. [ca,ch,cv,cd]=dwt2(xn,wname); tt1=cd(:)'; median_hh2=median(abs(tt1)); std_dev2=(median_hh2/0.6745); sigmar=mult_factor_sigmar*std_dev2; [yb yg]= Linear_filt2D(xn,sigmas,sigmar,ksize); yd=double(xn)-yb; %%% General Wavelet Decomposition. dwtmode('per'); [C,S]=wavedec2(yd,Nlevels,wname); k=NoOfBands; CW{k}=reshape(C(1:S(1,1)*S(1,2)),S(1,1),S(1,2)); k=k-1; st_pt=S(1,1)*S(1,2); for i=2:size(S,1)-1 slen=S(i,1)*S(i,2); CW{k}=reshape(C(st_pt+slen+1:st_pt+2*slen),S(i,1),S(i,2)); CW{k-1}=reshape(C(st_pt+1:st_pt+slen),S(i,1),S(i,2)); CW{k-2}=reshape(C(st_pt+2*slen+1:st_pt+3*slen),S(i,1),S(i,2)); st_pt=st_pt+3*slen; k=k-3; end tt2=CW{1}(:)'; median_hh2=median(abs(tt2)); %% HH1->Subband containing finest level diagonal details. std_dev2=(median_hh2/0.6745); cw_noise_var=std_dev2^2; %% var=std^2 for i=1:NoOfBands-1 thr=bayesthf(CW{i},cw_noise_var); yw{i}=threshf(CW{i},sorh,thr,2);
  • 2.
    end yw{i+1}=CW{i+1}; if(isequal(wname,'DCHWT')) ydr=dchwtf2(yw,-Nlevels); else k=NoOfBands; xrtemp=reshape(yw{k},1,S(1,1)*S(1,2)); k=k-1; for i=2:size(S,1)-1 xrtemp=[xrtemp reshape(yw{k-1},1,S(i,1)*S(i,2)) reshape(yw{k},1,S(i,1)*S(i,2))reshape(yw{k-2},1,S(i,1)*S(i,2))]; k=k-3; end ydr=(waverec2(xrtemp,S,wname)); end ybw=yb+ydr; ybwn=uint8(ybw); yb1=yb; yb=uint8(yb); toc %%%% MSE Computation. yb_mse=sum(sum((double(x)-double(yb)).^2))/(M*N); ybw_mse=sum(sum((double(x)-double(ybwn)).^2))/(M*N); %%%% PSNR Computation. psnr_lfilt=10*log10(255^2./yb_mse); psnr_lf_mnt=10*log10(255^2./ybw_mse); mean_org=mean(x(:)); var_org=sum((x(:)-mean_org).^2)/(M*N-1); mean_lfilt=mean(yb(:)); var_lfilt=sum((yb(:)-mean_lfilt).^2)/(M*N-1); cross_var_lfilt=sum((x(:)-mean_org).*(yb(:)-mean_lfilt))/(M*N-1); IQI_lfilt=(4*cross_var_lfilt*mean_org*mean_lfilt)/ ((var_org+var_lfilt)*(mean_org^2+mean_lfilt^2)); mean_bwt=mean(ybwn(:)); var_bwt=sum((ybwn(:)-mean_bwt).^2)/(M*N-1); cross_var_bwt=sum((x(:)-mean_org).*(ybwn(:)-mean_bwt))/(M*N-1); IQI_bf_mnt=(4*cross_var_bwt*mean_org*mean_bwt)/ ((var_org+var_bwt)*(mean_org^2+mean_bwt^2)); mse=sum(sum((double(x)-double(ybw)).^2))/(M*N); psnr_linear=10*log10(255^2./mse) plot(Square_scaled_para,xn_psnr,'b-o') xlabel('SQUIRED SCALE PARAMETER'); ylabel('PSNR (dB)'); hold on; plot(Square_scaled_para,psnr_linear,'k','marker','*') hold on; %weiner xn = double(x) + (((Square_scaled_para)^2).*randn(sizeA)) + mean_val; xn = max(0,min(xn,255)); ab=wienerfilter(xn,[3,3],((Square_scaled_para)^2)); xn_mse=sum(sum((double(x)-double(xn)).^2))/(M*N); xn_msee=sum(sum((double(x)-double(ab)).^2))/(M*N); psnr_wein=10*log10((255^2)./xn_msee) plot(Square_scaled_para,psnr_wein,'m','marker','x') xlabel('SQUIRED SCALE PARAMETER'); ylabel('PSNR (dB)'); hold on; %median sizeA = size(x); xn = double(x) + (((Square_scaled_para)^2).*randn(sizeA)) + mean_val;
  • 3.