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

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

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

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

Анализ признаков объектов

Ранее уже отмечалось, что каждый объект изображения можно охарактеризовать набором признаков, которые могут служить основой для их анализа и распознавания. В приложении Image Processing Toolbox для вычисления признаков объектов используется функция imfeature.

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

  1. признаки типов изображений объекта;
  2. признаки размеров объекта;
  3. признаки определения площади объекта;
  4. признаки формы объекта;
  5. другие признаки.

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

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


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

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

[L num]=bwlabel(L,8);

Сформируем изображение самого объекта

feats=imfeature(L,'Image',8);
Image=feats(1).Image;      
figure, imshow(Image);


Изображение самого объекта

Сформируем изображение с “залитыми” дырами

feats=imfeature(L,'FilledImage',8);
FilledImage=feats(1).FilledImage; 
figure, imshow(FilledImage);


Изображение с “залитыми” дырами

Сформируем изображение “залитого” пикселями объекта выпуклого многоугольника, в который вписан объект:

feats=imfeature(L,'ConvexImage',8);
ConvexImage=feats(1).ConvexImage;
figure, imshow(ConvexImage);


Изображение “залитого” пикселями объекта выпуклого многоугольника, в который вписан объект

Довольно часто возникает необходимость описания габаритных размеров объекта различными способами. Для этого используются следующие опции – “BoundingBox”, ”ConvexHull”, ”Extrema”,”PixelList”. Рассмотрим использование этих опций на примере нашего исходного изображения.

  1. Получение координат прямоугольника, ограничивающего объект.
    feats=imfeature(L,'BoundingBox',8);
    
    feats = 
    
    		BoundingBox: [31.5000 37.5000 205 181]
    
    Результат представлен в виде массива [x y width height] , где (x,y) – координаты левого верхнего угла прямоугольника, width – ширина, height – высота прямоугольника.

    Используя код

    line([BoundingBox (1) BoundingBox (1)+ BoundingBox (3) BoundingBox (1)+ BoundingBox (3)
    	BoundingBox (1) BoundingBox (1)],[ BoundingBox (2)  BoundingBox (2)
    	BoundingBox (2)+ BoundingBox (4)  BoundingBox (2)+ BoundingBox (4) BoundingBox (2)]);
    

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


    Прямоугольник, ограничивающий объект

  2. Получение координат выпуклого многоугольника, в который вписан объект. Для этого используется опция “ConvexHull”.
    feats=imfeature(L,'ConvexHull',8);
    ConvexHull=feats.ConvexHull;
    

    Результат представляется в виде матрицы, каждая строка которой содержит (x,y) координаты вершин описанного выше многоугольника.

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

    line(ConvexHull(:,1),ConvexHull(:,2))


    Выпуклый многоугольник, в который вписан объект

  3. Опция “Extrema” позволяет получить экстремальные координаты объекта. Результат представлен матрицей, которая содержит все экстремальные координаты объекта.
    feats=imfeature(L,'Extrema',8);

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

  4. Для получения списка всех пикселей объекта используется опция “PixelList”.
    feats=imfeature(L,'PixelList',8);
    PixelList=feats.PixelList;
    

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

    [q w]=size(PixelList);
    for i=1:q;
            L(PixelList(i,2),PixelList(i,1))=0.5;
    end;
    figure, imshow(L);
    

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

  1. Использование опции “Area” приводит к вычислению площади, числовое значение которой равно количеству пикселей объекта
    feats=imfeature(L,'Area',8);
    Area=feats.Area
    Area =
    
    17959
    
  2. Для вычисления полной площади, числовое значение которой соответствует общему количеству пикселей объекта и пикселей дыр в объекте, что равно также площади изображения FilledImage, используется опция “FilledArea”.
    feats=imfeature(L,'FilledArea',8);
    FilledArea=feats.FilledArea 
    
    FilledArea =
    
    20670
    
  3. Существует возможность вычисления выпуклой площади. Под выпуклой площадью имеется ввиду площадь выпуклого многоугольника, в который вписан объект.
    feats=imfeature(L,'ConvexArea',8);
    ConvexArea=feats.ConvexArea
    
    ConvexArea =
    
           25278
    

    Эта площадь соответствует площади изображения ConvexImage.

