2012-06-15 16 views
21

Quando si utilizza la funzione findHomography di OpenCV per stimare un'omografia tra due serie di punti, da immagini diverse, a volte si ottiene una cattiva omografia a causa di valori anomali all'interno dei punti di input, anche se si utilizza RANSAC o LMEDS.Come si può sapere se una matrice di omografia è accettabile o no?

// opencv java example: 
Mat H = Calib3d.findHomography(src_points, dst_points, Calib3d.RANSAC, 10); 

Come si può sapere se la matrice 3x3 omografia risultante è accettabile o no?

Ho cercato una risposta a questo qui in Stackoverflow e in Google e non è stato in grado di trovarlo.

Ho trovato questo articolo, ma è un po 'criptico per me:

"The geometric error for homographies"

+2

Vedere la domanda http://stackoverflow.com/questions/10972438/detecting-garbage-homographies-from-findhomography-in-opencv/10981249#10981249 –

+0

se il movimento della fotocamera è limitato, potresti provare a scomporre la tua omografia e scala di prova, rotazione e/o parametri di traduzione per valori drastici. Altro metodo: se si conosce (o si prende il vincolo) che le parti grandi delle immagini dovrebbero sovrapporsi, è possibile calcolare la sovrapposizione dopo la deformazione e decidere se potrebbe essere un'omologia ovviamente falsa. Altro metodo: se usi RANSAC puoi decidere dal numero di inlier (e/o dal rapporto iniziale/totale) se l'omografia debba essere rifiutata) – Micka

+0

@Micka grazie per il tuo aiuto, stavo già usando RANSAC, il movimento della fotocamera è non limitato e stavo cercando metodi per scartare le omografie (principalmente matematiche) prima di addentrarmi in calcoli più pesanti come applicare l'omografia e verificare la sovrapposizione. –

risposta

22

Il modo migliore per capire se l'omografia è accettabile è.

1- Prendere i punti di un'immagine e riproiettarli utilizzando l'omografia computata.

//for one 3D point, this would be the projection 
px' = H * px; 
py' = H * py; 
pz' = H * pz; 

2- Calcolare la euclidean distance tra i punti riproiettato ei punti reali nell'immagine.

Reprojection error per un punto. p è il punto proiettato e q è il punto reale.

enter image description here

3- Stabilire una soglia che decide se l'errore riproiezione è accettabile.

Ad esempio, un errore maggiore di un pixel non è accettabile per molte applicazioni di tracciamento.

+11

Ciò che suggerisci è valido per il tracciamento, quando sai che molto probabilmente due immagini condividono una patch in posizioni simili. Quando si calcola un'omografia tra due immagini diverse per verificare se un'immagine contiene l'altro l'errore di riproiezione non è affatto utile. Per esempio, nel mio caso ottengo spesso che molti (~ 30) punti da un'immagine sono mappati sullo stesso punto (o pochi, punti di chiusura) in una seconda immagine. Hai qualche suggerimento per questo caso? –

Problemi correlati