2012-07-05 5 views
10

¿Las funciones HoughLines o HoughLinesP en OpenCV devuelven la lista de líneas en orden de acumulación como lo hace la función HoughCircles? Me gustaría saber el orden de las líneas. También sería muy útil obtener el valor del acumulador para las líneas, de modo que se pueda utilizar un umbral inteligente y adaptativo en lugar de uno fijo. ¿Están disponibles el valor de orden o del acumulador sin rewriting OpenCV myself?Líneas más fuertes de OpenCV Hough

+1

buena. Siempre asumí que las líneas se daban en orden. Y esta suposición hasta ahora ha sido consistente con mis resultados ... Sin embargo, sería bueno estar seguro. –

Respuesta

11

HoughTransform ordena las líneas que descienden por número de votos. Puede ver el código here

Sin embargo, el conteo de votos se pierde a medida que la función retorna - la única forma de tenerlo es modificar OpenCV.

La buena noticia es que no es muy complicado, lo hice yo mismo una vez. Es un tiempo de minutos para cambiar la salida de vector<Vec2f> a vector<Vec3f> y completar el último parámetro con el conteo de votos.

Además, hay que modificar CvLinePolar para añadir el tercer parámetro - Hough se implementa en C, y no es un envoltorio sobre ella en C++, así que hay que modificar tanto la implementación y la envoltura.

El código principal para modificar es aquí

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

Gracias por dejar eso en claro y señalarme el código. Estoy usando la versión probabilística y revisando el código, sería bueno sacar también linesMax para acelerar las cosas. – zzzz

+1

El Probabilistic está en el mismo archivo, creo que ya lo encontraste. El enfoque diferente en la búsqueda de línea significa que el conteo de votos no es tan relevante como en el clásico H. Siempre que una línea tenga los votos mínimos requeridos, se inserta en la cola de resultados. No se realiza ninguna clasificación. – Sam

+0

Hola, Perdón por actualizar este hilo, pero ¿tienes alguna idea de cómo obtener el valor del acumulador en la transformación probalística de Hough? No estoy seguro de en qué parte de la matriz del acumulador están los votos de la línea. – Aeefire

Cuestiones relacionadas