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
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
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 :
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
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.
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.
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:
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.
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:
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"
En el menu Opciones, se puede cambiar el metodo de descomposicion de las imagenes :
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)
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"