what is wrong whith my script?
Mostra commenti meno recenti
I need to calculate the SNR but this code wrong
code:
for i=0:(size(im,1)-1)
for j=0:(size(im,2)-1)
som1 = som1+im(i,j)^2;
som2 = som2+(noisy_im(i,j)-im(i,j))^2;
end
SNR = 10*log10(som1/som2)
end
where is the error?
Risposte (2)
Andrei Bobrov
il 17 Lug 2014
Modificato: Andrei Bobrov
il 17 Lug 2014
It's MATLAB
n = size(im);
SNR = zeros(n(1),1);
som1 = 0;
som2 = 0;
for ii=1:n(1)
for jj=1:n(2)
som1 = som1+im(ii,jj)^2;
som2 = som2+(noisy_im(ii,jj)-im(ii,jj))^2;
end
SNR(ii) = 10*log10(som1/som2);
end
vectorize variant:
a = sum(im.^2,2);
b = sum((noisy_im-im).^2,2);
SNR = 10*log10(cumsum(a)./cumsum(b));
2 Commenti
Andrei Bobrov
il 17 Lug 2014
corrected
Image Analyst
il 17 Lug 2014
They do different things. The loop version gives the SNR of every row (but not really) while the vectorized is of the whole image. I said "not really" because you're not reinitializing som1 and som2 to 0 at the beginning of each row. So it's some sort of cumulative SNR, which is hard to interpret.
Image Analyst
il 17 Lug 2014
Your first error is starting with 0 as the index. In MATLAB indices start with 1. The next error is that SNR gets overwritten in each row so it will end up with only a single value, not an array like you would get if you had an index for SNR. The SNR can be pulled out of both loops and be calculated after the loops exit.
You appear to want to calculate the peak signal to noise ratio. There is a function in the Image Processing Toolbox for that:
SNR = psnr(noisy_im, im);
3 Commenti
nahla
il 17 Lug 2014
Image Analyst
il 17 Lug 2014
But you already have the "noise free" image - you called "im". So why do you need to denoise anything?
nahla
il 18 Lug 2014
Categorie
Scopri di più su Spectral Measurements in Centro assistenza e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!