Адаптируйте слепую развертку к различным искажениям изображения

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

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

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

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

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

Для получения дополнительной информации об этой адаптации, смотрите, Адаптируют Развертку Люси-Ричардсона к Различным Искажениям изображения. 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}

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

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

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

|

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

Больше о