Misurare accuratamente la distanza relativa tra un insieme di fiduciari (applicazione della realtà aumentata)

StackOverflow https://stackoverflow.com/questions/8379902

Domanda

Diciamo che ho un set di 5 marcatori. Sto cercando di trovare le distanze relative tra ciascun marker usando un quadro di realtà aumentata come Artoolkit. Nella mia fotocamera, i primi 20 fotogrammi mi mostrano solo i primi 2 marcatori in modo da poter elaborare la trasformazione tra i 2 marcatori. I secondi 20 fotogrammi mi mostrano solo i 2 ° e il terzo marcatori e così via. Gli ultimi 20 fotogrammi mi mostrano il 5 ° e il 1 ° marcatori. Voglio costruire una mappa 3D delle posizioni di marker di tutti e 5 i marcatori.

La mia domanda è, sapere che ci saranno inesattezze con le distanze dovute alla bassa qualità del feed video, come posso ridurre al minimo le inesattezze date tutte le informazioni che ho raccolto?

Il mio approccio ingenuo sarebbe quello di usare il primo marcatore come punto base, dai primi 20 fotogrammi prendono la media delle trasformazioni e colloca il 2 ° marcatore e così via per il 3 ° e il 4 °. Per il 5 ° marcatore posizionarlo tra il 4 ° e il 1 ° posizionandolo al centro della media delle trasformazioni tra il 5 ° e il 1 ° e il 4 ° e il 5 °. Questo approccio che ritengo abbia un pregiudizio verso il primo posizionamento dei marker e non tiene conto della fotocamera vedendo più di 2 marcatori per fotogramma.

Alla fine voglio che il mio sistema sia in grado di elaborare la mappa del numero X di marcatori. In ogni frame, possono apparire marcatori fino a X e ci sono errori non sistemici dovuti alla qualità dell'immagine.

Qualsiasi aiuto per quanto riguarda l'approccio corretto a questo problema sarebbe molto apprezzato.

Modifica: ulteriori informazioni sul problema:

Diciamo che la mappa del Real World è la seguente:

enter image description here

Diciamo che ricevo 100 letture per ciascuna delle trasformazioni tra i punti rappresentati dalle frecce nell'immagine. I valori reali sono scritti sopra le frecce.

I valori che ottengo hanno qualche errore (ipotizzato di seguire una distribuzione gaussiana sul valore effettivo). Ad esempio, una delle letture ottenute per il marcatore da 1 a 2 potrebbe essere x: 9,8 anni: 0,09. Dato che ho tutte queste letture come stimio la mappa. Il risultato dovrebbe idealmente essere il più vicino possibile ai valori reali.

Il mio approccio ingenuo ha il seguente problema. Se la media delle trasformazioni da 1 a 2 è leggermente fuori dal posizionamento di 3 può essere disattivata anche se la lettura da 2 a 3 è molto accurata. Questo problema è mostrato di seguito:

enter image description here

I verdi sono i valori effettivi, i neri sono i valori calcolati. La trasformata media da 1 a 2 è x: 10 y: 2.

È stato utile?

Soluzione

Puoi usare un minimi quadrati Metodo, per trovare la trasformazione che si adatta meglio a tutti i tuoi dati. Se tutto ciò che desideri è la distanza tra i marcatori, questa è solo la media delle distanze misurate.

Supponendo che le posizioni del tuo marcatore siano fisse (ad esempio, a un corpo rigido fisso) e desideri la loro posizione relativa, puoi semplicemente registrare le loro posizioni e in media. Se esiste un potenziale per confondere un marcatore con un altro, è possibile rintracciarli da un frame all'altro e utilizzare la continuità di ciascuna posizione di marker tra i suoi due periodi per confermare la sua identità.

Se ti aspetti che il tuo corpo rigido si muova (o se il corpo non è rigido e così via), il tuo problema è significativamente più difficile. Due marcatori alla volta non sono sufficienti per correggere la posizione di un corpo rigido (che ne richiede tre). Tuttavia, si noti che, ad ogni transizione, hai la posizione del vecchio marcatore, del nuovo marcatore e del marcatore continuo, quasi allo stesso tempo. Se hai già una posizione prevista sul corpo per ciascuno dei tuoi marcatori, questo dovrebbe fornire una buona stima di una posa rigida ogni 20 fotogrammi.

In generale, se il tuo corpo si muove, le migliori prestazioni richiederanno una sorta di modello per le sue dinamiche, che dovrebbero essere utilizzate per tracciare la sua posa nel tempo. Dato un modello dinamico, puoi usare un Filtro Kalman per fare il monitoraggio; I filtri Kalman sono ben adattati all'integrazione del tipo di dati che descrivi.

Includendo le posizioni dei tuoi marcatori come parte del vettore di stato di Kalman, potresti essere in grado di dedurre le loro posizioni relative dai dati puramente del sensore (che sembra essere il tuo obiettivo), piuttosto che richiedere a priori queste informazioni. Se vuoi essere in grado di gestire un numero arbitrario di marcatori in modo efficiente, potrebbe essere necessario trovare una mutazione intelligente dei soliti metodi; Il tuo problema sembra progettato per evitare la soluzione con metodi di decomposizione convenzionali come il filtraggio sequenziale di Kalman.


Modifica, secondo i commenti qui sotto:

Se i tuoi marcatori producono una posa 3D completa (anziché solo una posizione 3D), i dati aggiuntivi semplificheranno il consumo di informazioni accurate sull'oggetto che si sta monitorando. Tuttavia, le raccomandazioni sopra si applicano ancora:

  • Se il corpo etichettato è fisso, utilizzare un adattamento dei minimi quadrati di tutti i dati del frame pertinenti.
  • Se il corpo etichettato si sta muovendo, modella le sue dinamiche e usa un filtro Kalman.

Nuovi punti che mi vengono in mente:

  • Cercare di gestire una catena di trasformazioni relative potrebbe non essere il modo migliore per affrontare il problema; Come noti, è soggetto all'errore accumulato. Tuttavia, non è necessariamente un brutto modo, finché è possibile implementare la matematica necessaria in quel framework.
  • In particolare, una vestibilità dei minimi quadrati dovrebbe funzionare perfettamente con una catena o un anello di pose relative.
  • In ogni caso, per una vestibilità dei minimi quadrati o per il monitoraggio del filtro Kalman, una buona stima dell'incertezza delle misurazioni migliorerà le prestazioni.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top