Quadrati in marcia: trovare più contorni all'interno di un campo sorgente?


9

Principalmente, questa è una domanda di follow-up a un problema di alcune settimane fa , anche se si tratta dell'algoritmo in generale senza applicazione al mio problema reale.

L'algoritmo cerca fondamentalmente tutte le linee dell'immagine, partendo dalla parte in alto a sinistra, fino a quando non trova un pixel che è un bordo. In pseudo-C ++:

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

Quando ne trova uno, avvia l'algoritmo dei quadrati in marcia e trova il contorno di qualsiasi oggetto a cui appartiene il pixel.

Diciamo che ho qualcosa del genere:

inserisci qui la descrizione dell'immagine

Dove tutto tranne il colore bianco è un bordo.

E ho trovato i punti di contorno del primo blob:

inserisci qui la descrizione dell'immagine

Per l'algoritmo generale è finito. Ha trovato un contorno e ha fatto il suo lavoro. Come posso passare agli altri due BLOB per trovare anche i loro contorni?


bisogno di aiuto con questo sguardo si prega in questo stackoverflow.com/questions/17232672/...

Risposte:


7

Potresti semplicemente cancellare il poligono che si trova disegnandolo nel colore di sfondo e ripetere fino a quando non rimane più nulla?


1
Ecco come dovrebbe essere fatto. Riempi di inondazione l'elemento trovato con lo sfondo (o un altro colore) e continua la ricerca (puoi continuare nel punto in cui hai trovato la prima "corrispondenza")
bummzack,

oh wow Non sapevo nemmeno di riempire le inondazioni. Grazie.
TravisG,


1

perché non salvare le informazioni sul BLOB su un altro array e verificare se i pixel appena trovati rientrano nel riquadro di delimitazione del BLOB precedente? Sarà necessaria ulteriore manipolazione per gestire i BLOB al di sotto del centro del BLOB precedente e che rientrano nel riquadro di delimitazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.