exponenta event banner

Удаление размытия изображений с помощью алгоритма слепой деконволюции

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

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

Чтение изображения в градациях серого в рабочую область. 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. Размер массива UNPDSF в каждом измерении на 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. В нашем примере мы начинаем с нахождения «острых» пикселей с помощью функции ребра. Методом проб и ошибок мы определяем, что требуемый пороговый уровень равен 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, который используется для деконвлинда для следующей итерации.

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

См. также

|

Связанные темы