Contenido principal

Trazado de contorno en imágenes

Trazar contornos de objetos en imágenes

En este ejemplo se muestra cómo trazar el contorno de un solo objeto y de todos los objetos de una imagen binaria.

Lea y muestre una imagen.

I = imread("coins.png");
imshow(I)

Figure contains an axes object. The hidden axes object contains an object of type image.

Convierta la imagen a una imagen binaria. Las funciones bwtraceboundary y bwboundaries solo funcionan con imágenes binarias.

BW = imbinarize(I);
imshow(BW)

Figure contains an axes object. The hidden axes object contains an object of type image.

Contorno de un solo objeto

Para trazar el contorno de un solo objeto en la imagen binaria, primero determine las coordenadas de fila y columna de un píxel del borde del objeto. Para este ejemplo, seleccione una coordenada de columna. A continuación, el ejemplo calcula la coordenada de fila del objeto que está más arriba en esa columna.

numCols = size(BW,2);
col = 60;
row = find(BW(:,col),1)
row = 
27

Para trazar el contorno desde el punto especificado, utilice la función bwtraceboundary. Como argumentos requeridos, debe especificar una imagen binaria, las coordenadas de fila y columna del punto de inicio y la dirección del primer paso. En el ejemplo se especifica norte ("N").

boundary = bwtraceboundary(BW,[row, col],"N");

Represente el borde sobre la imagen en escala de grises original.

imshow(I)
hold on
plot(boundary(:,2),boundary(:,1),"g",LineWidth=3);

Figure contains an axes object. The hidden axes object contains 2 objects of type image, line.

Contorno de todos los objetos

En la imagen binaria usada en este ejemplo, algunas de las monedas contienen zonas negras que la función bwboundaries interpreta como objetos independientes. Para garantizar que bwboundaries trace solo el exterior de las monedas, rellene el área interior de cada moneda con la función imfill.

BW_filled = imfill(BW,"holes");

Trace los contornos de todas las monedas de la imagen usando la función bwboundaries. bwboundaries devuelve un arreglo de celdas donde cada celda contiene las coordenadas de fila y columna para un objeto de la imagen.

boundaries = bwboundaries(BW_filled);

Represente los bordes de todas las monedas sobre la imagen en escala de grises original.

for k=1:10
   b = boundaries{k};
   plot(b(:,2),b(:,1),"g",LineWidth=3);
end

Figure contains an axes object. The hidden axes object contains 12 objects of type image, line.

Seleccionar la dirección del primer paso para el trazado

Para determinados objetos, debe tener cuidado al seleccionar el píxel del borde que elige como punto inicial y la dirección escogida para el primer paso (como norte o sur).

Por ejemplo, si un objeto contiene un hueco y selecciona un píxel de una parte fina del objeto como píxel inicial, puede trazar el borde exterior del objeto o el borde interior del hueco, dependiendo de la dirección que elija para el primer paso. Para objetos rellenos, la dirección que elija para el parámetro de primer paso no es tan importante.

Para ilustrarlo, esta figura muestra cómo la dirección del primer paso afecta al límite trazado cuando el píxel inicial está en un límite que tiene un píxel de ancho. La conectividad es el valor predeterminado de 8. Un primer paso en dirección norte hace que el límite se trace en el sentido de las agujas del reloj a lo largo del borde externo del objeto, mientras que un primer paso en dirección sur hace que el límite se trace en sentido contrario a las agujas del reloj a lo largo del borde interno del objeto.

Impacto de la dirección del primer paso en el trazado de contornos

Consulte también

| | |

Temas