2012-05-11 4 views
5

Ahora estoy trabajando en un proyecto de seguimiento visual. En este proyecto estoy rastreando los ojos en un video de webcam (resolución de 640x480).Acerca de la búsqueda de un alumno en un video

Puedo localizar y rastrear el ojo en cada cuadro, pero necesito ubicar el alumno. Leo muchos papeles y la mayoría de ellos se refieren al método de plantilla deformable de Alan Yuille para extraer y rastrear las características del ojo. ¿Alguien puede ayudarme con el código de este método en cualquier idioma (matlab/OpenCV)?

He intentado con diferentes umbrales, pero debido a la baja resolución en las regiones oculares, no funciona muy bien. Realmente apreciaré cualquier tipo de ayuda con respecto a la búsqueda de pupila o incluso iris en el video.

Sample image

+1

Creo que será difícil con esa resolución . ¿Puedes subir una captura de pantalla a imageshack.us y proporcionar su enlace aquí? –

+0

No sé cómo adjuntar una imagen. ¿Puede ayudarme por favor? –

+0

No puede hacer eso todavía, porque no tiene suficiente reputación en este sitio. – Tibor

Respuesta

1

Dependiendo de la aplicación para el seguimiento de la pupila que iba a encontrar un cuadro de límite para los ojos y luego encontrar el píxel más oscuro dentro de esa caja.

Algunos psuedocode:

box left_location = findlefteye() 
box right_location = findrighteye() 
image_matrix left = image[left_location] 
image_matrix right = image[right_location] 
image_matrix average = left + right 
pixel min = min(average) 
pixel left_pupil = left_location.corner + min 
pixel right_pupil = right_location.corner + min 
+1

Probé con el pi más oscuro xel. Pero el problema con este es que, algunas veces, la luz se refleja en el iris, entonces la pupila ya no es el punto más oscuro. No sé cómo resolver este problema. –

+1

por lo que a veces es el más ligero y a veces el más oscuro? Podrías encontrar el punto más extremo utilizando el valor absoluto del degradado o simplemente encontrando el 'max (abs (ojo_imagen - medio (ojo_imagen)))' – vaebnkehn

+0

Hola vaebnkehn, intenté este enfoque ayer, pero no funcionó . :( –

8

Lo que hay que hacer es convertir su cámara web para una leva de infrarrojo cercano. Hay muchos tutoriales en línea para eso. Try this.

Una Imagen tomada de una leva NIR se verá algo como esto -

enter image description here

Usted puede utilizar OpenCV a continuación umbral.

enter image description here

A continuación, utilice la función de erosionarse.

enter image description here

Después de este rellenar la imagen con un poco de color takeing una esquina como punto de semilla.

enter image description here

eliminar los agujeros y se invierte la imagen.

enter image description here

Uso transformar la distancia al valor más cercano que no sea cero.

enter image description here

hallar la coordenada del máximo valor y dibujar un círculo.

enter image description here

+0

Hola Anirudh, gracias por tu respuesta. El problema es que no puedo usar ninguna cámara de infrarrojos ni ninguna otra versión modificada de la cámara web. Solo debes usar una cámara web simple. De todos modos, muchas gracias. –

+0

Una webcam normal se puede convertir a una NIR fácilmente. Consulte el enlace mencionado anteriormente en respuesta. – Anirudh

2

Si todavía está trabajando en esto, echa un vistazo a mi proyecto Optimeyes: https://github.com/LukeAllen/optimeyes

Utiliza Python con OpenCV, y funciona bastante bien con imágenes de una webcam 640x480. También puede consultar el "Documento de teoría" y el video de demostración en esa página. (Fue un proyecto de clase en Stanford a principios de este año, no está muy pulido, pero hicimos algunos intentos para comentar el código.)

0

En la primera respuesta sugerida por Anirudth ...
Simplemente aplique la función HoughCirles después de la función de umbral (2 ° paso).
Luego puede dibujar directamente los círculos alrededor de la pupila y usando el radio (r) y el centro del ojo (x, y) puede encontrar fácilmente el centro del ojo ...

Cuestiones relacionadas