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.
28 ene 2009
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)