clear all;
close all;
clc;
% 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.
NoOfBands=3*Nlevels+1;
wname='db8'; % data binary =8 bit
sorh='s'; % crop
x = imread('boat.png');
if(size(x,3)==3)
x=rgb2gray(x);
figure
imshow(x)
end
[M,N]=size(x);
mean_val=0;
Square_scaled_para=15
%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= imnoise(x,'speckle',0.01);
%%
figure
imshow(xn) % noisy image
title('noisy image')
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))/3
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
%[y,map] = bin2gray(x,'qam',16);
ybw=yb+ydr;
ybwn=uint8(ybw);
yb1=yb;
yb=uint8(yb);
figure
imshow(yb) % reconstructed image
title(' reconstructed image')
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)
figure
plot(Square_scaled_para,xn_psnr,'k-*')
xlabel('SQUIRED SCALE PARAMETER');
ylabel('PSNR (dB)');
hold on;
plot(Square_scaled_para,psnr_linear,'r','marker','*')
hold on;
legend('No Filter','Proposed','Location','Best');

Main code for images

  • 1.
    clear all; close all; clc; %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. NoOfBands=3*Nlevels+1; wname='db8'; % data binary =8 bit sorh='s'; % crop x = imread('boat.png'); if(size(x,3)==3) x=rgb2gray(x); figure imshow(x) end [M,N]=size(x); mean_val=0; Square_scaled_para=15 %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= imnoise(x,'speckle',0.01); %% figure imshow(xn) % noisy image title('noisy image') 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))/3 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);
  • 2.
    cw_noise_var=std_dev2^2; %% var=std^2 fori=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 %[y,map] = bin2gray(x,'qam',16); ybw=yb+ydr; ybwn=uint8(ybw); yb1=yb; yb=uint8(yb); figure imshow(yb) % reconstructed image title(' reconstructed image') 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) figure plot(Square_scaled_para,xn_psnr,'k-*') xlabel('SQUIRED SCALE PARAMETER'); ylabel('PSNR (dB)'); hold on; plot(Square_scaled_para,psnr_linear,'r','marker','*') hold on; legend('No Filter','Proposed','Location','Best');