imnoise does not work as expected

3 views (last 30 days)
Brian on 24 Jan 2013
imnoise(a, 'gaussian', mean, var) seems simple enough in concept: add a Gaussian distribution of noise to an image. However, it does not recover the values expected.
Try: >> a = zeros(16, 16); b = imnoise(a, 'gaussian', 0, 0.1); >> mean(b(:)) ans = 0.1262 >> std(b(:))^2 ans = 0.040
The mean is not zero! The variance is not 0.1!
I can't figure out why the imnoise code produces this result. The code snippet is below.
switch code case 'gaussian' % Gaussian white noise b = a + sqrt(p4)*randn(sizeA) + p3;
If a = 0 and p3 = 0, then the result should have a mean value of zero.

Accepted Answer

Steve Eddins
Steve Eddins on 24 Jan 2013
imnoise clips the output to the range [0,1].
>> min(b(:))
ans =
Brian on 24 Jan 2013
You really need to add this to your documentation of your demos. I did not expect
I = im2double(imread('cameraman.tif'));
to normalize the image [0,1]. If you look at the documentation for im2double, it states "rescaling the data if necessary". That is subjective. Necessary for what?
The best documentation has mathematical formulas and references.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!