Quindi ho un algoritmo iterative closest point (ICP) che è stato scritto e che si adatta a un modello a una nuvola di punti. Come un rapido tutorial per coloro che non sono al corrente, l'ICP è un semplice algoritmo che si adatta ai punti di un modello che alla fine fornisce una matrice di trasformazione omogenea tra il modello ei punti.Assurance of ICP, Internal Metrics
Ecco un breve tutorial di immagini.
Fase 1. Trovare il punto più vicino al modello di cui al set di dati:
Fase 2: Usando un po 'di matematica di divertimento (a volte sulla base di discesa gradiant o SVD) tirare le nuvole più vicini e ripetere fino a una posa è formato:
[Figura 2] [2]
Ora che bit è semplice e di lavoro, quello che vorrei aiuto con è:! Come faccio a sapere se la posa che ho è una buona?
Così Attualmente ho due idee, ma sono un po 'hacky:
quanti punti sono nell'algoritmo ICP. Cioè, se mi sta adattando a quasi nessun punto, presumo che la posa sarà cattiva:
Ma cosa succede se la posa è in realtà buona? Potrebbe essere, anche con pochi punti. Non voglio respingere buone pose:
Così quello che vediamo qui è che i punti bassi può effettivamente fare una posizione molto buona se sono nel posto giusto.
Quindi l'altra metrica esaminata era il rapporto tra i punti forniti e i punti utilizzati. Ecco un esempio
Ora exlude punti che sono troppo lontani perché saranno valori anomali, ora questo significa che abbiamo bisogno di una buona posizione di partenza per l'ICP al lavoro, ma io sono ok con quello. Ora, nell'esempio di cui sopra la garanzia sarà dire di no, questa è una cattiva posa, e sarebbe giusto, perché il rapporto tra punti vs punti inclusi è:
2/11 < SOME_THRESHOLD
thats così buono, ma fallirà nel caso mostrato sopra dove il triangolo è capovolto. Dirà che il triangolo capovolto è buono perché tutti i punti sono usati da ICP.
È non necessario essere un esperto di ICP per rispondere a questa domanda, sto cercando buone idee. Usando la conoscenza dei punti come possiamo classificare se è una buona soluzione di posa o no?
L'uso di entrambe queste soluzioni insieme in tandem è un buon suggerimento, ma è una soluzione piuttosto zoppa se mi chiedi, molto stupido di limitarlo.
Quali sono alcune buone idee su come farlo?
PS. Se vuoi aggiungere del codice, per favore fallo. Sto lavorando in C++.
PPS. Qualcuno mi aiuti a taggare questa domanda, non sono sicuro di dove dovrebbe cadere.
Come viene definita una posa? Segmenti di linea? – FoolishSeth
Come matrice di trasformazione omogenea. –
Per curiosità, hai trovato una soluzione? Hai usato qualcosa offerto in risposta o hai trovato qualcosa di tuo? – Andrei