Main Content

watershed

Transformada de watershed

Descripción

La transformada de watershed (línea divisoria de aguas) encuentra las "cuencas de captación" o las "líneas de cresta de las cuencas" en una imagen tratándola como una superficie en la que los píxeles claros representan elevaciones altas y los oscuros, elevaciones bajas. La transformada de watershed puede utilizarse para segmentar regiones de interés contiguas para que sean objetos distinguibles.

ejemplo

L = watershed(A) devuelve una matriz de etiquetas L que identifica las regiones de watershed de la matriz de entrada A.

L = watershed(A,conn) especifica la conectividad que se utilizará en el cálculo de watershed.

Ejemplos

contraer todo

Cree una imagen binaria que contenga dos objetos circulares superpuestos. Muestre la imagen.

center1 = -40;
center2 = -center1;
dist = sqrt(2*(2*center1)^2);
radius = dist/2 * 1.4;
lims = [floor(center1-1.2*radius) ceil(center2+1.2*radius)];
[x,y] = meshgrid(lims(1):lims(2));
bw1 = sqrt((x-center1).^2 + (y-center1).^2) <= radius;
bw2 = sqrt((x-center2).^2 + (y-center2).^2) <= radius;
bw = bw1 | bw2;
imshow(bw)
title('Binary Image with Overlapping Objects')

Figure contains an axes object. The axes object with title Binary Image with Overlapping Objects contains an object of type image.

Calcule la transformada de distancia del complemento de la imagen binaria. El valor de cada píxel de la imagen de salida es la distancia entre ese píxel y el píxel distinto de cero más cercano de bw.

D = bwdist(~bw);
imshow(D,[])
title('Distance Transform of Binary Image')

Figure contains an axes object. The axes object with title Distance Transform of Binary Image contains an object of type image.

Tome el complemento de la imagen transformada en distancia de modo que los píxeles claros representen las elevaciones altas y los oscuros las bajas para la transformada de watershed.

D = -D;
imshow(D,[])
title('Complement of Distance Transform')

Figure contains an axes object. The axes object with title Complement of Distance Transform contains an object of type image.

Calcule la transformada de watershed. Establezca los píxeles que están fuera de la ROI en 0.

L = watershed(D);
L(~bw) = 0;

Muestre la matriz de etiquetas resultante como una imagen RGB.

rgb = label2rgb(L,'jet',[.5 .5 .5]);
imshow(rgb)
title('Watershed Transform')

Figure contains an axes object. The axes object with title Watershed Transform contains an object of type image.

Cree una imagen 2D binaria que contenga dos esferas superpuestas.

center1 = -10;
center2 = -center1;
dist = sqrt(3*(2*center1)^2);
radius = dist/2 * 1.4;
lims = [floor(center1-1.2*radius) ceil(center2+1.2*radius)];
[x,y,z] = meshgrid(lims(1):lims(2));
bw1 = sqrt((x-center1).^2 + (y-center1).^2 + ...
           (z-center1).^2) <= radius;
bw2 = sqrt((x-center2).^2 + (y-center2).^2 + ...
           (z-center2).^2) <= radius;
bw = bw1 | bw2;
figure, isosurface(x,y,z,bw,0.5), axis equal, title('BW')
xlabel x, ylabel y, zlabel z
xlim(lims), ylim(lims), zlim(lims)
view(3), camlight, lighting gouraud

Figure contains an axes object. The axes object with title BW contains an object of type patch.

Calcule los transformada de distancia.

D = bwdist(~bw);
figure, isosurface(x,y,z,D,radius/2), axis equal
title('Isosurface of distance transform')
xlabel x, ylabel y, zlabel z
xlim(lims), ylim(lims), zlim(lims)
view(3), camlight, lighting gouraud

Figure contains an axes object. The axes object with title Isosurface of distance transform contains an object of type patch.

Complemente la transformada de distancia, obligue a los píxeles que no son objetos a ser Inf y, a continuación, calcule la transformada de watershed.

D = -D;
D(~bw) = Inf;
L = watershed(D);
L(~bw) = 0;
figure
isosurface(x,y,z,L==1,0.5)
isosurface(x,y,z,L==2,0.5)
axis equal
title('Segmented objects')
xlabel x, ylabel y, zlabel z
xlim(lims), ylim(lims), zlim(lims)
view(3), camlight, lighting gouraud

Figure contains an axes object. The axes object with title Segmented objects contains 2 objects of type patch.

