TRANSFORMADA DE FOURIER

Por Antonio Larrosa Jimenez
alumno de 2o de Matematicas, para la asignatura de Libre Configuracion : "Procesamiento de Imagenes"
Indice
0. Como instalar el programa y donde conseguirlo

Para instalar el programa, necesita haber instalado antes el entorno KDE, que puede conseguir de www.kde.org .
Una vez instaladas las librerias de KDE, basta con descomprimir el fichero tfourier-1.0.tgz y ejecutar (entrando en el directorio creado) :
"configure", "make" y "make install" (este ultimo, como root)
Una vez hecho esto, ya se puede ejecutar tfourier !
Tfourier estara en internet a finales de Febrero, en principio en mi pagina personal y poco despues en cualquier mirror de ftp.kde.org

1. Como cargar imagenes

Para cargar una imagen puede usar 3 metodos:
    1. Pulsar 'Abrir ...' en el menu 'Archivo'
    2. Pulsar en el boton de 'Abrir archivo' de la barra de tareas ()
    3. Coger un fichero de una ventana del gestor de ficheros y arrastrarlo con el raton hasta que este
    sobre la ventana del programa. (haciendo Drag&Drop)

Se pueden abrir imagenes en formato xpm (estandard de XWindows/Linux) , gif (estandard de Internet, propietario de Compuserve) y bmp (estandard de Windows).
Al cargar una imagen, esta debe aparecer en la ventana , en una columna con 4 imagenes, la primera (superior ) es la imagen cargada, y las otras tres son la descomposicion de esa imagen en RGB o HSV segun la opcion de color elegida
 

1.1 Como grabar una imagen

Para grabar una imagen en disco, basta con elegir la opcion "Guardar ..." del menu "Archivo", y una vez hecho esto, pulsar
con el boton izquierdo del raton sobre la imagen que se quiera guardar, entonces aparecera un dialogo donde escribir el nombre
del archivo y (si se desea), cambiar el directorio actual.

Si antes de pulsar sobre una imagen se decide que no se desea grabarla en disco, se puede volver a seleccionar "Guardar ..." para volver al estado inicial.

Para guardar una imagen se puede utilizar el formato xpm (si se elige "Guardar (XPM) ...") o el formato bmp (si se elige "Guardar (BMP) ..."). No es posible guardar una imagen en formato gif pues Compuserve tiene la patente de este formato y solo esta en el dominio publico la posibilidad de leerlo, para grabarlo hace falta una licencia.

2. Hacer la transformada de Fourier de una imagen

Al hacer la transformada de Fourier, el resultado debe aparecer en una segunda columna justo al lado de la primera. La transformada de Fourier se hace a los tres planos descompuestos de la imagen original, y despues estos se unen para formar la transformada de Fourier general (superior )

Despues de realizar la transformada de Fourier, se puede realizar la transformada de Fourier inversa, que, genera imagenes nuevas que aparecen en una tercera columna, en la que vuelven a aparecer una imagen general y sus tres descomposiciones ( o quizas seria mas adecuado decir que aparecen tres imagenes que se unen para formar una imagen general )

Hay dos metodos para hacer la transformada de Fourier :

2.1. Transformada original

Este metodo usa la funcion que dimos en clase para calcular la transformada. Debido a que hay muchas sumas, senos y cosenos a realizar en cada punto, este metodo puede resultar sumamente lento.
Se puede elegir la opcion del menu "Transformada | T.F. Directa" o la barra de tareas, en el boton 

Para realizar la inversa, solo hay que elegir "Transformada | T.F. Inversa" o en la barra de tareas, el boton 
 

2.2. Transformada rapida

El metodo que mas se usa es el de la transformada rapida de Fourier ( o FFT ).
Es millones de veces mas rapido que el original, y de igual precision.
Encontre el algoritmo de la FFT  unidimensional en la revista Dr Dobbs Journal de Febrero de 1995 y despues lo cambie un poco para que usara el  tipo de datos que me convenia por el programa y para aumentar un poco la claridad y la velocidad del codigo fuente. Ademas, el algoritmo es unidimensional, con lo que tuve que dividir una transformada de Fourier bidimensional en varias unidimensionales en distintas direcciones.
Se puede elegir la opcion del menu "Transformada | FFT Directa" o en la barra de tareas, el boton  asi como la tecla "Espacio" para hacer la FFT de la imagen original
Para la inversa, estan el menu "Transformada | FFT Inversa", el boton  de la barra de tareas o la tecla de borrado atras (backspace)
Para realizar una FFT, hace falta que las dimensiones de la imagen sean potencias de 2 (32, 64, 128 , etc.) por lo que si se carga una imagen con otras dimensiones (por ejemplo 55x81) en vez de negarse a hacer una FFT como otros programas, tfourier primero expande la imagen (en el ejemplo, hasta 64x128), haciendo negro todo el marco creado y despues realiza la FFT. Para hacer la inversa, la imagen que se muestra en pantalla, se recorta, para que no muestre el marco negro.

3. Distintos tipos de filtros

El filtro que se quiere usar se debe elegir del menu Filtros
Una vez elegido, se puede usar pulsando el boton izquierdo del raton sobre una imagen de la columna central (transformadas de Fourier). Algunos filtros requieren dos parametros, para lo que se pulsa el boton derecho.
Los filtros se pueden pasar a los tres canales de la descomposicion o solo a uno de ellos, segun se pulse en la imagen superior
o en las tres inferiores.

