exponenta event banner

bwboundaries

Границы области трассировки в двоичном изображении

Описание

пример

B = bwboundaries(BW) отслеживает внешние границы объектов, а также границы отверстий внутри этих объектов, на двоичном изображении BW. bwboundaries также спускается в самые внешние объекты (родители) и отслеживает их детей (объекты, полностью окружённые родителями). Прибыль Bмассив ячеек с местоположениями граничных пикселей.

B = bwboundaries(BW,conn) отслеживает внешние границы объектов, где conn определяет соединение, используемое при трассировке родительских и дочерних границ.

пример

B = bwboundaries(BW,conn,options) отслеживает внешние границы объектов, где options является либо 'holes' или 'noholes', указывая, следует ли включать границы отверстий в другие объекты.

пример

[B,L]= bwboundaries(___) возвращает матрицу меток L где объекты и отверстия помечены.

пример

[B,L,n,A] = bwboundaries(___) прибыль n, количество найденных объектов и A, матрица смежности.

Примеры

свернуть все

Чтение изображения в градациях серого в рабочую область.

I = imread('rice.png');

Преобразование изображения в оттенках серого в двоичное изображение с помощью локального адаптивного порогового значения.

BW = imbinarize(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

Figure contains an axes. The axes contains 152 objects of type image, line.

Чтение двоичного изображения в рабочую область.

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 contains an axes. The axes contains 79 objects of type image, line, text.

Отображение матрицы смежности с помощью spy функция.

figure
spy(A);

Figure contains an axes. The axes contains an object of type line.

Чтение двоичного изображения в рабочую область.

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

Figure contains an axes. The axes contains 40 objects of type image, line.

Чтение изображения в рабочую область.

BW = imread('blobs.png');

Родительские границы отображаются красным цветом, а отверстия - зеленым.

[B,L,N,A] = bwboundaries(BW); 
figure; imshow(BW); hold on; 
% Loop through object boundaries  
for k = 1:N 
    % Boundary k is the parent of a hole if the k-th column 
    % of the adjacency matrix A contains a non-zero element 
    if (nnz(A(:,k)) > 0) 
        boundary = B{k}; 
        plot(boundary(:,2),... 
            boundary(:,1),'r','LineWidth',2); 
        % Loop through the children of boundary k 
        for l = find(A(:,k))' 
            boundary = B{l}; 
            plot(boundary(:,2),... 
                boundary(:,1),'g','LineWidth',2); 
        end 
    end 
end

Figure contains an axes. The axes contains 23 objects of type image, line.

Входные аргументы

свернуть все

Двоичное входное изображение, указанное как 2-D логическая или числовая матрица. BW должно быть двоичным изображением, где ненулевые пикселы принадлежат объекту, а нулевые пикселы составляют фон. На следующем рисунке показаны эти компоненты.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Пиксельная связность, указанная как одно из значений в этой таблице.

Стоимость

Значение

Двумерные связи

4-подключенные

Пикселы соединяются, если их края соприкасаются. Два соседних пикселя являются частью одного и того же объекта, если они оба включены и соединены вдоль горизонтального или вертикального направления.

8-подключенных

Пикселы соединяются, если их края или углы соприкасаются. Два соседних пикселя являются частью одного и того же объекта, если они оба включены и соединены вдоль горизонтального, вертикального или диагонального направления.

Типы данных: double

Определите, нужно ли искать родительские и дочерние границы:

Выбор

Значение

'holes'

Поиск границ объектов и отверстий. Это значение по умолчанию.

'noholes'

Поиск только границ объектов (родительских и дочерних). Это может обеспечить более высокую производительность.

Типы данных: char | string

Выходные аргументы

свернуть все

Координаты строк и столбцов граничных пикселей, возвращаемые в виде массива ячеек p-by-1, где p - количество объектов и отверстий. Каждая ячейка в массиве ячеек содержит матрицу q-by-2. Каждая строка матрицы содержит координаты строки и столбца граничного пикселя. q - количество граничных пикселей для соответствующей области.

Матрица меток смежных областей, возвращаемая как 2-D матрица неотрицательных целых чисел. K-й регион включает все элементы в L которые имеют значение k. Количество объектов и отверстий, представленных L равно max(L(:)). Нулевые элементы L составляют фон.

Типы данных: double

Число найденных объектов, возвращаемых как неотрицательное целое число.

Типы данных: double

Зависимости «родитель-потомок» между границами и отверстиями, возвращаемые в виде квадратной, разреженной логической матрицы класса double со стороной длины max(L(:)). Строки и столбцы A соответствуют позициям границ, хранящихся в B. Первое n ячейки в B являются границами объекта. A(i,j)=1 означает, что объект i является потомком объекта j. Границы, которые охватывают или окружены k-й границей, можно найти с помощью A следующим образом:

enclosing_boundary  = find(A(m,:));
enclosed_boundaries = find(A(:,m));

Алгоритмы

bwboundaries функция реализует алгоритм трассировки Мура-Соседа, модифицированный критериями остановки Джейкоба. Эта функция основана на boundaries функция представлена в первом издании «Digital Image Processing Using MATLAB» Гонсалеса, Р. К., Р. Э. Вудса и С. Л. Эддинса, Нью-Джерси, Пирсон Прентис Холл, 2004.

Ссылки

[1] Гонсалес, Р. К., Р. Э. Вудс и С. Л. Эддинс, Цифровая обработка изображений с использованием MATLAB, Нью-Джерси, Пирсон Прентис Холл, 2004.

Расширенные возможности

..

См. также

| | |

Представлен до R2006a