|
|
||||||||||||||||||||||||||||||||
Вход |
Раздел "Обработка сигналов и изображений\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 Наши баннеры |