2009-07-13 19 views
6

Come seguito a my previous question per determinare i parametri della telecamera, ho formulato un nuovo problema.Determinazione della matrice di trasformazione

ho due immagini della stessa rettangolo:

Il primo è l'immagine senza alcuna trasformazione e mostra il rettangolo così com'è.

La seconda immagine mostra il rettangolo dopo una certa trasformazione 3d (rotazione XYZ, ridimensionamento, traduzione XY). Ciò ha causato il rettangolo di apparire trapezoidale.

Spero che la seguente immagine descrive il mio problema:

alt text http://wilco.menge.nl/application.data/cms/upload/transformation%20matrix.png

Come determinare quali trasformazioni (più precisamente: che cosa matrice di trasformazione) hanno causato questo tranformation?

Conosco le posizioni dei pixel degli angoli in entrambe le immagini, quindi so anche le distanze tra gli angoli.

risposta

2

Sono confuso. Si tratta di un problema 2d o 3d?

Nel modo in cui ho capito, si dispone di un rettangolo piatto incorporato nello spazio 3d e si stanno osservando due "immagini" 2D - una versione originale e una basata sulla versione trasformata. È corretto?

Se questo è corretto, non ci sono abbastanza informazioni per risolvere il problema. Ad esempio, supponiamo che le due immagini abbiano esattamente lo stesso aspetto. Ciò potrebbe essere dovuto al fatto che la traduzione è l'identità, o potrebbe essere perché la traduzione sposta il rettangolo due volte più lontano dalla telecamera e ne raddoppia le dimensioni (facendolo apparire esattamente lo stesso).

+0

Si tratta di un problema 3D. La prima immagine è un'immagine di riferimento del rettangolo su una scala 1: 1. Il secondo può essere considerato come un'immagine del rettangolo presa da una telecamera. Capisco il vostro punto che ci sono più soluzioni (più matrici di trasformazione) a un caso particolare. Se questo è il caso, sono felice di scegliere uno di loro. (Nella situazione che descrivi, sarei felice sia con la matrice identità che con qualsiasi matrice che dia lo stesso risultato) – dwergkees

1

Questo è un problema di matematica, non di programmazione ..

è necessario definire un insieme di equazioni (il vostro matrice di trasformazione, la mia ipotesi è 3 equazioni) e poi risolverlo per i 4 trasformazioni degli angolari punti .

Ho sempre e solo descritto questo usando tedesco parole ... per cui la suddetta suonerà strano ..

0

Sulla base delle informazioni che hai, non è così facile. Ti darò alcune idee per giocare, comunque. Se avessi le coordinate 3D degli angoli, avresti un tempo più facile. Ecco l'idea di base.

  1. Spostare un angolo all'origine. Successivamente, le rotazioni avverranno sull'origine.
  2. Determinare i vettori degli assi. Fatelo sottraendo gli angoli adiacenti dal punto di origine. Questi saranno un asse xey locale per il tuo mondo.
  3. Determinare gli angoli utilizzando i vettori. È possibile utilizzare il punto e i prodotti incrociati per determinare l'angolo tra l'asse x locale e l'asse x globale (1, 0, 0).
  4. Ruota di un angolo nel passaggio 3. Questo ti darà un nuovo asse x che dovrebbe corrispondere all'asse x globale e un nuovo asse y locale. È quindi possibile determinare un'altra rotazione attorno all'asse x che porterà l'asse y in allineamento con l'asse y globale.

Senza le coordinate z, è possibile vedere che questo sarà difficile, ma questa è la procedura generale.Spero che aiuti.

0

La soluzione non sarà unica, come sottolinea Alex319.

Se la seconda immagine è davvero un trapezio come dici tu, allora questo non sarà troppo difficile. È un trapezio (non un parallelogramma) a causa della prospettiva, quindi deve essere un trapezio isoscele.

Disegnare le due diagonali. Si intersecano al centro del rettangolo, in modo che si occupi della traduzione.

Ruotare il trapezio finché i lati paralleli sono paralleli ai due lati del rettangolo originale. (Quali due? Non importa.)

Disegna un terzo parallelo attraverso il centro. Scala questo ai lati del rettangolo che hai scelto.

Ora per la rotazione fuori dall'aereo. Misura la distanza dal centro a uno dei lati paralleli e usa la legge dei seni.

Se non è un trapezio, solo un quadralaterale, quindi sarà più difficile, dovrai usare gli angoli tra le diagonali per trovare l'asse di rotazione.

Problemi correlati