Argumentos de entrada

contraer todo

Imagen de entrada, especificada como arreglo numérico o lógico de cualquier dimensión.

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. La conectividad por defecto es 8 para imágenes 2D y 26 para imágenes 3D.

Valor

Significado

Conectividades bidimensionales

4

Los píxeles se consideran conectados si comparten bordes. El entorno de un píxel son los píxeles adyacentes en las direcciones horizontal y vertical.

3-by-3 pixel neighborhood with four pixels connected to the center pixel

El píxel actual se muestra en gris.

8

Los píxeles se consideran conectados si comparten bordes o vértices. El entorno de un píxel son los píxeles adyacentes en las direcciones horizontal, vertical y diagonal.

3-by-3 pixel neighborhood with 8 pixels connected to the center pixel

El píxel actual se muestra en gris.

Conectividades tridimensionales

6

Los píxeles se consideran conectados si comparten caras. El entorno de un píxel son los píxeles adyacentes en:

  • Alguna de estas direcciones: adentro, afuera, izquierda, derecha, arriba y abajo

3-by-3-by-3 pixel neighborhood with 6 pixels connected to the faces of the center pixel

El píxel actual se muestra en gris.

18

Los píxeles se consideran conectados si sus caras o bordes se tocan. El entorno de un píxel son los píxeles adyacentes en:

  • Alguna de estas direcciones: adentro, afuera, izquierda, derecha, arriba y abajo

  • Una combinación de dos direcciones, como derecha-abajo o adentro-arriba

3-by-3-by-3 pixel neighborhood with 6 pixels connected to the faces and 12 pixels connected to the edges of the center pixel

El píxel actual es el centro del cubo.

26

Los píxeles se consideran conectados si sus caras, bordes o vértices se tocan. El entorno de un píxel son los píxeles adyacentes en:

  • Alguna de estas direcciones: adentro, afuera, izquierda, derecha, arriba y abajo

  • Una combinación de dos direcciones, como derecha-abajo o adentro-arriba

  • Una combinación de tres direcciones, como adentro-derecha-arriba o adentro-izquierda-abajo

3-by-3-by-3 pixel neighborhood with 6 pixels connected to the faces, 12 pixels connected to the edges, and 8 pixels connected to the corners of the center pixel

El píxel actual es el centro del cubo.

En el caso de dimensiones más grandes, watershed utiliza el valor por defecto conndef(ndims(A),'maximal').

La conectividad puede definirse de una forma más general para cualquier dimensión especificando una matriz de 3 por 3 por ... por 3 con valores 0 y 1. Los elementos con el valor 1 definen los entornos relativos al elemento central de conn. Tenga en cuenta que conn debe ser simétrica respecto de su elemento central. Para obtener más información, consulte Specifying Custom Connectivities.

Nota

Si especifica una conectividad no predeterminada, es posible que los píxeles del borde de la imagen no se consideren píxeles del borde. Por ejemplo, si conn = [0 0 0; 1 1 1; 0 0 0], los elementos de la primera y la última fila no se consideran píxeles de borde porque, según esa definición de conectividad, no están conectados a la región exterior de la imagen.

Tipos de datos: double | logical

Argumentos de salida

contraer todo

Matriz de etiquetas, especificada como un arreglo numérico de enteros no negativos. Los elementos etiquetados como 0 no pertenecen a una única región de watershed. Los elementos etiquetados como 1 pertenecen a la primera región de watershed, los elementos etiquetados como 2 pertenecen a la segunda región de watershed, y así sucesivamente.

Sugerencias

  • El algoritmo de la transformada de watershed que utiliza esta función cambió en la versión 5.4 (R2015b) del software Image Processing Toolbox™. El algoritmo anterior producía ocasionalmente cuencas etiquetadas que no eran contiguas. Si necesita obtener los mismos resultados que producía el algoritmo anterior, utilice la función watershed_old.

  • Para evitar la sobresegmentación, elimine los mínimos superficiales de la imagen mediante la función imhmin antes de utilizar la función watershed.

Algoritmos

watershed utiliza el algoritmo de Fernand Meyer [1].

Referencias

[1] Meyer, Fernand, "Topographic distance and watershed lines,” Signal Processing , Vol. 38, July 1994, pp. 113-125.

Capacidades ampliadas

Historial de versiones

Introducido antes de R2006a

expandir todo

Consulte también

| | | |