Используйте deconvblind
функция для удаления изображения с помощью алгоритма деконволюции вслепую. Алгоритм максимизирует вероятность того, что полученное изображение, когда оно свернуто с полученным PSF, является образцом размытого изображения, принимая статистику пуассоновского шума. Алгоритм слепой деконволюции может использоваться эффективно, когда не известна информация о искажении (размытие и шум). deconvblind
функция восстанавливает изображение и PSF одновременно, используя итерационный процесс, подобный ускоренному, демпфированному алгоритму Люси-Ричардсона.
deconvblind
функцию, так же как и deconvlucy
function, реализует несколько адаптаций к исходному алгоритму максимального правдоподобия Люси-Ричардсон, который решает сложные задачи восстановления изображений. Используя эти адаптации, вы можете
Уменьшите эффект шума на восстановление
Учитывайте неоднородное качество изображения (например, плохие пиксели)
Указатель камеры считывания шума
Для получения дополнительной информации об этих адаптациях смотрите Адаптацию деконволюции Люси-Ричардсон для различных искажений изображений. 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 важнее, чем значения, которые он содержит, можно обычно задать массив 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 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')
The deconvblind
функция по умолчанию выполняет несколько итераций процесса деблёрринга. Можно остановить обработку после определенного количества итераций, чтобы проверить результат, а затем перезапустить итерации из точки, где обработка остановлена. Чтобы использовать эту функцию, вы должны передать как размытое изображение, так и PSF в качестве массивов ячеек, например {Blurred}
и {INITPSF}
.
The deconvblind
функция возвращает выходное изображение и восстановленный PSF в виде массивов ячеек. Выходное изображение массива ячеек содержит эти четыре элемента:
Элемент | Описание |
---|---|
| Исходное входное изображение |
| Изображение, произведенное последней итерацией |
| Изображение, произведенное следующей последней итерацией |
| Внутренняя информация, используемая |
Выходной массив ячеек PSF содержит аналогичные элементы.