|
|
|||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||
| Вход | |||||||||||||||||||||||||||||||||
|
Раздел "Обработка сигналов и изображений\Image Processing Toolbox"
И.М.Журавель "Краткий курс теории обработки изображений" В оглавление \ К следующему разделу \ К предыдущему разделу Идентификация округлых предметов Рассмотрим задачу, основной целью которой будет идентификация округлых объектов с помощью функции bwboundaries. Содержание
Шаг 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: Определение округлости объектов.
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']);
|
|
Всероссийская научная конференция "Проектирование научных и инженерных приложений в среде MATLAB" (май 2002 г.)
|
||
| На первую страницу \ Сотрудничество \ MathWorks \ SoftLine \ Exponenta.ru \ Exponenta Pro | ||
| E-mail: | ||
| Информация на сайте была обновлена 11.05.2004 |
Copyright 2001-2004 SoftLine Co Наши баннеры |
|