|
|
|||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||
| Вход | |||||||||||||||||||||||||||||||||
|
Раздел "Обработка сигналов и изображений\Image Processing Toolbox"
И.М.Журавель "Краткий курс теории обработки изображений" В оглавление \ К следующему разделу \ К предыдущему разделу Сегментация цветных изображений на основе цветового пространства L*a*b* Рассмотрим задачу, основной целью которой является идентификация и анализ различных цветов изображения в пространстве L*a*b*. Изображение получено с помощью пакета Image Acquisition Toolbox. Содержание
Шаг 1: Получение изображения. Считываем файл fabric.png, который представляет собой изображение некоторой материи. Для получения файла fabric.png можно использовать следующие функции пакета Image Acquisition Toolbox.
% Использование захватчика изображений, камеры Pulnix TMC-9700
% и получение данных в формате NTSC.
% vidobj=videoinput('matrox', 1, 'M_NTSC_RGB');
% Окно предварительного просмотра.
% preview(vidobj);
% Захват данных.
% fabric=getsnapshot(vidobj);
% imwrite(fabric, 'fabric.png', 'png');
% Удаление изменений.
% delete(vidobj)
% clear vidobj;
fabric=imread('fabric.png');
figure(1), imshow(fabric), title('Материя');
Шаг 2: Вычисление выборки цветов в цветовом пространстве L*a*b* для каждой локальной области. Существует возможность просмотра шести основных цветов изображения: фоновый цвет, красный, зеленый, пурпурный (фиолетовый), желтый и красно-фиолетовый (magenta). Отметим, что визуально эти цвета очень легко различаются между собой. Цветовое пространство L*a*b* (еще известное как CIELAB или CIE L*a*b*) позволяет четко отмечать эти визуальные различия. Цветовое пространство L*a*b* получено на основе трехцветных значений CIE XYZ. Пространство L*a*b* включает информацию о значении интенсивности 'L*', значении цветности 'a*' (показывает какой цвет выбран на красно-зеленой оси) и значении цветности 'b*' (показывает какой цвет выбран на голубо-желтой оси). Отметим, что при анализе цветов используются окрестности небольших размеров и при их вычислении берется усреднение в пространстве 'a*b*'. Эти цветовые метки можно использовать при классификации каждого пикселя. Для упрощения демонстрации примера, считаем координаты области, которые хранятся в MAT-file.
load regioncoordinates;
nColors=6;
sample_regions=false([size(fabric, 1) size(fabric, 2) nColors]);
for count=1:nColors
sample_regions(:, :, count)=roipoly(fabric, region_coordinates(:, 1, count), ...
region_coordinates(:, 2, count));
end
imshow(sample_regions(:, :, 2)), title('Пример красной области');
Преобразуем RGB-изображение материи в L*a*b*-изображение с использованием функций makecform и applycform.
cform=makecform('srgb2lab');
lab_fabric=applycform(fabric, cform);
Вычислим средние значения 'a*' и 'b*' для каждой области представленной roipoly.
Эти значения могут служить маркерами в пространстве 'a*b*'.
a=lab_fabric(:, :, 2);
b=lab_fabric(:, :, 3);
color_markers=repmat(0, [nColors, 2]);
for count=1:nColors
color_markers(count, 1)=mean2(a(sample_regions(:, : ,count)));
color_markers(count, 2)=mean2(b(sample_regions(:, :, count)));
end
Например, усреднение по красному цвету в цветовом пространстве 'a*b*' производится так
disp(sprintf('[%0.3f,%0.3f]', color_markers(2, 1), color_markers(2, 2)));
Шаг 3: Классификация каждого пикселя с использованием принципа ближайшей окрестности. Каждый цветовой маркер представляется некоторыми значениями 'a*' и 'b*'. Поэтому существует возможность классификации каждого пикселя изображения lab_fabric на основе вычисления евклидового расстояния между пикселем и цветовым маркером. Минимальное евклидовое расстояние соответствует минимальному расстоянию между рассматриваемыми пикселями и маркером. Например, если дистанция между двумя пикселями и красным цветовым маркером является минимальной, то пиксели будут отмечены как красные. Создадим массив, который содержит цветовые метки, т.е. 0=background, 1=red, 2=green, 3=purple, 4=magenta и 5=yellow.
color_labels=0:nColors-1;
Создадим матрицы с использованием принципа классификации по близлежащей окрестности.
a=double(a);
b=double(b);
distance=repmat(0, [size(a), nColors]);
Выполнение классификации
for count=1:nColors
distance(:, :, count)=((a-color_markers(count, 1)).^2+...
(b-color_markers(count, 2))^2).^0.5;
end
[value, label]=min(distance, [], 3);
label=color_labels(label);
clear value distance;
Шаг 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');
|
|
Всероссийская научная конференция "Проектирование научных и инженерных приложений в среде MATLAB" (май 2002 г.)
|
||
| На первую страницу \ Сотрудничество \ MathWorks \ SoftLine \ Exponenta.ru \ Exponenta Pro | ||
| E-mail: | ||
| Информация на сайте была обновлена 11.05.2004 |
Copyright 2001-2004 SoftLine Co Наши баннеры |
|