Domanda

Dato un input di punti 2D, vorrei segmento di loro nelle linee.Quindi, se si disegna un zig-zag stile di linea, ciascuno dei segmenti devono essere riconosciuti come una linea.Di solito, vorrei utilizzare la libreria OpenCV s cvHoughLines o un approccio simile (PCA con un outlier di rimozione), ma in questo caso il programma non è consentito creare "falsi positivi" errori.Se l'utente disegna una linea e non riconosciuto - è ok, ma se l'utente disegna una curcle e viene fuori come una piazza - non è ok.Così ho un limite superiore per l'errore, ma se si tratta di una linea molto lunga, e alcuni dei punti che hanno una distanza maggiore dal approssimata della linea, è di nuovo ok.Riassunto:

-linea di rilevamento -no falsi positivi delimitata, regolando dinamicamente errore

Oh, e i punti sono tirati in sequenza, proprio come il disegno a mano.

Almeno non deve essere veloce.È una sketch tool.Qualcuno ha un'idea?

È stato utile?

Soluzione

Questo ha le stesse difficoltà di voce e gesto di riconoscimento.In altre parole, non si può mai essere sicuri al 100% che hai trovato tutti gli angoli e giunzioni, e tra quelli che ti ho trovato non si può mai essere sicuri al 100% che siano corrette.Il motivo non si può essere assolutamente certi che sia a causa di ambiguità.L'utente potrebbe aver fatto un colpo solo, con l'intenzione di creare due linee che si incontrano ad angolo retto.Ma se l'hanno fatto in fretta, il "corner" potrebbe essere stata abbastanza rotonda, in modo da non essere rilevato.

Quindi, non si sarà mai in grado di evitare falsi positivi.Il meglio che puoi fare è ridurre tali rischi, esplorando diverse possibili segmentazioni, e l'utilizzo di informazioni contestuali per decidere quale è la più probabile.

Ci sono un sacco di articoli su disegno di segmentazione ogni anno.Questo mi sembra una cosa molto semplice da risolvere, ma è ancora in argomento.Quello che uso io è di Texas A&M, chiamato MergeCF.È ben riassunta in questo articolo: http://srlweb.cs.tamu.edu/srlng_media/content/objects/object-1246390659-1e1d2af6b25a2ba175670f9cb2e989fe/mergeCF-sbim09-fin.pdf.

Fondamentalmente, si trovano le aree che sono di alta curvatura (superiore a una certa percentuale della media di curvatura) e velocità lenta (quindi è necessario timestamp).Combinazione di curvatura e velocità migliora la fit iniziale molto.Che vi darà i cluster di punti, che si riduce ad un unico punto, in qualche modo (ad es.quello più vicino al centro del cluster, o quella con la più alta curvatura, etc.).Questo è un adattamento " della corsa, tuttavia.La prossima fase dell'algoritmo è di iterativamente scegliere il più piccolo segmento, e vedere cosa sarebbe successo se si è unito con uno dei suoi vicini segmenti.Se la fusione non aumentare il numero complessivo errore di troppo, si rimuove il punto di separazione tra i due segmenti.Sciacquare, ripetere, fino a quando il gioco è fatto.

E ' stato un po da quando ho guardato i nuovi segmenters, ma non credo che ci siano stati eventuali scoperte.

Nella mia implementazione io uso curvatura mediana piuttosto che media nel mio la soglia iniziale, che sembra dare il meglio di me i risultati.Il mio pesantemente modificato attuazione è qui, che sicuramente non è un self-contained cosa, ma potrebbe dare indicazioni. http://code.google.com/p/pen-ui/source/browse/trunk/thesis-code/src/org/six11/sf/CornerFinder.java

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