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

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

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

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

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

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

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

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

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

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

I = imread('cameraman.tif');
figure
imshow(I)
title('Original Image')

Figure contains an axes object. The axes object with title Original Image contains an object of type image.

Создайте функцию рассеяния точки (PSF). PSF описывает степень, до которой размывается оптическая система (распространяет) точку света.

PSF = fspecial('motion',13,45);
figure
imshow(PSF,[],'InitialMagnification','fit')
title('Original PSF')

Figure contains an axes object. The axes object with title Original PSF contains an object of type image.

Создайте симулированную размытость в изображении, с помощью PSF, и отобразите размытое изображение.

Blurred = imfilter(I,PSF,'circ','conv');
figure
imshow(Blurred)
title('Blurred Image')

Figure contains an axes object. The axes object with title Blurred Image contains an object of type 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 contains an axes object. The axes object with title Restored Image contains an object of type image.

figure
imshow(P,[],'InitialMagnification','fit')
title('Restored PSF')

Figure contains an axes object. The axes object with title Restored PSF contains an object of type image.

Один способ улучшить результат состоит в том, чтобы создать массив весов, чтобы исключить области высокой контрастности от 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')

Figure contains an axes object. The axes object with title Weight Array contains an object of type image.

Совершенствуйте предположение в 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 contains an axes object. The axes object with title Newly Deblurred Image contains an object of type image.

figure, imshow(P2,[],'InitialMagnification','fit')
title('Newly Reconstructed PSF')

Figure contains an axes object. The axes object with title Newly Reconstructed PSF contains an object of type image.

Уточнение результата

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

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

Элемент

Описание

output{1}

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

output{2}

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

output{3}

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

output{4}

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

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

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

|

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

Больше о