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.