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