2014-12-06 7 views
9

Mi viene assegnato un piano (vettore di supporto e vettore normale del piano), un'immagine presa da una fotocamera di cui conosco i parametri intrinseci (fx, fy, cx, cy). Come ottengo la trasformazione di questa immagine in un'immagine simile ad una vista a volo d'uccello (in modo che la vista degli uccelli sia allineata al vettore normale del piano). Sono confuso con i sistemi di coordinate che devo usare, alcune matrici sono in coordinate mondiali e alcune in locale. So che ci sono warpPerspective() in OpenCV, questo farebbe il lavoro?Come creare una vista a volo d'uccello dell'immagine su un dato piano?

Im utilizzando OpenCV: 2.4.9

Grazie mille!

Aggiornamento: Devo calcolare i 4 punti con la fotocamera rivolta verso normale, poi 4 punti dal bird eye view e passarli a findHomography() per ottenere la matrice di trasformazione?

Aggiornamento: Risolto. Fatto funzionare!

+0

Quello che ti serve è la vista dall'alto, giusto? Cioè l'angolo tra la vista/il vettore della telecamera e il piano normale sarà l'angolo retto (180 °). OTOH [vista a volo d'uccello] (https://en.wikipedia.org/wiki/Bird%27s-eye_view) non sarà così, avrà un angolo diverso da 0/180 °. La vista dall'alto sarà una vista ortografica mentre l'occhio di un uccello è una vista prospettica. – legends2k

+0

Questo può aiutare a calcolare la trasformazione della telecamera: [Derivando gluLookAt] (http://stackoverflow.com/a/22715392/183120) – legends2k

+1

avrai bisogno di: parametri estrinseci della tua fotocamera (almeno l'angolo di visuale) O 4 posizioni in pixel di punti "noti" sul piano (sarebbe sufficiente conoscere la posizione relativa tra quei punti sul piano). – Micka

risposta

2

Un rettangolo sul piano del mondo apparirà come un quadrilatero nell'immagine.
In una vista a volo d'uccello, si desidera che appaia di nuovo come un rettangolo. È necessario conoscere almeno le proporzioni di questo rettangolo del mondo affinché la vista superiore sia correttamente ed equamente ridimensionata lungo entrambi gli assi.

Dato i punti 2D 4 quadrangolari nella vostra immagine, e gli angoli rettangolo di destinazione (per il quale si essenzialmente scegliere le coordinate 2D) si può calcolare l'omografia dal quadrilatero ad un rettangolo e utilizzare warpPerspective() per renderlo.

Questo è spesso il modo più semplice per farlo.

È anche possibile passare attraverso la telecamera e le matrici stesse. Per questo è necessario ruotare la fotocamera per essere sopra il piano con proiezione ortogonale. Vedere la decomposizione dell'omografia here.

+0

qual è il mio quadrilatero? e come potrei calcolare l'omografia dopo? –

+0

Il quadrilatero è ottenuto calcolando 4 punti sul piano? Cosa intendi con "calcolare l'omografia dal quadrilatero in un rettangolo", quale rettangolo? Potresti spiegarlo in maggiore dettaglio per favore? Grazie! –

Problemi correlati