2011-10-04 59 views
6

¿Existe alguna documentación útil para utilizar la funcionalidad HOGDescriptor en Python OpenCV? He leído la documentación de C++, pero la versión de Python funciona de manera diferente y no puedo resolverlo simplemente retocando.OpenCV Python e histograma de gradiente orientado

Más específicamente, estoy buscando un comando OpenCV en Python que tome una imagen y una ubicación de píxel como entrada (y posiblemente también algunos parámetros sobre el tamaño de una ventana de detección) y luego devuelva una matriz de Python que contiene el HOG vector de características (es decir, una lista o matriz NumPy, etc., donde el elemento j-ésimo de la lista es el componente de histograma j-ésimo de un histograma de gradientes orientados).

Mi objetivo es alimentar estos histogramas en scikits.learn SVM pipes (para evitar el entrenamiento OpenCV SVM), pero para hacer esto necesito los vectores de características reales y no el tipo de HOG processing chain pipes que parece que OpenCV usa

Cualquier otra implementación de código HOG en Python también funcionaría. Necesito algo razonablemente eficiente para comparar con otra base de código que estoy escribiendo.

+0

Nota: un ejecutable de C++ razonable que tenga argumentos de línea de comando fáciles de usar también funcionaría y podría simplemente incluirlo en mis cosas de Python. Si conoce algún proyecto con código HOG eficiente, puede ser útil. – ely

Respuesta

0

¿Qué tal un poco de Matlab como fuente de inspiración, que pertenece a esta article

+0

¡Gracias! Probablemente también pueda traducir esto a Python. Sin embargo, podría ser más difícil llevarlo a otros idiomas. – ely

0

eche un vistazo a http://sourceforge.net/projects/hogtrainingtuto/?_test=beta para ver el código python HOG y un montón de implementaciones C, cpp, java. En cuanto a documentaciones reales de python y opencv, yo también estoy perdido. Pero esto debería ayudar un poco

+0

No veo ningún código Python en el archivo que descargué de ese enlace. La única cosa relacionada con HOG es un ejecutable llamado 'cvHogFeatureCal' pero no tiene documentación que pueda encontrar. La otra cosa es que OpenCV generalmente implementa clasificadores como cascadas, donde el usuario ingresa imágenes negativas duras y luego verdaderos positivos para el entrenamiento, y OpenCV va automáticamente a producir los clasificadores. Necesito específicamente evitar eso y solo apropiarme de los vectores de características de HOG y luego realizar el entrenamiento de clasificador con diferentes programas (scikits.learn). – ely

0

La aplicación 'Poselets' here tiene una implementación C de descriptores HOG que, aunque escrito con Matlab en mente, se puede adaptar para funcionar con python usando ctypes y numpy.

Puede eliminar todas las rutinas mex y declarar sus matrices de entrada y salida como float * en la función C.

No necesita asegurarse de que sus matrices numpy son contiguas Fortran. Esto se puede conseguir por:

image = image.copy(order='F', dtype = float32)

+0

Uso las cosas de Poselet con bastante regularidad. Según lo indocumentado e inescrutable que era su código Java para la herramienta de anotación de su navegador, me inclino a utilizar el código de Matlab en la publicación superior. La idea de Poselet es genial, pero el hecho de que (a) está en Matlab y (b) no quieren ayudar a otros científicos al proporcionar ningún soporte para su código, me hace menos inclinado a usar sus cosas. Probablemente sería tanto trabajo traducir la mejor rutina de Matlab de Maurits. – ely

+0

Bastante justo, no he experimentado mucho con su implementación, ¡creo que en gran parte debido a la falta de documentación! Pero he construido algo similar usando su rutina HOG como he descrito anteriormente, y funciona bien. Si la velocidad es una prioridad, la utilización de su rutina C puede ser una solución mejor que los bucles anidados en Python. – Martin

5

Esto es un poco tarde, pero, para futuras referencias, scikit-image tiene una implementación de HOG. Esta es una función única que podría extraer el histograma de degradados orientados para una imagen determinada.

+2

Sí, obtuve una copia avanzada de eso antes de que fuera aceptado en scikits.image. He descubierto que simplemente no es lo suficientemente bueno o rápido. La otra cosa es que la interfaz es demasiado difícil de usar. Por ejemplo, el código HoG de Dalal y Triggs acepta listas de puntos clave en una imagen, mientras que la versión scikits.image solo puede hacer parches. Terminé escribiendo mi propio código. Escribí un sencillo "vainilla" HoG para Python y también mi propia versión de piramidal HoG. Por último, implementé dos versiones de GPU en PyCUDA. Puede encontrar el código vinculado [aquí] (http://people.seas.harvard.edu/~ely/faceparts/software.html) – ely