Contenido principal

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.

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.

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

ejemplo

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 hidden 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 hidden 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 hidden 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 hidden 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, xlabel x, ylabel y 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, xlabel x, ylabel y 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, xlabel x, ylabel y contains 2 objects of type patch.

Puede suprimir mínimos regionales superficiales para evitar la sobresegmentación durante la segmentación watershed.

Cargue una imagen RGB de peras que desee segmentar. Convierta la imagen a escala de grises y muéstrela. El centro de cada pera es claro, lo que corresponde a un máximo regional.

RGB = imread("pears.png");
I = im2gray(RGB);
imshow(I)

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

En la segmentación watershed, la imagen es análoga a una superficie compuesta por líneas divisorias de aguas y cuencas de captación. Cuando el agua fluye por la superficie, se acumula en las cuencas de captación. En una imagen en escala de grises, los mínimos locales son las cuencas de captación. Para segmentar las peras, invierta la imagen de modo que los centros de las peras se conviertan en los mínimos regionales.

Icomp = imcomplement(I);
imshow(Icomp)

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

Muestre la imagen invertida como una superficie 3D en la que la tercera dimensión de cada píxel es su valor de intensidad. Las regiones más profundas de cada pera tienen la parte inferior puntiaguda, lo que indica muchos mínimos regionales superficiales, como cuencas de captación en las que se puede acumular el agua.

surf(Icomp,EdgeColor="none")
colormap(gray)

Figure contains an axes object. The axes object contains an object of type surface.

Segmente la imagen sin filtrar y muestre el resultado como una superposición de etiquetas. La imagen está sobresegmentada, lo que significa que hay muchas máscaras pequeñas en lugar de una máscara para cada pera.

L = watershed(Icomp);
overlay = labeloverlay(I,L);
imshow(overlay)

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

Suprima los mínimos superficiales aplicando la transformada H-mínimos. El valor de h se ha determinado utilizando el método de prueba y error. Cambie el valor para ver cómo afecta el valor de h al resultado de la segmentación.

h = 30;
Ifilt = imhmin(Icomp,h);

Muestre la imagen filtrada como una superficie 3D.

surf(Ifilt,EdgeColor="none")
colormap(gray)

Figure contains an axes object. The axes object contains an object of type surface.

Segmente la imagen filtrada y muestre el resultado. La imagen contiene aproximadamente una máscara para cada pera en primer plano.

Lfilt = watershed(Ifilt);
overlayfilt = labeloverlay(I,Lfilt);
imshow(overlayfilt)

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

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 también 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 Especificar conectividades personalizadas.

Nota

Si especifica una conectividad no predeterminada, es posible que los píxeles del límite 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

  • 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

expandir todo

Historial de versiones

Introducido antes de R2006a

expandir todo