BillyBong-Inf1Jpg

Anuncio
JPEG (Joint Photographic Experts Group)
Lo que la personas llaman a el formato JPEG, en verdad se llama JFIF, que significa JPEG File
Interchange Format.
Los inventores querían reducir el tamaño del archivo, en color verdadero lo máximo posible sin
afectar a la calidad de la imagen.
El formato JFIF es una plataforma independiente que puede ser usando en Pcs, Macs y Unix
workstations. La extensión usada en Unix y Windows es de .JPG.
Un numero de colores pueden ser usados: Escala de grises, RGB (Rojo, Verde y Azul) y CMYK.
Para Internet, el color puede ser también YCbCr definido por CAIRN 601 (256 niveles). Los
componentes de RGB calculados por una transformación lineal de YCbCr, la gamma no tendrían
que ser corregida (Gamma= 1.0).
Sin embargo, numerosas aplicaciones han usado la técnica también para compresión de video,
porque proporciona descompresión de imagen de calidad bastante alta a una razón de compresión
muy buena, y requiere menos poder de cálculo que la compresión MPEG (Motion Pictures Experts
Group).
Ha sido estandarizado por la Organización Internacional de Estándares con el nombre de ISO
10918.
El estándar JPEG define tres sistemas diferentes de codificación:
Un
sistema de codificación básico, con pérdidas, que se basa en la Transformada Discreta del
Coseno y es apropiado para la mayoría de las aplicaciones de compresión.
Un sistema de codificación extendida, para aplicaciones de mayor compresión, mayor precisión, o
de reconstrucción progresiva.
Un sistema de codificación independiente sin pérdidas, para la compresión reversible.
Codificación
En el sistema básico, denominado a veces sistema básico secuencial, la precisión de los datos de
entrada y de salida está limitada a 8 bits, mientras que los valores cuantificados de la DCT están
limitados a 11 bits. La propia compresión se realiza en tres etapas secuenciales:
Cálculo
de la DCT: Se divide la imagen en bloques de pixels de tamaño 8x8 que se procesan de
izquierda a derecha y de arriba abajo. Según se va encontrando cada bloque o subimagen de 8x8,
se cambian los niveles de sus 64 pixels, sustrayendo de los mismos la cantidad 2n-1, siendo 2n,
el máximo número de niveles de gris. Esto es, para las imágenes de 8 bits se resta 128 de cada
pixel. Después se calcula la Transformada Discreta del Coseno bidimensional del bloque,
produciendo un conjunto de 64 valores conocidos como coeficientes de la DCT.
Cuantificación
de los coeficientes de la DCT: Los 64 coeficientes son entonces cuantificados,
produciendo en algunos de ellos su reducción a cero. Los coeficientes son codificados en umbral,
usando una matriz de cuantificación y son preparados para la codificación de entropía
convirtiéndolos en una cadena unidimensional de 64 coeficientes en orden cuasi ascendente de
los componentes de frecuencia. Para convertir los coeficientes en esta cadena unidimensional se
reordenan usando una exploración o barrido en zig-zag. El primer coeficiente del barrido en zigzag es conocido como el coeficiente DC mientras que el resto son los coeficientes AC. A la
matriz de cuantificación se le pueden aplicar factores de escala para obtener diversos niveles de
compresión. Las entradas de la matriz de cuantificación son usualmente determinadas según
consideraciones psicovisuales, las cuales son discutidas más adelante.
Asignación
del Código de Longitud Variable (VLC): El coeficiente DC de cada bloque es
codificado usando DPCM. Es decir, se codifica la diferencia entre coeficiente DC del presente
bloque y el del bloque previamente codificado. Puesto que la cadena unidimensional reordenada
según el barrido en zig-zag de la Figura 104 está distribuida cualitativamente según una
frecuencia espacial creciente, el procedimiento de codificación JPEG ha sido diseñado de modo
que se beneficia de la existencia de largas series de ceros que se producen normalmente en la
reordenación. En particular, los coeficientes AC no nulos se codifican utilizando un código de
longitud variable que define el valor del coeficiente y el número de ceros precedentes. Se
proporcionan unas tablas de especificación estándar de códigos de longitud variable.
Decodificación
La decodificación es esencialmente el proceso inverso al de la codificación. Se llevan a cabo los
mismos procesos, pero en orden inverso. Las tablas de especificación usadas en el proceso de
codificación se llevan junto con el flujo de datos después de la compresión y se usan para la
descompresión. El decodificador de entropía convierte el flujo de bits comprimido en una nueva
tabla en zig-zag de coeficientes DCT. Estos se multiplican entonces por los coeficientes de de
cuantificación y se alimentan en el proceso DCT inverso IDCT (Transformada Discreta del Coseno
Inversa). La salida del proceso es un bloque de pixeles reconstruido de tamaño 8x8. Por supuesto,
este bloque de pixeles de 8x8 puede no reproducir exactamente el original ya que se perdió alguna
información en el proceso de codificación. La Figura 106 es un diagrama de bloques simplificado
del proceso básico involucrado en la descompresión JPEG.
Imágenes en color. Hoy la mayoría de las imágenes electrónicas son grabadas en color, en el
dominio RGB (Red, Green, Blue). JPEG transforma las imágenes RGB al espacio luminanciacrominancia, generalmente referido al dominio Y-Cr-Cb, definido como
Y=0.3R+0.6G+0.1B
Cr=(B-Y)/2+0.5
Cb=(R-Y)/1.6+0.5
Ya que el ojo humano es relativamente insensible al contenido de altas frecuencias de los canales de
crominancia Cr y Cb, ellos son submuestreados por 2 en ambas direcciones. Los canales de
crominancia contienen la mitad de muchas líneas y pixeles por línea comparados al canal de
luminancia.
JPEG ordena los pixeles de una imagen a color como no entrelazado (3 exploraciones separadas) o
entrelazado (una exploración sencilla).
Compresión
La compresión de una imagen a color sigue los siguientes pasos:
Descomposición en bloques o subimágenes: La imagen original en la forma Y, Cr, Cb se divide en
bloques de 8x8 pixeles, siendo, para una imagen en formato CCIR 601 de 720 x 576, un total de
6480 bloques de luminancia Y y 3240 bloques para cada una de las componentes Cr y Cb. Cada uno
de estos bloques forma una matriz de 64 números de 0 a 255 (para imágenes de 8 bits) para la
luminancia, y de –128 a +127 para las componentes Cr y Cb.
Cálculo de la DCT: Se aplica la DCT a cada uno de los bloques Y, Cr, Cb, generando para cada
uno de ellos una nueva matriz de 8x8 compuesta por los coeficientes de las componentes de
frecuencias espaciales. El valor de estos coeficientes disminuye rápidamente cuando se van
alejando del origen de la matriz, terminando generalmente en una serie de ceros. De esta forma si
un bloque es de luminancia y color uniformes, únicamente el primer coeficiente (coeficiente DC) no
será nulo, y así solo habrá que transmitir un único coeficiente en lugar de 64.
Discriminación por umbral y cuantificación: Esta etapa tiene en cuenta las particularidades de la
visión humana: consiste en poner a cero los coeficientes inferiores a un valor predeterminado y en
codificar los coeficientes restantes con una precisión decreciente a medida que la frecuencia
aumenta. El coeficiente DC se codifica en DPCM, lo que permite aumentar la precisión de
cuantificación para un número de bits dado, de manera que se puede minimizar la visibilidad de los
bloques sobre la imagen reconstruida, ya que el ojo, si bien es poco sensible a los detalles finos, es,
por el contrario, muy sensible a pequeñas diferencias de luminancia sobre áreas uniformes
Barrido en zig-zag: Con la excepción del coeficiente DC que se trata por separado, los 63
coeficientes AC se leen en zig-zag para transformar la matriz en una cadena de datos en serie,
adaptada a la próxima etapa del proceso.
Codificación entrópica de Huffman (VLC): Esta última etapa consiste en codificar los
coeficientes con una longitud tanto más corta cuanto más frecuentes sean estadísticamente, como se
vio anteriormente.
JPEG File Interchange Format Specification
Los markers sirven para identificar las diversas partes en la estructura de la imagen comprimida.Los
markers estan formados por dos bytes, un byte de la forma X’FF’ seguido de otro byte que no es
igual a 0 ni a X´FF´.
En la siguiente pagina se detallan los diferentes markers.
Descargar