- The “HH_fn” changes every time you run the code even if the input is same.
- The “recon” changes every time you run the code even if the input is same.
- To avoid the above you can reset the random number seed. https://in.mathworks.com/help/matlab/ref/rng.html
- Floating point numbers have limited precision therefore we might not get SSIM as exact 1.
- Even though we get different values of SSIM for the same input, the value is always above 0.92 which I believe is a good similarity between 2 results.
Understand the algorithm for " wdenoise2(img_hazy,'ThresholdRule','Hard') "
1 次查看(过去 30 天)
显示 更早的评论
Sir,
I need to understand the equations relating to " wdenoise2(img_hazy,'ThresholdRule','Hard');" and write a code myself, to reproduce the results shown by wdenoise2 function with threshold rule as hard. The algorithm that I tried to implement, along with the input image are attached herewith and the matlab code is shown below. BUT THE SSIM=1 is not obtained. Can someone help me to trace out what is wrong.
%-----------------------------------------------------
clear all;
close all;
clc;
%-----------------------------------------------------
img= imread('check.png');
img = imresize(img,0.125);
img=imnoise(img(:,:),'gaussian',0,0.01);
HH_fn=wdenoise2(img,'ThresholdRule','Hard');
%-----------------------------------------------------
[M N]=size(img(:,:));
L1=floor(log2(min([M N])));
L2=wmaxlev([M N],'bior4.4');
Level=min(L1,L2);
%-----------------------------------------------------
[LL,HL,LH,HH] = dwt2(img(:,:),'bior4.4','mode', 'sym');
T=bayes_shrink(HH);
HH=hthresh(HH,T);
HL=hthresh(HL,T);
LH=hthresh(LH,T);
LL=hthresh(LL,T);
recon=idwt2(LL,HL,LH,HH,'bior4.4','mode','sym',size(img));
S1=ssim(recon,HH_fn)
%-----------------------------------------------------
function threshold=bayes_shrink(X)
len=prod(size(X));
sigmay2=sum(X.^2,'all')/len;
sigmahat=median(abs(X),'all')/0.6745;
sigmax=sqrt(max(sigmay2-sigmahat.^2,0));
threshold=(sigmahat.^2)./sigmax;
end
%-----------------------------------------------------
function oph=hthresh(X,T);
%A function to perform hard thresholding on a given an input vector X with a given threshold T
ind=find(abs(X)<=T);
ind1=find(abs(X)>T);
X(ind)=0;
X(ind1)=X(ind1);
oph=X;
end
0 个评论
回答(1 个)
Siraj
2023-8-28
Hii! It is my understanding that you have implemented the “wdenoise2” algorithm and now wants to compare the results of your own implementation vs the results of MATLAB inbuilt function “wdenoise2”.
I believe that the algorithm that you have attached is correctly implemented in your given code, but the SSIM (Structural Similarity Index) is not 1 for the results produced by the internal “wdenoise2” function and your own implementation.
I ran your code multiple times and have few observations that might be useful.
Refer to the following documentations for more information.
Hope this helps.
0 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!