В этом примере показано, как использовать слепую деконволюцию для отладки изображений. Алгоритм слепой деконволюции может использоваться эффективно, когда не известна информация о искажении (размытие и шум). Алгоритм восстанавливает изображение и функцию расширения точек (PSF) одновременно. Ускоренный, демпфированный алгоритм Ричардсона-Люси используется в каждой итерации. Дополнительные характеристики оптической системы (например, камеры) могут использоваться в качестве входных параметров, которые могут помочь улучшить качество восстановления изображения. Ограничения PSF могут быть переданы через пользовательскую функцию.
Считайте полутоновое изображение в рабочую область. The 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
, показывает некоторые отложения, но он сильно поврежден звоном.
Наконец, PSF реконструировали в третьей реставрации, P3
, является несколько промежуточным между P1
и P2
. Массив, P3
, очень хорошо напоминает истинный PSF. Соответствующее изображение, J3
, показывает значительное улучшение; однако он все еще поврежден звоном.
Звонок в восстановленном изображении, J3
, происходит вдоль областей резкой интенсивности контраста в изображении и вдоль границ изображения. В этом примере показано, как уменьшить эффект звонка путем определения функции взвешивания. Алгоритм взвешивает каждый пиксель согласно WEIGHT
массив при восстановлении изображения и PSF. В нашем примере мы начинаем с нахождения «острых» пикселей с помощью функции edge. Путем проб и ошибок мы определяем, что желаемый пороговый уровень составляет 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
пиксели.
P1 = 2; P2 = 2; FUN = @(PSF) padarray(PSF(P1+1:end-P1,P2+1:end-P2),[P1 P2]);
Анонимная функция, FUN
, передается в deconvblind
последний. Смотрите раздел Параметризация функций, в документации MATLAB Mathematics, для получения информации о предоставлении дополнительных параметров функции 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
в этом примере, не требуя держателя места, ([]).