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

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

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

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

Идентификация округлых предметов

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

Содержание
  • Шаг 1: Считывание изображения.
  • Шаг 2: Пороговая обработка изображения.
  • Шаг 3: Устранение шума.
  • Шаг 4: Поиск границ объектов изображения.
  • Шаг 5: Определение округлости объектов.
Шаг 1: Считывание изображения. Считаем данные из pills_etc.png. RGB=imread('pillsetc.png'); imshow(RGB);
Шаг 2: Пороговая обработка изображения.

Преобразуем исследуемое изображение в бинарное и таким образом подготовим его для применения 
функции bwboundaries, которая реализует выделение границ объектов.

I=rgb2gray(RGB);
threshold=graythresh(I);
bw=im2bw(I, threshold);
imshow(bw)
Шаг 3: Устранение шума.

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

% удаление всех объектов, содержащих меньше чем 30 пикселей
bw=bwareaopen(bw,30);
% заполнение пустот
se=strel('disk', 2);
bw=imclose(bw, se);
bw=imfill(bw,'holes');
imshow(bw)
Шаг 4: Поиск границ объектов изображения.

При решении этого вопроса будем рассматривать только внешние границы. 
Опция 'noholes' приводит к ускорению обработки с помощью функции bwboundaries 
и повышает достоверность выделения границ объектов изображения.

[B, L]=bwboundaries(bw, 'noholes');
% отображение матрицы меток и извлечение границ
imshow(label2rgb(L, @jet, [.5 .5 .5]))
hold on
for k=1:length(B)
  boundary=B{k};
  plot(boundary(:, 2), boundary(:, 1), 'w', 'LineWidth', 2)
end

Шаг 5: Определение округлости объектов.

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

metric=4*pi*area/perimeter^2.

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

Используем функцию regionprops для получения измерений площади для всех объектов. Отметим, что матрица меток, возвращаемая функцией bwboundaries, может повторно использоваться в функции regionprops.

stats=regionprops(L, 'Area', 'Centroid');
threshold=0.94;
% окружность границ
for k=1:length(B)
  % получение координат границ (X, Y), соответствующих метке 'k'
  boundary=B{k};
  % вычисление измерений на основе периметра объектов
  delta_sq=diff(boundary).^2;    
  perimeter=sum(sqrt(sum(delta_sq, 2)));
  % получение вычисленной площади, соответствующей метке 'k'
  area=stats(k).Area;
  % вычисление характеристики округлости metric
  metric=4*pi*area/perimeter^2;
  % отображение результатов
  metric_string=sprintf('%2.2f', metric);
  % маркирование объектов
  if metric>threshold
    centroid=stats(k).Centroid;
    plot(centroid(1), centroid(2), 'ko');
  end
  text(boundary(1, 2)-35, boundary(1, 1)+13, metric_string,'Color', 'y',...
       'FontSize', 14, 'FontWeight', 'bold');
end
title(['Metrics closer to 1 indicate that ',...
       'the object is approximately round']);

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


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

Система Orphus

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