Domanda

sto lavorando su una struttura dall'applicazione movimento e sto monitoraggio di un numero di marker posizionati sull'oggetto per determinare la struttura rigida dell'oggetto.

L'applicazione è essenzialmente usando l'ottimizzazione standard Levenberg-Marquardt su più visuali e riducendo al minimo le differenze tra i punti di marcatura attesi ei punti marcatori ottenuti in 2D da ogni punto di vista.

Per ogni punto marcatore e ogni vista la seguente funzione viene minimizzata:

double diff = calculatedXY[index] - observedXY[index]

Dove valore calculatedXY dipende da una serie di parametri ignoti che hanno bisogno di essere trovati tramite l'ottimizzazione e observedXY è la posizione del punto marcatore in 2D. In totale ho (punti di marcatura * visualizzazioni) serie di funzioni come quella di cui sopra che sto puntando a ridurre al minimo.

Ho codificato una simulazione della telecamera vedere tutti i punti di marcatura, ma mi chiedevo come gestire i casi in cui durante la corsa i punti non sono visibili a causa di illuminazione, occlusione o semplicemente non essere in vista della telecamera. Nel vero funzionamento del app Userò una web cam per vedere l'oggetto per cui è probabile che non tutti gli indicatori saranno visibili in una sola volta ea seconda di come robusto il mio algoritmo di computer vision è, potrei non essere in grado di rilevare un marcatore per tutto il tempo.

ho pensato di impostare il valore di diff essere 0 (sigma al quadrato differenza = 0) nel caso in cui non poteva essere osservato il punto marcatore, potrebbe questo falsare i risultati comunque?

Un'altra cosa che ho notato è che l'algoritmo non è buono quando sono presentati con troppi punti di vista. E 'più probabile che la stima di una cattiva soluzione quando sono presentati con troppi punti di vista. È questo un problema comune con regolazione fascio a causa della maggiore probabilità di colpire un minimo locale quando sono presentati con troppe vista?

È stato utile?

Soluzione

E 'pratica comune solo lasciare fuori termini corrispondenti ai marcatori mancanti. Vale a dire. non cercare di ridurre al minimo calculateXY-observedXY se non v'è alcun termine observedXY. Non c'è bisogno di impostare nulla a zero, non si dovrebbe nemmeno essere considerato questo termine, in primo luogo -. Basta saltare (o, immagino che nel codice, è equivalente a impostare l'errore a zero)

regolazione Bundle può fallire terribilmente se semplicemente gettare un gran numero di osservazioni a questo. Costruisci la tua soluzione in modo incrementale, risolvendo con poche viste prima e poi continuare ad aggiungere.

Si potrebbe desiderare di provare un qualche tipo di approccio 'robusta'. Invece di usare minimi quadrati, utilizzare una "funzione di perdita" 1 . Questi permettono l'ottimizzazione di sopravvivere, anche se ci sono una manciata di osservazioni che non sono corretti. È ancora possibile fare questo in un quadro Levenberg-Marquardt, è sufficiente integrare la derivata della funzione di perdita nel Jacobiano.

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