Проблема с усреднением поврежденных изображений для устранения шума в MATLAB - PullRequest
4 голосов
/ 15 марта 2010

Я хочу усреднить некоторые изображения .jpg, которые искажены аддитивным гауссовым шумом с нулевым средним. После поиска я решил добавить матрицы изображений и разделить сумму на количество матриц. Тем не менее, результирующее изображение полностью черное. Обычно, когда количество изображений увеличивается, результирующее изображение становится лучше. Но когда я использую больше изображений, становится темнее.

Я использую 800x600 черно-белых изображений .jpg. Вот скрипт, который я использовал:

image1 = imread ('PIC1.jpg');
image2 = imread ('PIC2.jpg');
image3 = imread ('PIC3.jpg');
image4 = imread ('PIC4.jpg');

sum = image1 + image2 + image3 + image4; 
av = sum / 4; 
imshow(av);

Ответы [ 3 ]

10 голосов
/ 15 марта 2010

Проблема, вероятно, состоит в том, что все данные изображения имеют тип uint8, поэтому их сложение приводит к насыщению при значении 255 для значений пикселей, что дает вам в основном белое изображение затем в конечном итоге выглядит черным, когда вы делите на количество изображений. Вы должны преобразовать ваши изображения в другой тип данных, например double, затем выполнить усреднение, а затем преобразовать обратно в uint8:

% Load your images:
image1 = imread('PIC1.jpg');
image2 = imread('PIC2.jpg');
image3 = imread('PIC3.jpg');
image4 = imread('PIC4.jpg');

% Convert the images to type double and sum them:
imageSum = double(image1) + double(image2) + double(image3) + double(image4);

% Divide by the number of images and convert back to type uint8:
averageImage = uint8(imageSum./4);

% Display the averaged image:
imshow(averageImage);

СТОРОННОЕ ПРИМЕЧАНИЕ: Вам следует избегать присвоения вашим переменным тех же имен, что и любым существующим функциям, поскольку это может вызвать проблемы / путаницу. Вот почему я изменил переменную sum на imageSum (есть встроенная функция sum).

7 голосов
/ 16 марта 2010

Альтернативное решение с использованием IMLINCOMB из набора инструментов обработки изображений:

I = imlincomb(0.25,I1, 0.25,I2, 0.25,I3, 0.25,I4);
2 голосов
/ 18 ноября 2012

Вы также можете использовать imagesc (averageImage); Эта функция с автоматическим масштабированием изображения и не будет выглядеть черной

...