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

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

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

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

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

  • Указатель камеры считывания шума

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

Изображения Deblur с использованием слепого деконволюции

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

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

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

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

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

В этой первоначальной реставрации deconvblind смог в значительной степени развенчать изображение. Обратите внимание, однако, на звонок вокруг областей резкого контраста интенсивности в восстановленном изображении. (Пример исключил вызывной сигнал, связанный с кромкой, используя опцию 'circular' с imfilter при создании моделируемого размытого изображения.) Чтобы достичь более удовлетворительного результата, перезапустите операцию, экспериментируя с PSF разных размеров. Восстановленный PSF, возвращенный каждым деконволюцией, может также предоставить ценные подсказки при оптимальном размере PSF.

INITPSF = ones(size(PSF));
[J P] = deconvblind(Blurred,INITPSF,30);
figure
imshow(J)
title('Restored Image')

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

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

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

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

Чтобы создать массив весов, создайте массив того же размера, что и изображение, и присвойте значение 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. The axes 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. The axes with title Newly Deblurred Image contains an object of type image.

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

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

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

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

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

Элемент

Описание

output{1}

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

output{2}

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

output{3}

Изображение, произведенное следующей последней итерацией

output{4}

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

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

См. также

|

Похожие примеры

Подробнее о