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

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

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

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

Градиентный метод выделение контуров объектов на цветных изображениях

Если изображение представить двумерной функцией I = ƒ(x,y), то модуль градиента вычисляется за выражением

Одним из свойств градиента является то, что он всегда направлен в сторону возрастания функции в точке с координатами (x,y).

При практической реализации этого подхода производные аппроксимируются разностями значений пикселей. Представим некоторую локальную окрестность в виде

z1 z2 z3
z4 z5 z6
z7 z8 z9

Тогда производная по представляется в виде

Тогда производная по представляется в виде

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

Пример. Представим реализацию рассмотренного выше подхода для выделения выделение контуров объектов. Считаем и визуализируем некоторое изображение.

I=imread('zhaba.bmp');

Выделим только одну цветовую компоненту, поскольку рассмотренный выше подход работает с полутоновыми изображениями, которые представлены одной цветовой плоскостью.

I=I(:,:,1);
I=double(I)./255;
figure,imshow(I);

Исходное изображение

Сформируем маску фильтра для выделения контуров объектов изображения.

f=fspecial('sobel')
f =

     1     2     1
     0     0     0
    -1    -2    -1

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

I_filtered_x=imfilter(I,f,'replicate');
figure,imshow(I_filtered_x);

Визуализация градиента по направлению без коррекции динамического диапазона

Полученное изображение I_filtered_x выходит за пределы динамического диапазона, поэтому его можно скорректировать.

I_filtered_x=I_filtered_x+min(min(I_filtered_x));
MN=min(min(I_filtered_x));
MX=max(max(I_filtered_x));
I_filtered_x=(I_filtered_x-MN)/(MX-MN);

figure,imshow(I_filtered_x);

Визуализация градиента по направлению y c коррекцией динамического диапазона

Полученное изображение I_filtered_y выходит за пределы динамического диапазона, поэтому его можно скорректировать.

MN=min(min(I_filtered_y));
MX=max(max(I_filtered_y));
I_filtered_y=(I_filtered_y-MN)/(MX-MN);
figure,imshow(I_filtered_y);

Визуализация градиента по направлению c коррекцией динамического диапазона

Далее сформируем градиент изображения на основе вычисленных градиентов по направлению x и y.
I_filtered=sqrt(I_filtered_x.^2+I_filtered_y.^2);
figure,imshow(I_filtered);

Градиент изображения без коррекции динамического диапазона

Полученное изображение I_filtered также выходит за пределы динамического диапазона, поэтому его можно скорректировать.

I_filtered=I_filtered+min(min(I_filtered));
MN=min(min(I_filtered));
MX=max(max(I_filtered));
I_filtered=(I_filtered-MN)/(MX-MN);
figure,imshow(I_filtered);

Градиент изображения с коррекцией динамического диапазона

Рассмотренный нами метод выделения контуров объектов может применяться для обработки полутоновых изображений.

Рассмотрим вопрос вычисления градиента изображений в цветовом пространстве RGB. Считаем и визуализируем исходное изображение.

L=imread('peppers.bmp');
L=double(L)./255;
figure,imshow(L);

Выполним фильтрацию по отдельным цветовым компонентам и сформируем из них результат в виде RGB изображения.

Итак, сначала выделим отдельные цветовые компоненты исходного изображения.

L_R=L(:,:,1); figure, imshow(L_R);

L_G=L(:,:,2);
figure, imshow(L_G);

L_B=L(:,:,3);
figure, imshow(L_B);

Градиент изображения без коррекции динамического диапазона

Полученное изображение I_filtered также выходит за пределы динамического диапазона, поэтому его можно скорректировать.

I_filtered=I_filtered+min(min(I_filtered));
MN=min(min(I_filtered));
MX=max(max(I_filtered));
I_filtered=(I_filtered-MN)/(MX-MN);
figure,imshow(I_filtered);

Градиент изображения с коррекцией динамического диапазона

Рассмотренный нами метод выделения контуров объектов может применяться для обработки полутоновых изображений.

Рассмотрим вопрос вычисления градиента изображений в цветовом пространстве RGB. Считаем и визуализируем исходное изображение

