Используйте deconvblind функция для удаления размытия изображения с использованием алгоритма слепой деконволюции. Алгоритм максимизирует вероятность того, что результирующее изображение, свернутое с результирующим PSF, является экземпляром размытого изображения, предполагая статистику шума Пуассона. Алгоритм слепой деконволюции может эффективно использоваться, когда не известна информация о искажении (размытии и шуме). deconvblind функция восстанавливает изображение и PSF одновременно, используя итеративный процесс, подобный ускоренному, затухшему алгоритму Люси-Ричардсона.
deconvblind функция, как и deconvlucy функция реализует несколько адаптаций к исходному алгоритму максимального правдоподобия Люси-Ричардсона, которые касаются сложных задач восстановления изображения. Используя эти адаптации, вы можете
Уменьшить влияние шума на восстановление
Учетная запись для неравномерного качества изображения (например, неправильные пикселы)
Обрабатывать шум считывания камеры
Дополнительные сведения об этих адаптациях см. в разделе Адаптация деконволюции Люси-Ричардсона для различных искажений изображения. deconvblind функция также поддерживает ограничения PSF, которые можно предоставить с помощью пользовательской функции.
В этом примере показано, как удалить размытие изображения с помощью слепой деконволюции. Пример иллюстрирует итеративный характер этой операции, делая два прохода при удалении размытия изображения с использованием дополнительных параметров.
Чтение изображения в рабочую область и его отображение.
I = imread('cameraman.tif'); figure imshow(I) title('Original Image')

Создайте функцию разброса точек (PSF). PSF описывает степень, в которой оптическая система размывает (распространяет) точку света.
PSF = fspecial('motion',13,45); figure imshow(PSF,[],'InitialMagnification','fit') title('Original PSF')

Создайте в изображении смоделированное размытие с помощью PSF и отобразите размытое изображение.
Blurred = imfilter(I,PSF,'circ','conv'); figure imshow(Blurred) title('Blurred Image')

Удаление размытия изображения с помощью deconvblind функция. Вы должны сделать начальное предположение на PSF. Чтобы определить размер PSF, изучите размытое изображение и измерьте ширину размытия (в пикселях) вокруг явно острого объекта. Поскольку размер PSF более важен, чем содержащиеся в нем значения, в качестве начального PSF обычно можно указать массив из 1.
В этой первоначальной реставрации, deconvblind был способен в значительной степени удалить размытие изображения. Однако следует отметить, что вызывной сигнал вокруг областей контраста резкой интенсивности в восстановленном изображении. (В примере устранен вызывной сигнал, связанный с краями, с помощью параметра «circular» с imfilter при создании моделируемого размытого изображения.) Для достижения более удовлетворительного результата повторно запустите операцию, экспериментируя с PSF различных размеров. Восстановленный PSF, возвращаемый каждой деконволюцией, также может дать ценные подсказки при оптимальном размере PSF.
INITPSF = ones(size(PSF));
[J P] = deconvblind(Blurred,INITPSF,30);
figure
imshow(J)
title('Restored Image')
figure imshow(P,[],'InitialMagnification','fit') title('Restored PSF')

Одним из способов улучшения результата является создание массива весов для исключения областей высокого контраста из операции удаления размытия. Это может уменьшить связанные с контрастом вызывные сигналы в результате.
Чтобы создать массив весов, создайте массив того же размера, что и изображение, и присвойте значение 0 пикселям массива, которые соответствуют пикселям исходного изображения, которые требуется исключить из обработки. В примере используется комбинация обнаружения краев и морфологической обработки для обнаружения областей высокой контрастности в изображении. Поскольку размытие изображения является линейным, в примере изображение расширяется дважды. Чтобы исключить из обработки пикселы границы изображения (область высокой контрастности), в примере используется padarray для назначения значения 0 всем пикселям границы.
WEIGHT = edge(I,'sobel',.28); se1 = strel('disk',1); se2 = strel('line',13,45); WEIGHT = ~imdilate(WEIGHT,[se1 se2]); WEIGHT = padarray(WEIGHT(2:end-1,2:end-1),[1 1]); figure imshow(WEIGHT) title('Weight Array')

Уточните предположение на PSF. Реконструированный PSF, возвращенный первым пасом при деконволюции, P , показывает четкую линейность. Для этого второго прохода в примере используется новый PSF, который является тем же самым, что и возвращенный PSF, но с пикселями малой амплитуды, установленными в 0.
P1 = P; P1(find(P1 < 0.01))= 0;
Запустите деконволюцию еще раз, на этот раз указав массив весов и измененный PSF. Обратите внимание, что восстановленное изображение имеет гораздо меньше звона вокруг областей резкой интенсивности, чем результат первого прохода.
[J2 P2] = deconvblind(Blurred,P1,50,[],double(WEIGHT));
figure, imshow(J2)
title('Newly Deblurred Image');
figure, imshow(P2,[],'InitialMagnification','fit') title('Newly Reconstructed PSF')

deconvblind по умолчанию выполняет несколько итераций процесса удаления размытия. Можно остановить обработку после определенного количества итераций, чтобы проверить результат, а затем перезапустить итерации из точки, где обработка остановлена. Для использования этой функции необходимо передать размытое изображение и PSF в виде массивов ячеек, например: {Blurred} и {INITPSF}.
deconvblind функция возвращает выходной образ и восстановленный PSF в виде массивов ячеек. Массив ячеек выходного изображения содержит следующие четыре элемента:
Элемент | Описание |
|---|---|
| Исходное входное изображение |
| Изображение, созданное последней итерацией |
| Изображение, созданное следующей за последней итерацией |
| Внутренняя информация, используемая |
Массив выходных ячеек PSF содержит аналогичные элементы.