Проблема с усреднением поврежденных изображений для устранения шума в MATLAB.

StackOverflow https://stackoverflow.com/questions/2449780

Вопрос

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

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

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);
Это было полезно?

Решение

Проблема, вероятно, в том, что все данные изображения имеют тип 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).

Другие советы

Альтернативное решение с использованием ИМЛИНКОМБ из панели инструментов обработки изображений:

I = imlincomb(0.25,I1, 0.25,I2, 0.25,I3, 0.25,I4);

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top