Этот пример показывает, как использовать Винеровскую развертку для изображений deblur. Винеровская развертка может быть полезной, когда функция рассеяния точки и уровень шума или известны или оцениваются.
I = im2double(imread('cameraman.tif')); imshow(I); title('Original Image (courtesy of MIT)');
Моделируйте размытое изображение, которое вы можете получить от движения камеры. Создайте функцию рассеяния точки, PSF
, соответствуя линейному движению через 21 пиксель (LEN=21
), под углом 11 градусов (THETA=11
). Чтобы моделировать размытость, примените операцию свертки к фильтру с изображением с помощью imfilter
.
LEN = 21; THETA = 11; PSF = fspecial('motion', LEN, THETA); blurred = imfilter(I, PSF, 'conv', 'circular'); imshow(blurred); title('Blurred Image');
Самым простым синтаксисом для deconvwnr
является deconvwnr(A, PSF, NSR)
, где A
является размытым изображением, PSF
является функцией рассеяния точки, и NSR
является шумовой степенью сигнализировать об отношении степени. Размытое изображение, сформированное на Шаге 2, не имеет никакого шума, таким образом, мы будем использовать 0 для NSR
.
wnr1 = deconvwnr(blurred, PSF, 0);
imshow(wnr1);
title('Restored Image');
Теперь давайте попытаемся добавить шум.
noise_mean = 0; noise_var = 0.0001; blurred_noisy = imnoise(blurred, 'gaussian', ... noise_mean, noise_var); imshow(blurred_noisy) title('Simulate Blur and Noise')
В нашей первой попытке восстановления мы скажем deconvwnr
, что нет никакого шума (NSR = 0). Когда NSR = 0, Винеровский фильтр восстановления эквивалентен идеальному обратному фильтру. Идеальный обратный фильтр может быть чрезвычайно чувствителен к шуму во входном изображении, когда следующее изображение показывает:
wnr2 = deconvwnr(blurred_noisy, PSF, 0);
imshow(wnr2)
title('Restoration of Blurred, Noisy Image - NSR = 0')
Шум был усилен обратным фильтром до такой степени, что только самая голая подсказка формы человека видима.
В нашей второй попытке мы предоставляем оценку шумовой степени сигнализировать об отношении степени.
signal_var = var(I(:));
wnr3 = deconvwnr(blurred_noisy, PSF, noise_var / signal_var);
imshow(wnr3)
title('Restoration of Blurred, Noisy Image - Estimated NSR');
Даже визуально незаметное количество шума может влиять на результат. Давайте попытаемся сохранить входное изображение в представлении uint8
вместо того, чтобы преобразовать его в double
.
I = imread('cameraman.tif');
class(I)
ans = 'uint8'
Если вы передадите изображение uint8
imfilter
, это квантует вывод в порядке возвратить другое изображение uint8
.
blurred_quantized = imfilter(I, PSF, 'conv', 'circular'); class(blurred_quantized)
ans = 'uint8'
Снова, мы попытаемся сначала говорить deconvwnr
, что нет никакого шума.
wnr4 = deconvwnr(blurred_quantized, PSF, 0);
imshow(wnr4)
title('Restoration of blurred, quantized image - NSR = 0');
Затем, мы предоставляем оценку NSR к deconvwnr
.
uniform_quantization_var = (1/256)^2 / 12; signal_var = var(im2double(I(:))); wnr5 = deconvwnr(blurred_quantized, PSF, ... uniform_quantization_var / signal_var); imshow(wnr5) title('Restoration of Blurred, Quantized Image - Estimated NSR');
deconvblind
| deconvlucy
| deconvreg
| deconvwnr