imnoise does not work as expected

1 Ansicht (letzte 30 Tage)
Brian
Brian am 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?

Akzeptierte Antwort

Steve Eddins
Steve Eddins am 24 Jan. 2013
imnoise clips the output to the range [0,1].
>> min(b(:))
ans =
0
  2 Kommentare
Brian
Brian am 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 am 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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Image Processing and Computer Vision finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by