2012-07-05 13 views
10

Le funzioni HoughLines o HoughLinesP in OpenCV restituiscono l'elenco di righe nell'ordine dell'accumulatore come fa la funzione HoughCircles? Mi piacerebbe sapere l'ordine delle linee. Sarebbe anche molto utile ottenere il valore dell'accumulatore per le linee in modo da poter utilizzare una soglia intelligente e adattiva invece di una fissa. Il valore dell'ordine o dell'accumulatore è disponibile senza rewriting OpenCV myself?OpenCV Hough linee più forti

+1

buona. Ho sempre pensato che le linee fossero date in ordine. E questa ipotesi è stata finora coerente con i miei risultati ... Comunque, sarebbe bello essere sicuro. –

risposta

11

Hough Trasforma le righe degli ordini in ordine decrescente per numero di voti. È possibile vedere il codice here

Tuttavia, il conteggio dei voti è perso al ritorno della funzione - l'unico modo per farlo è modificare OpenCV.

La buona notizia è che non è molto complicato - l'ho fatto io stesso una volta. È sufficiente un minuto per modificare l'output da vector<Vec2f> a vector<Vec3f> e compilare l'ultimo parametro con conteggio voti.

Inoltre, è necessario modificare CvLinePolar di aggiungere il terzo parametro - Hough è implementato in C, e non v'è un wrapper su di esso in C++, quindi bisogna modificare sia l'attuazione e l'involucro.

Il codice principale di modificare è qui

for(i = 0; i < linesMax; i++) 
{ 
     CvLinePolar line; 
     int idx = sort_buf[i]; 
     int n = cvFloor(idx*scale) - 1; 
     int r = idx - (n+1)*(numrho+2) - 1; 
     line.rho = (r - (numrho - 1)*0.5f) * rho; 
     line.angle = n * theta; 

     // add this line, and a field voteCount to CvLinePolar 
     // DO NOT FORGET TO MODIFY THE C++ WRAPPER 
     line.voteCount = accum[idx];   

     cvSeqPush(lines, &line); 
} 
+0

Grazie per averlo chiarito e indicarmi il codice. Sto usando la versione probabilistica e passando attraverso il codice, sarebbe bello portare anche outMax per accelerare le cose. – zzzz

+1

Probabilistico è nello stesso file, penso che tu lo abbia già trovato. Il diverso approccio nella ricerca in linea significa che il conteggio dei voti non è rilevante come nella classica H. Finché una linea ha i voti minimi richiesti, viene inserita nella coda dei risultati. Non viene eseguito alcun ordinamento. – Sam

+0

Ciao, Ci scusiamo per aver rinnovato questa discussione, ma hai un'idea da fare per ottenere il valore dell'accumulatore nella trasformazione di un nodo probalistico? Non sono del tutto sicuro di dove siano i voti nella matrice degli accumulatori. – Aeefire

Problemi correlati