- •281 И.М.Журавель "Краткий курс теории обработки изображений"
- •Типы изображений
- •Бинарные изображения: геометрические характеристики
- •Бинарные изображения
- •Ориентация
- •Кодирование с переменной длиной
- •Сложные объекты
- •Локальные вычисления и итеративная модификация
- •Системы получения рентгенографических изображений
- •Получение изображений с помощью радиоизотопов
- •Ультразвуковая диагностика
- •Использование эффекта ядерного магнитного резонанса (ямр) для получения изображений
- •Пример обработки рентгеновских биомедицинских изображений с использованием системы matlab
- •1) Методы растяжения; 2) гистограммные методы; 3) ранговые методы; 4) разностные методы; 5) методы преобразования локальных контрастов.
- •Приложение. Программа, реализующая оценивания визуального качества изображений по одному из изложенных выше методов (формулы (2)-(6))
- •Обзор методов цифровой обработки изображений
- •Моделирование разностных методов в среде matlab
- •Обзор методов цифровой обработки изображений: Методы растяжения
- •Обзор методов цифровой обработки изображений: Методы гистограммных преобразований
- •Обзор методов цифровой обработки изображений: Метод преобразования локальных контрастов
- •Адаптивное повышение контрастности изображений
- •Использование функции протяженности гистограммы
- •Энтропия изображения
- •Использование среднеквадратического отклонения значений яркостей элементов окрестности в методах контрастирования изображений
- •Нелинейное растяжение локальных контрастов
- •Анализ некоторых характеристик локальных окрестностей
- •Статистическое определение локального контраста
- •Фильтрация изображений: Алгоритмы сглаживания изображений
- •Сглаживание для аддитивной модели
- •Сглаживание для модели импульсных помех
- •Увеличение детальности изображений
- •Обнаружение деталей и их границ
- •Применения ранговых алгоритмов
- •Фильтрация изображений: Обобщенная линейная фильтрация
- •Деконволюция
- •Предварительная обработка изображений
- •1. Бейтс р., Мак-Доннелл м. Восстановление и реконструкция изображений: Пер. С англ.- м.: Мир, 1989. - 336. 2. Bracewell r.N. The Fourier Transform and its Applications. - n.Y.: McGraw-Hill, 1978.
- •Расширение границ изображений. Сверхразрешение.
- •Реконструкция размытых изображений в matlab
- •Границы изображений: Края и их обнаружение
- •Дифференциальные операторы
- •Дискретные аппроксимации
- •Выделение и локализация края
- •Классификация по ближайшему соседу
- •Классификация по ближайшей центроиде
- •Автоматическое формирование кластера
- •Кодирование и сжатие изображений
- •Применение в сейсмологии
- •Применение в биологии Электрокардиография
- •Применение на транспорте Распознавание автомобилей
- •Распознавание самолетов
- •Imshow(he), title('h&e изображение');
- •Шаг 2: Вычисление выборки цветов в цветовом пространстве l*a*b* для каждой локальной области.
- •Imshow(sample_regions(:, :, 2)), title('Пример красной области');
- •Шаг 3: Классификация каждого пикселя с использованием принципа ближайшей окрестности.
- •Шаг 4: Отображение результатов классификации по ближайшей окрестности.
- •Шаг 5: Отображение значений 'a*' и 'b*' отмеченных цветов.
- •Шаг 4: Улучшение цветных изображений
- •Изображение 2: Применение линейных конформных преобразований.
- •Изображение 4: Применение проекционных преобразований.
- •Изображение 5: Применение полиномиальных преобразований.
- •Шаг 2: Исследование отображения изображений с помощью линий сетки, окружностей и т.П.
- •Шаг 3: Достижение специальных эффектов на результирующем изображении с помощь использования метода частичных масок.
- •Шаг 4: Повторение эффекта на разных изображениях
- •Шаг 1: Первичное преобразование изображений.
- •Шаг 4: Реализация методов с параметрами 'circular' и 'symmetric'.
- •Image Acquisition Toolbox, хранятся в виде mat-файла pendulum.Mat.
- •Гранулометрия
- •Параллельные лучи - реконструкция фантома головы на основании проекционных данных.
- •Веерные лучи - вычисление синтезированных проекций.
- •Xlabel('Веерный поворот угла (в градусах) ')
- •Веерные лучи - реконструкция фантома головы на основании проекционных данных.
- •Сегментация методом управляемого водораздела
- •Шаг 3: Маркировка объектов переднего плана.
- •Шаг 4: Вычисление маркеров фона.
- •Реконструкция изображений с использованием регуляризационного фильтра
- •Восстановление изображений с использованием метода Лаки-Ричардсона
- •Шаг 5: Обработка шумовой составляющей.
- •Шаг 8: Моделирование взвешенного массива (массив weight).
- •Шаг 9: Моделирование функции протяженности точки psf.
- •Некоторые подходы к улучшению визуального качества изображений с затемненными участками.
- •Шаг 3. Арифметические операции с изображениями.
- •Шаг 4. Растяжение динамического диапазона интенсивностей пикселей изображения.
- •Реализация некоторых методов видоизменения гистограмм в системе Matlab
- •Шаг 3: Экспоненциальное преобразование гистограммы.
- •Шаг 4: Преобразование гистограммы по закону Рэлея.
- •Шаг 5: Преобразование гистограммы по закону степени .
- •Шаг 6: Гиперболическое преобразование гистограммы.
- •Шаг 3: Использование медианного фильтра для устранения импульсного шума.
- •Шаг 4: Подавление шумовой составляющей с использованием операции сглаживания.
- •Шаг 5: Пороговый метод подавления шумов.
- •Шаг 6: Низкочастотная фильтрация с использованием шумоподавляющих масок.
Шаг 4: Отображение результатов классификации по ближайшей окрестности.
Матрица меток содержит цветные метки для каждого пикселя на изображении. Матрица меток используется для разделения объектов на исходном изображении по цветах.
rgb_label=repmat(label, [1 1 3]);
segmented_images=repmat(uint8(0), [size(fabric), nColors]);
for count=1:nColors
color=fabric;
color(rgb_label~=color_labels(count))=0;
segmented_images(:, :, :, count)=color;
end
imshow(segmented_images(:, :, :, 2)), title('Красные объекты');
imshow(segmented_images(:, :, :, 3)), title('Зеленые объекты');
imshow(segmented_images(:, :, :, 4)), title('Фиолетовые объекты');
imshow(segmented_images(:, :, :, 5)), title('Красно-фиолетовые объекты');
imshow(segmented_images(:, :, :, 6)), title('Желтые объекты');
Шаг 5: Отображение значений 'a*' и 'b*' отмеченных цветов.
Покажем, как производится разделение различных групп цветов на основе классификации по принципу ближайшей окрестности и их отображение в системе 'a*' и 'b*'.
purple=[119/255 73/255 152/255];
plot_labels={'k', 'r', 'g', purple, 'm', 'y'};
figure
for count=1:nColors
plot(a(label==count-1),b(label==count-1),'.','MarkerEdgeColor', ...
plot_labels{count}, 'MarkerFaceColor', plot_labels{count});
hold on;
end
title('Размещение сегментированных пикселей в пространстве ''a*b*'' ');
xlabel('''a*'' values');
ylabel('''b*'' values');
Обнаружение
вращений и масштабных искажений на
изображении
Когда известна информация относительно искажений изображения, которые заключаются в вращении и изменении масштаба, тогда для обработки применяют функцию cp2tform. Эта функция служит для восстановления изображений.
Содержание:
Шаг 1: Считывание изображения.
Шаг 2: Изменение размеров изображения.
Шаг 3: Вращение изображения.
Шаг 4: Выбор контрольных точек.
Шаг 5: Предварительные преобразования.
Шаг 6: Определение масштаба и угла.
Шаг 7: Восстановление изображения.
Шаг 1: Считывание изображения.
Считаем изображение в рабочее пространство.
I=imread('cameraman.tif');
imshow(I)
Шаг 2: Изменение размеров изображения.
scale=0.6;
J=imresize(I, scale); % Изменение масштаба.
Шаг 3: Вращение изображения.
theta=30;
K=imrotate(J, theta); % Изменение угла.
figure, imshow(K)
Шаг 4: Выбор контрольных точек.
Выберем контрольные точки с помощью Control Point Selection Tool.
input_points=[129.87 141.25; 112.63 67.75];
base_points=[135.26 200.15; 170.30 79.30];
cpselect(K,I, input_points, base_points);
Запишем контрольные точки, выбирая в меню File опцию Save Points to Workspace.
Также перезапишем переменные input_points и base_points.
Шаг 5: Предварительные преобразования.
Найдем структуру TFORM, которая согласуется с контрольными точками.
t=cp2tform(input_points, base_points, 'linear conformal');
После выполнения шагов 6 и 7, снова повторяются шаги 5-7,
только взамен опции 'linear conformal' используется 'affine'.
Это приводит к улучшению результатов.
Шаг 6: Определение масштаба и угла.
Структура TFORM содержит матрицу преобразований t.tdata.Tinv.
После того как стали известны типы искажений (вращение и масштабирование),
проводят операции по восстановлению масштаба и угла.
Let sc=s*cos(theta)
Let ss=s*sin(theta)
Тогда, Tinv=t.tdata.Tinv=[sc -ss 0;
ss sc 0;
tx ty 1]
где параметры tx и ty являются сдвигом по x и y соответственно.
ss=t.tdata.Tinv(2, 1);
sc=t.tdata.Tinv(1, 1);
scale_recovered=sqrt(ss*ss+sc*sc)
theta_recovered=atan2(ss, sc)*180/pi
scale_recovered=
0.6000
theta_recovered=
29.3699
Итак, значение параметра scale_recovered находится в пределах 0.6, а значение параметра theta_recovered около 30.
Шаг 7: Восстановление изображения.
Для получения исходного изображения необходимо произвести обратные преобразования с использованием структуры TFORM. Также нужно знать размер исходного изображения.
Разрешительная способность восстановленного изображения будет немного ниже, чем на исходном. Уменьшение информации, а также внесенные искажения на восстановленном изображении, в сравнении с исходным, являются следствием проведенных преобразований.
D=size(I);
recovered=imtransform(K, t, 'XData', [1 D(2)], 'YData', [1 D(1)]);
% Сравнение восстановленного изображения и исходного.
figure, imshow(I)
title('исходное изображение')
figure, imshow(recovered)
title('восстановленное изображение')
Регистрация изображений с помощью нормированной кросс-корреляции
Иногда одни изображения являются подмножествами других. С помощью методов нормированной кросс-корреляции существует возможность определения их расположения и регистрации.
Ключевая концепция |
Нормированная кросс-корреляция, прозрачность |
Ключевые функции |
normxcorr2, max, ind2sub |
Обзор примеров
Приведенные примеры включают следующие шаги:
Шаг 1: Считывание изображения.
Шаг 2: Выбор подобласти для каждого изображения.
Шаг 3: Нормированная кросс-корреляция и поиск координат пиков.
Шаг 4: Поиск общих относительных различий между изображениями.
Шаг 5: Анализ подизображения, полученного из основного изображения.
Шаг 6: Отображение вырезанного изображения на пустом изображении с размерами исходного.
Шаг 7: Свойство прозрачности исходного изображения.
Шаг 1: Считывание изображения.
onion=imread('onion.png');
peppers=imread('peppers.png');
imshow(onion)
figure, imshow(peppers)
Шаг 2: Выбор подобласти для каждого изображения
Важной является процедура выбора похожей подобласти. Изображение sub_onion является тем эталоном, на основании которого производится поиск sub_peppers. Методы выбора этой подобласти делятся на итеративные и неитеративные.
% неитеративный
rect_onion=[111 33 65 58];
rect_peppers=[163 47 143 151];
sub_onion=imcrop(onion,rect_onion);
sub_peppers=imcrop(peppers,rect_peppers);
% или
% итеративный
[sub_onion,rect_onion]=imcrop(onion);
[sub_peppers,rect_peppers]=imcrop(peppers);
% отображение подизображений
figure, imshow(sub_onion)
figure, imshow(sub_peppers)
Шаг 3: Нормированная кросс-корреляция и поиск координат пиков
Вычисление нормированной кросс-корреляции и отображение ее поверхности. Пики матрицы кросс-корреляции, которые попали на подизображение (sub_images) свидетельствуют о наивысшей корреляции. Функция normxcorr2 работает только с полутоновыми изображениями, однако попробуем применить ее для обработки подизображений.
c=normxcorr2(sub_onion(:, :, 1), sub_peppers(:, :, 1)); figure, surf(c), shading flat
Шаг 4: Поиск общих относительных различий между изображениями Общие различия между изображениями характеризуются положением пиков в матрице кросс-корреляции, а также размерами и местонахождением подизображений.
% поиск на основании корреляции
[max_c, imax]=max(abs(c(:)));
[ypeak, xpeak]=ind2sub(size(c), imax(1));
corr_offset=[(xpeak-size(sub_onion, 2))
(ypeak-size(sub_onion, 1))];
% относительное месторасположение подизображений
rect_offset=[(rect_peppers(1)-rect_onion(1))
(rect_peppers(2)-rect_onion(2))];
% поиск на основании общих относительных различий
offset=corr_offset+rect_offset;
xoffset=offset(1);
yoffset=offset(2);
Шаг 5: Анализ подизображения, полученного из основного изображения
Подизображение на исходном изображении.
xbegin=xoffset+1;
xend=xoffset+size(onion, 2);
ybegin=yoffset+1;
yend=yoffset+size(onion, 1);
% Получение рассматриваемого подизображения и сравнение его с исходным
extracted_onion=peppers(ybegin:yend, xbegin:xend, :);
if isequal(onion, extracted_onion)
disp('onion.png получено из peppers.png')
end
Шаг 6: Отображение подизображения на пустом изображении с размерами исходного
Расположим подизображение на исходном изображении на основании анализа различий.
recovered_onion=uint8(zeros(size(peppers)));
recovered_onion(ybegin:yend, xbegin:xend, :)=onion;
figure, imshow(recovered_onion)
Шаг 7: Свойство прозрачности исходного изображения
Создание прозрачной (или полупрозрачной) маски для непрозрачного исходного изображения.
[m, n, p]=size(peppers);
mask=ones(m, n);
i=find(recovered_onion(:, :, 1)==0);
mask(i)=.2; % экспериментирование с различными значениями прозрачности
% наложение полупрозрачного рисунка
figure, imshow(peppers(:,:,1)) % отображение только красной составляющей
hold on
h=imshow(recovered_onion); % отображение recovered_onion
set(h, 'AlphaData', mask)
Наложение двух изображений
Приведем пример наложения последовательности нескольких изображений. Результат представляет собой наложение двух изображений, одно из которых представляет собой стационарный маятник, а другое - движущийся маятник.
Содержание:
Шаг 1: Захват фонового изображения.
Шаг 2: Обработка регистрируемых данных.
Шаг 1: Захват фонового изображения.
Произведем захват снимка и принимаем его в качестве фонового.
vidobj=videoinput('winvideo', 1, 'RGB24_320X240');
preview(vidobj)
pause(1)
background=getsnapshot(vidobj);
imshow(background);
Шаг 2: Обработка регистрируемых данных.
Полученные данные используем для обработки и отображения изображений в реальном масштабе
времени. Обработка заключается в вычислении линейной комбинации между изображениями.
pause(2);
set(gcf, 'DoubleBuffer', 'on');
vidobj.FramesPerTrigger=20;
start(vidobj)
% Вычисление линейной комбинации между текущим и фоновым изображениями.
current=getdata(vidobj, 1);
transparent=imlincomb(0.5, current, 0.5, background);
% Отображение обработанного изображения.
imshow(transparent);
% Повторение для всех изображений.
while (vidobj.FramesAvailable>0),
% Вычисление линейной комбинации между текущим и фоновым изображениями.
current=getdata(vidobj, 1);
transparent=imlincomb(0.5, current, 0.5, background);
% Отображение обработанного изображения.
imshow(transparent);
end
% Очистка рабочего пространства.
delete(vidobj)
clear vidobj
Технология повышения контрастности изображений
Пакет Image Processing Toolbox содержит несколько классических функций улучшения изображений. Эти функции являются очень эффективными при повышении контраста: imadjust, histeq, и adapthisteq. Приведем их сравнительный анализ при использовании для улучшения полутоновых и цветных изображений.
План последовательности действий
Шаг 1: Считывание изображения.
Шаг 2: Изменение размеров изображения.
Шаг 3: Улучшение полутонового изображения.
Шаг 4: Улучшение цветных изображений.
Шаг 1: Считывание изображений.
Считаем два полутоновых изображения: pout.tif и tire.tif. Также считаем индексное RGB-изображение: shadow.tif.
pout=imread('pout.tif');
tire=imread('tire.tif');
[X map]=imread('shadow.tif');
shadow=ind2rgb(X,map);
Шаг 2: Изменение размеров изображения.
Для более удобного сравнения изображений преобразуем их размеры так, чтобы они имели одинаковую ширину. Высота изображений изменится пропорционально в соответствии с исходным изображением.
width=210;
images={pout, tire, shadow};
for k=1:3
dim=size(images{k});
images{k}=imresize(images{k}, [width*dim(1)/dim(2) width], 'bicubic');
end
pout=images{1};
tire=images{2};
shadow=images{3};
Шаг 3: Улучшение полутоновых изображений.
Проведем сравнительный анализ эффективности использования следующих функций к улучшению изображений:
imadjust - увеличение контраста изображений путем изменения диапазона интенсивностей исходного изображения.
histeq - выполнение операции эквализации (выравнивания) гистограммы. В этом подходе увеличение контрастности изображения происходит путем преобразования гистограммы распределения значений интенсивностей элементов исходного изображения. Существуют также другие подходы к видоизменению гистограмм.
adapthisteq - выполнение контрастно-ограниченного адаптивного выравнивания гистограммы. Здесь методика повышения контрастности изображений базируется на анализе и эквализации гистограмм локальных окрестностей изображения.
pout_imadjust=imadjust(pout);
pout_histeq=histeq(pout);
pout_adapthisteq=adapthisteq(pout);
imshow(pout);
title('Original');
figure, imshow(pout_imadjust);
title('Imadjust');
figure, imshow(pout_histeq);
title('Histeq');
figure, imshow(pout_adapthisteq);
title('Adapthisteq');
tire_imadjust=imadjust(tire);
tire_histeq=histeq(tire);
tire_adapthisteq=adapthisteq(tire);
figure, imshow(tire);
title('Original');
figure, imshow(tire_imadjust);
title('Imadjust');
figure, imshow(tire_histeq);
title('Histeq');
figure, imshow(tire_adapthisteq);
title('Adapthisteq');
Проведем краткий анализ эффективности обработки изображений с помощью функций imadjust, histeq и adapthisteq. В основе этих функций лежат разные методы: в imadjust - преобразование диапазона яркостей элементов изображения, в histeq - эквализация гистограммы и в adapthisteq - адаптивное выравнивание гистограммы. Каждый из этих методов (функций) нацелен на устранение некоторого недостатка, поэтому может быть применен для эффективной обработки такого класса изображений, на которых есть такой тип искажений.
Один из критериев выбора того или иного метода может базироваться на анализе гистограммы распределения значений яркостей элементов изображения.
figure, imhist(pout), title('pout.tif');
figure, imhist(tire), title('tire.tif');
В качестве примера рассмотрим гистограммы изображений pout.tif и tire.tif. Гистограмма изображения pout.tif занимает только центральную часть возможного диапазона яркостей. Таким образом, для растяжения динамического диапазона можно использовать функцию imadjust. Гистограмма изображения tire.tif характеризуется неравномерностью распределения. Для выравнивания гистограммы можно применить функцию histeq.