3.1. Filtros de paso baja

Los filtros de paso baja eliminan las altas frecuencias de la imagen, resultando una imagen mas difuminada.
Pulsando el boton izquierdo sobre un punto de la imagen se especifica el radio limite a partir del cual, se eliminan las frecuencias.
Ejemplo:

3.2. Filtros de paso alta

Los filtros de paso alta eliminan las bajas frecuencias, lo que da una imagen en la que se aumenta el contraste en los bordes.
El modo de uso es igual que el del filtro de paso baja
Ejemplo:
 

Aqui solo le he quitado un pequeño rango de bajas frecuencias, con lo que en las baldosas se nota que ya no son de color
constante como antes, sino que en el centro han cambiado de color.

3.3. Filtros de paso de banda

Los filtros de paso de banda, eliminan las frecuencias mas bajas que una dada y las mas altas que otra frecuencia dada.
Para ello, necesita definir una corona circular, esto se hace pulsando con el boton derecho del raton en el radio mayor, y con el boton izquierdo en el menor.
Ejemplo:
 

3.4. Filtros de detencion de banda

Los filtros de detencion de banda (band-stop) eliminan una franja de frecuencias. El funcionamiento es igual que el de los filtros de paso de banda.
Ejemplo:

3.5. Filtros de interpolacion lineal

Este filtro es parecido al de Butterworth, pero mientras que un filtro de Butterworth usa una funcion del estilo :

La interpolacion lineal usa una asi :

Esto lo he hecho asi porque me parece mas util si se pudiese definir el rango de frecuencias donde actua propiamente el
filtro,  y para esto necesita dos parametros (por lo que se usa como el filtro de paso de banda o detencion de banda)

Ejemplo:

 

4. Opciones de los filtros

Los filtros son altamente configurables, para lo que tienen varias opciones que cambian el funcionamiento de cualquiera de los anteriormente descritos.

4.1. Cambio de los valores de paso y de detencion

Cuando un valor de la transformada puede pasar o no, en realidad, se multiplica por un valor de paso o por uno de detencion.
Por defecto el valor de paso es 1 (dejar el valor como esta) y el valor de detencion es 0 (al multiplicar por 0 se anula el valor)
Pero estos son configurables, asi por ejemplo es posible que un filtro de paso baja, multiplique las frecuencias bajas por 2 y
haga 0 las altas, o las atenue multiplicandolas por 0.3
Tambien es posible que un filtro de paso alta, en realidad sea de paso baja, simplemente haciendo 0 el valor de paso y 1 el de detencion; esto no es muy util, pero es posible hacerlo.
Ejemplo:
Haciendo los valores de paso y de detencion -1 el resultado de cualquier filtro es :

Esto es logico, pues en la transformada de Fourier es lineal y por tanto, se puede sacar el signo negativo introducido como factor comun y lo que queda es el negativo de la imagen original

4.2. Activacion/Desactivacion de cuadrantes

Para comprender mejor el funcionamiento de la transformada de Fourier, es posible ver que pasa si los filtros, en vez de actuar sobre toda la transformada, lo hacen sobre uno o varios de los cuadrantes de la images.
En el menu Filtros, submenu Cuadrantes, se pueden activar y desactivar los 4 cuadrantes.
Este son los resultados de eliminar 3 cuadrantes y dejar solo ...
...el primer cuadrante , el segundo :

... el tercer cuadrante, y el cuarto:

4.3. Cambio del centro de los filtros

Por defecto, el centro de los filtros coincide con el centro de la imagen (valor nulo de la frecuencia), pero, ¿Que pasa si en una transformada como la siguiente se quiere eliminar una de esas "estrellas" ?

Esto es posible cambiando el centro de los filtros, si despues se elige un filtro de paso alta, se podra eliminar ese punto de
acumulacion de las frecuencias.
Una vez elegida la opcion, el centro de los filtros se fijara en el punto donde se pulse el boton izquierdo del raton. Si una vez elegida la opcion se decide no cambiar el centro, se puede desactivar, eligiendo de nuevo "Cambiar Centro" del menu "Filtros"

5. Opciones de color

En el menu Opciones, se puede cambiar el metodo de descomposicion de las imagenes :

5.1. RGB

Si se elige RGB, las imagenes se descompondran en sus planos Rojo (Red), Verde (Green), y Azul (Blue) :

 
 

5.2. HSV
 
Si se elige HSV, las imagenes se descompondran en planos de Tonalidad (Hue) , Saturacion (Saturation) y Valor (Value)

6. Dos ejemplos

Para terminar voy a poner dos ejemplos:
Poniendo el centro de los filtros en medio del segundo cuadrante y pasando un filtro lineal cada vez mas cerrado , queda la siguiente secuencia de transformadas de Fourier e imagenes :



 

Y un ejemplo de como usar la transformada de Fourier para eliminar ruidos en una imagen, la imagen original y su transformada son :

Si le pasamos un filtro de detencion de banda, la transformada y la imagen quedan asi :

y en la imagen original ha desaparecido el ruido !

He dejado algunas imagenes para probar el programa en el directorio "ejemplos"