Las dos últimas semanas las he dedicado a solucionar el problema del movimiento de la cámara, que hace que las fotos se desplacen algunos píxeles en sentido horizontal y vertical.
Para ello he usado una fórmula que, dadas dos imágenes, devuelve un resultado comprendido entre -1 y 1, siendo el resultado más cercano a 1 cuanto más se parezcan las imágenes. Suponiendo que el desplazamiento máximo de las fotos sea de en torno a 5 píxels, lo que se hace es recortar la primera imagen de la secuencia (imagen A) 5 píxels por cada uno de los lados, y el trozo resultante se va comparando con trozos de las mismas dimensiones de la siguiente imagen (imagen B), quedándonos finalmente con el trozo que más se parezca al de la primera imagen (usando la fórmula citada anteriormente). Después se repite el proceso, usando esta vez como imagen A el trozo que hemos elegido de la anterior imagen B, y como imagen B la siguiente imagen de la secuencia.
El resultado es que las fotos de la secuencia se ven recortadas 5 píxels por cada uno de sus lados, pero habiendo disminuido bastante el pequeño desplazamieno de arriba a abajo y de izquierda a derecha que se podía ver cuando veíamos la secuencia a toda velocidad.
11 mar 2009
16 feb 2009
Hipótesis de mundo gris
Después de un par de semanas en donde he estado bastante liado con otras cosas, vuelvo a ponerme con el proyecto. He avanzado en diferentes aspectos, aunque el más importante es el de la realización de un algoritmo que suaviza los cambios de intensidad entre las imágenes, lo que se conoce como "mundo gris".
Lo he hecho usando una ventana de 5 imágenes, y por lo que he podido ver parece que funciona, ya que hay imágenes que las oscurece un poco y otras que las ilumina. El tamaño de la ventana está parametrizado para que se pueda cambiar y ver si el resultado mejora aumentando o disminuyendo esta. Este algoritmo hace que la transición entre una imagen y otra sea menos brusca al haber una intensidad uniforme en ellas.
También he hecho un pequeño programa para realizar una captura de imágenes con la webcam, lo que me facilitará el realizar mis propias secuencias de vídeo.
Esta semana intentaré avanzar en el "jitter removal", que consiste en suavizar los desplazamientos en el encuadre al realizar las diferentes fotografías de la secuencia.
Lo he hecho usando una ventana de 5 imágenes, y por lo que he podido ver parece que funciona, ya que hay imágenes que las oscurece un poco y otras que las ilumina. El tamaño de la ventana está parametrizado para que se pueda cambiar y ver si el resultado mejora aumentando o disminuyendo esta. Este algoritmo hace que la transición entre una imagen y otra sea menos brusca al haber una intensidad uniforme en ellas.
También he hecho un pequeño programa para realizar una captura de imágenes con la webcam, lo que me facilitará el realizar mis propias secuencias de vídeo.
Esta semana intentaré avanzar en el "jitter removal", que consiste en suavizar los desplazamientos en el encuadre al realizar las diferentes fotografías de la secuencia.
28 ene 2009
Filtro de mediana
En la última entrada comentaba que había hecho un programa que calculaba la imagen media de un conjunto de imágenes dado. Sin embargo el resultado no era del todo satisfactorio, por lo que he modificado el programa y ahora lo que hace es calcular la "imagen mediana" de un conjunto de imágenes dado. Es decir, cada pixel de la nueva imagen se calcula como aquel que ocupa la posición central de los valores ordenados del conjunto de imágenes.
Con esto se consigue eliminar los objetos móviles, que varían su posición de una imagen a otra, y lo que permanece es lo que se repite en todas las imágenes (por ejemplo: desaparecen los peatones y vehículos, y permanecen los edificios).
El resultado, aunque no es perfecto, sí que mejora al que daba el cálculo de la imagen media.
Con esto se consigue eliminar los objetos móviles, que varían su posición de una imagen a otra, y lo que permanece es lo que se repite en todas las imágenes (por ejemplo: desaparecen los peatones y vehículos, y permanecen los edificios).
El resultado, aunque no es perfecto, sí que mejora al que daba el cálculo de la imagen media.
20 ene 2009
Imagen promedio usando ventana
He estado más liado de lo que pensaba este mes, pero por fin puedo dedicarle más tiempo al proyecto.
Ya he conseguido arreglar el error que me salía al ejecutar las funciones que hice la última vez. Al parecer se estaba accediendo a posiciones de memoria no reservadas, y la solución era simplemente usar la función "malloc" para reservar la memoria necesaria.
También he conseguido acceder a los píxels de una imagen usando punteros, en lugar de los métodos CvGet2d y CvSet2d, lo cual es mucho más eficiente.
Y ahora ya puedo manejar imágenes grandes (1280x1024) sin que me salga desbordamiento de pila. El problema era que almacenaba los datos de cada imagen (los colores RGB de cada píxel) en un array de dos dimensiones, y al ser este demasiado grande se producía el desbordamiento. Ahora esa información la guardo en una imagen en blanco que me creo al comienzo de la función.
Por último, he ampliado el anterior programa que calculaba la imagen promedio de un conjunto de imágenes, y ahora lo que hace es mostrar la imagen promedio usando una ventana de imágenes que se va "moviendo". Es decir, si tengo 10 imágenes, y la ventana es de 3, calcula el promedio de las imágenes 1, 2 y 3, y la muestra. Luego el promedio de las imágenes 2, 3 y 4, y así hasta terminar en las 8, 9 y 10. El tamaño de la ventana en este caso sería de 3, pero se puede poner el tamaño que se quiera pasándoselo como parámetro a la función.
Ya he conseguido arreglar el error que me salía al ejecutar las funciones que hice la última vez. Al parecer se estaba accediendo a posiciones de memoria no reservadas, y la solución era simplemente usar la función "malloc" para reservar la memoria necesaria.
También he conseguido acceder a los píxels de una imagen usando punteros, en lugar de los métodos CvGet2d y CvSet2d, lo cual es mucho más eficiente.
Y ahora ya puedo manejar imágenes grandes (1280x1024) sin que me salga desbordamiento de pila. El problema era que almacenaba los datos de cada imagen (los colores RGB de cada píxel) en un array de dos dimensiones, y al ser este demasiado grande se producía el desbordamiento. Ahora esa información la guardo en una imagen en blanco que me creo al comienzo de la función.
Por último, he ampliado el anterior programa que calculaba la imagen promedio de un conjunto de imágenes, y ahora lo que hace es mostrar la imagen promedio usando una ventana de imágenes que se va "moviendo". Es decir, si tengo 10 imágenes, y la ventana es de 3, calcula el promedio de las imágenes 1, 2 y 3, y la muestra. Luego el promedio de las imágenes 2, 3 y 4, y así hasta terminar en las 8, 9 y 10. El tamaño de la ventana en este caso sería de 3, pero se puede poner el tamaño que se quiera pasándoselo como parámetro a la función.
Suscribirse a:
Entradas (Atom)