Recuerde que la transformación Watershed trata su entrada como un mapa topográfico y simula inundar esa topografía con agua. Las "cuencas de captación" o "regiones de cuencas hidrográficas" son entonces las partes del mapa que "retienen el agua" sin derramarse en otras regiones.
La magnitud del gradiente es una mala función de segmentación tal cual; El ruido y los contornos abiertos conducen a una segmentación excesiva de la imagen. Podemos probar una serie de operaciones morfológicas con la intención de crear marcadores aproximados de primer plano y fondo, y usarlos para eliminar las partes espurias del gradiente.
%# Normalize.
g = gradmag - min(gradmag(:));
g = g / max(g(:));
th = graythresh(g); %# Otsu's method.
a = imhmax(g,th/2); %# Conservatively remove local maxima.
th = graythresh(a);
b = a > th/4; %# Conservative global threshold.
c = imclose(b,ones(6)); %# Try to close contours.
d = imfill(c,'holes'); %# Not a bad segmentation by itself.
%# Use the rough segmentation to define markers.
g2 = imimposemin(g, ~ imdilate( bwperim(a), ones(3) );
L = watershed(g2);
Esto funciona bien Obtienes ambos grupos de personas y sus sombras como regiones, con un poco de ruido.
¿Puedes detallar tus objetivos? Es decir, ¿segmentará muchas imágenes diferentes o solo imágenes muy similares a este ejemplo? ¿Necesitas ignorar las sombras y separar a las dos personas superpuestas?
Intentaré actualizar la respuesta si responde a estas preguntas.
Superposición de segmentación
Usted preguntó cómo superponer una segmentación. Una forma es usar las líneas de la cuenca hidrográfica para especificar píxeles en el original y establecerlas en un color brillante.
boundaries = L == 0;
I(boundaries) = 255;