MATLAB Answers


Image Processing Noise

Asked by UJJWAL
on 19 Dec 2011
Latest activity Commented on by Image Analyst
on 24 Feb 2016

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 ??


Log in to comment.

4 Answers

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);


Log in to comment.

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:


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.


Log in to comment.

Answer by UJJWAL
on 19 Dec 2011

Ok . So suppose the problem is to add a noise with a variance of 0.25 and mean of 0 and the noise is gaussian and additive.

What are the equivalent statements using imnoise, awgn and the first one to introduce such a noise ??


Log in to comment.

Answer by Shaveta Arora on 24 Feb 2016

How to add gaussian noise of variance 10 by both methods?

  1 Comment

Hint from the help:

Create a vector of 1000 random values drawn from a normal distribution with a mean of 500 and a standard deviation of 5.

a = 5;
b = 500;
y = a.*randn(1000,1) + b;

For you, a would be sqrt(10) and b would be 0, so

[rows, columns] = size(grayImage);
noisyArray = sqrt(10)*randn(rows, columns);
output = double(grayImage) + noisyArray;

Log in to comment.

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today