2010-04-02 12 views
5

Quindi prima di tutto devo tale immagine (e naturalmente ho tutti i punti di coordinate in 2d così posso rigenerare linee e controllare dove si incrociano)Esiste un algoritmo per determinare la posizione 3d in questo caso? (immagini sotto)

alt text http://superior0.narod.ru/2d.jpg

Ma hey, avere un'altra immagine della stessa linea (lo so thay sono gli stessi) e le nuove coordinate dei miei punti come su questa immagine alt text http://superior0.narod.ru/3d.jpg

Quindi ... ora Avendo punti (coordinate) prima immagine su, Come posso determin rotazione aereo e La profondità Z sulla seconda immagine (considerando che il primo centro era nel punto (0,0,0) senza rotazione)?

+2

Chiedere una soluzione specifica a questo problema piuttosto che le tecniche generali ha un odore molto simile a un compito a casa. –

+3

oh dai, questo caso è generale, e la soluzione specifica sarà di carattere generale per molti casi come questo (per triangoli per ex ...) – Rella

+0

possibile duplicato di [Vettore normale di tre punti] (http: // stackoverflow .com/domande/2035659/normale-vettore-di-tre-punti) – dmckee

risposta

2

Lasciatemelo dire in anticipo: questo problema è difficile. C'è una ragione per cui la domanda collegata a Dan Story non ha avuto risposta. Lascia che fornisca una spiegazione per le persone che vogliono prenderne una pugnalata. Spero di sbagliarmi su quanto sia difficile, però.

Suppongo che le coordinate dello schermo 2D e la matrice di proiezione/prospettiva siano note. Hai bisogno di sapere almeno questo (se non conosci la matrice di proiezione, in pratica stai utilizzando una fotocamera diversa per guardare il mondo). Chiamiamo ogni coppia di uno schermo coordinate 2D (a_i, b_i), e vi assumono la matrice di proiezione è di forma

P = [ px 0 0 0 ] 
    [ 0 py 0 0 ] 
    [ 0 0 pz pw] 
    [ 0 0 s 0 ], s = +/-1 

Quasi ogni proiezione ragionevole ha questa forma. Lavorando attraverso la pipeline di rendering, si scopre che

a_i = px x_i/(s z_i) 
b_i = py y_i/(s z_i) 

dove (x_i, y_i, z_i) sono le coordinate originali 3D del punto.

Ora, supponiamo che tu conosca la tua forma in un insieme di coordinate canoniche (qualunque cosa tu voglia), in modo che i vertici siano (x0_i, y0_i, z0_i). Possiamo organizzarli come colonne di una matrice C. Le coordinate effettive della forma sono una trasformazione rigida di queste coordinate. Analogamente, organizziamo le coordinate attuali come colonne di una matrice V.Allora queste sono legate dalla relazione

V = R C + v 1^T    (*) 

dove 1^T è un vettore di riga quelli con la giusta lunghezza, R è una matrice di rotazione ortogonale della trasformazione rigida, e v è il vettore offset della trasformazione.

Ora è presente un'espressione per ogni colonna di V dall'alto: la prima colonna è { s a_1 z_1/px, s b_1 z_1/py, z_1 } e così via.

si deve risolvere il sistema di equazioni (*) per l'insieme di scalari z_i, e la trasformazione rigida definito R e v.

Difficoltà

  • L'equazione è lineare nelle incognite, coinvolgendo quozienti di R e z_i
  • Abbiamo ipotizzato fino ad ora sapere quale coordinate 2D corrisponde a cui vertici della forma originale (se la tua forma è quadrata, questo è un po 'meno un problema).
  • Supponiamo che ci sia addirittura una soluzione; se ci sono errori nei dati 2D, allora è difficile dire quanto sarà soddisfatta l'equazione (*); la trasformazione sarà non rigida o non lineare.
5

Quello che stai cercando di trovare è chiamato una matrice di proiezione . Determinare la proiezione inversa precisa di solito richiede di avere coordinate stabilite saldamente sia nei vettori di origine sia in quelli di destinazione, che le immagini di cui sopra non hanno intenzione di darti. Puoi comunque approssimare usando le posizioni dei pixel.

This thread ti fornirà una panoramica dettagliata delle tecniche che devi utilizzare.

1

Si chiama (digitale) fotogrammetria. Inizia a cercare su Google.

1

Se siete veramente interessato a questo tipo di problemi (che sono comuni in computer vision, il monitoraggio oggetti con le macchine fotografiche, ecc), il seguente libro contiene un trattamento dettagliato:

Ma, Soatto, Kosecka, Sastry, An Invitation to 3-D Vision, Springer 2004.

Attenzione: questo è un testo di ingegneria avanzato e utilizza molte tecniche di natura matematica. Scorri i capitoli di esempio presenti nella pagina web del libro per avere un'idea.

Problemi correlati