Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

bwboundaries

Trazar los límites de un objeto en una imagen binaria

Descripción

ejemplo

B = bwboundaries(BW) traza los límites exteriores de los objetos, así como los límites de los huecos que hay dentro de estos objetos, en la imagen binaria BW. Además, bwboundaries traza los límites exteriores y de los huecos de los objetos secundarios que están completamente rodeados por objetos principales. La función devuelve B, un arreglo de celdas de las ubicaciones de píxeles de límites.

La figura ilustra estos componentes.

Parent objects in a binary image are white blobs that can have holes. Children objects appear as islands within the holes.

B = bwboundaries(BW,conn) especifica la conectividad conn que debe usarse al trazar los límites de los objetos.

ejemplo

B = bwboundaries(___,options) traza los límites exteriores de los objetos y especifica si desea incluir los límites de los huecos estableciendo options como "holes" o como "noholes".

B = bwboundaries(___,Name=Value) especifica el estilo de trazado y el orden de las coordenadas de vértice devueltas utilizando argumentos de nombre-valor (desde R2023a).

ejemplo

[B,L] = bwboundaries(___) también devuelve una matriz de etiquetas L, que etiqueta los objetos y los huecos.

ejemplo

[B,L,n,A] = bwboundaries(___) también devuelve n, el número de objetos encontrados y A, una matriz de adyacencia.

Ejemplos

contraer todo

Lea una imagen en escala de grises en el espacio de trabajo.

I = imread('rice.png');

Convierta la imagen en escala de grises en una imagen binaria utilizando el umbral local adaptativo.

BW = imbinarize(I);

Calcule los límites de las regiones de la imagen y superponga los límites en la imagen.

[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 object. The axes object contains 152 objects of type image, line.

Lea una imagen binaria en el espacio de trabajo.

BW = imread('blobs.png');

Calcule los límites de las regiones de la imagen.

[B,L,N,A] = bwboundaries(BW);

Muestre la imagen con los límites superpuestos. Añada el número de la región al lado de cada límite (según la matriz de etiquetas). Utilice la herramienta zoom para leer cada etiqueta.

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

Muestre la matriz de adyacencia utilizando la función spy.

figure
spy(A);

Figure contains an axes object. The axes object with xlabel nz = 19 contains a line object which displays its values using only markers.

Lea una imagen binaria en el espacio de trabajo.

BW = imread('blobs.png');

Calcule los límites.

[B,L,N] = bwboundaries(BW);

Muestre los límites de objetos en rojo y los límites de huecos en verde.

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 object. The axes object contains 40 objects of type image, line.

Lea una imagen en el espacio de trabajo.

BW = imread('blobs.png');

Muestre los límites principales en rojo y sus huecos en verde.

[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 object. The axes object contains 23 objects of type image, line.

Argumentos de entrada

contraer todo

Imagen binaria, especificada como matriz lógica o numérica 2D. En la entrada numérica, cualquier píxel distinto de cero se considera 1 (true).

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Conectividad de píxeles, especificada como uno de los siguientes valores de la tabla.

Valor

Significado

Conectividades bidimensionales

4

Los píxeles se consideran conectados si comparten bordes. Dos píxeles contiguos forman parte del mismo objeto si ambos se encuentran y están conectados a lo largo de la dirección horizontal o vertical.

Center pixel connected to four pixels

El píxel actual se muestra en gris.

8

Los píxeles se consideran conectados si comparten bordes o vértices. Dos píxeles contiguos forman parte del mismo objeto si ambos se encuentran y están conectados a lo largo de la dirección horizontal, vertical o diagonal.

Center pixel connected to eight pixels

El píxel actual se muestra en gris.

Tipos de datos: double

Determine si desea buscar los límites principales y secundarios, especificados como alguno de los siguientes:

Opción

Significado

"holes"

Búsqueda de límites de objeto y hueco. Esta es la opción por defecto.

"noholes"

Búsqueda solo de límites de objeto (principal y secundario). Esta opción puede ofrecer un mejor rendimiento.

Tipos de datos: char | string

Argumentos de par nombre-valor

Especifique pares de argumentos opcionales como Name1=Value1,...,NameN=ValueN, donde Name es el nombre del argumento y Value es el valor correspondiente. Los argumentos de nombre-valor deben aparecer después de otros argumentos. Sin embargo, el orden de los pares no importa.

Ejemplo: B = bwboundaries(BW,TraceStyle="pixeledge") traza el límite de los objetos de la imagen binaria BW a lo largo del borde exterior de los píxeles de límites.

Desde R2023a

Estilo de trazado a lo largo del límite, especificado como "pixelcenter" o "pixeledge".

Estilo de trazado

Significado

"pixelcenter"

Se traza el límite como un polígono que conecta los centros de los píxeles de límites.

"pixeledge"

Se traza el límite como un polígono a lo largo del borde exterior de los píxeles de límites.

Desde R2023a

Orden de las coordenadas de vértice devueltas, especificado como "yx" o "xy".

Estilo de trazado

Significado

"yx"

Se devuelven los vértices límite como coordenadas (y, x), que es el mismo orden que las coordenadas (row, column)

"xy"

Se devuelven los vértices límite como coordenadas (x, y)

Argumentos de salida

contraer todo

Coordenadas de los vértices límite, devueltas como arreglo de celdas de p por 1, donde p es el número de objetos y huecos. Las primeras n celdas en B son límites de objeto y el resto de celdas son límites de hueco.

Cada una de las celdas del arreglo de celdas contiene una matriz de 2 por q. Cada fila de la matriz contiene las coordenadas de un vértice del límite. q es el número de vértices límite de la región correspondiente.

Matriz de etiquetas de regiones contiguas, devuelta como matriz 2D de enteros no negativos. La k-ésima región incluye todos los elementos de L que tienen el valor k. El número de objetos y huecos representados por L es igual a max(L(:)). Los elementos de L cuyo valor sea cero constituyen el fondo.

Tipos de datos: double

Número de objetos encontrados, devuelto como entero no negativo.

Tipos de datos: double

Dependencias principales/secundarias entre límites y huecos, devueltas como una matriz cuadrada, dispersa y lógica con longitud de lado max(L(:)). Las filas y columnas de A corresponden a las posiciones de los límites almacenados en B. A(i,j)=1 significa que el objeto i es un objeto secundario de j. Los límites que delimitan o que son delimitados por el k-ésimo límite se pueden encontrar utilizando A como sigue:

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

Tipos de datos: double

Algoritmos

La función bwboundaries implementa el algoritmo de trazado de Moore-Neighbor, modificado por los criterios de detención de Jacob. Esta función se basa en la función boundaries presentada en la primera edición de Digital Image Processing Using MATLAB[1].

Referencias

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

Capacidades ampliadas

Historial de versiones

Introducido antes de R2006a

expandir todo

Consulte también

| | |