¿Cómo aplicar una cuenca hidrográfica para segmentar imágenes usando matlab?

7

ingrese la descripción de la imagen aquí

¿Cómo segmentar esta imagen usando la cuenca hidrográfica para recuperar solo las personas en la imagen?

He hecho lo siguiente hasta ahora:

  1. Calcula un gradiente

ingrese la descripción de la imagen aquí

  1. Calcula la transformación de la cuenca

ingrese la descripción de la imagen aquí

Mi código:

  clear;
I=imread('inpaint.jpg');
I=rgb2gray(I);

hy = fspecial('sobel');
hx = hy';
Iy = imfilter(double(I), hy, 'replicate');
Ix = imfilter(double(I), hx, 'replicate');
gradmag = sqrt(Ix.^2 + Iy.^2);


figure, imshow(gradmag,[]), title('Gradient magnitude (gradmag)')
L = watershed(gradmag);
% Lrgb = label2rgb(L);
 figure, imshow(L), title('Watershed transform of gradient magnitude (Lrgb)')

He tenido éxito en aplicar la cuenca

ingrese la descripción de la imagen aquí

¿Quieres saber si puedo delinear mis objetos en la imagen original para que aparezca segmentada?

vini
fuente
Algo tangencial, pero ¿está utilizando la licencia de procesamiento de imágenes de MATLAB de la universidad o la empresa? Lo he investigado y parece bastante caro: - /
Spacey
Sí, mi universidad tiene una licencia ...
vini
1
@Mohammad Octave tiene casi todas las funciones en la caja de herramientas de procesamiento de imágenes de MATLAB, y en muchos casos el código es compatible.
@reve_etrange ¡Ah, gracias por eso! Tendré que investigarlo: mi antiguo jefe siempre decía cosas malas acerca de la octava como si no pudiera contener grandes matrices, no una buena interfaz gráfica de usuario como matlab, etc., por lo que nunca lo investigué ...
Spacey
@ Mohammad Además, la caja de herramientas de procesamiento de imágenes de Scilab está creciendo y prosperando. No estoy seguro si todavía ofrece lo que estás buscando.
Phonon

Respuestas:

8

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;
reve_etrange
fuente
Todas mis imágenes tienen las mismas condiciones que interpretado por este umbral image..Isn't considerado como un mal medio de la segmentación y sí me gustaría mostrarles como diferentes objetos
vini
El umbral puede producir resultados extraños en imágenes con histogramas extraños, y un umbral dado generalmente solo es útil para una sola imagen, pero no hay nada intrínsecamente "malo" en ellos. El método de Otsu debe estar en la caja de herramientas de cualquier codificador de visión por computadora, simplemente no lo aplique a ciegas.
Sí, está presente, sin embargo, los resultados no fueron satisfactorios cuando lo apliqué
vini
Comprueba el resultado de mi segmentación ¿es lo suficientemente bueno? =)
vini
@vini: cualquier segmentación de imagen requiere algún tipo de umbral en algún momento, ya que tendrá que tomar una decisión si un objeto es parte del primer plano o del fondo eventualmente.
Jonas