В этом примере показано, как использовать слепую развертку для изображений deblur. Слепой алгоритм развертки может использоваться эффективно, когда никакая информация об искажении (размывание и шум) не известна. Алгоритм восстанавливает изображение и функцию рассеяния точки (PSF) одновременно. Ускоренный, ослабленный алгоритм Ричардсона-Люси используется в каждой итерации. Дополнительная оптическая система (например, камера) характеристики могут использоваться в качестве входных параметров, которые могли помочь улучшить качество восстановления изображений. Ограничения PSF могут быть переданы в через заданную пользователями функцию.
Считайте полутоновое изображение в рабочую область. 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');
Симулируйте реальное изображение, которое могло быть размыто (например, из-за движения камеры или отсутствия особого внимания). Пример симулирует размытость путем свертки к Гауссову фильтру с истинным изображением (использующий imfilter
). Гауссов фильтр затем представляет функцию рассеяния точки, PSF
.
PSF = fspecial('gaussian',7,10); Blurred = imfilter(I,PSF,'symmetric','conv'); imshow(Blurred) title('Blurred Image')
Чтобы проиллюстрировать важность знания размера истинного 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')
Все три восстановления также производят 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
, показывает существенное улучшение; однако это все еще повреждается вызовом.
Звенение в восстановленном изображении, 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')
Пример показывает, как можно задать дополнительные ограничения на 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
в этом примере, не требуя заполнителя, ([]).