Cuadrados de marcha: ¿Encontrar múltiples contornos dentro de un campo de origen?


9

Principalmente, esta es una pregunta de seguimiento a un problema de hace unas semanas , a pesar de que se trata del algoritmo en general sin aplicación a mi problema real.

El algoritmo básicamente busca a través de todas las líneas de la imagen, comenzando desde la parte superior izquierda de la misma, hasta que encuentra un píxel que es un borde. En pseudo-C ++:

int start = 0;
for(int i=0; i<amount_of_pixels; ++i)
{
   if(pixels[i] == border)
   {
      start = i;
      break;
   }
} 

Cuando encuentra uno, inicia el algoritmo de cuadrados de marcha y encuentra el contorno del objeto al que pertenece el píxel.

Digamos que tengo algo como esto:

ingrese la descripción de la imagen aquí

Donde todo excepto el color blanco es un borde.

Y he encontrado los puntos de contorno del primer blob:

ingrese la descripción de la imagen aquí

Para el algoritmo general se acabó. Encontró un contorno y ha hecho su trabajo. ¿Cómo puedo pasar a los otros dos blobs para encontrar también sus contornos?


necesita ayuda con esto, consulte esta stackoverflow.com/questions/17232672/…

Respuestas:


7

¿Podría simplemente borrar el polígono que se encuentra dibujándolo en el color de fondo y repetir hasta que no quede nada?


1
Así es como debe hacerse. Rellenar el elemento encontrado con el fondo (u otro color) y continuar la búsqueda (puede continuar en el punto donde encontró la primera "coincidencia")
bummzack

Oh wow. Ni siquiera sabía sobre el llenado de inundaciones. Gracias.
TravisG


1

¿por qué no guardar la información del blob en otra matriz y verificar si los píxeles recién encontrados caen dentro del cuadro delimitador del blob anterior? Se necesitará más manipulación para tratar las manchas debajo del centro de la gota anterior y que caen dentro del cuadro delimitador.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.