## Variance and mean isn't calculated properly

Asked by Sajid Khan

### Sajid Khan (view profile)

on 23 Apr 2013

Hello Everyone,

I am trying to calculate variance and mean of gaussian noise by adding it to uniform image using imnoise function as

```image = rgb2gray(im2double(imread('flat_400.jpg')));
image(:,:) = 0.5;
noisy_image = imnoise(image,'gaussian',0,0.8);
```

and then am trying to calculate mean and variance using

```mean_image     = sum(sum(noisy_image))/(size(noisy_image,1)*size(noisy_image,2))
variance = sum(sum((noisy_image - mean_image).^2))/((size(noisy_image,1)*size(noisy_image,2)) - 1)
```

but the variance and mean are far from the added noise. Can anyone please tell me what's the reason of it?

## Products

No products are associated with this question.

### Iman Ansari (view profile)

Answer by Iman Ansari

### Iman Ansari (view profile)

on 23 Apr 2013
Edited by Iman Ansari

### Iman Ansari (view profile)

on 23 Apr 2013

Hi. Your noise is very large and the output image must be between 0 and 1, so the values greater than 1 became 1 and values less than 0 became zero.

Gaussian noise can be defined:

```Mean=0;
Variance=0.8;
```
```Noise=Mean+sqrt(Variance).*randn([256 256]);
```
```mean(Noise(:))
var(Noise(:))
```

### Sajid Khan (view profile)

Answer by Sajid Khan

### Sajid Khan (view profile)

on 23 Apr 2013

Well even if I add noise with variance of 0.2 or 0.3, the code provided by me doesn't provide the correct variance and mean.

Jan Simon

### Jan Simon (view profile)

on 23 Apr 2013

Please post comments in the comment section. Otherwise the connection top the realted message will get lost soon.

Even with a variance of 0.2 the saturation at 0.0 and 1.0 will matter. To narrow the problem down, please try this:

```mean_image = mean(noisy_image(:));
var_image  = var(noisy_image(:));
```
Iman Ansari

### Iman Ansari (view profile)

on 23 Apr 2013

imnoise default variance is 0.01. For this value, the output noise would be became between

```[mean-3*sqrt(0.01)   mean-3*sqrt(0.01)]
or
[mean-0.3  mean+0.3].
but for 0.2 ====> [mean-1.3416 mean+1.3416]
```

http://en.wikipedia.org/wiki/Normal_distribution

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi test

### Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.