MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today
Asked by UJJWAL on 19 Dec 2011

Hi, Suppose I want to add white gaussian noise to an image. I propose to do by following means :- a) imnoise(I,'gaussian',0,0.25); b) I = awgn(I,var(I(:))/0.25); c) I = I + 0.25*randn(size(I));

Here I is a certain image. What is difference between using the above statements ??

Answer by Wayne King on 19 Dec 2011

Accepted answer

J = imnoise(I,'gaussian',0,0.25); J = I+0.5*randn(size(I));

For awgn(), your function syntax assumes the power of the input is 0 dBW, so you would need to do.

denom = -(var(I(:))/(10*log10(0.25))); I = awgn(I,var(I(:))/denom);

Answer by Wayne King on 19 Dec 2011

Hi, in

I = I +0.25*randn(size(t));

you get noise with a standard deviation of 0.25, not variance. If you want noise with a variance of 0.25, then you must do

I = I +0.5*randn(size(t));

that would be equivalent to:

imnoise(I,'gaussian',0,0.25);

The variance of a constant times a random variable is the constant squared times the variance of the random variable.

Finally, the actual variance of the additive Gaussian noise in:

I = awgn(I,var(I(:))/0.25);

depends on I, so it's not clear that you are really getting a variance of 0.25. For example:

I = randn(256,256);

Because var(I(:)) = 1.0551 (in this particular example)

Your call of

I = awgn(I,var(I(:))/0.25);

results in an additive WGN process with variance:

10^(-4.2203/10) = 0.3784

which is greater than you think.

## 0 Comments