В этом примере показано, как использовать алгоритм Люси-Ричардсона для изображений deblur. Это может использоваться эффективно, когда функция рассеяния точки, PSF (размывающий оператор) известен, но минимальная информация доступна для шума. Размытое и шумное изображение восстанавливается итеративным, ускоренным, ослабленным алгоритмом Люси-Ричардсона. Можно использовать характеристики оптической системы как входные параметры, чтобы улучшить качество восстановления изображений.
Пример читает в изображении RGB и обрезках его, чтобы быть 256 256 3. deconvlucy
функция может обработать массивы любой размерности.
I = imread('board.tif'); I = I(50+(1:256),2+(1:256),:); figure; imshow(I); title('Original Image'); text(size(I,2),size(I,1)+15, ... 'Image courtesy of courtesy of Alexander V. Panasyuk, Ph.D.', ... 'FontSize',7,'HorizontalAlignment','right'); text(size(I,2),size(I,1)+25, ... 'Harvard-Smithsonian Center for Astrophysics', ... 'FontSize',7,'HorizontalAlignment','right');
Симулируйте реальное изображение, которое могло быть размыто из-за движения камеры или отсутствия особого внимания. Изображение могло также быть шумным из-за случайных воздействий. Пример симулирует размытость путем свертки к Гауссову фильтру с истинным изображением (использующий imfilter
). Гауссов фильтр затем представляет функцию рассеяния точки, PSF
.
PSF = fspecial('gaussian',5,5); Blurred = imfilter(I,PSF,'symmetric','conv'); figure; imshow(Blurred); title('Blurred');
Пример симулирует шум путем добавления Гауссова шума отклонения V
к размытому изображению (использующий imnoise
). Шумовое отклонение V
используется позже, чтобы задать параметр затухания алгоритма.
V = .002; BlurredNoisy = imnoise(Blurred,'gaussian',0,V); figure; imshow(BlurredNoisy); title('Blurred & Noisy');
Восстановите размытое и шумное изображение, обеспечивающее PSF, и использующий только 5 итераций (значение по умолчанию равняется 10). Выход является массивом того же типа как входное изображение.
luc1 = deconvlucy(BlurredNoisy,PSF,5);
figure;
imshow(luc1);
title('Restored Image, NUMIT = 5');
Получившиеся изменения образа с каждой итерацией. Чтобы исследовать эволюцию восстановления изображений, можно сделать развертку на шагах: сделайте набор итераций, смотрите результат, и затем возобновите итерации от того, где они были остановлены. Для этого входное изображение должно быть передано как часть массива ячеек. Например, запустите первый набор итераций путем передачи в {BlurredNoisy}
вместо BlurredNoisy
как входной параметр изображения.
luc1_cell = deconvlucy({BlurredNoisy},PSF,5);
В этом случае выход, luc1_cell
, становится массивом ячеек. Ячейка выход состоит из четырех числовых массивов, где первым является BlurredNoisy
отобразите, вторым является восстановленное изображение класса дважды, третий массив является результатом one-last итерации, и четвертый массив является внутренним параметром выполненного с помощью итераций набора. Второй числовой массив выходного массива ячеек, отобразите luc1_cell{2}
, идентично выходному массиву Шага 3, изображение luc1
, за возможным исключением их класса (ячейка выход всегда дает восстановленное изображение класса дважды).
Чтобы возобновить итерации, возьмите выход из предыдущего вызова функции, массив ячеек luc1_cell
, и передайте его в deconvlucy
функция. Используйте количество по умолчанию итераций (NUMIT
= 10). Восстановленное изображение является результатом в общей сложности 15 итераций.
luc2_cell = deconvlucy(luc1_cell,PSF);
luc2 = im2uint8(luc2_cell{2});
figure;
imshow(luc2);
title('Restored Image, NUMIT = 15');
Последнее изображение, luc2
, результат 15 итераций. Несмотря на то, что это более резко, чем более ранний результат 5 итераций, изображение разрабатывает "пестрый" внешний вид. Веснушки не соответствуют никаким действительным структурам (сравните его с истинным изображением), но вместо этого результат приспосабливания шума в данных слишком тесно.
Чтобы управлять шумовым усилением, используйте опцию затухания путем определения DAMPAR
параметр. DAMPAR
должен иметь тот же класс как входное изображение. Алгоритм ослабляет изменения в модели в областях, где различия малы по сравнению с шумом. DAMPAR
используемый здесь равняется 3 стандартным отклонениям шума. Заметьте, что изображение более сглаженно.
DAMPAR = im2uint8(3*sqrt(V));
luc3 = deconvlucy(BlurredNoisy,PSF,15,DAMPAR);
figure;
imshow(luc3);
title('Restored Image with Damping, NUMIT = 15');
Следующая часть этого примера исследует WEIGHT
и SUBSMPL
введите параметры функции deconvlucy, с помощью симулированного звездообразного изображения (для простоты & скорости).
Пример создает черное/белое изображение четырех звезд.
I = zeros(32); I(5,5) = 1; I(10,3) = 1; I(27,26) = 1; I(29,25) = 1; figure; imshow(1-I,[],'InitialMagnification','fit'); ax = gca; ax.Visible = 'on'; ax.XTickLabel = []; ax.YTickLabel = []; ax.XTick = [7 24]; ax.XGrid = 'on'; ax.YTick = [5 28]; ax.YGrid = 'on'; title('Data');
Пример симулирует размытость изображения звезд путем создания Гауссова фильтра, PSF
, и свертка к нему с истинным изображением.
PSF = fspecial('gaussian',15,3); Blurred = imfilter(I,PSF,'conv','sym');
Теперь симулируйте камеру, которая может только наблюдать часть изображений звезд (только размытость замечена). Создайте массив функции взвешивания, ВЕС, который состоит из единиц в центральной части Размытого изображения ("хорошие" пиксели, расположенные в пунктирных линиях) и нули в ребрах ("плохие" пиксели - те, которые не получают сигнал).
WT = zeros(32); WT(6:27,8:23) = 1; CutImage = Blurred.*WT;
Чтобы уменьшать вызов, сопоставленный с границами, примените функцию edgetaper с данным PSF.
CutEdged = edgetaper(CutImage,PSF); figure; imshow(1-CutEdged,[],'InitialMagnification','fit'); ax = gca; ax.Visible = 'on'; ax.XTickLabel = []; ax.YTickLabel = []; ax.XTick = [7 24]; ax.XGrid = 'on'; ax.YTick = [5 28]; ax.YGrid = 'on'; title('Observed');
Веса алгоритма каждое пиксельное значение согласно массиву ВЕСА при восстановлении изображения. В нашем примере только используются значения центральных пикселей (где ВЕС = 1), в то время как "плохие" пиксельные значения исключены из оптимизации. Однако алгоритм может поместить степень сигнала в местоположение этих "плохих" пикселей вне ребра представления камеры. Заметьте точность разрешенных звездообразных положений.
luc4 = deconvlucy(CutEdged,PSF,300,0,WT); figure; imshow(1-luc4,[],'InitialMagnification','fit'); ax = gca; ax.Visible = 'on'; ax.XTickLabel = []; ax.YTickLabel = []; ax.XTick = [7 24]; ax.XGrid = 'on'; ax.YTick = [5 28]; ax.YGrid = 'on'; title('Restored');
deconvlucy может восстановить субдискретизируемое изображение, учитывая более прекрасный произведенный PSF (более прекрасный ко временам SUBSMPL). Симулировать плохо разрешенное изображение и PSF, интервалы в качестве примера Blurred
отобразите и исходный PSF, два пикселя в одном, в каждой размерности.
Binned = squeeze(sum(reshape(Blurred,[2 16 2 16]))); BinnedImage = squeeze(sum(Binned,2)); Binned = squeeze(sum(reshape(PSF(1:14,1:14),[2 7 2 7]))); BinnedPSF = squeeze(sum(Binned,2)); figure; imshow(1-BinnedImage,[],'InitialMagnification','fit'); ax = gca; ax.Visible = 'on'; ax.XTick = []; ax.YTick = []; title('Binned Observed');
Восстановите субдискретизируемое изображение, BinnedImage
, с помощью субдискретизируемого PSF, BinnedPSF
. Заметьте что luc5
изображение отличает только 3 звезды.
luc5 = deconvlucy(BinnedImage,BinnedPSF,100); figure; imshow(1-luc5,[],'InitialMagnification','fit'); ax = gca; ax.Visible = 'on'; ax.XTick = []; ax.YTick = []; title('Poor PSF');
Следующий пример восстанавливает субдискретизируемое изображение (BinnedImage
), на этот раз с помощью более прекрасного PSF (заданный на SUBSMPL-times более прекрасная сетка). Восстановленное изображение (luc6
) разрешает положение звезд более точно. Отметьте, как это распределяет степень между этими двумя звездами в правом нижнем углу изображения. Это намекает на существование двух объектов высокой яркости, вместо одного, как в предыдущем восстановлении.
luc6 = deconvlucy(BinnedImage,PSF,100,[],[],[],2); figure; imshow(1-luc6,[],'InitialMagnification','fit'); ax = gca; ax.Visible = 'on'; ax.XTick = []; ax.YTick = []; title('Fine PSF');
deconvblind
| deconvlucy
| deconvreg
| deconvwnr