2016-04-13 22 views
3

Wenn additives weißes Gaußschen Rauschen in MATLAB Zugabe kann man die vordefinierte FunktionMATLAB: Was ist der Unterschied unter Verwendung von imnoise und randn für Gaußsches Rauschen ist

J = imnoise(I,'gaussian',M,V) % I is the image to add the noise 

mit standardmäßig Null-Mittelwert (M) und die Varianz (V) 0,01. Das Handbuch für diese Funktion lautet here.

jedoch in verschiedenem MATLAB-Codes habe ich auch, dass additive Gaußsche Rauschen durch die folgende Weise

sigma = 10; % standard deviation (STD) 

g = I + sigma * randn(size(I)); %add gaussian noise with STD 10 

zu dem Bild hinzugefügt wird gesehen was in Ordnung ist. Jetzt kennen wir die Formel für die Varianz,

wo Sigma die STD ist. So, nach dem zweiten Code, ich habe sigma = 10 sollte daher die Varianz (V) sein 100. Matlab imnoise Funktion für Null-Mittelwert und Varianz 100 sollte jedoch so etwas wie dieses

J = imnoise(I,'gaussian',0,100) 

sein, dies tut kein beschädigtes Bild, auch nicht in der Nähe des zweiten Codes. Das Bild scheint zu 100% mit Rauschen behaftet zu sein. Wie ist das anders? Fehle ich hier etwas?

Antwort

2

Das Hauptproblem, das ich sehe, ist, dass die imnoise Funktion erwartet, dass das Bild auf das Intervall [0,1] skaliert wird (siehe auch dieses answer). In Anbetracht dessen macht eine Varianz von 100 keinen Sinn. Sie sollten die Varianz neben dem Bild skalieren und hoffentlich macht alles wieder Sinn.

+0

Danke, das hat Sinn gemacht. Danke auch für diesen Link. Es war hilfreich – tarmizi

+0

Eine kurze Frage, obwohl. Wenn ich also ein Bild mit einem Pixelwert zwischen 0 und 255 habe und Rauschen mit Sigma = 10 hinzufügen möchte, kann ich die Varianz als, Varianz = Sigma^2/255^2 finden. Dann benutze das zur Immoise-Funktion. Ist das korrekt ? – tarmizi

+1

@tarmizi Ja, das scheint richtig zu sein. Die Standardabweichung sollte genauso skaliert werden wie das Bild (sie hat die gleichen Einheiten im Gegensatz zur Varianz) und dann erhält man die Varianz durch Quadrieren. –