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

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

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

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

PSF = fspecial('gaussian',7,10);
Blurred = imfilter(I,PSF,'symmetric','conv');
imshow(Blurred)
title('Blurred 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')

Второе восстановление, 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')

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

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

Шаг 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')

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')

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

[J,P] = deconvblind(Blurred,INITPSF,30,[],WEIGHT);
imshow(J)
title('Deblurred 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')

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

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

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

|

Похожие темы