2013-11-10 23 views
5

Sono uno studente di EE, sto lavorando a un progetto che richiede di rilevare strade (principalmente le svolte). Il requisito è che, date le coordinate GPS e le direzioni dei turni, il robot dovrebbe essere in grado di navigare fino a un determinato punto. Il problema è che le coordinate GPS sono molto imprecise e le strade non sono sempre diritte. Quindi dovrò rilevare i lati della strada e navigare di conseguenza il mio robot.Computer Vision, rilevamento strade, da dove cominciare?

Sto pensando di montare due telecamere su entrambi i lati del robot. Che normalmente verrebbe utilizzato per mantenere il robot al centro della strada e quando il robot sta effettuando una rotazione di 5 metri, una delle telecamere lo guiderebbe attraverso la svolta.

Lavorerò su raspberry pi, ma a scopo di test ho installato simplecv e opencv sul mio laptop con Ubuntu. Non ho assolutamente alcuna esperienza precedente con la visione artificiale. Non ho idea da dove cominciare. Qualcuno potrebbe aiutarmi a guidarmi attraverso l'algoritmo per raggiungere il compito sopra menzionato? Dovrei lavorare con simplecv o opencv? Python o C++? Personalmente mi piace il simplecv su Python, ma non ho idea se sia in grado di raggiungere l'obiettivo.

Qualsiasi aiuto sarebbe apprezzato. Mettimi sulla buona strada!

I will be demoing the project on campus, here the pictures of the campus's roads.

Edit: condizioni ideali, senza traffico, senza ostacoli. Larghezza della strada costante

+0

Prova a leggere il rilevamento dei bordi per le svolte nitide o la trasformazione di HoughLine, disegnando le linee dei lati delle strade, proprio in cima alla mia testa ... Ma wouldn ' t sensori normali come IR, ultrasuoni, ecc. sono sufficienti invece di computer vision? Non un esperto di robot qui, quindi basta chiedere sensori IR – rockinfresh

+0

@rockinfresh con raggio limitato (solo pochi cm). Ho provato ad ultrasuoni ma il pavimento è troppo basso, ultrasuoni o rileva la strada o niente del tutto –

risposta

3

Un suggerimento, penso che funzionerà, quindi provatelo. Le 4 immagini che userò sono in riferimento da "OpenCV 2 Computer Vision Application Cookbook" di Robert Laganiere. Questo era uno dei libri che ho usato per studiare l'elaborazione delle immagini, e c'era un esempio simile su strada usando HoughLine.

Ho usato HoughLine prima, ma non sulle strade. Quindi, per dare u meglio l'idea, qui è =>

L'immagine originale è come si vede:

enter image description here

Ora u può applicare Canny all'immagine, e sarà simile a questa:

enter image description here

O u possibile utilizzare Sobel troppo ...

enter image description here

Dopo di che, u applicare HoughLine:

enter image description here

Si dovrà regolare i parametri da soli.

ecco il mio suggerimento =>

Mettere una fotocamera frontale, un po 'abbastanza basso per essere in grado di rilevare le corsie fino a un paio di metri, è possibile utilizzare il ROI troppo (Region of Interest) per concentrarsi sul metà inferiore del video in cui sono più probabili le corsie. Questo serve per eliminare il rumore, dove vengono rilevati anche altri oggetti paralleli alla strada.

Si fa in modo che il robot rimanga al centro sia delle linee stradali rilevate. E un altro uso del ROI è che un lato della linea scompare, significa che si sta spostando a vista in modo obliquo.È possibile regolare il robot per tornare a destra in pista.

Quando c'è un turno, è possibile specificare che se le linee (forse attraverso l'operatore abile) non sono più verticali, fare un giro finché le linee sono di nuovo verticali.

Ovviamente, dovrai scrivere due diverse funzioni per verificare se eseguire una svolta a destra o una svolta a sinistra in base all'angolo delle linee.

Questo è il modo in cui vorrei affrontare il problema. Il mio metodo dovrebbe avere risultati abbastanza decenti. L'unico problema che potresti affrontare è la regolazione dei parametri di Houghlines e Canny.

