Изображения Deblurring Используя слепой алгоритм развертки

В этом примере показано, как использовать слепую развертку для изображений deblur. Слепой алгоритм развертки может использоваться эффективно, когда никакая информация об искажении (размывание и шум) не известна. Алгоритм восстанавливает изображение и функцию рассеяния точки (PSF) одновременно. Ускоренный, ослабленный алгоритм Ричардсона-Люси используется в каждой итерации. Дополнительная оптическая система (e.g. камера) характеристики могут использоваться в качестве входных параметров, которые могли помочь улучшить качество восстановления изображений. Ограничения PSF могут быть переданы в через заданную пользователями функцию.

Шаг 1: Readimage

Считайте полутоновое изображение в рабочую область. deconvblind функция может обработать массивы любой размерности.

I = imread('cameraman.tif');
figure;imshow(I);title('Original Image');
text(size(I,2),size(I,1)+15, ...
    'Image courtesy of Massachusetts Institute of Technology', ...
    'FontSize',7,'HorizontalAlignment','right');

Figure contains an axes. The axes with title Original Image contains 2 objects of type image, text.

Шаг 2: симулируйте размытость

Симулируйте реальное изображение, которое могло быть размыто (например, из-за движения камеры или отсутствия особого внимания). Пример симулирует размытость путем свертки к Гауссову фильтру с истинным изображением (использующий imfilter). Гауссов фильтр затем представляет функцию рассеяния точки, PSF.

PSF = fspecial('gaussian',7,10);
Blurred = imfilter(I,PSF,'symmetric','conv');
imshow(Blurred)
title('Blurred Image')

Figure contains an axes. The axes with title Blurred Image contains an object of type image.

Шаг 3: восстановите размытое изображение Используя PSFs различных размеров

Чтобы проиллюстрировать важность знания размера истинного PSF, этот пример выполняет три восстановления. Каждый раз реконструкция PSF начинает с универсального массива (массив из единиц).

Первое восстановление, J1 и P1, использует карликовый массив, UNDERPSF, для исходного предположения PSF. Размер массива UNDERPSF на 4 пикселя короче в каждой размерности, чем истинный PSF.

UNDERPSF = ones(size(PSF)-4);
[J1,P1] = deconvblind(Blurred,UNDERPSF);
imshow(J1)
title('Deblurring with Undersized PSF')

Figure contains an axes. The axes with title Deblurring with Undersized PSF contains an object of type image.

Второе восстановление, J2 и P2, использует массив из единиц, OVERPSF, для начального PSF, который на 4 пикселя более длинен в каждой размерности, чем истинный PSF.

OVERPSF = padarray(UNDERPSF,[4 4],'replicate','both');
[J2,P2] = deconvblind(Blurred,OVERPSF);
imshow(J2)
title('Deblurring with Oversized PSF')

Figure contains an axes. The axes with title Deblurring with Oversized PSF contains an object of type image.

Третье восстановление, J3 и P3, использует массив из единиц, INITPSF, для начального PSF, который является точно одного размера с истинным PSF.

INITPSF = padarray(UNDERPSF,[2 2],'replicate','both');
[J3,P3] = deconvblind(Blurred,INITPSF);
imshow(J3)
title('Deblurring with INITPSF')

Figure contains an axes. The axes with title Deblurring with INITPSF contains an object of type image.

Шаг 4: анализ восстановленного PSF

Все три восстановления также производят PSF. Следующие изображения показывают, как анализ восстановленной силы PSF помогает в предположении правильного размера для начального PSF. В истинном PSF, Гауссовом фильтре, максимальные значения находятся в центре (белые) и уменьшаются на (черных) границах.

figure;
subplot(2,2,1)
imshow(PSF,[],'InitialMagnification','fit')
title('True PSF')
subplot(222)
imshow(P1,[],'InitialMagnification','fit')
title('Reconstructed Undersized PSF')
subplot(2,2,3)
imshow(P2,[],'InitialMagnification','fit')
title('Reconstructed Oversized PSF')
subplot(2,2,4)
imshow(P3,[],'InitialMagnification','fit')
title('Reconstructed true PSF')

Figure contains 4 axes. Axes 1 with title True PSF contains an object of type image. Axes 2 with title Reconstructed Undersized PSF contains an object of type image. Axes 3 with title Reconstructed Oversized PSF contains an object of type image. Axes 4 with title Reconstructed true PSF contains an object of type image.

