2014-09-04 18 views
8

Sto provando a calcolare la scala, la rotazione e la traduzione tra due fotogrammi consecutivi di un video. Quindi fondamentalmente ho abbinato i punti chiave e poi ho usato la funzione opencv findHomography() per calcolare la matrice di omografia.
homography = findHomography(feature1 , feature2 , CV_RANSAC); //feature1 and feature2 are matched keypointsCalcolo della scala, rotazione e traduzione dalla matrice di omografia

La mia domanda è: come posso utilizzare questa matrice per calcolare scala, rotazione e traduzione ?.
Qualcuno può fornirmi il codice o la spiegazione su come farlo?

+1

la parola chiave è "decomposizione omografia". Afair è possibile estrarre la rotazione con una decomposizione QR, ma si dovrebbe google migliore che ... – Micka

+1

forse questo (oi suoi collegamenti) aiuterà: http://stackoverflow.com/questions/15420693/how-to-get- rotazione-traduzione-shear-da-a-3x3-omografia-matrice-in-c-sharp – Micka

+1

e questo =) http://hal.archives-ouvertes.fr/docs/00/17/47/39/PDF /RR-6303.pdf – Micka

risposta

0

per stimare un albero tridimensionale trasformare e la rotazione indotta da un omografia, esistono approcci diversi. One of them fornisce formule chiuse per la scomposizione dell'omografia, ma sono molto complesse. Inoltre, le soluzioni non sono mai uniche.

Fortunatamente OpenCV 3 implementa già questa scomposizione (decomposeHomographyMat). Data un'omografia e una matrice intrinseca correttamente ridimensionata, la funzione fornisce un insieme di quattro possibili rotazioni e traduzioni.

1

Supponiamo che la prima e seconda cella della terza fila sono 0.

La terza colonna della matrice contiene una versione in X, Y e traduzione in 1, rispettivamente.

Come per la rimanente parte 2x2 in alto a sinistra della matrice di omografia (che contiene taglio, ridimensionamento e rotazione), può essere decomposta seguendo metodi diversi. Uno semplice e veloce è spiegato qui (questo metodo presuppone la matrice invertibile): https://math.stackexchange.com/questions/78137/decomposition-of-a-nonsquare-affine-matrix

+0

La traduzione in 3D non può essere ripristinata completamente. – Vlad

0

La risposta corretta è usare Omografia come viene definita dst = H. src ed esplora ciò che fa su piccoli segmenti attorno a un punto particolare. Per la traduzione basta selezionare un singolo punto: Translation = dst-H .src Per la rotazione esplorare due punti p1 e p2. p1 '= H. p1, p2 '= H. p2. Ora basta calcolare l'angolo tra i vettori p1 p2 e p1'p2 '. Per la scala è possibile utilizzare lo stesso trucco ma ora basta confrontare la lunghezza di | p1 p2 | e | p1'p2 '|. Per essere tariffa utilizzare un altro segmento ortogonale alla prima e media del risultato. Vedrai che non c'è un fattore di scala costante o una traduzione. Dipenderanno dalla posizione src.

0

La domanda sembra riguardare i parametri 2D. La matrice di omografia cattura la distorsione prospettica. Se l'applicazione non crea molta distorsione prospettica, si può approssimare una trasformazione del mondo reale usando la matrice di trasformazione affine (che usa solo la scala, la rotazione, la traduzione e nessun taglio/ribaltamento). Il seguente link darà un'idea sulla scomposizione di una trasformazione affine in diversi parametri.

https://math.stackexchange.com/questions/612006/decomposing-an-affine-transformation

Problemi correlati