(PS Nel visualizzare le foto, ho notato il lato del bordo della strada hanno lacune una volta ogni tanto. Quindi consiglio HoughLineP invece di HoughLine cui è possibile specificare la massima distanza tra ogni linea a considerarlo una linea, Se non ricordo correttamente, se non funziona, potrebbe essere necessario eseguire qualche pre-elaborazione sui fotogrammi del video.)

Spero che trovi utile il mio metodo. In bocca al lupo. Se c'è qualcos'altro con cui potresti aver bisogno di aiuto, commenta questa risposta, faccio del mio meglio per aiutare (:

+0

Perdonate comunque il mio inglese informale.Ora in fretta ora.Perfetto – rockinfresh

+0

Questo metodo funziona senza corsie? –

+0

Stavo pensando di eseguire HoughTransform sul marciapiede in realtà. , ma può essere fatto oppure puoi anche usare due fotocamere sul lato che hai proposto nella domanda i nstead per rilevare ogni lato della strada (uno per ciascun lato) anche tramite Hough Transform. È quindi possibile angolare la fotocamera per ritrarre i cordoli nella metà superiore dei fotogrammi catturati e impostare la ROI nella metà inferiore. Se ci pensi, se per esempio c'è una curva sulla strada a destra, il fotogramma catturato sul lato sinistro mostrerà l'HoughLine che entra nella ROI (metà inferiore), mentre il cordolo si avvicina ad esso. – rockinfresh

3

Dato che chiedi "da dove cominciare", ti suggerisco di iniziare leggendo il problema della strada ./rilevazione corsia Forse è possibile verificare nella libreria del campus per una certa letteratura sul problema

per esempio il libro Davies, E. Roy Computer e Machine Vision:... Teoria, algoritmi, pratici Elsevier/accademico Press, 2012, ha "CAPITOLO 23 Sistemi di visione a bordo del veicolo" che descrive l'approccio di base al problema di "Localizzare la carreggiata" e "Posizione dei cartelli stradali". Il libro di Davies ha anche una bibliografia commentata e aggiornata sezione.

Per alcuni retroscena più dettagliate è possibile controllare un articolo di "sondaggio" come la seguente, che confronta i diversi approcci per risolvere il problema:

MCCALL, Joel C.; TRIVEDI, Mohan M. Video-based lane estimation and tracking for driver assistance: survey, system, and evaluation. Intelligent Transportation Systems, IEEE Transactions on, 2006, 7.1: 20-37.

1

Come promesso, ecco un altro metodo.

Per avere un quadro chiaro di ciò che questo metodo è di circa, guardate questo video: metodo di segmentazione http://www.youtube.com/watch?v=TMKd9ov_rmE

Il colore è in realtà utilizzando Expectation-Maximization (EM) algoritmo. E i filtri Gabor per il punto di fuga. Un po 'vicino all'idea che ho in mente ma leggermente diversa.

È possibile provare il metodo mostrato nel video o/e il mio.

Quello che farei in realtà è ancora un punto di fuga e la ROI cambia in base al punto dell'asse y del punto di fuga. Mentre i lati della ROI sono fissi, tale che la strada (il colore grigio è sempre all'interno del ROI).

Dopodiché è necessario utilizzare l'area, dove una volta se lo spazio colore del colore grigio nella ROI è inferiore al 90% (si calcola il numero da soli. Questo è solo un indicatore approssimativo) del ROI (ovvero è un turno). Ci sono diversi metodi per dire quale turno è, ti lascio capire da solo questa parte: p. Certo, puoi pensarci se usi questo metodo.

La mia unica preoccupazione è il passaggio a strisce o piuttosto pedonale nelle immagini campione in bianco che hai mostrato, ma quelle possono essere rimosse abbastanza facilmente. (suggerimento, istogramma e se il colore dei valori sono quelli nella gamma bianca ....oppure puoi usare l'area. se blob è inferiore a questa quantità di pixel ...)

Non sono sicuro di quanto sia costoso il programma.

Ma se avete intenzione di provare questo metodo, concentratevi sullo spazio cromatico HSV o LAB invece di RGB. Ora hai più metodi da sperimentare. Puoi provare a pensare anche ai tuoi metodi. Divertirsi. Elaborazione delle immagini, la visione del computer è davvero divertente (: