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.
Ejemplos
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')
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')
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')
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')

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

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

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

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)
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)

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)
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)

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)
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)

Argumentos de entrada
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 | ||
| 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. |
El píxel actual se muestra en gris. |
| 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. |
El píxel actual se muestra en gris. |
Conectividades tridimensionales | ||
| Los píxeles se consideran conectados si comparten caras. El entorno de un píxel son los píxeles adyacentes en:
|
El píxel actual se muestra en gris. |
| 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:
|
El píxel actual es el centro del cubo. |
| 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:
|
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
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
imhminantes de utilizar la funciónwatershed.
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
Notas y limitaciones de uso:
watershedes compatible con la generación de código C (requiere MATLAB® Coder™). Tenga en cuenta que, si selecciona la plataforma objetivo genéricaMATLAB Host Computer,watershedgenera código que utiliza una biblioteca compartida precompilada específica de la plataforma. El uso de una biblioteca compartida mantiene las optimizaciones de rendimiento, pero limita las plataformas objetivo para las que se puede generar código. Para obtener más información, consulte Types of Code Generation Support in Image Processing Toolbox.Solo admite imágenes bidimensionales
Solo admite conectividad
4o8Admite imágenes que contengan hasta 65.535 regiones
El tipo de salida es siempre
uint16
Notas y limitaciones de uso:
Solo admite imágenes bidimensionales
Solo admite conectividad
4o8Admite imágenes que contengan hasta 65.535 regiones
El tipo de salida es siempre
uint16
Esta función es totalmente compatible con los entornos basados en hilos. Para obtener más información, consulte Ejecutar funciones de MATLAB en entornos basados en subprocesos.
Historial de versiones
Introducido antes de R2006aAhora watershed es compatible con los entornos basados en hilos.
Consulte también
bwlabel | bwlabeln | bwdist | regionprops | imhmin
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)




