imnoise does not work as expected

1 view (last 30 days)
Brian
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.
Answers?

Accepted Answer

Steve Eddins
Steve Eddins on 24 Jan 2013
imnoise clips the output to the range [0,1].
>> min(b(:))
ans =
0
  2 Comments
Brian
Brian on 24 Jan 2013
Ok. Now try something that should address this:
>> a = ones(1024); b = imnoise(a, 'gaussian', 0, 0.1); >> mean(b(:) - 1) ans = -0.1261 ??? shouldn't this be zero?
>> std(b(:) - 1) ans = 0.1844 ??? shouldn't this be sqrt(0.1)?
Brian
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)

Categories

Find more on Image Processing and Computer Vision in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!