2016-04-24 4 views
0

Цель состоит в том, чтобы добавить аддитивный гауссовский шум нулевого среднего и дисперсию 400 к изображению.Гауссовский шум, MATLAB

Например, если я хотел бы добавить аддитивный гауссовский шум с нулевым средним и дисперсией 0,5, я может использовать один из двух следующих способов:

1) Команда imnoise в Matlab:

    Noisyimg=imnoise(I,'gaussian',0,0.5) 

где I - изображение , которое добавляется шумом, и Noisyimg - это шумное изображение.

2) Создайте матрицу случайных чисел, взятых из нормального распределения со стандартным отклонением, указанным с помощью команды randn .

 noisemat= a*randn(size(I))+ b; where a=standard deviation and b=mean 
     Noisyimg=noisemat+I;     

Таким образом, для нулевого среднего и дисперсии 0,5,

 noisemat=sqrt(0.5)*randn(size(I))+0; 

, поскольку стандартного отклонения квадратный корень из дисперсии.

Но, когда я пытаюсь применить вышеуказанные два метода, чтобы получить шумное изображение с аддитивным гауссовским шумом нулевого среднего значения и дисперсией 400, я получаю неразличимые изображения. Для, например, с помощью метода два,

 noisemat=sqrt(400)*randn(size(I))+0; 
     Noisyimg=noisemat+I; 

Полученного шумное изображение не далеко от фактического шумного образа, который я должен быть obtaining.This, я в курсе, потому что у меня есть представление о фактическом шумном выходе, что я должен быть получение. Я делаю какую-либо ошибку при реализации команд или я пропускаю некоторые критические точки. Я приложил оригинальное изображение, к которому я пытался добавить гауссовский шум и изображение, которое было получено после добавления шума.
original image(I) Noisyimg

Любая помощь будет высоко оценена !!

+0

Что вы подразумеваете под "неразличимыми изображениями"? Что такое RMS исходного изображения? –

ответ

0

Итак, я наконец получил результат, который я смотрел далеко. Надеюсь, это поможет :)

Ключ заключается в том, что дисперсия добавляемого гауссовского шума также должна быть масштабирована относительно диапазона изображения, к которому он добавляется. Исходное изображение имело тип uint8. Первоначально он был преобразован в тип double с диапазоном [0 1].

 I=im2double(imread('chipset1.tif')); 
     figure;imshow(I);title('original image'); 

Теперь проблема возникла при попытке добавить гауссовский шум 400. Первоначально я пытался его добавить следующим образом:

 Noisyimg=imnoise(I,'gaussian',0,400) 

Но, оказывается, что дисперсия должна перед тем, как его можно будет использовать.

Он масштабируется следующим образом:

дисперсия = (стандартное отклонение)^2/(255)^2

Таким образом, для дисперсии 400, стандартное отклонение составляет 20 и, таким образом, масштабирование :

Обратите внимание на изменение параметра дисперсии imnoise. Это относительное масштабирование гарантирует, что выходное шумовое изображение будет правильным и в пределах диапазона.

То же самое можно сделать с помощью метода два также:

  noisemat=(sqrt(var))*randn(size(I))+0; 
      Noisyimg=noisemat+I; 
      figure;imshow(Noisyimg); 

Как Замечание, эта проблема добавления гауссов шума дисперсии 400 в черно-белое изображение доступно и может быть ссылка в цифровой обработке изображений Учебник Rafael C.Gonzalez и Richard E.Woods, 3-е издание, глава пятая, пример 5.2. Обратите внимание, что исходные изображения в этом примере также использовались здесь, а также в вопросе, который был опубликован мной, в котором я не получил желаемый результат.

1

Возможны две ошибки: 1. Динамический диапазон или исходное изображение. если это [0 1], то имеет смысл только, что добавление значений нормального распределения с дисперсией 400 приведет в основном к шуму. 2. Если изображения являются uint8 или uint 16, добавление double может иметь нежелательные последствия. попробуйте преобразовать изображение в двойное, прежде чем добавить шум:

Noisyimg=noisemat+double(I); 
+0

Оцените хорошее предложение :) Да, образ сначала был преобразован в тип double. Исходное изображение было типа uint8, и оно было преобразовано в тип double с диапазоном [0,1]. Код приведен ниже: a = im2double (imread ('chipset1.tif')); figure; imshow (a); title ('original image'); b = (sqrt (400)) * randn (размер (a)) + 0; c = a + b; рисунок; imshow (c, 'display range', []) –

Смежные вопросы