2010-11-30 13 views
6

¿Alguien conoce el algoritmo particular para Probabilistic Hough Transform en la implementación de OpenCV? Quiero decir, ¿hay un documento de referencia o documentación sobre el algoritmo?¿Cuál es la implementación particular de Probabilistic Hough Transform en OpenCV?

Para tener la idea, sin duda puedo mirar el código fuente, pero me pregunto si hay alguna documentación al respecto. - No está en los comentarios del código fuente (OpenCV 1.0).

¡Gracias!

-Jin

Respuesta

0

He aquí un artículo sobre el aleatorizado transformada de Hough, que yo creo que es el mismo que el "probabilístico transformada de Hough" utilizado en OpenCV http://en.wikipedia.org/wiki/Randomized_Hough_Transform

básicamente, usted no llenar el acumulador para todos los puntos, pero elige un conjunto de puntos con un cierto criterio para completar la transformación de Hough.

La consecuencia es que a veces, se puede perder la línea real si no hay suficientes puntos con los que comenzar. Supongo que querrías usar esto si tienes estructuras lineales algo para que la mayoría de los puntos sean redundantes. referencia n. ° 2: L. Xu, E. Oja y P. Kultanan, "Un nuevo método de detección de curvas: transformada aleatoria de Hough (RHT)", Pattern Recog. Letón. 11, 1990, 331-338.

También leí sobre algunos enfoques bastante diferentes donde los algoritmos tomarían dos puntos y calcularían el punto en el medio de esos dos puntos. si el punto es un punto de ventaja, entonces acumularíamos el bin para esa línea. Esto es aparentemente extremadamente rápido, pero supondría una matriz algo no dispersa, ya que podría perder líneas fácilmente si no hubiera suficientes puntos de ventaja para empezar.

+0

comentarios muy útiles! ¡Gracias! No busqué las líneas de enfoques aleatorios, sino que pensé que debería ser algo así como "transformada probabilística de Hough" más o menos. – galactica

+3

La Transformada aleatoria de Hough es diferente de la Transformación probabilística progresiva de Hough. El primero toma tuplas de puntos aleatorios que se mapean en celdas individuales en el espacio Hough. Hace esto de forma iterativa, y las líneas/planos se detectan tan pronto como una celda de acumulador cruza un umbral. Este último tiene un mecanismo de filtrado para eliminar el ruido al considerar el porcentaje de votos del número total de votos que votan por una celda. Ver: "La Transformada Hough 3D para la Detección de Plano en Nubes Puntuales: Una Revisión y un Nuevo Diseño de Acumulador" por Borrmann et al. (2011) –

+1

¿No entiendo por qué esta es la respuesta aceptada? Tiene poco, si es que tiene algo que ver con la implementación de OpenCV, que como se mencionó anteriormente implementa la Transformación progresiva probabilística de Hough en lugar de la Transformada aleatorizada de Hough. –

6

La documentación de OpenCV establece que el algoritmo se basa en "Detección robusta de líneas utilizando la transformada probabilística progresiva de Hough", por J Matas et al. Esto es bastante diferente del RHT descrito en wikipedia.

El papel no parece estar disponible gratuitamente en internet, pero se puede purcahse desde Elsevier

2

El código fuente para HoughLinesProbabilistic en OpenCV 2.4.4 contiene comentarios en línea que explican los diversos pasos implicados.

https://github.com/Itseez/opencv/blob/master/modules/imgproc/src/hough.cpp

+0

Utilice enlaces permanentes cuando se vincula a GitHub. Ese archivo ha cambiado desde que publicó ese enlace y, por lo tanto, el número de línea ahora es irrelevante. GitHub no lo hace fácil; puede presionar "y" en una vista de archivo para obtener el enlace permanente. – bfontaine

1

Aquí es un papel bastante concisa por Matas et.al. que describe el enfoque y, como otros han mencionado, es de hecho bastante diferente de aleatorizado transformada de Hough:.

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.40.2186&rep=rep1&type=pdf

(No estoy seguro de cuánto tiempo este enlace va a ser válida a pesar de que está en/desde citeseer, no esperaría que desapareciera mañana, pero quién sabe ...)

He echado un vistazo rápido a la implementación icvHoughLinesProbabilistic() en hough.cpp, porque la usaré :-) Parece bastante sencillo De todos modos, mi interés principal era si al final se ajusta la línea al mínimo de cuadrados: no es así, lo cual está bien. Simplemente significa que, si se desea obtener segmentos de línea precisos, se puede utilizar el punto de inicio/final y los parámetros de línea implícitos como los devuelve OpenCV para seleccionar puntos relacionados del conjunto de puntos general.En primer lugar, utilizaría un umbral de distancia bastante conservador y ejecutar RANSAC/MSAC en estos puntos con un umbral más pequeño. Finalmente, ajuste una línea al conjunto de inlier como de costumbre, p. usando cvFitLine() de OpenCV.

Cuestiones relacionadas