Среди основных морфометрических признаков следует выделить также:

  1. Центр масс объекта, который определяется с помощью опции “Centroid”. Результат представляется двухэлементным массивом, который содержит координаты центра масс в пространственной системе координат.
    feats=imfeature(L,'Centroid',8);
    Centroid=feats.Centroid    
    
    Centroid =
    
      128.4878  128.8137
    
  2. Эквивалентный диаметр, который определяется с помощью опции “EquivDiameter”.
    feats=imfeature(L,'EquivDiameter',8);
    EquivDiameter=feats.EquivDiameter
    
    EquivDiameter =
    
      151.2154
    
  3. Длина максимальной оси инерции объекта определяется с помощью опции “MajorAxisLength”.
    feats=imfeature(L,'MajorAxisLength',8);
    MajorAxisLength=feats.MajorAxisLength
    
    MajorAxisLength =
    
      223.9145
    
  4. Минимальной оси инерции объекта определяется с помощью опции “MinorAxisLength”.
    feats=imfeature(L,'MinorAxisLength',8);
    MinorAxisLength=feats.MinorAxisLength
    
    MinorAxisLength =
    
      145.7130
    
  5. Для определения ориентации объекта, которая определяется углом (в градусах) между максимальной осью инерции и осью Х, используется опция “Orientation”.
    feats=imfeature(L,'Orientation',8);
    Orientation=feats.Orientation
    
    Orientation =
    
       46.1221
    
  6. Для вычисления числа Эйлера, которое определяется разницей между числом объектов и числом дыр в них, используется опция “EulerNumber”.
    feats=imfeature(L,'EulerNumber',8);
    EulerNumber=feats.EulerNumber
    
    EulerNumber =
    
        –2
    

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

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

L1=imread('krug.bmp');
figure, imshow(L1);

L2=imread('kv.bmp');
figure, imshow(L2);

Код для вычисления соответствующих коэффициентов формы выглядит следующим образом –

  1. для вычисления коэффициента выпуклости, который равен отношению площади к выпуклой площади объекта
    feats=imfeature(L,'Solidity ',8);
    Solidity=feats.Solidity
    
  2. для вычисления коэффициента заполнения, который равен отношению площади объекта к площади ограничивающего прямоугольника
    feats=imfeature(L,'Extent ',8);
    Extent=feats.Extent
    
  3. для вычисления эксцентриситета эллипса с главными моментами инерции, равными главным моментам инерции объекта
    feats=imfeature(L,'Eccentricity',8);
    Eccentricity=feats.Eccentricity
    

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

Коэффициенты формы Изображение круга Изображение квадрата
‘Solidity’ 0.9806 1
‘Extent’ 0.7800 1
‘Eccentricity’ 0.0042 0.03323

Проанализируем представленные выше результаты более детально.

Коэффициент выпуклости (‘Solidity’), который как было сказано выше, равен отношению площади к выпуклой площади объекта. Если объект представлены кругом или квадратом, то значение этого коэффициента принимает значение, которое равно единице. При вычислениях эти значения могут несколько отличаться от единицы, что объясняется ошибками дискретизации при представлении объектов.

Второй параметр (‘Extent’) – коэффициент заполнения – определяется отношением площади объекта к площади ограничивающего прямоугольника. Естественно, что для квадрата этот коэффициент будет равен единице. Для круга этот коэффициент определяется отношением площади круга к площади ограничивающего прямоугольника (2R)2, что равно

.

Как уже отмечалось ранее, при вычислениях коэффициента заполнения для реальных или симулированных объектов (в данном случае круга), его значения могут отличаться от расчетных. Это объясняется ошибками дискретизации, искажениями формы и т.п.

Третий коэффициент формы – эксцентриситет (‘Eccentricity’) – характеризует степень сплюснутости объекта. Определяется он выражением

где a – большая полуось орбиты, b – малая полуось орбиты.

Для окружности эксцентриситет равен нулю, для параболы он равен единице.

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

Пример.

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

clear;
L=imread('medimage.jpg');
figure, imshow(L);

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

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

Это можно сделать также и другим способом – для преобразования полноцветных изображений в полутоновые в системе Matlab существует функция rgb2gray.

Выделим объекты интереса, которые отображены на полутоновом изображении темным цветом. Для этого будем использовать функцию бинаризации по заданным цветам roicolor. Порог бинаризации лучше выбирать на основе гистограммы полутонового изображения.

imhist(L)

Из гистограммы полутонового изображения видно, что областей с низким уровнем яркости на изображении сравнительно немного и они соответствуют нашим объектам интереса. Поэтому пороговое значение можно выбрать на уровне 0,5 .

BW=roicolor(L,0,.5);
figure, imshow(BW);

Результат бинаризации представлен на изображении внизу.

Из полученного изображения видно, что кроме объектов интереса на нем представлены также другие включения. Их необходимо удалить. Ранее уже рассматривались некоторые подходы к решению подобных задач, например, фильтрация. Теперь же решим эту задачу иначе. Сначала вычислим площади всех объектов на изображении.

[BW1 num]=bwlabel(BW,8);
feats=imfeature(BW1,'Area',8);
Areas=zeros(num);
for i=1:num;
 Areas(i)=feats(i).Area;
end;

При дальнейшем анализе будем учитывать только эти объекты, площадь которых больше некоторого порогового уровня.

idx=find(Areas>10);
BW=ismember(BW1,idx);
figure, imshow(BW);

На результирующем изображении представлены объекты, площадь которых выше указанного порогового уровня, в данном случае, 10 пикселей.

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

[BW1 num]=bwlabel(BW,8);

Далее необходимо вычислить площади объектов

feats=imfeature(BW1,'Area',8);

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

figure,hist([feats.Area]);

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

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


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

Система Orphus

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