2013-04-12 8 views
5

Sono impaziente di implementare Mappatura prospettiva inversa per calcolare la distanza da un altro veicolo su una strada. So che ho bisogno di generare una matrice di trasformazione con punti di origine e punti di destinazione prima di applicare la funzione warpPerspective(), ma non so come calcolare i punti di destinazione.generare una vista dall'alto di una strada utilizzando warpPerspective() opencv

Ho cercato in questo forum e altri siti, ma non può trasformare la prima immagine per la seconda immagine:

Image 1 http://shanetuohy.com/fyp/Images/img.png

Image 2 http://shanetuohy.com/fyp/Images/IPMim.png

+0

Che dire di [questo thread] (http://stackoverflow.com/questions/7838487/executing-cvwarpperspective-for-a-fake-deskewing-on-a-set-of-cvpoint)? – karlphillip

+0

Si prega di includere il codice che hai già scritto e indicare quale parte di esso sta causando un problema per te –

+0

Questo assomiglia molto al materiale del livello di ricerca.Prova a cercare documenti pdf relativi a questo argomento: [questo] (http://www.eee.nuigalway.ie/Research/car/documents/docualain_issc10.pdf) sembra promettente, ma non l'ho letto, io guardai solo un paio di pagine. Comunque questo è probabilmente il tipo di documenti che dovresti cercare. – didierc

risposta

3

L'obiettivo che si vuole raggiungere richiede di calcolare l'honografia tra il piano terra, la sua posizione nell'immagine vista dalla telecamera e la sua posizione nella vista dell'aquila.

Questo è tradizionalmente gestito estraendo le funzionalità (angoli o punti chiave) nella maggior parte delle condotte di Computer Vision, ma questo non è pratico qui: non ci sono funzionalità (o funzioni di modifica) sulla strada.

Che cosa si può fare, invece è calcolare queste omografie in una fase di taratura, con la seguente procedura:

  1. Metti la tua fotocamera sul veicolo di destinazione. Metti un modello rettangolare noto (di solito una scacchiera) sdraiato su un terreno pianeggiante di fronte alla macchina. Se vuoi le distanze metriche, devi conoscere anche la dimensione del modello, altrimenti misurerai solo le distanze relative.

  2. Scattare una foto del modello di calibrazione con questa impostazione.

  3. Nell'immagine del motivo, è necessario rilevarlo. Questo può essere fatto in diversi modi: se si dispone di un'immagine di riferimento del modello, è possibile rilevarlo automaticamente oppure è possibile fare clic manualmente sui 4 angoli esterni. Questo ti darà almeno quattro punti di corrispondenza (1 per ogni angolo esterno del modello). Le corrispondenze dei punti sono stabilite tra i punti dell'immagine (ad esempio, i 4 angoli) e una posizione di riferimento, che è o la posizione di detto punto nell'immagine di riferimento del modello (se oyu ne ha uno) o la posizione che si desidera per questo punto nella vista dell'aquila.

  4. Dalle corrispondenze, stimare un'omografia H. H è una matrice 3x3 (vedere qualsiasi riferimento Computer Vision, in linea o da manuale).

In questo modo viene visualizzata la trasformazione tra ciò che vede la videocamera e la posizione di riferimento del modello di calibrazione. Se hai preso come riferimento una vista fronto-parallela del modello o le sue coordinate desiderate nella vista dell'aquila, hai l'omografia che stai cercando. In caso contrario, è necessario stimare una seconda omografia e concatenare i risultati.

Si noti che questa applicazione è considerata in Gary Bradski's Learning OpenCV book. Puoi leggere ulteriori informazioni sul libro e trovare il codice originale online.

+0

Grazie ragazzi! tutti voi per una risposta veloce. @ karlphillip ho guardato diversi thread come questo, ma non riesco a implementare il mio obiettivo –

+0

Ho pensato che la tua alternativa prima, solo non voglio implementare ancora, perché significa più lavoro. So che questa implementazione è utilizzata per il rilevamento delle corsie in tempo reale. Aiutami ragazzi! ho bisogno di trovare una soluzione al mio problema. –

Problemi correlati