Окрашивание изображений с использованием алгоритма деконволюции вслепую

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

Шаг 1: Чтение изображения

Считайте полутоновое изображение в рабочую область. 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');

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: Восстановление размытого изображения с помощью PSF различных размеров

Чтобы проиллюстрировать важность знания размера истинного 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, показывает некоторые отложения, но он сильно поврежден звоном.

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

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

Звонок в восстановленном изображении, 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')

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 пиксели.

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

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

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

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

См. также

|

Похожие темы