MATLAB.Exponenta
MATLAB и Simulink на русском
Технологии разработки и отладки
		сложных технических систем

Обработка сигналов и изображений\image Processing Toolbox

И.М.Журавель "Краткий курс теории обработки изображений"

В оглавление \ К следующему разделу \ К предыдущему разделу

Восстановление изображений методом слепой деконволюции

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

Ключевые термины: Слепая деконволюция; восстановление изображений; функция протяженности точки PSF
Ключевые функции: deconvblind, edge, imdilate, imfilter

Содержание демонстрационного примера

Демонстрационный пример включает следующие шаги:

  • Шаг 1: Считывание изображения.
  • Шаг 2: Симуляция размытостей.
  • Шаг 3: Восстановление размытого изображения с использованием функции протяженности точки с различными параметрами.
  • Шаг 4: Повышение качества восстановления.
  • Шаг 5: Использование дополнительных ограничений для функции протяженности точки при восстановлении изображений.
Шаг 1: Считывание изображения.

На данном этапе приведем пример считывания яркостного полутонового изображения.

I=imread('cameraman.tif');
figure;imshow(I); title('Исходное изображение');

Шаг 2: Симуляция размытостей.

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

PSF=fspecial('gaussian', 7, 10);
Blurred=imfilter(I, PSF ,'symmetric', 'conv');
figure; imshow(Blurred);title('Размытое изображение');

Шаг 3: Восстановление размытого изображения с использованием функции протяженности точки с различными параметрами.

Для иллюстрации того, насколько важно иметь информацию о параметрах истинной функции протяженности точки, приведем три варианта восстановления.

В первом варианте восстановления (J1 и P1) используется малоразмерный массив UNDERPSF. Иными словами, предполагается, что функция протяженности точки является именно такой. Размер массива UNDERPSF является на 4 пикселя меньше по каждой размерности относительно размеров истинной функции протяженности точки.

UNDERPSF=ones(size(PSF)-4);
[J1 P1]=deconvblind(Blurred, UNDERPSF);
figure; imshow(J1); title('Восстановление с малоразмерной PSF');

Во втором варианте восстановления (J2 и P2) используется массив единиц OVERPSF, размерность которого по обоим направлениям на 4 пикселя больше истинной размерности функции протяженности точки PSF.

OVERPSF=padarray(UNDERPSF, [4 4], 'replicate', 'both');
[J2 P2]=deconvblind(Blurred, OVERPSF);
figure;imshow(J2); title('Восстановление с большими размерами PSF');

В третьем варианте восстановления (J3 и P3) используется массив единиц INITPSF, размерность которого аналогична размерности истинной PSF.

INITPSF=padarray(UNDERPSF, [2 2], 'replicate', 'both');
[J3 P3]=deconvblind(Blurred, INITPSF);
figure; imshow(J3); title('Восстановление с INITPSF');

Анализ восстановления PSF.

Во всех трех вариантах восстановления использовалась функция протяженности точки PSF. Следующие изображения демонстрируют анализ восстановления истинных параметров функции протяженности точки PSF на основе рассуждений с использованием догадок.

Истинная PSF в виде гауссовского фильтра имеет максимальное значение в центре (белый цвет) и убывает по мере отдаления от него.

figure;
subplot(221);imshow(PSF, [], 'notruesize');
title('Истинная PSF');

Функция протяженности точки P1, полученная при первом восстановлении, явно не соответствует истинному размеру. Это приводит к сильному искажению сигнала, особенно на краях. В результате, на обработанном изображении не будет достигнуто нужного уровня улучшения.

subplot(222); imshow(P1, [] ,'notruesize');
title('Восстановленная малоразмерная PSF');

Функция протяженности точки P2, полученная при втором восстановлении, приводит к очень большим размытостям на краях объектов изображения. Это говорит о том, что восстановление нужно проводить с функцией протяженности точки PSF, размеры которой будут меньше. Тогда, соответственно, искажения на результирующем изображении будут меньше и не так заметны.

subplot(223);imshow(P2, [] ,'notruesize');
title('Восстановление с большими размерами PSF');

И, наконец, функция протяженности точки P3, полученная при третьем восстановлении, представляет собой нечто среднее между P1 и P2. Массив P3 наиболее похож на истинную функцию протяженности точки PSF. И соответственно, результирующее изображение является наилучшим по качеству.

subplot(224); imshow(P3, [], 'notruesize');
title('Восстановленная истинная PSF');

Шаг 4: Повышение качества восстановления.

Искажения в восстановленном изображении J3 наиболее заметны в областях с высоким контрастом и вдоль границ объектов изображения. Рассмотрим методы понижения этих искажений с использованием так называемых взвешенных функций. В процессе восстановления изображения и функции протяженности точки PSF алгоритм присваивает каждому пикселю некоторый вес в соответствии с массивом WEIGHT. В нашем примере обработка начинается с обнаружения "высококонтрастных" пикселей с использованием функции края edge. Методом проб и ошибок определяется нужный порог. В нашем случае он равен 0.3.

WEIGHT=edge(I, 'sobel', .3);

Для расширения области используется функция imdilate и дискообразные структурные элементы. se=strel('disk', 2);

WEIGHT=1-double(imdilate(WEIGHT, se));

Далее применяются морфологические операции закрытия пикселей на краях и присвоение им значения 0.

WEIGHT([1:3 end-[0:2]], :)=0;
WEIGHT(:, [1:3 end-[0:2]])=0;
figure; imshow(WEIGHT);title('Массив весов');

Теперь при проведении операции восстановления изображения будет применяться функция deconvblind вместе с массивом весов WEIGHT, что приведет к увеличению числа итераций (до 30). Таким образом подавляются почти все искажения, которые были на восстановленном изображении.

[J P]=deconvblind(Blurred, INITPSF, 30, [], WEIGHT);
figure; imshow(J); title('Восстановленное изображение');

Шаг 5: Использование дополнительных ограничений для функции протяженности точки при восстановлении изображений.

В этом примере рассмотрим использование некоторых дополнительных ограничений при формировании функции протяженности точки PSF. Зададим некоторую функцию FUN, которая возвращает модифицированный массив PSF и который, в свою очередь, применяется в функции deconvblind. В этом примере функция FUN модифицирует массив PSF, проводя коррекцию ее размеров. Отметим, что эта операция не приводит к изменению значений в центре функции протяженности точки PSF.

str='padarray(PSF(P1+1:end-P1, P2+1:end-P2), [P1 P2])';
FUN=inline(str, 'PSF', 'P1', 'P2');

Далее, как было сказано ранее, FUN используется в функции deconvblind.

В этом примере исходные размеры PSF, OVERPSF, являются на 4 пикселя больше от истинного значения. P1=2 и P2=2 являются исходными параметрами в FUN при поиске истинного значения функции протяженности точки PSF.

[JF PF]=deconvblind(Blurred, OVERPSF, 30, [], WEIGHT, FUN, 2, 2);
figure; imshow(JF);title('Восстановленное изображение');

При данных параметрах получим результат, который очень похож на результат, полученный на Шаге 4.

Когда в качестве исходной взять функцию протяженности точки PSF с очень большими размерами, тогда получим результат аналогичный Шагу 3.

В оглавление \ К следующему разделу \ К предыдущему разделу


Поиск по сайту:

Система Orphus

Яндекс.Метрика