Qual è il miglior algoritmo di "riempimento a secchio"?

16

Sono abbastanza nuovo nell'elaborazione delle immagini e attualmente sto lavorando a un'applicazione simile alla vernice che presenterà un riempimento a secchiello. Tuttavia, non ho idea di quale sia il miglior algoritmo per il riempimento del secchio.

Ho implementato un esempio che ho trovato da questo sito , tuttavia, ha funzionato in infiniti problemi di loop quando un utente ha provato a riempire a secchi un'area che era già stata riempita a secchio con lo stesso colore.

Al momento sto lavorando a questo problema riempiendo a sinistra, a destra, in alto e poi in basso; tuttavia, ho fatto in modo che una volta che un pixel è stato compilato a sinistra, non possa riempire a destra, il che significa forme come:

non verrà riempito correttamente se lo strumento bucket viene utilizzato sul punto rosso.

Pertanto, spero che qualcuno conosca un algoritmo o un collegamento a uno che risolverà tutti questi problemi.

Informazioni aggiuntive: sarà implementato utilizzando Javascript come strumento di disegno. Verrà utilizzato online utilizzando l'elemento Canvas.

    
posta Ivan 03.09.2011 - 02:11
fonte

2 risposte

21

Sembra che tu stia effettivamente cercando ciò che è chiamato algoritmo Flood Fill. Questo potrebbe essere il motivo per cui non hai trovato tonnellate di esempi per questo. Esistono diversi metodi di riempimento Flood elencati nella pagina di Wikipedia per l'algoritmo . Consiglio vivamente uno dei metodi non ricorsivi, "in coda".

    
risposta data 03.09.2011 - 05:44
fonte
-1

Al momento sto facendo la stessa cosa. Tuttavia, quando mi sono imbattuto nel problema che hai segnalato, ho optato per la fine della funzione semplicemente se lo strumento è stato cliccato su un'area dello stesso colore che stai cercando di dipingere (questo sembra anche essere il comportamento di ms-paint) .

Il metodo in coda dovrebbe essere estremamente intuitivo per chiunque abbia qualche esperienza di programmazione.

Se dipingi l'area che circonda un punto dello stesso colore della vernice è una preoccupazione, puoi:

  • controlla il colore di sfondo.
  • cerca il bordo della macchia dello stesso colore su cui hai fatto clic.
  • mettere in coda i punti circostanti.
  • procedere con la normale esecuzione utilizzando questa (in questo caso) coda piena di punti bianchi.

Se lo desideri, puoi dare un'occhiata al mio (piuttosto imbarazzante) codice qui .

È lontano dall'essere veloce ma funziona bene ...

    
risposta data 02.03.2015 - 22:34
fonte

Leggi altre domande sui tag