2013-08-05 9 views
5

Sto facendo un po 'di lavoro (troppo complicato da spiegare), e uno dei compiti che ho è che ho bisogno di convertire un'immagine raster di un poligono levigato in uno scheletro. Quindi ho bisogno di fare qualcosa del genere: Pic 01Ricerca dell'algoritmo: generazione di scheletro per immagini raster

Ho un'immagine raster (a sinistra) e voglio avere un grafico composto da punti e bordi (a destra) che rappresenta l'immagine.

Ho letto di algoritmi, in particolare un libro di Steven Skiena, in cui dice di usare l'algoritmo "Brush fire", che spiega come "ogni ciclo, passa attraverso ogni punto che è sul bordo, per i bordi che collide aggiungi un punto allo scheletro e rimuovi i punti rimanenti, passa al ciclo successivo finché rimane solo lo scheletro "ma tutte le informazioni che ho trovato su questo algoritmo online riguardano alcuni algoritmi di pathfinder per i robot, non capisco come applicare qui (in pratica come faccio a sapere "spigoli" se tutto quello che ho sono le coordinate dei pixel pieni/vuoti).

Ho cercato la libreria CGAL e la sua dimostrazione di scheletri, ma non funziona bene quando il poligono ha molti vertici, quindi basta convertire ogni vertice sul bordo in un vertice di un poligono e quindi alimentarlo all'algoritmo non produrrà buoni risultati.

Mi aspetto che questo debba essere un algoritmo comune in quanto l'attività sembra essere abbastanza semplice, ma non voglio inventare la ruota e non ho trovato nulla sull'argomento (forse perché non conosco il parole chiave corrette)

+0

Si dovrebbe provare la scheletrizzazione dell'immagine binaria dopo il quale rilevare la linea tramite Hough Transforms. Sarebbe più semplice se usi opencv, ad esempio, ma è anche possibile implementarli. –

risposta

3

Il termine migliore per la ricerca è assottigliamento digitale, la versione digitale dell'asse mediale. Ad esempio, questo documento cita 15 di questi algoritmi:

"Nota su quindici algoritmi di diradamento parallelo 2D." M. Couprie (PDF download link)

Ecco un piccolo pezzo di Figura 16, che mostra i risultati di due tali algoritmi:
Fig16

+0

Grazie Joseph, questo documento (e una parola chiave) è esattamente ciò di cui avevo bisogno! – Istrebitel

0

Questa era la nostra progetto scolastico! Si basa sugli angoli di Schlesinger e sugli algoritmi di scheletrizzazione. Gli angoli sono un modo di rappresentare l'immagine binaria in una forma compressa, che consente operazioni molto più veloci di quanto sia possibile sull'immagine raster. Per ulteriori informazioni, consultare il nostro giornale:

Corners toolbox allowing processing binary images in a compressed form

scheletrizzazione era in realtà la mia parte e ho descritto in dettaglio alto :-) Credo che il codice in C++ è ancora libero e disponibile da qualche parte.