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 также убывает в наиболее удаленные объекты (родительские элементы) и прослеживает их дочерние элементы (объекты, полностью заключенные родительскими элементами). Возвращает 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

Считайте двухуровневое изображение в рабочую область.

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

Отобразите матрицу смежности использование функции spy.

figure
spy(A);

Считайте двухуровневое изображение в рабочую область.

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

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

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

Входные параметры

свернуть все

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

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | логический

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

Значение

Значение

Двумерные возможности соединения

4

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

8

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

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

Определите, искать ли и родительские и дочерние контуры, заданные как любое из следующего:

Опция

Значение

'holes'

Ищите и объект и контуры дыры. Это значение по умолчанию.

'noholes'

Ищите только объект (родительский элемент и дочерний элемент) контуры. Это может обеспечить лучшую производительность.

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

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

свернуть все

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

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

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

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

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

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

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

Алгоритмы

Функция bwboundaries реализует Мура-соседа, прослеживающего алгоритм, измененный критерием остановки Джейкоба. Эта функция основана на функции boundaries, представленной в первом выпуске Цифровой обработки изображений Используя MATLAB, Гонсалесом, R. C. Р. Э. Вудс и С. Л. Эддинс, Нью-Джерси, Пирсон Prentice Hall, 2004.

Ссылки

[1] Гонсалес, R. C. Р. Э. Вудс, и С. Л. Эддинс, цифровая обработка изображений Используя MATLAB, Нью-Джерси, Пирсона Prentice Hall, 2004.

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

Смотрите также

| | |

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