В этом примере показано, как использовать деконволюцию Винера для удаления изображений. Деконволюция Wiener может быть эффективно использована, когда частотные характеристики изображения и аддитивный шум известны, по меньшей мере, до некоторой степени.
Считывайте и отображайте первозданное изображение, которое не имеет размытия или шума.
Ioriginal = imread('cameraman.tif'); imshow(Ioriginal) title('Original Image')

Симулируйте размытое изображение, которое может быть результатом движения камеры. Во-первых, создайте функцию расширения точек, PSF, при помощи fspecial функция и установка линейного движения на 21 пиксель под углом 11 степени. Затем сверните функцию расширения точек с изображением при помощи imfilter.
У оригинальное изображение есть тип данных uint8. Если вы передаете uint8 изображение в imfilter, тогда функция квантует выход в порядок, чтобы вернуть другую uint8 изображение. Чтобы уменьшить ошибки квантования, преобразуйте изображение в double перед вызовом imfilter.
PSF = fspecial('motion',21,11); Idouble = im2double(Ioriginal); blurred = imfilter(Idouble,PSF,'conv','circular'); imshow(blurred) title('Blurred Image')

Восстановите размытое изображение при помощи deconvwnr функция. Размытое изображение не имеет шума, поэтому можно опустить входной параметр «шум к сигналу» (NSR).
wnr1 = deconvwnr(blurred,PSF);
imshow(wnr1)
title('Restored Blurred Image')
Добавьте нулевой Гауссов шум к размытому изображению при помощи imnoise функция.
noise_mean = 0; noise_var = 0.0001; blurred_noisy = imnoise(blurred,'gaussian',noise_mean,noise_var); imshow(blurred_noisy) title('Blurred and Noisy Image')

Попытайтесь восстановить размытое шумное изображение при помощи deconvwnr без предоставления оценки шума. По умолчанию фильтр восстановления Винера принимает, что NSR равен 0. В этом случае фильтр восстановления Винера эквивалентен идеальному обратному фильтру, который может быть чрезвычайно чувствителен к шуму во входном изображении.
В этом примере шум в этом восстановлении усиливается до такой степени, что содержимое изображения теряется.
wnr2 = deconvwnr(blurred_noisy,PSF);
imshow(wnr2)
title('Restoration of Blurred Noisy Image (NSR = 0)')
Попытайтесь восстановить размытое шумное изображение при помощи deconvwnr с более реалистичным значением предполагаемого шума.
signal_var = var(Idouble(:));
NSR = noise_var / signal_var;
wnr3 = deconvwnr(blurred_noisy,PSF,NSR);
imshow(wnr3)
title('Restoration of Blurred Noisy Image (Estimated NSR)')
Даже визуально незаметное количество шума может повлиять на результат. Одним из источников шума являются ошибки квантования при работе с изображениями в uint8 представление. Ранее, чтобы избежать ошибок квантования, этот пример моделировал размытое изображение из первозданного изображения в типе данных double. Теперь, чтобы исследовать влияние ошибок квантования на восстановление, моделируйте размытое изображение из первозданного изображения в исходном uint8 тип данных.
blurred_quantized = imfilter(Ioriginal,PSF,'conv','circular'); imshow(blurred_quantized) title('Blurred Quantized Image')

Попытайтесь восстановить размытое квантованное изображение с помощью deconvwnr без предоставления оценки шума. Даже при отсутствии дополнительного шума это восстановление ухудшается по сравнению с восстановлением размытого изображения в типе данных double.
wnr4 = deconvwnr(blurred_quantized,PSF);
imshow(wnr4)
title('Restoration of Blurred Quantized Image (NSR = 0)');
Попытайтесь восстановить размытое квантованное изображение с помощью deconvwnr с более реалистичным значением предполагаемого шума.
uniform_quantization_var = (1/256)^2 / 12;
signal_var = var(Idouble(:));
NSR = uniform_quantization_var / signal_var;
wnr5 = deconvwnr(blurred_quantized,PSF,NSR);
imshow(wnr5)
title('Restoration of Blurred Quantized Image (Estimated NSR)');
deconvwnr | fspecial | imfilter | imnoise