2009-09-03 9 views
7

(Questo è un follow-up da this previous question).Come testare la prossimità delle linee (trasformazione Hough) in OpenCV

Sono stato in grado di utilizzare correttamente le trasformazioni OpenCV/Hough per rilevare le linee nelle immagini (testo scansionato); all'inizio rileverebbe molte linee (almeno una riga per riga di testo), ma regolando il parametro 'soglia' tramite tentativi ed errori, ora rileva solo le linee "reali".

(Il parametro 'threshold' dipende dalla dimensione dell'immagine, che è un po 'un problema se si devono gestire immagini di risoluzioni diverse, ma questa è un'altra storia).

Il mio problema è che la trasformazione di Hough a volte rileva due righe in cui ce n'è una sola; quelle due linee sono molto vicine l'una all'altra e (apparentemente) parallele.

=> Come posso identificare che due linee sono quasi parallele e molto vicine l'una all'altra? (così posso mantenerne solo uno).

+0

quali dati avete dalle linee? – Janusz

risposta

8

Se si utilizza lo stallo standard o multiscala, si raggiungono le coordinate rho e theta delle linee in coordinate polari. Rho è la distanza dall'origine e theta è normalmente l'angolo tra la linea rilevata e l'asse Y. Senza guardare nei dettagli della trasformazione del cuore in opencv, questa è una regola generale in queste coordinate: due linee saranno quasi parallele e molto vicine l'una all'altra: - i loro thetas sono quasi identici E i loro rhos sono quasi identici O - I loro thetas sono vicini a 180 gradi e i loro rhos sono vicini l'uno all'altro.

Spero che abbia senso.

+0

Sì, hai assolutamente ragione; L'ho scoperto dopo aver postato la mia domanda; in effetti è davvero semplice in OpenCV. Grazie! – Bambax

+0

Inoltre, se si imposta il parametro 'risoluzione' più alto, vengono trovate meno linee; e questo è quello di cui avevo bisogno in realtà. – Bambax

+0

Come possiamo impostare una soglia per la parola chiave 'quasi' con i parametri rho e theta? Ad esempio, se voglio sapere se due linee sono quasi parallele con un angolo massimo tra loro di 0,5 radianti (soglia = 0,5). –

0

È interessante notare che il theta è l'angolo tra la linea e l'asse y.

In genere, i valori rho e theta vengono visualizzati come l'angolo dall'asse x alla linea perpendicolare alla linea in questione. Il rho è quindi la lunghezza di questa linea perpendicolare. Quindi, un theta = 90 e rho = 20 significherebbe una linea orizzontale a 20 pixel dall'origine. Una bella immagine è mostrata su Hough Transform question