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