Documentos de Académico
Documentos de Profesional
Documentos de Cultura
El espacio que ocupa una informacin codificada (datos, seal digital, etc.) sin compresin es el cociente
entre la frecuencia de muestreo y la resolucin. Por tanto, cuantos ms bits se empleen mayor ser el
tamao del archivo. No obstante, la resolucin viene impuesta por el sistema digital con que se trabaja y
no se puede alterar el nmero de bits a voluntad; por ello, se utiliza la compresin, para transmitir la
misma cantidad de informacin que ocupara una gran resolucin en un nmero inferior de bits.
Algoritmo de Huffman
Este algoritmo toma un alfabeto de n smbolos, junto con sus frecuencias de aparicin
asociadas, y produce un cdigo de Huffman para ese alfabeto y esas frecuencias.
1. Descripcin
El algoritmo consiste en la creacin de un rbol binario que tiene cada uno de los smbolos
por hoja, y construido de tal forma que siguindolo desde la raz a cada una de sus hojas se
obtiene el cdigo Huffman asociado.
1. Se crean varios rboles, uno por cada uno de los smbolos del alfabeto, consistiendo
cada uno de los rboles en un nodo sin hijos, y etiquetado cada uno con su smbolo
asociado y su frecuencia de aparicin.
2. Se toman los dos rboles de menor frecuencia, y se unen creando un nuevo rbol.
La etiqueta de la raz ser la suma de las frecuencias de las races de los dos rboles
que se unen, y cada uno de estos rboles ser un hijo del nuevo rbol. Tambin se
etiquetan las dos ramas del nuevo rbol: con un 0 la de la izquierda, y con un 1 la de
la derecha.
3. Se repite el paso 2 hasta que slo quede un rbol.
Con este rbol se puede conocer el cdigo asociado a un smbolo, as como obtener el
smbolo asociado a un determinado cdigo.
Para obtener el cdigo asociado a un smbolo se debe proceder del siguiente modo:
En la prctica, casi siempre se utiliza el rbol para obtener todos los cdigos de una sola
vez; luego se guardan en tablas y se descarta el rbol.
1. 1. Ejemplo de uso
La tabla describe el alfabeto a codificar, junto con las frecuencias de sus smbolos. En el
grfico se muestra el rbol construido a partir de este alfabeto siguiendo el algoritmo
descrito.
rbol para construir el cdigo Huffman del ejemplo
Smbolo Frecuencia
A 0,15
B 0,30
C 0,20
D 0,05
E 0,15
F 0,05
G 0,10
Se puede ver con facilidad cul es el cdigo del smbolo E: subiendo por el rbol se
recorren ramas etiquetadas con 1, 1 y 0; por lo tanto, el cdigo es 011. Para obtener el
cdigo de D se recorren las ramas 0, 1, 1 y 1, por lo que el cdigo es 1110.
2. Limitaciones
La eficiencia de la codificacin de Huffman tambin depende del balance que exista entre
los hijos de cada nodo del rbol, siendo ms eficiente conforme menor sea la diferencia de
frecuencias entre los dos hijos de cada nodo.
Ejemplos:
Una manera de resolver este problema consiste en agrupar los smbolos en palabras antes
de ejecutar el algoritmo. Por ejemplo, si se tiene la cadena de longitud 64
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAB
1111111111111111111111111111111111111111111111111111111111111110
Tambin de longitud 64. Sin embargo, si antes de utilizar el algoritmo, se agrupan los
smbolos en las palabras "AA", "AB" y "B" (que se codifican como 1, 01 y 00), el
algoritmo devuelve la siguiente cadena:
111111111111111111111111111111101
que tiene longitud 32, la mitad que si no se hubiera agrupado. Si observa el rbol de
Huffman, se puede comprobar que la diferencia de frecuencias entre las ramas del rbol es
menor que en el caso anterior.
Es posible crear cdigos de Huffman ternarios, cuaternarios, y, en general, n-arios. Para ello
slo es necesario realizar dos modificaciones al algoritmo:
1. Los rboles a crear tendrn tantos hijos como smbolos posibles puedan aparecer en
los cdigos Huffman. Por ejemplo, si es ternario se crearn rboles con tres hijos; si
es cuaternario, con cuatro.
2. Si se expresa como s el nmero de smbolos en el alfabeto a codificar, y n el nmero
de smbolos que aparecen en el cdigo Huffman, entonces s-1 debe ser mltiplo de
n-1. Es decir, para un cdigo ternario, s debe valer 3, 5, 7, etc. Si esta condicin no
se cumple, entonces se deben aadir smbolos "nulos" con frecuencia 0, que
servirn slo como relleno a la hora de construir el rbol.
Algoritmo LZW
LZW (Lempel-Ziv-Welch) es un algoritmo de compresin sin prdida desarrollado por
Terry Welch en 1984 como una versin mejorada del algoritmo LZ78 desarrollado por
Abraham Lempel y Jacob Ziv.
La mayora de los mtodos de compresin se basan en un anlisis inicial del texto para
identificar cadenas repetidas para armar un diccionario de equivalencias, asignando cdigos
breves a estas cadenas. En una segunda etapa, se convierte el texto utilizando los cdigos
equivalentes para las cadenas repetidas. Esto requiere dos etapas, una de anlisis y una
segunda de conversin y tambin requiere que el diccionario se encuentre junto con el texto
codificado, incrementando el tamao del archivo de salida.
La clave del mtodo LZW reside en que es posible crear sobre la marcha, de manera
automtica y en una nica pasada un diccionario de cadenas que se encuentren dentro del
texto a comprimir mientras al mismo tiempo se procede a su codificacin. Dicho
diccionario no es transmitido con el texto comprimido, puesto que el descompresor puede
reconstruirlo usando la misma lgica con que lo hace el compresor y, si est codificado
correctamente, tendr exactamente las mismas cadenas que el diccionario del compresor
tena.
El diccionario comienza pre-cargado con 256 entradas, una para cada carcter (byte)
posible ms un cdigo predefinido para indicar el fin de archivo. A esta tabla se le van
agregando sucesivos cdigos numricos por cada nuevo par de caracteres consecutivos que
se lean (esto no es literalmente cierto, segn se describe ms adelante), an cuando todava
no sea posible prever si ese cdigo se reutilizar ms adelante o no.
Es en este detalle donde se encuentra la brillantez del mtodo: al armar el diccionario sobre
la marcha se evita hacer dos pasadas sobre el texto, una analizando y la otra codificando y
dado que la regla de armado del diccionario es tan simple, el descompresor puede
reconstruirlo a partir del texto comprimido mientras lo lee, evitando as incluir el
diccionario dentro del texto comprimido. Se puede objetar que el diccionario estar plagado
de cdigos que no se utilizarn y por tanto ser innecesariamente grande, pero en la prctica
el diccionario no crece demasiado y an si lo hiciera no importa mucho pues el objetivo es
que el archivo comprimido sea pequeo an cuando los procesos de compresin y
descompresin pudieran ocupar mucha memoria con el diccionario.
Otra caracterstica importante del algoritmo es que los cdigos en la salida se representan
por cadenas de bits variables. El diccionario contiene inicialmente 257 cdigos, 256
cdigos para los 256 caracteres simples posibles con 8 bits y un cdigo que representa el fin
de archivo. Para esto seran necesarios cdigos de 9 bits, lo cual quiere decir que an hay
disponibles 255 cdigos de 9 bits para representar cadenas de caracteres. Cuando se llenan
estas 255 entradas del diccionario, se amplan los cdigos con un nuevo bit, lo cual permite
512 nuevas entradas. Cuando se completan estas 512 entradas, se agrega un bit y se
disponen de 1024 nuevas entradas y as sucesivamente. En la prctica, se verifica que las
primeras entradas, correspondientes a cdigos de 12 bits de longitud (4096 entradas) se
llenan rpidamente por lo que es habitual comenzar el proceso no con cdigos de 9 bits sino
directamente con cdigos de 12 bits.
Ntese que dado este lmite de cdigos de 16 bits, esto quiere decir que un diccionario
nunca podr contener ms de 65536 entradas, cada una de ellas de 2 cdigos de 16 bits, o
sea cuatro bytes por entrada. El diccionario, entonces, se arma como una tabla donde el
cdigo es el ndice y las cadenas que representa son las entradas de esta tabla. Advirtase
que el cdigo en si no se almacena en la tabla sino que es el ndice de la misma por lo cual
no se almacena sino que se calcula por la posicin en la tabla. En total, una tabla llena
ocupa 65536 entradas de 4 bytes cada una, o sea 262144 caracteres (256 kbytes) lo que es
absurdamente poco para los ordenadores actuales.
Que el tamao de los ndices pueda ser incrementado de manera variable es una de las
contribuciones de Welch. Otra de ellas fue especificar una estructura de datos eficiente para
guardar el diccionario.
1. 1. Un ejemplo simple del algoritmo LZW de compresin
TOBEORNOTTOBEORTOBEORNOT#
El texto original, compuesto de 25 caracteres que pueden representarse con 5 bits cada uno
nos dara 125 bits. El resultado comprimido produce 5 cdigos de 5 bits ms 12 cdigos de
6 bits, lo cual resulta en 97 bits, una reduccin a menos del 78% del original. Ntese que
cada carcter ledo genera una nueva entrada en el diccionario, independientemente de si se
utilizar o no. Esta simplicidad por parte del algoritmo de compresin permite que el
descompresor pueda reconstruir el diccionario sin errores.
Cuando se comienza a utilizar 6 bits por cdigo, todos los cdigos se emiten con 6 bits, an
los que originalmente slo usaran 5 bits, completndose con ceros por izquierda.
2. Usos
Se us ampliamente desde que se convirti en parte del formato grfico GIF en 1987.
Puede ser tambin usado, aunque opcionalmente, en archivos TIFF.
La compresin LZW proporcionaba una relacin de compresin mejor en muchas
aplicaciones que otros mtodos de compresin conocidos en esa poca. Lleg a convertirse
en el primer mtodo de propsito general de compresin de datos usado ampliamente. En
textos largos, comprime aproximadamente a la mitad del tamao original. Otros tipos de
datos son tambin comprimidos tilmente en muchos casos.
Varias patentes han sido concedidas en los Estados Unidos de Amrica y otros pases por el
algoritmo LZW y similares. El LZ78 estaba bajo la patente 4,464,650, pedida por Lempel,
Ziv, Cohn y Eastman y asignada a Sperry Corporation, ms tarde Unisys Corporation, el 10
de agosto de 1981. Dos patentes de los Estados Unidos fueron creadas para el LZW: la
patente de EE.UU. 4,814,746 por Victor S. Miller y Mark N. Wegman y asignada a IBM,
originalmente el 1 de junio de 1983, y la patente estadounidense 4,558,302 por Welch,
asignada a Sperry Corporation, ms tarde Unisys Corporation, el 20 de junio de 1983.
Muchos expertos en leyes concluyen que la patente no cubre dispositivos que slo
descompriman LZW y no puedan comprimir datos usndolo, por esta razn el popular
programa Gzip puede leer archivos .Z pero no escribirlos.
De acuerdo con una declaracin en la web de Unisys, las patentes de LZW en el Reino
Unido, Francia, Alemania, Italia y Japn han expirado en junio de 2004 y la patente
canadiense en julio de 2004. La patente de IBM en EE.UU. expir en agosto de 2006.
Aunque el acrnimo LZW obviamente se refiere a los inventores como Lempel, Ziv y
Welch, alguna gente opina que el derecho de propiedad intelectual va a Ziv primero, de
modo que el mtodo debe llamarse algoritmo Ziv-Lempel-Welch, y no el algoritmo Lempel-
Ziv-Welch.
A la hora de hablar de compresin hay que tener presentes dos conceptos:
1. Sin prdidas reales: es decir, transmitiendo toda la entropa del mensaje (toda la
informacin bsica e irrelevante, pero eliminando la redundante).
2. Subjetivamente sin prdidas: es decir, adems de eliminar la informacin
redundante se elimina tambin la irrelevante.
3. Subjetivamente con prdidas: se elimina cierta cantidad de informacin bsica,
por lo que el mensaje se reconstruir con errores perceptibles pero tolerables (por
ejemplo: la videoconferencia).
Compresin sin prdida: los datos antes y despus de comprimirlos son exactos en
la compresin sin prdida. En el caso de la compresin sin prdida una mayor
compresin solo implica ms tiempo de proceso. El bitrate siempre es variable en la
compresin sin prdida. Se utiliza principalmente en la compresin de texto.
Un algoritmo de compresin con prdida puede eliminar datos para reducir an ms
el tamao, con lo que se suele reducir la calidad. En la compresin con prdida el
bit rate puede ser constante o variable. Hay que tener en cuenta que una vez
realizada la compresin, no se puede obtener la seal original, aunque s una
aproximacin cuya semejanza con la original depender del tipo de compresin. Se
utiliza principalmente en la compresin de imgenes, videos y sonidos.
Fundamentos de la compresin de imgenes
REDUNDANCIA DE DATOS Hay que resaltar la diferencia entre informacin y datos, ya que en muchas
ocasiones se utilizan como sinnimos y no lo son. Los datos son una forma representar la informacin;
as, una misma informacin puede ser representada por distintas cantidades de datos. Por tanto, algunas
representaciones de la misma informacin contienen datos redundantes.
La compresin de datos se define como el proceso de reducir la cantidad de datos necesarios para
representar eficazmente una informacin, es decir, la eliminacin de datos redundantes. En el caso de
las imgenes, existen tres maneras de reducir el nmero de datos redundantes: eliminar cdigo
redundante, eliminar pxeles redundantes y eliminar redundancia visual.
CDIGO REDUNDANTE
El cdigo de una imagen representa el cuerpo de la informacin mediante un conjunto de smbolos. La
eliminacin del cdigo redundante consiste en utilizar el menor nmero de smbolos para representar la
informacin.
Las tcnicas de compresin por codificacin de Huffman y codificacin aritmtica utilizan clculos
estadsticos para lograr eliminar este tipo de redundancia y reducir la ocupacin original de los datos.
PIXELES REDUNDANTES
La mayoria de las imgenes presentan semejanzas o correlaciones entre sus pxeles. Estas
correlaciones se deben a la existencia de estructuras similares en las imgenes, puesto que no son
completamente aleatorias. De esta manera, el valor de un pxel puede emplearse para predecir el de sus
vecinos.
Las tcnicas de compresin Lempel-Ziv implementan algoritmos basados en sustituciones para lograr la
eliminacin de esta redundancia.
REDUNDANCIA VISUAL
El ojo humano responde con diferente sensibilidad a la informacin visual que recibe. La informacin a la
que es menos sensible se puede descartar sin afectar a la percepcin de la imagen. Se suprime as lo
que se conoce como redundancia visual.
La eliminacin de la redundancia esta relacionada con la cuantificacin de la informacin, lo que conlleva
una prdida de informacin irreversible. Tcnicas de compresin como JPEG, EZW o SPIHT hacen uso
de la cuantificacin.
CLASIFICACIN
Los mtodos de compresin se pueden agrupar en dos grandes clases: mtodos de compresin sin
prdida de informacin y mtodos con prdida de informacin.
LOSSLESS
Los mtodos de compresin sin prdida de informacin (lossless) se caracterizan porque la tasa de
compresin que proporcionan est limitada por la entropa (redundancia de datos) de la seal original.
Entre estas tcnicas destacan las que emplean mtodos estadsticos, basados en la teora de Shannon,
que permite la compresin sin prdida. Por ejemplo: codificacin de Huffman, codificacin aritmtica y
Lempel-Ziv. Son mtodos idneos para la compresin dura de archivos.
LOSSY
Los mtodos de compresin con prdida de informacin (lossy) logran alcanzar unas tasas de
compresin ms elevadas a costa de sufrir una prdida de informacin sobre la imagen original. Por
ejemplo: JPEG, compresin fractal, EZW, SPIHT, etc. Para la compresin de imgenes se emplean
mtodos lossy, ya que se busca alcanzar una tasa de compresin considerable, pero que se adapte a la
calidad deseada que la aplicacin exige sobre la imagen objeto de compresin.
El formato fue diseado para almacenar archivos de una forma conveniente en cintas magnticas y de
all proviene su nombre, que proviene de Tape ARchiver (en ingls: archivador en cinta). Debido a este
origen el formato est preparado para ser procesado linealmente, no contando con manera de extraer un
miembro sin recorrer todo el archivo hasta encontrarlo.
Su uso es el siguiente:
Gzip es una abreviatura de GNU ZIP, un software libre GNU que reemplaza al programa compress de
UNIX, gzip fue creado por Jean-loup Gailly y Mark Adler. Apareci el 31 de octubre de 1992 (versin 0.1).
La versin 1.0 apareci en febrero de 1993.
Gzip se basa en el algoritmo Deflate, que es una combinacin del LZ77 y el Huffman. Deflate se
desarroll como respuesta a las patentes que cubrieron LZW y otros algoritmos de compresin y limitaba
el uso del compress. No se debe confundir gzip con ZIP, el cual no es compatible.
Gzip no archiva ficheros, slo los comprime. Debido a esto a menudo se usa junto con alguna
herramienta para archivar (popularmente tar).
Para hacer ms fcil el desarrollo del software que usa compresin, se cre la biblioteca zlib. Soporta el
formato de ficheros gzip y la compresin deflate. Esta librera se usa mucho porque es pequea, eficiente
y muy verstil. Gzip y zlib fueron implementadas por Jean-Loup Gailly y Mark Adler.
Desde finales de los noventa se ha producido algn movimiento de gzip a bzip2 que a menudo produce
archivos ms pequeos, aunque es ms lento. El formato de compresin zlib, el algoritmo deflate y el
formato gzip fueron estandarizados como RFC 1950, RFC 1951 y RFC 1952 respectivamente.
Normalmente, la extensin de los archivos gzipeados es .gz. El software de Unix a menudo se distribuye
como ficheros con extensin .tar.gz o .tgz, llamados tarballs. Son archivos empaquetados con tar y
comprimidos con gzip. Se pueden descomprimir con gzip -d fichero.tar.gz o desempaquetar con tar -xzf
archivo.tar.gz.
Hoy en da, cada vez se distribuye ms y ms software como fichero.tar.bz2 debido a las ventajas de la
compresin bzip2.
Su uso es el siguiente:
Nota: gzip bzip2 solo comprime archivos pero no directorios, ese es el objetivo de tar.
Para comprimir y archivar al mismo tiempo se debe utilizar tar y gzip o bzip2, de este modo:
ZIP o zip en informtica son un formato de almacenamiento muy utilizado para la compresin de datos
como imgenes, msica, programas o documentos. ZIP es un formato de fichero bastante simple, que
comprime cada uno de los archivos de forma separada.
Comprimir cada archivo independientemente del resto de archivos comprimidos, permite recuperar cada
uno de los ficheros sin tener que leer el resto, lo que aumenta el rendimiento.
El problema, es que el resultado de agrupar un nmero grande de pequeos archivos es siempre mayor
que agrupar todos los archivos y comprimirlos como si fuera uno slo. ste ltimo comportamiento es el
del, tambin conocido, algoritmo de compresin RAR.
La especificacin de ZIP indica que cada archivo puede ser almacenado, o bien sin comprimir, o
utilizando una amplia variedad de algoritmos de compresin, sin embargo, en la prctica, ZIP se suele
utilizar casi siempre con el algoritmo de Phil Katz.
Su uso es el siguiente:
ARJ y LHA han sido muy utilizados en el pasado, por lo que es posible que an nos encontremos con
archivos comprimidos con ellos.
Su uso es el siguiente:
Su uso es el siguiente:
Comprimir: zoo a archivo.zoo archivos
Descomprimir: zoo -x archivo.zoo
Ver contenido: zoo -L archivo.zoo
Ver contenido: zoo -v archivo.zoo
RAR es un formato de archivo con un algoritmo de compresin sin prdida utilizado para la compresin
de datos y archivacin, desarrollado por Eugene Roshal. La extensin de los archivos es .rar. El MIME-
Type es application/x-rar-compressed. RAR es ms lento que el ZIP pero comprime ms y tiene un
mayor sistema de redundancia de datos para prevenir errores.
RAR utiliza un algoritmo de compresin basado en el LZSS, que, a su vez, se basaba en el LZ77, de
James Storer y Thomas Szymanski (1982). La ventana de bsqueda puede variar entre 64k y 1 Mb. Rar
permite lo que se conoce como compresin slida que permite comprimir varios ficheros juntos, de forma
que una misma ventana de bsqueda se aplica a todo, con lo que el nivel de compresin es mayor.
Su uso es el siguiente: