Sei sulla pagina 1di 7

Compresión Fractal de Imágenes

S. Pérez-Becker
Facultad de Ciencias, Universidad Nacional Autónoma de México

En este artı́culo se estudia de manera teórica y práctica la compresión fractal de imágenes. Se


explican las bases teóricas de su funcionamiento y se esboza un algoritmo para comprimir y descom-
primir imágenes con dicha técnica. La idea es presentar el método de forma clara y sencilla para su
mejor apreciación.

INTRODUCCIÓN Mapeos y sus atractores

Las bases matememáticas para este método son los ma-


Este artı́culo trata sobre el método de compresión frac-
peos de subconjuntos de R2 en sı́ mismos que utilizan
tal de imágenes. La motivación principal de estudiar este
transformaciones afines. Una transformación afı́n en un
método fue entender el cómo las técnicas matemáticas
punto del subconjunto S tiene la forma
de los años recientes se pueden aplicar a problemas de la
vida cotidiana, como lo es la compresión de imágenes.
    
La vida digital actual no la podrı́amos concebir sin in- x ai bi x
wi = . (1)
ternet, e internet no serı́a lo mismo sin técnicas de com- y ci di y
presón y descompresión de datos. Esto es ası́, ya que la
Si le aplicamos el mapeo a todos los puntos de S, decimos
velocidad de transmisión y la capacidad de almacena-
que le aplicamos el mapeo a S. Estos mapeos pueden ro-
miento de datos son dos de los parámetros fundamenta-
tar, trasladar y reescalar dichos subconjuntos. Al volver a
les en el funcionamiento de la red. Estas técnicas hacen
aplicar el mapeo al subconjunto S previamente mapeado,
mucho más eficientes los conceptos antes mencionados,
hicimos una iteración del mapeo. Usualmente trabajamos
reduciendo enormemente los gastos que conllevan. La re-
con varios mapeos que actúan sobre nuestro subconjun-
levancia de la compresión de imágenes no se limita al
to, si además lo hacen de forma iterativa decimos que
internet. Otros campos como la exploración espacial y
tenemos un sistema de funciones iteradas (IFS, por sus
las aplicaciones tanto en satélites geoestacionarios como
siglas en inglés) [4].
en imágenes médicas son ejemplos en donde contar con
El primer resultado importante de estos sistemas es el
estas técnicas es fundamental [1].
llamado teorema de los puntos fijos en mapeos contrac-
Una de las técnicas de compresión de imágenes es la tivos. Este teorema asegura que al aplicar una serie de
compresión fractal (ver [2] para un resumen de otros ti- mapeos contractivos a un subconjunto S ∈ R2 de forma
pos de compresión), que fue inventada y refinada por iterativa, dicho subconjunto se irá a al atractor (o punto
Michael F. Barnsley a finales de los años ochenta [9]. fijo) SW de los mapeos. Esto pasa siempre y cuando los
Esta técnica se basa en comprimir imágenes utilizando mapeos sean contractivos. Cabe resaltar que el atractor
el hecho de que muchas imágenes “naturales” presentan es independiente de las condiciones iniciales. Un ejemplo
autosemejanza. Una de las diferencias fundamentales de muy famoso es el helecho de Barnsley, en donde un IFS
este tipo de técnicas es que el código de compresión no compuesto por sólo cuatro mapeos tiene como atractor
guarda pixeles, por lo que es libre de escalas. De esta for- la imagen de un helecho (ver Fig. 1).
ma se puede descomprimir a cualquier escala sin tener
problemas de resolución.
La meta de este texto es explicar la teorı́a que sus-
tenta el método y mostrar un algoritmo ilustrativo que
ejemplifica su implementación.
(a) (b) (c) (d)
Fisher

Figura 1: Esquema del IFS para el helecho de Barnsley. (a) El


subconjunto S esta marcado con una “L” para ver rotaciones
MARCO TEÓRICO del mismo. (b) el IFS para el helecho, consiste en cuatro ma-
peos que contraen a S. (c) el atractor para el IFS: el helecho
de Barnsley. (d) un acercamiento al helecho muestra su na-
A continuación presentamos las herramientas ma- turaleza fractal, ya que es autosemejante. Figura tomada de
temáticas y teoremas necesarios para entender el funcio- [5]
namiento del método.
2

Esto también es la idea básica de la compresión fractal pixeles. Aquı́ n y m son el número de pixeles horizontales
de imágenes: es más compacto guardar las transforma- y verticales de las imágenes.
ciones cuyo atractor es la imagen que queremos, que los Ahora bien, siguiendo la idea del helecho, queremos en-
pixeles de dicha imagen. Siguiendo el ejemplo del helecho, contrar un PIFS cuyo atractor se parezca mucho a una
si guardamos la imagen como una colección de pixeles re- imagen (es decir, que la dRM S entre el atractor y la ima-
querirı́amos 65536 bits, mientras que si la guardamos co- gen sea pequeña). Dada una imagen, comenzamos par-
mo una colección de transformaciones sólo requerirı́amos tiendola en una serie de celdas rango {Ri }. Estas celdas
768 bits (por los seis números que definen los cuatro ma- rango deben cubrir por completo a la imagen y no se
peos). deben traslapar. A cada Ri le asociamos una transfor-
Usualmente, las imágenes reales son un poco más com- mación wi que mapea los puntos de cierto dominio Di a
plicadas que un helecho en blanco y negro, por lo que un Ri (ver Fig 3). Formalmente, las wi ’s se definen como
IFS no será suficiente. El siguiente paso es considerar un
sistema de funciones iteradas en donde cada mapeo wi
actúa sobre un subconjunto Di ∈ R2 (ver Fig. 2). A es-

Welstead

Figura 3: El PIFS relacionado a una imagen. Los mapeos w̃i


actúan en su dominio Di (estos se pueden traslapar) y lo lleva
Welstead a su rango Ri (que cubren por completo el cuadrado unitario
Figura 2: Un sistema particionado de funciones iteradas. So- sin que haya traslape). Figura tomada de [8]
bre un subconjunto Di ∈ R2 actúa un único mapeo wi que lo
lleva al rango Ri . Figura tomada de [8]

wi (f (x, y)) = si f (w̃i−1 (x, y)) + oi . (4)


te sistema se le llama sistema particionado de funciones
iteradas (PIFS por sus siglas en inglés) [3]. Aquı́, w̃i−1 (x, y) es la transformación que me lleva de Ri
a Di . Por lo que nuestra wi (que se define aplicándola a
f evaluada en los puntos de Ri ) es la función f evaluada
Imágenes y PIFSs en los puntos del dominio Di , multiplicado por un factor
si y recorrido por un factor oi . Cabe notar que la parte
espacial de wi mapea el dominio en el rango, por lo que
Una vez definido un PIFS, pasamos a ver la definición
la transformación total toma a f evaluada en puntos del
matemática de una imagen. Para este artı́culo solamente
dominio Di , la multiplica por si , le suma oi y la lleva al
consideraremos imágenes en escalas de grises. Podemos
rango Ri . Como estamos hablando de imágenes, si con-
ver a una imagen de este tipo como una función f en
trae o expande los valores de f , por lo que podemos decir
R2 que nos regresa un valor entero dentro de una escala
que se trata del contraste. Por otro lado, oi recorre los
predeterminada (escala de grises):
valores de f , por lo que le asociamos el brillo de dicha
f (x, y) → (1, 2, ..., N ) ⊂ R, (x, y) ∈ I 2 . (2) imagen. En la páctica, los dominios siempre serán ma-
yores que los rangos, por lo que las wi ’s siempre serán
Por sencillez, suponemos que la imagen esta confinada mapeos contractivos.
al cuadrado unitario (I 2 ). También queremos definir la Para nosotros, el PIFS interesante (W que actúa sobre
distancia entre 2 imágenes, ya que esto nos dirá que tanto f ) va a ser la unión de todas las wi ’s. Como los rangos
se parecen éstas entre si. Nosotros tomamos la distancia cubren toda la imagen, también lo hará nuestro PIFS.
RMS como la adecuada, aunque nada nos impide utilizar Además, como se trata de una transformación contracti-
otras distancias. va, tiene un punto fijo.
Ası́ que lo que nosotros buscamos es el PIFS W cuyo
 12
punto fijo (fW ), se parezca mucho a la imagen original f .

n X
m
X 2
dRM S (f, g) =  f (xi , yj ) − g(xi , yj )  . (3) Puede sonar complicado y poco práctico buscar los atrac-
i=1 j=1 tores de diferentes PIFS y ver si se parecen a la imagen
original (sobre todo por que los atractores aparecen des-
Aquı́ ya estamos suponiendo que el dominio de nuestras pués de muchas iteraciones del PIFS). Pero un teorema
imágenes es discreto, puesto que estamos hablando de nos facilita considerablemente el trabajo.
3

Un teorema útil la suma de las dRM S de todas celdas Ri y sus respectivas


Di es menor que la suma del otro. Es decir, el error de
Un teorema que nos da una idea de cómo encontar a compresión es menor.
W es el teorema del collage. Éste dice que si la distan- El código fractal como tal, consiste en una lista con un
cia entre una imagen f y la imagen transformada por W renglón para cada Ri . Ahı́ escribimos el ı́ndice de quadtree
(W (f )) se parecen mucho, entonces el atractor de W tam- para la Ri , el indice de rotación (de 0 a 7, sólo hay ocho
bién se parecerá mucho a f . Matemáticamente nos dice posibles rotaciones de 90◦ en el plano, considerando la

que si dRM S (f, W (f )) ≤ , entonces dRM S (f, fW ) ≤ 1−s . reflexión como una), el ı́ndice de la celda Di que la cubrió,
Aqui s es el factor de contractividad de W (ver [8]). el valor del contraste y el del brillo.
El teorema nos asegura lo siguiente: solamente reque- El ı́ndice de quadtree es una forma sencilla de ubicar
rimos que una iteración de W se pareza a f para que su la posición de cada Ri utilizando vectores de dimensión
atractor fW también lo haga. Por lo que nuestra busque- igual a la de la profundidad del quadtree. Los detalles son
da de un W se facilita bastante. bastante ténicos y poco importantes para este texto, por
Una vez que encontramos a la W indicada, la deco- lo que los omitiremos aunque el lector interesado puede
dificación consiste simplemente en aplicarle W muchas buscarlos en la bibliografı́a [8], en donde se explica muy
veces a una imagen inicial g. Esto basta puesto que fW bien. La ventaja del ı́ndice de quadtree es que es libre de
es independiente de la imagen inicial y por el teorema del escalas y se puede utilizar para descomprimir imágenes
collage sabemos que se parecerá mucho a f . El problema de mayor tamaño.
se reduce entonces a encontrar W .
Un ejemplo ilustrativo
EL ALGORITMO
Supongamos que queremos comprimir la imagen Lena
El algoritmo que utilizamos para encontrar a W se le (ver Fig 4). Siguiendo los pasos del algoritmo, dividimos
conoce como el de quadtree partitioning [5]. Consiste en
lo siguiente: Dada una imagen f que queremos codificar,
Partimos a f en una serie de celdas rango {Ri }.
Estas celdas deben cubrir por completo a f y no se
deben traslapar.
Cubrimos a f con un conjunto de celdas dominio
{Di }. Usualmente son muchas celdas dominio y se
traslapan. Entre mayor sea el numero de las Di ’s
mejor será el resultado final, pero la compresión
será más tardada.
Para cada Ri , buscamos en el conjunto de las {Di }
la celda dominio y la transformación wi que mejor
la cubran. Las wi consisten en una rotación, una
reducción y un ajuste de brillo y contraste. Decimos
que una celda Di cubre a una Ri si la dRM S entre
ambas es menor a una tolerancia dada.
Si el ajuste no fue lo suficientemente bueno según
la tolerancia, dividimos a la celda Ri en cuatro sub- Figura 4: La imagen a comprimir: Lena
celdas y repetimos el punto anterior para cada sub-
celda.
inicialmente la imagen en cuatro celdas rango y al mismo
Continuamos repitiendo estos pasos hasta que todas las tiempo creamos una base grande de dominios que son
celdas Ri estén cubiertas o que hayamos alcanzado el ta- parte de la misma imagen (ver Fig. 5). La base de las
maño mı́nimo de las celdas rango que intentamos cubrir Di ’s contiene de preferencia subconjuntos de la imagen
(a esto le llamamos profundidad del quadtree). En caso que se sobrelapan y que sean de muchos tamaños (es
que lleguemos al tamaño mı́nimo de la celda rango, toma- decir, tamaños más pequeños). De esta forma será más
mos la celda dominio que mejor la cubre y la marcamos fácil encontrar una celda dominio que cubra bien la celda
como cubierta. rango en cuestión.
Cuando decimos que el resultado una compresión es La primera iteración de nuestro algorimo no encon-
“mejor” que otro, cuantitativamente nos referimos a que trará ninguna Di que cubra satisfactoriamente alguna de
4

D1 D2 D3 D4

D5

D9 Ri

wi
Ri’s Di’s
Di
Figura 5: Los primeros pasos del algoritmo. Partimos la ima-
gen en cuatro celdas rango Ri ’s y al mismo tiempo hacemos
una base de celdas dominio Di . La base de las Di ’s debe ser
muy grande, por lo que hacemos que las celdas se sobrelapen.
Dicha base debe contener celdas de todos los tamaños, para
poder estar seguros de que siempre encontremos una Di que
cubra a una celda rango dada.

Figura 6: Un candidato para cubrir celda rango. Tarde o tem-


prano en el algoritmo de partición quadtree se llega a una
nuestras cuatro Ri ’s, puesto que una condición que le celda rango como esta Ri . Al algoritmo busca en la base de
imponemos al algoritmo es que el tamaño de las celdas celdas dominio y encuentra que esta Di la cubre bien.
dominio sea mayor al de las celdas rango, para asi tener
efectivamente un mapeo contractivo.
Al no cubrir satisfactoriamente las Ri ’s, el algoritmo
subdivide la primera celda rango (la celda color rojo en la
Fig. 5) y para cada una de las subceldas generadas repite
el proceso. Continuará subdividiendo las Ri ’s hasta que Di
haya cubierto satisfactoriamente todas ellas.
La figura 6 muestra una celda dominio que, bajo un
Ri
mapeo bien escogido, podrı́a cubrir la celda rango mar-
cada. Por un lado cumple la condición de que la Di tiene
mayor tamaño que la Ri , además concuerdan bien los to- (a) (b) (c) (d)
nos claros y los obscuros en ambas celdas. Faltarı́a ver
si una rotación y un ajuste de contraste y brillo mejora
Figura 7: Procedimiento para encontrar el mapeo. (a) tene-
la cobertura (esto serı́a la elección del mapeo que mejor mos la celda rango y la dominio que queremos comparar. (b)
cubre a la Ri .) Una forma gráfica de cómo el algoritmo rotamos a Di en una de las ocho posibles formas (cada 90◦ es
elige el mejor mapeo se muestra en la a figura 7. Teniendo una, también reflejamos y rotamos otras cuatro veces) y es-
la Ri y Di candidatas, rotamos a la Di las ocho posibles cojemos la mejor. Aquı́ solamente mostramos cuatro posibles
rotaciones en el plano. Aquı́ consideramos únicamente rotaciones. (c) comprimimos a Di para que coincida con el ta-
rotaciones de 90◦ y la reflexión sobre un eje como otra maño de Ri . (d) ajustamos el contraste y el brillo por medio
de mı́nimos cuadrados para obtener sus valores óptimos.
rotación. Por lo que tenemos cuatro posibles rotaciones
de la celda original más otras cuatro de la celda reflejada
(ocho en total). De esas rotaciones escogemos la que me-
jor se ajusta a la Ri y la comprimimos para que ámbas
queden del mismo tamaño. Finalmente ajustamos los va-
lores del contraste y brillo mediante un procedimiento de requerirán celdas rango mucho más pequeñas que seg-
mı́nimos cuadrados para obtener los valores óptimos y mentos de la pared de fondo. Con este método siempre
minimizar ası́ la dRM S entre ambas celdas (ver [6]). Si tendremos el tamaño adecuado de celda según el detalle.
la distancia es menor a una tolerancia dada, considera-
mos la Ri como cubierta. Si no lo fue, subdividimos la Como habı́amos mencionado, en la práctica ponemos
Ri en cuatro nuevas subceldas y para cada una volvemos un cota inferior al tamaño de las Ri ’s más pequeñas. De
a buscar. lo contrario el tiempo de compresión serı́a muy grande y
La naturaleza del método lo hace adaptativo al detalle el factor de compresión bajo. Esta cota es justo la pro-
de cada parte la imagen. Los ojos de Lena por ejemplo fundidad de quadtree.
5

DE LA TEORÍA A LA PRÁCTICA pre haya un mapeo contractivo. Todas las modificaciones


que le vamos haciendo a las celdas rango las anotamos
Una vez que entendimos cómo funciona el algoritmo, en nuestra función registro.
procedemos a explicar cómo se debe hacer un programa Mientras que no haya cubierto todas las celdas rango,
que codifique y decodifique una imagen. el programa va analizando las Ri ’s no cubiertas y para
cada una busca en todos los dominios aquel que diste
menos de esa celda rango. Si la distancia es menor a la
Codificando tolerancia, escribe en el archivo del código fractal el ı́ndi-
ce de quadtree, el ı́ndice de rotación, el ı́ndice de la celda
La forma más clara de proceder con el programa es dominio, el valor del contraste y el del brillo. Marca como
primero crear las funciones que hacen lo que uno re- cubierta esta Ri y pasa a la siguiente. Si la distancia no
quiere y luego escribir el programa mismo. Una de las fue menor a la tolerancia, parte la celda en cuatro e in-
funciones más importantes es aquella que crea la ba- serta en el lugar de la celda las cuatro subceldas nuevas.
se de las celdas dominio. Esta función toma una serie Hace lo mismo con la función registro para que siempre
de parámetros (número de celdas “columna”, número de esté sicronizada. En caso de que no haya una celda do-
celdas “renglón”, traslape horizontal, traslape vertical y minio que cubra a una Ri que ya esta en la profundidad
niveles de tamaño: cada nivel implica celdas de la mitad máxima del quadtree, el programa toma la celda domi-
de tamaño que también cubren la imagen traslapándo- nio que mejor la cubrió, escribe esos valores al archivo
se). Con esto hacemos que la función sea suficientemente y la marca como cubierta. El programa acaba cuando
flexible y a la vez práctica, puesto que sólo requerimos hayamos cubierto todas las celdas rango. La tolerancia
un ı́ndice para tener acceso a cualquier celda de la base. la definimos como el 2.5 % del error total entre las dos
El resultado es un lista de celdas en la que cada entrada celdas.
es una celda dominio. (por ejemplo la primera entrada de Para agilizar la compresión podemos hacer que una
la lista corresponde a la celda D1 , etcétera.) vez que se haya encontrado una celda dominio que cubra
Otra función importante es aquella que registra las cel- una celda rango, escriba los datos y se pase a la siguien-
das rango. En este caso también trabajamos con una lis- te celda rango, ignorando las demás celdas dominio. De
ta de celdas rango. La función registro controla que cada esta forma ahorramos tiempo de compresión, aunque el
celda rango de la lista tenga su ı́ndice quadtree correcto resultado final tendrá mayor error.
y una “bandera” que indique si esta cubierta o no. Es-
tos elementos los guardamos en otra lista. Ambas listas
siempre deben ir sincronizadas. El código fractal
Las funciones “operativas” consisten en dividir una cel-
da (rango), rotar una celda un cierto ángulo, reflejarla y El código fractal consiste en un archivo que contiene
reducir el tamaño de la celda. Las útlimas tres funciones los datos relevantes. Dicho archivo contiene un renglón
son importantes para el proceso de comparación de cel- por cada celda rango que se cubrió. Este número es va-
das, puesto que eso se hace para cada celda dominio a riable, según el detalle de la imagen o la tolerancia que
la hora de compararla con la celda rango. La forma en se haya impuesto. En cada renglón escribimos el ı́ndice
que se reduce el tamaño de una celda es promediando un de quadtree, el ı́ndice de rotación, el ı́ndice de la celda
pixel con sus vecinos mas cercanos y tomar dicho valor dominio, el valor del contraste y el del brillo. Un ejemplo
promedio para ese pixel. Otras funciones importantes son de un archivo con la imagen comprimida se muestra en la
la que calcula los valores óptimos del contraste y brillo figura 8. En este ejemplo utilizamos una profundidad de
(ver [6] para los detalles) y la que calcula la dRM S entre quadtree de seis, por lo que los primeros seis valores de
una celda rango y una de dominio. cada reglón corresponden al ı́ndice quadtree. El séptimo
Todas estas funciones las utilizamos en la función elemento es el ı́ndice de rotación, el octavo el ı́ndice de
“maestra” que compara las celdas. Esta función toma la celda dominio (con los parámetros que escogimos en
una celda dominio y una rango, a la celda dominio la este ejemplo, tenemos 1186 celdas dominio), el noveno es
rota en cada una de las ocho posibilidades, la reduce al el valor del contraste y el décimo elemento el valor del
tamaño de la celda rango y calcula los mejores valores de brillo.
contraste y brillo. Para cada rotación mide la distancia Para maximizar el factor de compresón se deberı́a utili-
entre las celdas y al final regresa la mejor distancia, jun- zar un código fractal en dónde el ı́ndice quadtree se guarde
to con el valor de contraste, brillo e indice de rotación en números binarios en lugar de números ASCII, que fue
correspondiente. lo que hicimos en este ejemplo. De esta forma se reducirı́a
El programa como tal empieza creando los dominios y el tamaño del archivo de compresión, ya que cada número
la lista inicial de rangos. Aquı́ particionamos hasta que la del tipo ASCII ocupa ocho bits y uno binario solamente
longitud de las celdas rango sea menor a la longitud de las uno. Si se hace correctamente se requerirı́a 24 bits por
celdas dominio más grandes, para asegurarnos que siem- cada elemento del ı́ndice quadtree en lugar de los 48 que
6

índice quadtree rot. dom. contraste brillo el resultado.


1 1 1 1 0 0 5 214 -0.972271 143,701 R1 Un ejemplo del proceso de decodificado se muestra en
1 1 1 2 1 0 1 1025 -0.181081 155.425 R2 la figura 9. Aquı́ tenemos la imagen base para decodificar
1 1 1 2 2 0 6 1000 0.128092 118.402 R3
1 1 1 2 3 1 6 906 -0.6473713 238.301 R4
1 1 1 2 3 2 6 708 -0.997927 224.18 R5
a)
. .
. .
. .
b)

Figura 8: Ejemplo del código fractal. En el archivo se escribe


un renglón por cada celda rango cubierta. En cada renglón se
escribe el ı́ndice quadtree (primeras seis columnas), el ı́ndice
Imagen inicial 1.ra iteración 2.da iteración 6.ta iteración
de rotación, el ı́ndice de la celda dominio, el valor del contraste
y el valor del brillo.
Figura 9: Ejemplo del proceso de decodificación. a) La imagen
base (imagen inicial) es un cuadrado negro, después de algu-
nas iteraciónes se va pareciendo más y más al atractor, que
nosotros requerimos. La diferencia es que el programa de por el teorema del collage sabemos que se parecerá mucho a la
imagen inicial. b) Mismo procedimiento con otra imagen ba-
descompresión serı́a algo más complicado para recuperar
se. Vemos que el proceso es independiente de la imagen base,
el ı́ndice quadtree “comprimido”. lo cual confirma que el atractor de un PIFS es independiente
En este artı́culo nos enfocamos en exponer la técnica de de la condición inicial.
compresión y no en hacerla eficiente, por lo que nuestro
archivo de compresión contiene el ı́ndice quadtree tipo
ASCII. Si el lector esta interesado en hacer un código (a) en su estado original, después de la primera, segunda
eficiente, se expone muy claro en la referencia [8]. y sexta iteración. Vemos que las primeras dos iteraciones
son todavı́a muy burdas, pero ya la sexta iteración se pa-
rece mucho a Lena. Sabemos que el atractor de nuestro
Decodificando PIFS se parecerá mucho a la imagen original, ya que el
teorema del collage nos lo asegura. Para enfatizar nue-
El programa de decodificación está escructurado de vamente, lo único que estamos haciendo con la imagen
manera análoga al de codificación. También tiene las fun- inicial es a ciertos segmentos de ella, les cambiamos el
ciones de crear dominio, rotar una celda, y reducir una contraste y el brillo, los rotamos y reducimos para lue-
celda. Las funciones nuevas que requerimos son una que go asignárselos a otros segmentos de la imagen. Es por
dé la posición en la imagen de una celda rango dado su eso que la primera iteración consta solamente de cuadra-
ı́ndice quadtree. Nosotros usamos como parametro la lon- dos de diferentes escalas de gris. La segunda imagen (b)
gitud de la imagen base para la decodificacion (la imagen es el mismo procedimiento, pero con otra imagen inicial.
inicial que al aplicarle el PIFS se verá como el atractor), Podemos apreciar que el resutado final es el mismo. Este
que puede ser mayor o menor que la codificada. Aquı́ po- hecho resalta el atractor de nuestro PIFS es independien-
demos apreciar el hecho que este método es libre de es- te de la condición (imagen) inicial.
calas. Este parámetro también lo utilizamos en la fun- Es muy importante que los dominios creados en la par-
ción crear rangos, que crea una lista de celdas rango en te de codificación sean los mismos que en la parte de
la posición adecuada en la imagen base según su ı́ndice decodificación, porque si no, no coinciden los ı́ndices en
quadtree. el código y no se verá el resultado deseado. Es por eso
Las funciones “maestras” son una que itera y otra que que en principio de deberı́an escribir los parámetros de
muestra el resultado. En la primera le aplicamos una ite- la función que crea las celdas dominio en la cabecera del
ración del mapeo guardado en nuestro código fractal a las archivo con el código fractal.
celdas dominio adecuadas y le asignamos el resultado a
las celdas rango correspondientes. En la función mostrar
colocamos a las celdas rango en su lugar apropiado en la CONCLUSIONES
imagen (según su ı́ndice quadtree) y los mostramos en la
pantalla. Con estos programas logramos codificar y decodificar
El programa como tal solamente carga los datos del la imagen de Lena. El tiempo de compresión en una
código fractal, se los asigna a listas correspondientes y máquina con procesador de 2.83GHz fue de aproxima-
crea la lista de dominios y la de los rangos. De esta forma damente media hora para el programa que se queda con
se le deja al usuario iterar las veces que quiera e ir viendo la primera celda dominio que cubre la celda rango y de
7

aproximadamente dos horas para el que busca la mejor la ciencia nos ha permitido disfrutar de una vida digital
distancia en todas las celdas dominio. En el programa de más completa.
decodificación se puede cambiar el tamaño de la imagen
inicial fácilmente y ver como se crea la imagen “libre de
escalas”. Como hubo una tolerancia a la hora de com-
parar dominios con rangos, la imagen final tiene ciertos
[1] T. Acharya and A. K. Ray. Image Processing: Principles
errores en comparación con la original, dichos errores se
and Applications. John Wiley and Sons, 2005.
magnifican si descomprimimos a mayores escalas. [2] Mauro Barni. Document and Image Compression. CRC,
Este método, aunque lento, tiene la ventaja de ser libre 2006.
de escalas y se puede usar para obtener imágenes relati- [3] Michael Barnsley. Fractals Everywhere. Academic Press,
vamente grandes. Esto a su vez lleva a que, dependiendo 1989.
del tamaño de la imagen descomprimida, se lleguen a te- [4] Michael Barnsley. Fractal image compression. Notices of
ner razones de compresión muy buenas. Como nota, el the AMS, 43(6), 1996.
algoritmo que utilizamos para comprimir es uno muy ru- [5] Yuval Fisher. Fractal image compression. In SIGGRAPH
’92 Course Notes, 1992.
dimentario. Existen algoritmos mucho más eficientes que [6] David Jeff Jackson and Greg Scott Tinney. Performance
reducen el tiempo de compresión a segundos (ver [8]). analysis of distributed implementations of a fractal image
Podemos extender la compresión de imágenes a imáge- compression algorithm. Concurrency - Practice and Expe-
nes con color haciendo algunas ligeras modificaciones de rience, 8:357–386, 1996.
las técnicas aquı́ presentadas. Básicamente tendrı́amos [7] Joan Puate and Fred Jordan. Using fractal compression
que tratar a nuestra imagen como una función de R2 a scheme to embed a digital signature into an image. In Tes-
R3 , en donde cada entrada del rango de la función corres- cher, AG and Chiueh, TC, editor, Video techniques and
software for full-service network, volume 2915 of Procee-
ponde a un valor de rojo, verde y azul respectivamente.
dings of the society of photo-optical instrumentation engi-
Eso y un ligero cambio en la definición de las distan- neers (SPIE), pages 108–118, 1997.
cia entre imágenes serı́a suficiente para codificarlas. La [8] Stephen Welstead. Fractal and Wavelet Image Compres-
compresión de imágenes a color no solo tiene ventajas sion Techniques. SPIE, 1999.
estéticas. El poder manejar este tipo de imágenes permi- [9] Barnsley patentó varios de estos métodos y fundó la com-
te guardar información adicional mediante un código de pañı́a Iterated Systems Incorporated (La primera patente
color, que en áreas como la medicina es de suma impor- de Barnsley y Sloan con respecto a compresión de imáge-
nes usando sistemas de funciones iteradas, fue U.S. Pa-
tancia.
tent 4,941,193, registrada en Octubre de 1987). Este hecho
Espero que este artı́culo haya mostrado que no es tan ejemplifica que a partir de una idea relativamente sencilla
complicado entender y hacer un programa que codifique y una aplicación de los fractales, una compañı́a ha sido
imágenes con este método tan fascinante, que de hecho capaz de generar recursos económicos considerables.
sirve para más que sólo comprimir [7]. Se podrı́a decir
que éste es un ejemplo concreto de cómo el avance de

Potrebbero piacerti anche