Domanda

Sto cercando un modo per ricreare a livello di codice il seguente effetto:

Fornisci un'immagine di input:
input http://www.shiny.co.il/shooshx/ConeCarv/q_input .png

Voglio applicare iterativamente la "corsa" effetto.
Il primo passo è simile al seguente:
passaggio 1 http://www.shiny.co.il/shooshx/ConeCarv/ q_step1.png

Il secondo passo in questo modo:
alt text http://www.shiny.co.il/shooshx/ConeCarv/ q_step2.png

E così via.

Suppongo che questo comporterà un qualche tipo di rilevamento dei bordi e quindi di tracciare i bordi in qualche modo.
Esiste un algoritmo noto per farlo in modo efficiente e robusto?

È stato utile?

Soluzione

Fondamentalmente, un algoritmo personalizzato sarebbe, secondo questo filetto :

  

Posiziona il quartiere 3x3 attorno a un pixel, metti in soglia il canale alfa e poi vedi se uno degli 8 pixel attorno al pixel ha un valore alfa diverso da quello. In tal caso dipingere a   cerchio di un determinato raggio con centro al pixel. Per fare dentro / fuori, modula dal canale alfa con soglia (nega di fare l'altro lato). Dovrai soglie un quartiere più grande se il raggio del cerchio è più grande di un pixel (che probabilmente è).


  

Questo è implementato usando operazioni morfologiche su scala di grigi. Questa è anche la stessa tecnica utilizzata per espandere / contrarre le selezioni. Fondamentalmente, per accarezzare il centro di una selezione (o un canale alfa), ciò che si farebbe è fare prima due copie separate della selezione. La prima selezione verrebbe ampliata del raggio della corsa, mentre la seconda verrebbe contratta. L'opacità del tratto sarebbe quindi ottenuta sottraendo la seconda selezione dalla prima.

     

Al fine di eseguire tratti interni ed esterni devi contrarre / espandere il doppio del raggio e sottrarre le parti che si intersecano con la selezione originale.

     

Va ??notato che l'algoritmo morfologico più generale richiede operazioni O (m * n), dove m è il numero di pixel dell'immagine e n è il numero di elementi nell'elemento "strutturante". Tuttavia, per alcuni casi speciali, questo può essere ottimizzato per le operazioni O (m) (ad esempio se l'elemento strutturante è un rettangolo o un diamante).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top