L=imread('peppers.bmp');
L=double(L)./255;
figure,imshow(L);

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

L_R=L(:,:,1);
figure, imshow(L_R);

L_G=L(:,:,2);
figure, imshow(L_G);

L_B=L(:,:,3);
figure, imshow(L_B);

Фильтрация по цветовой компоненте B изображения

L_B_filtered_x=imfilter(L_B,f,'replicate');	%фильтрация по направлению х
L_B_filtered_y=imfilter(L_B,f','replicate');	%фильтрация по направлению у
L_B_filtered=sqrt(L_B_filtered_x.^2+L_B_filtered_y.^2);
figure,imshow(L_B_filtered);		%визуализация отфильтрированной цветовой
%компоненты изображения

Результат объединения отдельных отфильтрированных цветовых компонент в одно RGB-изображение представлен на изображении внизу.

Выше была рассмотрена задача обнаружения контуров путем вычисления градиентов отдельных цветовых составляющих. Теперь же решим эту задачу через нахождение градиента непосредственно в цветовом пространстве RGB. Для этого используется функция colorgrad.

[VG, A, PPG]=colorgrad(L, T);

где L – исходное RGB изображение; Т – порог; VG – модуль RGB градиента; A – матрица углов; PPG – градиент, который получен сложением двух одномерных градиентов по отдельным цветовым составляющим.

Из проведенных выше экспериментов можно сделать следующий вывод. Метод обработки отдельных цветовых компонент проводит только грубое выделение контуров. Для получения более детальной обработки нужно использовать векторный метод.

Сегментация RGB изображений

Задача сегментации состоит в том, что на изображении необходимо выделить объект, цвет которого лежит в определенном диапазоне. Один из подходов к решению данной задачи состоит в том, что сначала необходимо указать область, содержащую цвета этого диапазона, который будет использоваться при сегментации. Далее каждый пиксель изображения классифицируется на основе вычисления расстояния от данного пикселя к.заданному диапазону в пространстве RGB.

Рассмотрим решение этой задачи на конкретном примере.

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

L=imread('peppers.bmp');
figure,imshow(L);

Для получения диапазона цветов, на основе которых будем выполняться сегментация, необходимо выделить область интереса.

mask=roipoly(L);
red=immultiply(mask,L(:,:,1));
green=immultiply(mask,L(:,:,2));
blue=immultiply(mask,L(:,:,3));
g=cat(3,red, green,blue);
figure,imshow(g);

Далее проводится анализ выделенной области на предмет получения среднеквадратических отклонений всех цветовых составляющих sd, которые будут использоваться для установки порога.

[M, N, K]=size(g);
I=reshape(g, M*N, 3);
idx=find(mask);
I=double(I(idx,1:3));
[C,m]=covmatrix(I);
d=diag(C);
sd=mean(sqrt(d));

После этого можно приступить к выполнению сегментации с помощью встроенной функции colorseg при разных порогах – sd,3*sd и при 5*sd.

E25=colorseg('euclidean',L,sd,m);
figure,imshow(E25);

E25=colorseg('euclidean',L,3*sd,m);
figure,imshow(E25);

E25=colorseg('euclidean',L,5*sd,m); figure,imshow(E25);

В функции colorseg в качестве меры сходства цветов использовалось евклидово расстояние. Однако для оценки сходства цветов можно использовать также и другие меры, например, расстояние Махаланобиса. Рассмотрим результаты, которые получены при использовании этой меры.

E25=colorseg('mahalanobis',L,sd,m);
figure,imshow(E25);

E25=colorseg('mahalanobis',L,3*sd,m);
figure,imshow(E25);

E25=colorseg('mahalanobis',L,5*sd,m);
figure,imshow(E25);

Выбор различных мер сходства цветов (евклидово расстояние или расстояние Махаланобиса) определяет методики отслеживания цветовых данных. А выбор порога (sd,3*sd и 5*sd) влияет на уровень выделения областей.

Литература.

Гонсалес Р., Вудс Р., Эддинс С. Цифровая обработка изображений в среде Matlab. Москва: Техносфера, 206. – 616 с.

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


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

Система Orphus

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