Si vous faites:
Error = I_my_noisy - Im;
SNR = 10*log10(var(Im(:))/var(Error(:)));
Vous obtiendrez le SNR que vous souhaitez mettre en place au début. La chose est, il diffère du SNR que vous êtes en train de calculer avec psnr
. La différence est faite sur la façon dont la fonction psnr
mesure le SNR.
Si vous voyez le code source de psnr
, vous verrez ce 2 lignes:
err = immse(A,ref);
snr = 10*log10(mean(ref(:).^2)/err);
Dans votre cas immse(A,ref)
est équivalent à var(Error(:))
parce que le bruit est gaussienne avec moyenne nulle. Mais mean(ref(:).^2)
n'est pas la même chose que var(Im(:))
parce que Im
n'a pas de moyenne nulle, donc cette opération n'est pas égale à la variance.
C'est pourquoi vous n'obtenez pas la valeur que vous attendiez.
EDIT:
Quoi qu'il en soit, la forme correcte du SNR est celle mesurée dans la fonction psnr
parce que le SNR mesure le rapport de puissance entre le signal et le bruit et le mode de calcul, il est par mean(ref(:).^2)
Je ne comprends pas cette partie de la formule 'var (Im (:))'. Pourquoi votre bruit dépend-il de la variance de l'image? – Daniel
Je dépends du post suivant de ce site http://stackoverflow.com/questions/16008228/using-imnoise-to-add-gaussian-noise-to-an-image –