viernes, 16 de marzo de 2012

Procesado de imagen en C: escalado

Después de comprobar el buen funcionamiento de los algoritmos en MATLAB (véase las entradas de "Primera aproximación con MATLAB" y "Algoritmo de escalado - MATLAB"), procedemos a implementarlos en C.


- Escalado

En esta ocasión comenzamos con el algoritmo de escalado por resultar más sencillo. Creamos un método de escalado por 4, que recorrerá la matriz de imagen, escalará y devolverá un array unidimensional que será la entrada de la red neuronal.

De nuevo se trata de coger parches de la imagen de tamaño 4x4 y sustituirlos por un solo bit de valor 0 o 1. Debido a que MATLAB permite el fácil calculo de medias y varianzas no nos requirió más que una función de media y una comparación con un umbral para decidir el valor del píxel escalado. En este caso, en cambio, optamos por considerar el número de unos en el espacio de 4x4 bits y compararlo con un umbral, que de momento fijamos en 8 (la mitad de los 16 bits del parche), aunque mediante una simulación en MATLAB puede comprobarse que los resultados no son tan buenos para un umbral fijo como para uno variable basado en el cálculo de media y varianza del fondo.

En lugar de contar bit a bit, recurrimos a una tabla para determinar el número de unos en cada grupo de 4 bits, fila a fila para cada una de las cuatro filas del parche 4x4; en cada posición de la tabla guardamos cuántos unos tiene el número de esa posición en binario. De esta forma basta con consultar la tabla cuatro veces por parche, sumar el número total de unos que corresponda, y comparar con 8.

Guardando posición a posición en un nuevo array unidimensional obtenemos la salida deseada.

Método scaleby4.

No hay comentarios:

Publicar un comentario