Изображения 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*P2 и 2*P1.

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 в этом примере, не требуя заполнителя, ([]).

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

| | |

Похожие темы