2016-02-14 1 views
0

Je suis en train d'ajouter du bruit de 5 dB à une image en Matlab selon les étapes suivantesDifférence entre ajout et SNR mesuré dans l'image

SNR = 5; 
Im = double(Io)/255; 
vm = var(Im(:))/10^(SNR/10); 
I_my_noisy = imnoise(Im, 'gaussian', 0, vm); 

mais quand je mesure le SNR en utilisant la commande Matlab

[peaksnr,snr] = psnr(I_my_noisy, Im) 

Je reçois un SNR égal à 10. Alors, quel est le problème dans mon code? et pourquoi le résultat diffère de mon dB d'ajout?

+0

Je ne comprends pas cette partie de la formule 'var (Im (:))'. Pourquoi votre bruit dépend-il de la variance de l'image? – Daniel

+0

Je dépends du post suivant de ce site http://stackoverflow.com/questions/16008228/using-imnoise-to-add-gaussian-noise-to-an-image –

Répondre

0

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)

+0

Merci @dubafek pour votre réponse utile . Je teste votre formule et comme vous l'avez dit, je reçois comme la réponse d'installation, mais selon votre dernier paragraphe, vous me conseillez d'utiliser la fonction matlab psnr, car il est plus précis de mesurer le bruit. –

+0

@ serwan-bamerni Je veux dire que l'utilisation de 'mean (Im (:).^2)' est meilleure que 'var (Im (:))' car la première mesure la puissance du signal. Une définition de SNR peut être trouvée [ici] (http://bigwww.epfl.ch/sage/soft/snr/). Notez que si vous divisez par le nombre d'éléments, vous obtenez l'expression utilisée 'psnr' – dubafek