Рассмотрим задачу, основной целью которой будет идентификация округлых объектов с помощью функции 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 onfor k=1:length(B) boundary=B{k}; plot(boundary(:, 2), boundary(:, 1), 'w', 'LineWidth', 2)end