2012-04-14 8 views
6

Ho una tela con l'immagine disegnata ad esso.alla ricerca di un algoritmo per trovare il confine della regione di colore

Quando l'utente fa clic sull'immagine, ho bisogno di trovare la regione di colore su cui l'utente ha fatto clic. Una regione è definita come un insieme di pixel connessi a 4 vie con lo stesso colore del pixel su cui è stato fatto clic.

Ho bisogno la regione in una forma che ho potuto usare per impostare un percorso di ritaglio sulla tela, in modo da poter riempire l'area con, diciamo, un gradiente, ecc

Esistono algoritmi efficienti per la ricerca un confine? Qualcosa di più ottimale degli algoritmi di riempimento flood (non ho bisogno di riempire, ho solo bisogno di trovare un percorso intorno alla mia regione).

+0

Cosa vuoi che succeda se non c'è un singolo confine, ad es. cliccando su un toro o sulle guance di una [faccina sorridente] (http://phrogz.net/svg/svg_in_xhtml5.xhtml)? – Phrogz

+0

per la mia applicazione sarebbe sufficiente ottenere un percorso che descriva la regione esterna, a meno che ottenere un insieme di percorsi che descrivono sia la regione esterna che quella interna non sia molto più costoso. Sospetto di aver bisogno di una sorta di algoritmo di etichettatura dei pixel seguito da una fase che unifica le etichette calcolando i componenti connessi. – akonsu

risposta

4

Credo che l'algoritmo di tracciamento di Moore Neighborhood farà ciò che vuoi. Per definizione, il quartiere di Moore ha un aspetto di 8-connectedness, ma dovresti essere in grado di adattarlo facilmente a 4-connectedness. Le tue regioni risultanti saranno molto probabilmente migliori se testerai per 8-connectedness, ma la tua applicazione potrebbe avere requisiti specifici.

Wikipedia ha una buona struttura dell'algoritmo here. Ho lavorato con questo in passato e ho avuto un grande successo - è molto veloce.

+0

grazie. l'unico problema con questo approccio è come trovare un pixel dichiarante. nel mio caso ho bisogno di tracciare un contorno di una regione e non è l'unica regione nell'immagine, quindi non posso semplicemente scansionare l'immagine partendo dall'angolo. – akonsu

+0

Se si avvia l'iterazione nella posizione del clic del mouse dell'utente, il contorno risultante sarà della regione desiderata. L'idea generale è che cammini da sinistra a destra finché non colpisci un pixel di un altro colore. Dopo aver trovato un pixel simile, guardi tutti i vicini in senso orario e vai al primo pixel che fa parte della regione corrente. Alla fine si finisce con un contorno. Non è necessario eseguire la scansione dell'immagine iniziando nell'angolo. – Xenethyl

+0

Supponiamo di fare clic su un pixel bianco da qualche parte nel mezzo della regione (desidero delineare una regione bianca) e che non abbia pixel neri (il mio sfondo) nel suo vicinato. Allora cosa faccio? – akonsu

Problemi correlati