Функции Image Toolbox / bwboundaries.php
.htmСписок функций Image Processing Toolbox. Описание функции BWBOUNDARIES Семинары Обучение Лицензирование Разработка Подписка Форум Регистрация Matlab Toolboxes Simulink Blocksets Femlab Полезное Вход Обработка сигналов и изображений\image Processing ToolboxСписок функций Image Processing Toolbox: Сегментация изображений
В оглавление \ К следующему разделу \ К предыдущему разделу
BWBOUNDARIES Отслеживание локальных границ на бинарном изображении Синтаксис:
B=bwboundaries(BW) B=bwboundaries(BW, CONN) B=bwboundaries(BW, CONN, options) [B L]=bwboundaries(...) [B L N A]=bwboundaries() Описание:
Функция B=bwboundaries(BW) отслеживает наружные границы объекта на бинарном изображении BW. Функция bwboundaries позволяет обрабатывать различные объекты, в том числе объекты, которые являются включенными в другие объекты. Исходный массив BW должен быть бинарным изображением, где ненулевые пиксели соответствуют объекту, а нулевые - фону. Рисунок внизу демонстрирует возможные варианты расположения объектов.
Функция bwboundaries возвращает массив B с размерностью Px1, где P является числом объектов и отверстий. Каждый элемент массива содержит матрицу с размерностью Qx2. Каждая строка этой матрицы содержит координаты строки и столбца граничного пикселя. Q является числом граничных пикселей соответствующей области.
Функция B=bwboundaries(BW, CONN) для определения границ объектов, которые находятся внутри других объектов, использует описание связности. Параметр связности CONN может принимать следующие скалярные значения.
CONN Описание 4 4-связная окрестность 8 8-связная окрестность. Устанавливается по умолчанию. Функция B=bwboundaries(BW, CONN, options) при обработке использует аргумент options, который может принимать одно из следующих значений.
option Описание 'holes' Поиск для обоих объектов и границ отверстий. 'noholes' Поиск только границ объекта (внешнего и внутреннего). Этот параметр обеспечивает улучшенную обработку. Функция [B, L]=bwboundaries(...) возвращает матрицу меток L в качестве второго дополнительного аргумента. Объекты и отверстия являются мечеными. Параметр L представляет собой двумерный массив неотрицательных целых чисел, которые отображают соседние окрестности. Число объектов и отверстий, представленных в L равно max(L(:)). Нулевые значения элементов соответствуют фону.
Функция [B, L, N, A]=bwboundaries(...) возвращает N - число используемых объектов, A - смежные матрицы. Первые N элементов в B являются границами объекта. Массив A описывает объект, вложенный в объект. A - это квадратная разреженная логическая матрица со стороной длиною max(L(:)), чьи строки и столбцы описывают позиции границ, хранящихся в B.
Закрытые границы B{m} могут быть найдены с использованием A следующим образом:
enclosing_boundary=find(A(m,:));
enclosed_boundaries=find(A(:,m));
Требования к исходным данным.
BW должен быть не разреженным двумерным логическим или числовым массивом вещественных чисел. Данные L и N имеют формат представления данных double. Массив A является логическим и разреженным.
Примеры.
Пример 1.
Считаем и обработаем методом пороговой бинаризации полутоновое изображение. Отобразим отмеченные объекты с использованием colormap, на сером фоне белым отображены границы.
I=imread('rice.png'); BW=im2bw(I, graythresh(I)); [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 Пример 2. Считаем и отобразим на мониторе бинарное изображение. Поверх изображения отобразим контуры объектов. Отобразим также текст, показывая номер области (на основании матрицы меток). Дополнительно отобразим смежные матрицы с использованием функций MATLAB.
Часто изображения отображают с использованием инструмента zoom и считывания индивидуальных меток.
BW=imread('blobs.png'); [B, L, N, A]=bwboundaries(BW); imshow(BW); hold on; colors=['b' 'g' 'r' 'c' 'm' 'y']; for k=1:length(B), boundary=B{k}; cidx=mod(k, length(colors))+1; plot(boundary(:, 2), boundary(:, 1), colors(cidx), 'LineWidth',2); %randomize text position for better visibility rndRow=ceil(length(boundary)/(mod(rand*k, 7)+1)); col=boundary(rndRow, 2); row=boundary(rndRow, 1); h=text(col+1, row-1, num2str(L(row,col))); set(h, 'Color', colors(cidx), 'FontSize', 14, 'FontWeight', 'bold'); end figure; spy(A); Пример 3. Отобразим границы объекта красным, а отверстий зеленым цветом. BW=imread('blobs.png'); [B, L, N]=bwboundaries(BW); imshow(BW); hold on; for k=1:length(B), boundary = B{k}; if(k > N) plot(boundary(:,2), boundary(:,1), 'g','LineWidth',2); else plot(boundary(:,2), boundary(:,1), 'r','LineWidth',2); end end Пример 4. Отобразим границы внешнего объекта красным (пустая строка смежной матрицы соответствует объекту) и его отверстия зеленым цветом. BW=imread('blobs.png'); [B, L, N, A]=bwboundaries(BW); imshow(BW); hold on; for k=1:length(B), if(~sum(A(k, :))) boundary=B{k}; plot(boundary(:,2), boundary(:,1), 'r','LineWidth',2); for l=find(A(:,k))' boundary = B{l}; plot(boundary(:,2), boundary(:,1), 'g','LineWidth',2); end end end Сопутствующие функции: BWTRACEBOUNDARY, BWLABEL, BWLABELN.
В оглавление \ К следующему разделу \ К предыдущему разделу
I Всероссийская научная конференция "Проектирование научных и инженерных приложений в среде MATLAB" (май 2002 г.)
II Всероссийская научная конференция "Проектирование научных и инженерных приложений в среде MATLAB" (май 2004 г.) На первую страницу \ Сотрудничество \ MathWorks \ SoftLine \ Exponenta.ru \ Exponenta Pro E-mail: matlab@exponenta.ru Информация на сайте была обновлена 14.05.05 Copyright 2001-2005 SoftLine Co
Наши баннеры hotlog_js="1.0"; hotlog_r=""+Math.random()+"&s=58396&im=33&r="+escape(document.referrer)+"&pg="+ escape(window.location.href); document.cookie="hotlog=1; path=/"; hotlog_r+="&c="+(document.cookie?"Y":"N"); hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N") hotlog_js="1.2"; hotlog_r+="&wh="+screen.width+'x'+screen.height+"&px="+ (((navigator.appName.substring(0,3)=="Mic"))? screen.colorDepth:screen.pixelDepth) hotlog_js="1.3" hotlog_r+="&js="+hotlog_js; document.write("") >