Image Processing Noise differences

29 views (last 30 days)
UJJWAL
UJJWAL on 19 Dec 2011
Edited: Walter Roberson on 26 Mar 2018
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 ??

Accepted Answer

Wayne King
Wayne King on 19 Dec 2011
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);

More Answers (3)

Wayne King
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.

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

Shaveta Arora
Shaveta Arora on 24 Feb 2016
How to add gaussian noise of variance 10 by both methods?
  1 Comment
Image Analyst
Image Analyst on 24 Feb 2016
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;

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!