Beh, quello che stai vedendo è in termini semplici a Pythagorean theorem problem a^2 + b^2 = c^2. Tuttavia, quando si tratta di applicazioni basate su telecamere, le cose non sono molto facili da determinare con precisione. Hai trovato la metà dei dettagli di cui hai bisogno per "a", tuttavia trovare "b" o "c" è molto più difficile.
La risposta breve
Fondamentalmente non può essere fatto con una sola telecamera. Ma può essere fatto con due fotocamere.
Il prolisso Risposta (Ho pensato di spiegare in modo più approfondito, senza giochi di parole)
Cercherò di spiegare, dicono selezioniamo due punti all'interno della nostra immagine e spostare la telecamera a sinistra. Sappiamo che la distanza dalla telecamera di ciascun punto B1 è 20 mm e il punto B2 è 40 mm. Ora assumiamo che elaboriamo l'immagine e la nostra misurazione è A1 è (0,2) e A2 è (0,4) questi sono correlati a B1 e B2 rispettivamente. Ora A1 e A2 non sono misure; sono pixel di movimento.
Quello che ora dobbiamo fare è moltiplicare il cambiamento in A1 e A2 di una costante calcolata che sarà la distanza del mondo reale in B1 e B2. NOTA: Ognuno di questi è diverso in base alla misurazione B *. Tutto ciò si riferisce a Angle of view o più comunemente chiamato campo visivo nella fotografia a diverse distanze. È possibile calcolare con precisione la costante se si conoscono le dimensioni di ciascun pixel sul CCD della fotocamera e il numero f dell'obiettivo che si trova all'interno della fotocamera.
Mi aspetto che non sia così, quindi a distanze diverse è necessario posizionare un oggetto di cui si conosce la lunghezza e vedere quanti pixel occupa. Da vicino puoi usare un righello per semplificare le cose. Con queste misure. Prendi questi dati e forma una curva con una linea di miglior adattamento. Dove l'asse X sarà la distanza dell'oggetto e l'asse Y sarà la costante del rapporto tra pixel e distanza che devi moltiplicare per movimento.
Quindi, come si applica questa curva. Beh, è un lavoro da indovinare. In teoria maggiore è la misurazione del movimento A * più l'oggetto è vicino alla fotocamera. Nel nostro esempio i nostri rapporti per A1> A2 dicono rispettivamente 5 mm e 3 mm e ora sappiamo che il punto B1 si è spostato di 10 mm (2x5 mm) e B2 si è spostato di 6 mm (2x6 mm). Ma diciamocelo: non sapremo mai B e non saremo mai in grado di dire se una distanza spostata è di 20 pixel di un oggetto vicino non in movimento lontano o di un oggetto lontano che si muove molto lontano. Questo è il motivo per cui Xbox Kinect utilizza sensori aggiuntivi per ottenere informazioni di profondità che possono essere legate agli oggetti all'interno dell'immagine.
Quello che si tenta di tentare con due fotocamere è che la distanza tra queste telecamere è nota, il movimento può essere calcolato in modo più accurato (efficacemente senza utilizzare un sensore di profondità). La matematica dietro questo è estremamente complessa e suggerirei di cercare alcuni articoli di giornale sull'argomento. Se vuoi che spieghi la teoria, posso tentare di farlo.
Tutta la mia esperienza deriva dalla progettazione di acquisizione video ad alta velocità e elaborazione delle immagini per il mio PHD quindi fidati, non può essere fatto con una telecamera, mi dispiace. Spero che questo aiuti.
Acclamazioni
Chris
[EDIT]
Stavo per aggiungere un commento, ma questo è più facile a causa della mole di informazioni:
Dal momento che è il Kinect Immagino che tu abbia alcune informazioni approfondite pertinenti associate a ciascun punto, se non hai bisogno di capire come ottenere questo.
L'equazione è necessario iniziare con è per il campo visivo (FOV):
O/D = I/F
Dove:
f è uguale alla lunghezza focale dell'obiettivo solitamente espressa in mm (ad esempio 18 28 30 50 sono esempi standard)
d è la distanza dell'oggetto dalla lente raccolti dai dati kinect
o è la dimensione dell'oggetto (o "campo visivo" perpendicolare e attraversata dall'asse ottico).
i è la dimensione dell'immagine (o "campo fermo" perpendicolare e bisecato dall'asse ottico).
abbiamo bisogno di calcolare i, dove o è il nostro sconosciuto così per i (che è la diagonale),
avremo bisogno la dimensione del pixel sul CCD questo a micrometri o μm è necessario trovare queste informazioni, Per sapere lo prenderemo come 14um che è standard per una camera di scansione dell'area midrange.
Quindi prima dobbiamo elaborare i dimensione orizzontale (ih) che è il numero di pixel della larghezza della telecamera moltiplicato per la dimensione del pixel ccd (useremo 640 x 320)
così: ih = 640 * 14um = 8960um
= 8960/1000 = 8.96mm
Ora abbiamo bisogno i dimensione verticale (iv ) stesso processo, ma altezza
così: iv = (320 * 14um)/1000 = 4,48 millimetri
Ora i è trovato dai teorema di Pitagora teorema di Pitagora a^2 + b^2 = c^2
così: i = sqrt (ih^2 _ iv^2)
= 10.02 mm
ora ci supponiamo di avere un obiettivo 28 mm. Ancora una volta, questo valore esatto dovrà essere scoperto. Così la nostra equazione è riarrangiato per darci o è:
o = (i * d)/f
Ricordati o sarà diagonale (si suppone di oggetto o punto è 50mm di distanza):
o = (10,02 millimetri * 50mm)/28mm
17.89mm
Ora abbiamo bisogno calcolare la dimensione orizzontale (oh) e la dimensione verticale (ov) in quanto ciò ci darà la distanza per pixel spostata dall'oggetto. Ora come FOV α CCD o i è direttamente proporzionale alla o lavoreremo un rapporto k
k = I/O
= 10.02/17.89
= 0.56
così:
o dimensione orizzontale (oh):
oh = ih/k
= 8,96 millimetri/0.56 = 16 millimetri per pixel
o dimensione verticale (ov):
ov = iv/k
= 4,48 millimetri/0,56 = 8 mm al pixel
Ora abbiamo le costanti che richiediamo, usiamole in un esempio. Se il nostro oggetto a 50mm si sposta dalla posizione (0,0) a (2,4) quindi le misurazioni nella vita reale sono:
(2 * 16mm, 4 * 8mm) = (32 mm, 32 mm)
Anche in questo caso, un teorema di Pitagora: a^2 + b^2 = c^2
distanza totale = sqrt (32^2 + 32^2)
= 45.25mm
complicato lo so, ma una volta che hai questo in un programma è più facile. Quindi per ogni punto dovrai ripetere almeno la metà del processo come d cambierà quindi o per ogni punto esaminato.
Spero che questo ti porta sulla strada,
Acclamazioni Chris
Sto offrendo una taglia di 500 per la risposta a questa domanda http://stackoverflow.com/questions/7414809/extract-projective-homography-from-two-kinect-depth-maps – smirkingman