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 на 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));

Алгоритмы

The bwboundaries функция реализует алгоритм трассировки Мура-Соседа, модифицированный критериями остановки Якоба. Эта функция основана на boundaries функция, представленная в первом издании Digital Image Processing Using MATLAB, Gonsalez, R. C., R. E. Woods, and S. L. Eddins, New Jersey, Pearson Prentice Hall, 2004.

Ссылки

[1] Gonsalez, R. C., R. E. Woods, and S. L. Eddins, Digital Image Processing Using MATLAB, New Jersey, Pearson Prentice Hall, 2004.

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

..

См. также

| | |

Представлено до R2006a
Для просмотра документации необходимо авторизоваться на сайте