È possibile convertire da una forma 2D a una 3D?


8

Ho catturato le posizioni delle auto in diversi fotogrammi dal video . Supponiamo che il centroide dell'auto (ad es. Lato sinistro che viene verso di noi nelle immagini) nel fotogramma video1 sia P (x1, y1) e Q (x2, y2) nel fotogramma video4.

È possibile rappresentare i punti P e Q in 3D? in modo da poter calcolare la corretta distanza in pixel d (PQ) e infine calcolare la distanza effettiva

Nota: puoi presumere che la videocamera sia ferma, posta ad un'altezza di 10 m dal livello del suolo. Puoi anche assumere qualsiasi dato adatto se vuoi, auto in movimento su strada puoi anche fare riferimento alla figura successiva.

vista laterale e frontale


1
Contrassegnare il 50% delle tue domande in grassetto, davvero non aiuta.
jojek

1
@jojek signore ho aggiunto una cifra di riferimento
sagar

Risposte:


4

[EDITED] Ecco come è fatto.

Passaggi: 1. Isolare la parte del divisore stradale.

Immagine ritagliataIsolare le strisce gialle

Quindi, utilizzando Houghline, scopri le linee più lunghe in Immagine. Scopri i punti extrema che attraversano il confine dell'immagine. Hai ottenuto i punti Quadilaterali. Ho saltato questa parte scegliendo manualmente. Nel mio caso, la larghezza della strada nella parte superiore dell'immagine è 10 e nella parte inferiore è 60.

Il quadrilatero da trasformare

Ora, per la destinazione, dobbiamo creare un'immagine in modo che il divisore quadrilatero abbia una larghezza uniforme di 60, quindi salviamo in un altro array nuovi punti, che hanno gli stessi punti in basso, ma i punti in alto vengono modificati in quanto formano un rettangolo con altezza uguale all'immagine (o più grande, puoi regolarlo come preferisci dopo averlo eseguito una volta e aver visto i risultati), ma larghezza 60. Ricorda, stiamo trasformando la nostra immagine in modo tale che il divisore si adatti a quest'area rettangolare. L'immagine cambierà automaticamente.

Ora, usando Mat TransformMat = getPerspectiveTransform(ipPts, opPts);

di opencv su punti quadilaterali iniziali e di destinazione, otteniamo una matrice di trasformazione, che applichiamo alla nostra immagine di prova.

warpPerspective(ipImg, opImg, TransformMat, ipImg.size());

Immagine trasformata

Vedrai che molte aree vengono ritagliate per adattarsi all'output in Dimensione input-immagine. Tuttavia noterai che l'immagine è stata trasformata per ottenere un divisore parallelo, come ci aspettavamo. Eseguendo un po 'di traduzione e roba, e ottenendo un'immagine di output di dimensioni maggiori, otterrai questo. Non possiamo mai ottenere un'immagine di output perfettamente avvolta, poiché le sue dimensioni possono essere molto grandi. Ma raggiungeremo alcuni limiti che adempiranno al nostro compito. Ecco l'ultima immagine:

Immagine finale deformata


1
@A Matlabber signore in Matlab c'è qualche funzione per convertire da 2d a proiezione 3d. ??
Sagar,

Il tuo problema non è un problema di proiezione da 2d a 3d. È un problema di trasformazione omografica e mappatura prospettica, quindi un'ulteriore elaborazione che ti aiuterà a calcolare la distanza (cosa stai cercando di realizzare creando un '3d'). Forse questa discussione potrebbe esserti di aiuto.
shreelock,

1
@A Matlabber signore sta diventando difficile capire la trasformazione omografica e la mappatura prospettica. Ho cercato su Google, ma non ne ho idea.
Sagar

Puoi cercare su Google diversi esempi di trasformazione omografica e mappatura prospettica. Questo è un argomento introduttivo, che viene insegnato in molti corsi online di visione artificiale. Sono piuttosto impegnato in questo momento, altrimenti ti avrei dato qualche riflessione su di loro. Prova a cercare corsi sull'elaborazione di immagini / Computer Vision, raramente hanno esercitazioni dimostrative / di programmazione su questo tipo di problemi.
shreelock,

@A Matlabber ok, farò come dici tu. Grazie.
Sagar,

3

Sembra una sorta di problema di ray tracing . Se conosci la posizione e l'orientamento della tua fotocamera, dovresti essere in grado di calcolare la matrice di proiezione 3x4 e il suo inverso.

Ciò dovrebbe consentire di convertire da punti immagine in posizione 3d (sulla strada). Questa discussione http://opencv-users.1802565.n2.nabble.com/2D-to-3D-projection-with-given-plane-td7272428.html potrebbe avere informazioni più utili.

Per quanto riguarda l'applicazione in matlab. C'è un affine3d che puoi usare per memorizzare la trasformazione. Potrebbero esserci anche cose utili per proiezioni / ray tracing nello scambio di file come http://www.mathworks.com/matlabcentral/fileexchange/25974-raytracer ma non ho cercato in dettaglio per trovare ciò che è rilevante per ciò che tu vuoi.


Sir la sua sempre difficile capire la trasformazione omografica e Prospettiva Mapping.i cercato su google anche collegamenti U dato, ma non ottenendo idea in proposito ..
Sagar

1
@sagar Cerca "Geometria a vista multipla in Computer Vision" di Hartley & Zisserman. Questo è IL libro che spiega l'omografia in modo naturale (usando coordinate omogenee, in cui la trasformazione è lineare).
Libor,

1

Se è possibile calibrare la videocamera e se è possibile rilevare alcuni punti di riferimento sul manto stradale, è possibile ottenere coordinate 3D dei punti dell'immagine che si trovano sulla strada. Questo presuppone che la strada sia su un piano. In altre parole, se riesci a rilevare un'auto, puoi calcolare le coordinate 3D della parte inferiore dell'auto. Vedi questo esempio in MATLAB usando la Casella degli strumenti di Computer Vision System.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.