PSF восстановлен в первом восстановлении, P1, очевидно, не помещается в ограниченный размер. Это имеет изменение мощного сигнала на границах. Соответствующее изображение, J1, не показывает улучшенной ясности по сравнению с размытым изображением, Blurred.

PSF восстановлен во втором восстановлении, P2, становится очень сглаженным в ребрах. Это подразумевает, что восстановление может обработать PSF меньшего размера. Соответствующее изображение, J2, показывает некоторый deblurring, но он строго повреждается вызовом.

Наконец, PSF, восстановленный в третьем восстановлении, P3, является несколько промежуточным между P1 и P2. Массив, P3, напоминает истинный PSF очень хорошо. Соответствующее изображение, J3, показывает существенное улучшение; однако это все еще повреждается вызовом.

Шаг 5: улучшение восстановления

Звенение в восстановленном изображении, J3, происходит вдоль областей резкого контраста интенсивности в изображении и вдоль цветов границы изображения. В этом примере показано, как уменьшать звонящий эффект путем определения функции взвешивания. Веса алгоритма каждый пиксель согласно WEIGHT массив при восстановлении изображения и PSF. В нашем примере мы запускаем путем нахождения "резких" пикселей с помощью функции ребра. Методом проб и ошибок мы решаем, что желательный пороговый уровень 0.08.

WEIGHT = edge(Blurred,'sobel',.08);

Чтобы расширить область, мы используем imdilate и передайте в элементе структурирования, se.

se = strel('disk',2);
WEIGHT = 1-double(imdilate(WEIGHT,se));

Пиксели близко к границам также присвоены значение 0.

WEIGHT([1:3 end-(0:2)],:) = 0;
WEIGHT(:,[1:3 end-(0:2)]) = 0;
figure
imshow(WEIGHT)
title('Weight Array')

Figure contains an axes. The axes with title Weight Array contains an object of type image.

Изображение восстанавливается путем вызова deconvblind с WEIGHT массив и увеличенное число итераций (30). Почти весь вызов подавлен.

[J,P] = deconvblind(Blurred,INITPSF,30,[],WEIGHT);
imshow(J)
title('Deblurred Image')

Figure contains an axes. The axes with title Deblurred Image contains an object of type image.

Шаг 6: Используя дополнительные ограничения на восстановление PSF

Пример показывает, как можно задать дополнительные ограничения на PSF. Функция, FUN, ниже возвратов модифицированный массив PSF, который deconvblind использует для следующей итерации.

В этом примере, FUN изменяет PSF путем обрезки его P1 и P2 количество пикселей в каждой размерности и затем дополнение массива назад к его первоначальному размеру с нулями. Эта операция не изменяет значения в центре PSF, но эффективно уменьшает размер PSF 2*P1 и 2*P2 'pixels'.

P1 = 2;
P2 = 2;
FUN = @(PSF) padarray(PSF(P1+1:end-P1,P2+1:end-P2),[P1 P2]);

Анонимная функция, FUN, передается в deconvblind в последний раз. Смотрите раздел Parameterizing Functions, в документации Математики MATLAB, для получения информации об обеспечении дополнительных параметров к функциональному FUN.

В этом примере, размере начального PSF, OVERPSF, на 4 пикселя больше, чем истинный PSF. Установка P1 = 2 и P2 = 2 как параметры в FUN эффективно делает ценное пространство в OVERPSF тот же размер как истинный PSF. Поэтому результат, JF и PF, похоже на результат развертки с измеренным PSF права и никаким FUN вызов, J и P, от шага 4.

[JF,PF] = deconvblind(Blurred,OVERPSF,30,[],WEIGHT,FUN);
imshow(JF)
title('Deblurred Image')

Figure contains an axes. The axes with title Deblurred Image contains an object of type image.

Если мы использовали начальный PSF увеличенного размера, OVERPSF, без функции ограничения, FUN, получившееся изображение было бы похоже на неудовлетворительный результат, J2, достигнутый на Шаге 3.

Обратите внимание на то, что любые незаданные параметры перед FUN может быть не использован, такие как DAMPAR и READOUT в этом примере, не требуя заполнителя, ([]).

Смотрите также

|

Похожие темы