Deblur со слепым алгоритмом развертки

Используйте функцию deconvblind для deblur изображение с помощью слепого алгоритма развертки. Алгоритм максимизирует вероятность, что получившееся изображение, когда применено операцию свертки с получившимся PSF, является экземпляром размытого изображения, принимая статистику Пуассоновского шума. Слепой алгоритм развертки может использоваться эффективно, когда никакая информация об искажении (размывание и шум) не известна. Функция deconvblind восстанавливает изображение и PSF одновременно, с помощью итеративного процесса, подобного ускоренному, ослабленному алгоритму Люси-Ричардсона.

Функция deconvblind, точно так же, как функция deconvlucy, реализует несколько адаптации к исходному алгоритму наибольшего правдоподобия Люси-Ричардсона, которая обращается к комплексным задачам восстановления изображений. Используя эту адаптацию, вы можете

  • Уменьшайте эффект шума на восстановлении

  • Объясните неоднородное качество изображения (например, плохие пиксели)

  • Обработайте шум считывания камеры

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

Изображения Deblur с помощью слепой развертки

Этот пример показывает как deblur изображение с помощью слепой развертки. Пример иллюстрирует итеративную природу этой операции, делая две передачи в deblurring изображением с помощью дополнительных параметров.

Считайте изображение в рабочую область и отобразите ее.

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

Deblur изображение с помощью функции deconvblind. Необходимо высказать исходное предположение в PSF. Чтобы определить размер PSF, исследуйте размытое изображение и измерьте ширину размытости (в пикселях) вокруг очевидно резкого объекта. Поскольку размер PSF более важен, чем значения, которые это содержит, можно обычно задавать массив 1's как начальный PSF.

В этом начальном восстановлении deconvblind смог к deblur изображение в значительной степени. Отметьте, однако, вызов вокруг резких областей контраста интенсивности в восстановленном изображении. (Пример устранил связанный с ребром вызов при помощи 'круговой' опции с imfilter при создании моделируемого размытого изображения.), Чтобы достигнуть более удовлетворительного результата, повторно выполните операцию, экспериментирующую с PSFs различных размеров. Восстановленный 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')

Один способ улучшить результат состоит в том, чтобы создать массив веса, чтобы исключить области высокой контрастности от deblurring операции. Это может уменьшать связанное с контрастом звенение в результате.

Чтобы создать массив веса, создайте массив тот же размер как изображение и присвойте значение 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, по умолчанию, выполняет несколько итераций deblurring процесса. Можно остановить обработку после определенного числа итераций, чтобы проверять результат, и затем перезапустить итерации от точки где остановленная обработка. Чтобы использовать эту функцию, необходимо передать и в размытом изображении и в PSF как массивы ячеек, например, {Blurred} и {INITPSF}.

Функция deconvblind возвращает выходное изображение и восстановленный PSF как массивы ячеек. Массив ячеек выходного изображения содержит эти четыре элемента:

Элемент

Описание

output{1}

Исходное входное изображение

output{2}

Изображение производится последней итерацией

output{3}

Изображение, произведенное рядом с последней итерацией

output{4}

Внутренняя информация, используемая deconvlucy, чтобы знать, где перезапустить процесс

PSF массив ячеек вывода содержит подобные элементы.

Функция deconvblind поддерживает несколько других дополнительных аргументов, которые можно использовать, чтобы достигнуть самого лучшего результата, такого как определение параметра затухания, чтобы обработать аддитивный шум в размытом изображении. Чтобы видеть влияние этих дополнительных аргументов, а также функциональную опцию, которая позволяет вам помещать дополнительные ограничения на реконструкцию PSF, смотрите пример Изображения Deblurring Используя Слепой Алгоритм Развертки.

Смотрите также

| | |

Связанные примеры

Больше о