formato de compresiÓn jpeg · ^una imagen vale más que mil palabras _ deja de ser una frase...

18
Formato de compresión JPEG Higa, UTN FRBA Página 1 de 18 FORMATO DE COMPRESIÓN JPEG Déborah Valeria Higa Sistemas de TV y Técnicas Audiovisuales, UTN FRBA 1 I NTRODUCCIÓN Una imagen vale más que mil palabras” deja de ser una frase metafórica cuando se analiza la cantidad de información que realmente una imagen contiene. Por ejemplo, la imagen de la Figura 1 tiene un tamaño de 512x512 pixeles, donde cada pixel está representado por tres canales de colores: R (rojo), G (verde) y B (azul); y donde cada canal está cuantificado de 0 a 255 (un byte). Entonces, la imagen debería pesar 512x512x3x1 bytes = 786432 bytes (casi 787Kb). Sin embargo, en formato JPEG pesa 131Kb. Figura 1. “Sailboat on lake” de USC-SIPI Image Database. Para lograr esta reducción de peso se debió descartar información y es por eso que al formato JPEG se lo llama lossy compression. No obstante, si se compara una imagen JPEG contra la misma pero en un formato tipo lossless, como el TIFF, la información eliminada resulta imperceptible a simple vista, como se observa en la Figura 2. Formato: TIFF Peso: 768KB Formato: JPEG Peso: 131KB Figura 2. Comparación de peso entre formatos. El formato JPEG es un estándar de compresión y codificación de imágenes fijas y son las siglas correspondientes a su comité creador, Joint Photographic Experts Group. Para realizar la compresión, se toma ventaja de las limitaciones del ojo humano y descarta aquello que no se percibe con facilidad. Una vez realizado esto, los datos finalmente se codifican para reducir aún más su tamaño. Es decir, no solo se trata de reducir información, sino de representarla de una manera óptima, para que una imagen “contenga menos palabras, pero valga el mismo significado”.

Upload: others

Post on 30-Jul-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: FORMATO DE COMPRESIÓN JPEG · ^Una imagen vale más que mil palabras _ deja de ser una frase metafórica cuando se analiza la cantidad de información que realmente una imagen contiene

Formato de compresión JPEG Higa, UTN FRBA

Página 1 de 18

FORMATO DE COMPRESIÓN JPEG

Déborah Valeria Higa Sistemas de TV y Técnicas Audiovisuales, UTN FRBA

1 INTRODUCCIÓN

“Una imagen vale más que mil

palabras” deja de ser una frase metafórica

cuando se analiza la cantidad de

información que realmente una imagen

contiene. Por ejemplo, la imagen de la

Figura 1 tiene un tamaño de 512x512

pixeles, donde cada pixel está representado

por tres canales de colores: R (rojo), G

(verde) y B (azul); y donde cada canal está

cuantificado de 0 a 255 (un byte). Entonces,

la imagen debería pesar 512x512x3x1 bytes

= 786432 bytes (casi 787Kb). Sin embargo, en formato JPEG pesa 131Kb.

Figura 1. “Sailboat on lake” de USC-SIPI Image

Database.

Para lograr esta reducción de peso se

debió descartar información y es por eso

que al formato JPEG se lo llama lossy

compression. No obstante, si se compara

una imagen JPEG contra la misma pero en

un formato tipo lossless, como el TIFF, la

información eliminada resulta

imperceptible a simple vista, como se observa en la Figura 2.

Formato: TIFF Peso:

768KB

Formato: JPEG Peso: 131KB

Figura 2. Comparación de peso entre formatos.

El formato JPEG es un estándar de

compresión y codificación de imágenes fijas

y son las siglas correspondientes a su comité

creador, Joint Photographic Experts Group.

Para realizar la compresión, se toma ventaja

de las limitaciones del ojo humano y

descarta aquello que no se percibe con

facilidad. Una vez realizado esto, los datos

finalmente se codifican para reducir aún

más su tamaño. Es decir, no solo se trata de

reducir información, sino de representarla

de una manera óptima, para que una

imagen “contenga menos palabras, pero

valga el mismo significado”.

Page 2: FORMATO DE COMPRESIÓN JPEG · ^Una imagen vale más que mil palabras _ deja de ser una frase metafórica cuando se analiza la cantidad de información que realmente una imagen contiene

Formato de compresión JPEG Higa, UTN FRBA

Página 2 de 18

2 CONVERSIÓN A YCBCR

Limitación #1 del ojo humano: percibe

mejor las diferencias de luz que de colores

Esto significa que gran parte de la

información a descartar serán los colores y

se le dará mayor importancia a la

luminosidad (se apreciará más en el paso de Cuantización).

En el formato RGB, cada pixel de la

imagen está representado por tres canales:

R (rojo), G (verde) y B (azul). Esto quiere

decir que, como se observa en la Figura 3,

en términos matriciales, la imagen es una matriz de 3 dimensiones.

Figura 3. División de la imagen en sus canales R, G y B (con color agregado).

Si se representa un pixel

de color como: color = (R, G, B)

Donde R, G y B varían de 0 a 255, los siguientes colores se representarían

de esta manera: rojo = (255, 0, 0) verde = (0, 255, 0) azul = (0, 0, 255) negro = (0, 0, 0) blanco = (255, 255,255)

Cuando se representan los colores en forma separada, las zonas más

claras indican mayor presencia del color

correspondiente y las zonas más oscuras, menor presencia.

Figura 4. División de la imagen en sus canales R, G y B.

La imagen de la Figura 3 se dividió en

sus 3 submatrices R, G y B y se las

representaron con sus respectivos colores

pero, en realidad, cada una de ellas al ser de

2 dimensiones, no tienen canales de color,

solo se representan por su intensidad y se

ven en escala de grises, como se observa en

la Figura 4.

Este formato, sin embargo, se centra

en la información de color y no brinda

información de luminosidad de manera

directa. Es por eso que se convierte la

imagen al formato YCbCr, donde Y es el

canal luminancia y Cb y Cr los canales

crominancia diferencia azul y rojo,

respectivamente. De esta manera se

obtiene el canal luminancia totalmente aislado de los canales crominancia.

Page 3: FORMATO DE COMPRESIÓN JPEG · ^Una imagen vale más que mil palabras _ deja de ser una frase metafórica cuando se analiza la cantidad de información que realmente una imagen contiene

Formato de compresión JPEG Higa, UTN FRBA

Página 3 de 18

La conversión se realiza utilizando la Ecuación 1.

[𝑌𝐶𝑏𝐶𝑟

] = [0

128128

] + [0.299 0.587 0.114

−0.169 −0.331 0.5000.500 −0.419 −0.081

] [𝑅𝐺𝐵

]

𝑌 = 0.299𝑅 + 0.587𝐺 + 0.114𝐵 𝐶𝑏 = 128 − 0.169𝑅 − 0.331𝐺 + 0.500𝐵 𝐶𝑟 = 128 + 0.500𝑅 − 0.419𝐺 − 0.081𝐵

Ecuación 1. Fórmula para la conversión de RGB a YCbCr.

El canal luminancia Y es un promedio

ponderado (0.299+0.587+0.114=1) de R, G y

B, donde G es el que tiene mayor peso ya

que el ojo humano lo percibe más brillante

de lo que es, a diferencia de lo que ocurre

con el azul. Es decir, se lo pondera de tal

manera que la conversión dé igual a lo que realmente se percibe.

El canal crominancia Cb es la diferencia

del azul con el neutro. El neutro ocurre

cuando R, G y B tienen el mismo valor

(pueden variar de 0 a 255 pero los tres

juntos, en una escala de grises) y cuando

esto sucede, Cb es nulo ya que B está

ponderado con 0.5 y R y G con -0.169 y -

0.331 (-0.5). Lo mismo ocurre con Cr, que es

la crominancia diferencia del rojo con el

neutro. Cuanto mayor sea la diferencia,

mayores serán las crominancias y más colorida resultará la imagen.

A modo de ejemplo, en la Figura 5, se representan tres colores en RGB e YCbCr.

R 255 Y 111

Mayor contenido de rojo, mayor Cr.

G 50 Cb 97

B 50 Cr 218

R 50 Y 162

Mayor contenido de verde, Cb y Cr más próximos entre s í.

La i luminancia es mayor con el verde. G 255 Cb 68

B 50 Cr 52

R 50 Y 79

Mayor contenido de azul,

mayor Cb. G 50 Cb 218

B 255 Cr 113

Figura 5. Ejemplo de representación de 3 colores en RGB e YCbCr.

Page 4: FORMATO DE COMPRESIÓN JPEG · ^Una imagen vale más que mil palabras _ deja de ser una frase metafórica cuando se analiza la cantidad de información que realmente una imagen contiene

Formato de compresión JPEG Higa, UTN FRBA

Página 4 de 18

Finalmente, este es el resultado que se obtiene al convertir la imagen a YCbCr.

Nuevamente, se dividió la imagen en sus 3 submatrices Y, Cb y Cr y luego a cada una se las representó con sus colores característicos.

Figura 6. División de la imagen en sus canales Y, Cb y Cr.

Las imágenes de esta sección se

obtuvieron con el código rgb2ycbcr_generator.m.

3 SUBMUESTREO DE

CROMINANCIA

El submuestreo de crominancia

(chroma subsampling) consiste en

muestrear la información de crominancia a

una menor frecuencia que la de iluminancia.

El esquema de submuestreo se representa de la forma:

𝐽: 𝑎: 𝑏

donde

J: muestreo horizontal de referencia (usualmente 4)

a: cantidad de muestras de crominancia en

la primera fila.

b: cantidad de cambios de las muestras de crominancia entre la primera y segunda fila.

Algunos tipos de submuestreo son:

4:4:4

La resolución de la información de

crominancia se mantiene a la misma

relación que la de la iluminancia. Se conoce

también como submuestreo 1x1 o submuestreo deshabilitado.

4:2:2

Se conserva la mitad de la información

horizontal de la crominancia, mientras que

la resolución en la dirección vertical se

mantiene a la misma relación que la de la

iluminancia. Se conoce también como

submuestreo 2x1.

4:1:1

Se conserva un cuarto de la

información horizontal de la crominancia,

mientras que la resolución en la dirección

Page 5: FORMATO DE COMPRESIÓN JPEG · ^Una imagen vale más que mil palabras _ deja de ser una frase metafórica cuando se analiza la cantidad de información que realmente una imagen contiene

Formato de compresión JPEG Higa, UTN FRBA

Página 5 de 18

vertical se mantiene a la misma relación que

la de la iluminancia.

4:2:0

La resolución se reduce a la mitad

respecto a la de la iluminancia tanto en

dirección horizontal como vertical. Se conoce también como submuestreo 2x2.

Figura 7. Tipos de submuestreo de crominancia.

A lo largo del informe, se utilizará 4:4:4,

es decir, no se realizará un chroma subsampling.

Luego de este submuestreo (o la

conversión RGB a YCbCr si no se

submuestrea), la imagen se divide en

bloques de 8x8 pixeles para posteriormente

procesar uno por uno con los dos siguientes

procesos: DCT: Discrete Cosine Transform y

Cuantización. Se utiliza este tamaño de

bloque ya que tamaños más grandes

podrían resultar difíciles de procesar y

tamaños más chicos podrían no contener suficiente información.

4 DCT: DISCRETE COSINE

TRANSFORM

Limitación #2 del ojo humano: tiene

dificultades para diferenciar detalles que se

encuentran muy próximos entre sí.

Esto significa que otra gran parte de la

información a descartar serán las altas frecuencias.

El método más conocido para pasar

una señal al plano de las frecuencias es la

transformada de Fourier, que en este caso

se aplicaría en su versión Transformada

Discreta de Fourier en 2D (DFT). Sin

embargo, para el análisis de imágenes

conviene utilizar la Transformada Discreta

de Coseno en 2D (DCT). En la Tabla 1 se

muestran las DFT y DCT al canal Y de la

imagen, obtenidas a partir del código

dft_dct.m; se comparan los resultados y se

resaltan las ventajas de la DCT.

Page 6: FORMATO DE COMPRESIÓN JPEG · ^Una imagen vale más que mil palabras _ deja de ser una frase metafórica cuando se analiza la cantidad de información que realmente una imagen contiene

Formato de compresión JPEG Higa, UTN FRBA

Página 6 de 18

DFT 2D DCT 2D

𝑋𝑘,𝑙 =

1

𝑀𝑁∑ ∑ 𝑥𝑛,𝑚𝑒

−2𝜋𝑖(𝑛𝑘𝑁

+𝑚𝑙𝑀

)

𝑁−1

𝑛=0

𝑀−1

𝑚=0

𝑋𝑘,𝑙 =

∑ ∑ 𝑥𝑛,𝑚 cos [𝑘𝜋(𝑛 + 1 2⁄ )

𝑁]cos [

𝑙𝜋(𝑚 +1 2⁄ )

𝑀]

𝑀−1

𝑚=0

𝑁−1

𝑛=0

En ambos casos, el resultado de la DFT y la DCT es una matriz de MxN (en este caso M=N=512).

La componente de continua (f=0) se encuentra en el centro y las altas frecuencias en los extremos.

Es periódica en MxN.

La componente de continua (f=0) se encuentra en el extremo superior izquierdo y las frecuencias altas en el extremo inferior derecho. Esto hace más sencillo su

fi l trado.

La energía de la imagen transformada se encuentra dispersa.

La información se encuentra más compactada, ya que la energía se concentra en menos componentes (principalmente las componentes de menor frecuencia). Esto también facilita el filtrado.

Tabla 1. Comparación entre la DFT y DCT de la imagen.

N/2

M/2

N-1

N-1

M-1

Page 7: FORMATO DE COMPRESIÓN JPEG · ^Una imagen vale más que mil palabras _ deja de ser una frase metafórica cuando se analiza la cantidad de información que realmente una imagen contiene

Formato de compresión JPEG Higa, UTN FRBA

Página 7 de 18

En la Figura 8, se muestra la DCT del

canal Y de la imagen. En la zona remarcada

en azul se concentran las bajas frecuencias

y se pueden observar varias componentes

de ellas. En la zona remarcada en rojo se

encuentran las altas frecuencias y se

pueden observar componentes tipo

“deltas”.

Figura 8. DCT del canal Y de la imagen.

Si las componentes de alta frecuencia se eliminan de manera drástica con el código dct_hfilter.m, no se perciben diferencias a simple vista como se observa en la Figura 9.

Figura 9. Resultado de aplicar el código dct_hfilter.m.

En el código dct_filter.m, en vez de

remover frecuencias, se parte de una matriz

vacía y se van tomando porciones cada vez

más grandes de la DCT, partiendo desde la

frecuencia de continua hasta llegar a la

máxima. Si se corre este código, se podrá

ver cómo progresivamente se va

construyendo la imagen. A modo de

ejemplo, en el Resultado 1 se observan dos resultados.

Page 8: FORMATO DE COMPRESIÓN JPEG · ^Una imagen vale más que mil palabras _ deja de ser una frase metafórica cuando se analiza la cantidad de información que realmente una imagen contiene

Formato de compresión JPEG Higa, UTN FRBA

Página 8 de 18

n = 50

n = 200

Resultado 1. Resultados del código dct_filter.m.

Con una pequeña porción de 200x200

en la zona de bajas frecuencias de DCT ya se

puede visualizar una imagen casi sin

diferencias de la original. Esto demuestra la

propiedad de la DCT de tener la información compacta en las primeras componentes.

Estos ejemplos se realizaron para

comprender esta transformada, sin

embargo, durante la compresión a JPEG, la

DCT no se aplica a toda la imagen sino que,

como ya se mencionó anteriormente, cada

canal de la imagen se divide en bloques de

8x8 pixeles y a cada uno de ellos se le aplica la DCT.

5 CUANTIZACIÓN

Este paso consiste en hacer uso de las

limitaciones del ojo humano mencionadas

anteriormente: hacer enfoque en la

luminancia, descartar información de los colores y filtrar las altas frecuencias.

Esto se consigue dividiendo a cada bloque de 8x8 pixeles 𝐹𝑖 ,𝑗 con una matriz de

cuantización 𝑄𝑙 , para el caso de la

luminancia y 𝑄𝑐 , para los casos de

crominancia, según la Ecuación 2.

𝐹𝑖,𝑗 =𝐹𝑖,𝑗

𝑄

Ecuación 2. Ecuación de cuantización.

Se pueden observar:

Valores cada vez más grandes en la parte

de altas frecuencias de la DCT.

Valores más grandes (en promedio) en la

matriz de crominancia que en la de luminancia.

Page 9: FORMATO DE COMPRESIÓN JPEG · ^Una imagen vale más que mil palabras _ deja de ser una frase metafórica cuando se analiza la cantidad de información que realmente una imagen contiene

Formato de compresión JPEG Higa, UTN FRBA

Página 9 de 18

Mientras más grande sea el valor de la

matriz de cuantización, con mayor

probabilidad será anulada la componente

de DCT correspondiente; y mientras menor

sea el valor, con mayor probabilidad será retenida.

Además, debido a que esta es la etapa

más decisiva, se agrega un factor de calidad

𝑞 de 1 a 100 que permite graduar cuán

agresiva va a ser la compresión, según la Ecuación 3.

Se puede observar que con q=50 se

usan las tablas de cuantización de

referencia, q mayores hacen que las tablas

contengan valores más chicos y q menores hacen que contengan valores más grandes.

Estas tablas de cuantización fueron

diseñadas tal que para q=75 la compresión

no tenga pérdida perceptual, de modo que

no tiene sentido utilizar valores mayores a

este.

6 APLICACIÓN: CONVERSIÓN A

YCBCR, DCT Y

CUANTIZACIÓN

El código JPEG_encode_decode.m,

realiza los pasos de compresión y

descompresión detallados hasta este

punto.

A modo de ejemplo, se realiza un paso a paso sobre el bloque 𝑓64,1 (extremo

inferior izquierdo) del canal Y, trabajando

con q=30 (baja calidad) para ver más pronunciados los efectos.

En la Figura 10, se observa el resultado

de la conversión de RGB a YCbCr de un

bloque de 8x8 pixeles y la obtención de su canal Y.

Figura 10. Conversión RGB a YCbCr y obtención del canal Y de un bloque de 8x8.

Luego de aplicar DCT, se obtuvo como resultado la matriz del Resultado 2.

𝑀 =

[ 384.2500 −11.3131 −3.1447 −9.5693 −11.7500 −12.2652 4.8204 9.354410.6324 −4.9820 −2.4462 3.1557 3.5492 11.3633 −1.4770 10.77605.8631 −1.6359 −1.8195 4.1391 5.9424 1.5790 −7.7641 −1.3314

−2.0416 2.6126 2.4767 0.0453 −3.6516 0.8102 1.8970 −2.36601.0000 −5.7430 2.8045 −2.8591 −0.5000 8.0332 1.5443 3.68260.4355 −1.6895 −0.4139 0.1408 −3.8143 5.7528 0.6504 4.73601.0892 −4.3737 −0.0141 −1.0972 −0.0260 2.6875 2.0695 2.0298

−0.6852 2.6066 −2.2208 1.0132 3.1456 −4.7889 −10.1895 6.1839 ]

Resultado 2. Resultado de aplicar la DCT al bloque de 8x8 del ejemplo.

𝐹𝑖 ,𝑗 =

𝐹𝑖,𝑗

𝛼𝑄

Ecuación 3. Ecuación de cuantización con factor de calidad.

RGB → YCbCr YCbCr → Y

Page 10: FORMATO DE COMPRESIÓN JPEG · ^Una imagen vale más que mil palabras _ deja de ser una frase metafórica cuando se analiza la cantidad de información que realmente una imagen contiene

Formato de compresión JPEG Higa, UTN FRBA

Página 10 de 18

Luego de aplicar la Cuantización, se obtuvo como resultado la matriz del Resultado 3.

𝑀 =

[ 14 −1 0 0 0 0 0 01 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0]

Resultado 3. Resultado de aplicar la Cuantización al bloque de 8x8 del ejemplo.

7 ZIGZAG

Se transforma el bloque de 8x8 a un

vector de 1x64, mapeando cada elemento

según un patrón de zigzag como se muestra

en Figura 11. Esto se realiza con el fin de

aproximadamente ordenar dentro del

vector las componentes desde las de menor frecuencia hasta las de mayor frecuencia.

𝐴 =

[ 1 2 6 7 15 16 28 293 5 8 14 17 27 30 434 9 13 18 26 31 42 4410 12 19 25 32 41 45 5411 20 24 33 40 46 53 5521 23 34 39 47 52 56 6122 35 38 48 51 57 60 6236 37 49 50 58 59 63 64]

Figura 11. Patrón de Zigzag para un bloque de 8x8.

La matriz A de 8x8 representa la posición en la que debe ir cada elemento en el vector de 1x64.

8 CODIFICACIÓN

8.1 COMPONENTES DE DC: DPCM

Debido a que el primer elemento del

vector, la componente de DC, suele ser de

un valor grande y además suele ser cercano

a la componente de DC del anterior bloque

(correlación espacial). se codifica mediante DPCM (Differential Pulse Code Modulation).

DPCM consiste en calcular la diferencia

entre los valores DC del actual y del anterior

bloque. Este resultado (value) se codifica

según la Tabla 2 en un par (category, code)

y según la tabla de Huffman para las

componentes de DC para la iluminancia o

crominancia (Tabla 3 y Tabla 4,

respectivamente) se codifica category a un nuevo code.

El principio de toda esta codificación es

utilizar la menor cantidad de bits para

codificar datos que ocurren con mayor

frecuencia. Esta es una compresión tipo

lossless ya que no se pierde información al

realizar esto.

Page 11: FORMATO DE COMPRESIÓN JPEG · ^Una imagen vale más que mil palabras _ deja de ser una frase metafórica cuando se analiza la cantidad de información que realmente una imagen contiene

Formato de compresión JPEG Higa, UTN FRBA

Página 11 de 18

Por ejemplo, si la diferencia entre

componentes de DC de iluminancia es:

𝐷𝑖𝑓𝑓 = −511

Según la Tabla 2, como la categoría es “9” y el código “000000000”, se codifica a:

𝐷𝑖𝑓𝑓 = (9,000000000)

Según la Tabla 3, como la categoría es

“9” su código es “1111110” y entonces se codifica a:

𝐷𝑖𝑓𝑓 = 1111110 000000000

8.2 COMPONENTES DE AC: RLE

Debido a que el resto de las 63

componentes del vector, las componentes

de AC, contienen una gran cantidad de

ceros (como se observa en Resultado 3), se

codifica mediante RLE (Run Lenght Encoding).

RLE consiste en codificar las series de

ceros como un par (run length, value) donde

run length es el número de ceros y value es

el próximo valor distinto de cero. Se sigue el

mismo criterio visto anteriormente

utilizando la Tabla 2 para codificar value al

par (category, code). Y finalmente según la

tabla de Huffman para las componentes de

AC para la iluminancia o crominancia (Tabla

5 y Tabla 6, respectivamente) se codifica el par (run length, category) a un nuevo code.

Por ejemplo, si se tuviera esta situación:

57, 0,0,0, 0,23,0,−30, −8,0, . . . , 0

el resultado de la RLE sería:

(0, 57); (4,23); (1,−30); (0,−8); (0,0)

El par (0,0) se utiliza para indicar el EOB

(End Of Block) si se llega a un punto en el

que luego se tienen ceros hasta el final del

vector.

Según la Tabla 2, los values se codifican

a:

(0, 6,111001); (4, 5,10111);

(1, 5,00001); (0, 4,0111); (0,0)

Según la Tabla 5, los pares (run length,

category) se codifican a:

1111000 111001 1111111110011000 10111

11111110110 00001 1011 0111 1010

Las tablas de Huffman pueden ser

distintas a las descriptas en las Tabla 3 a

Tabla 6. Cada archivo JPEG puede estar

codificado con tablas distintas. Estas se

describen en el encabezado DHT, que se

describirá en la siguiente sección.

Antes de finalizar con el último paso

que es el Armado del archivo, se describirán

los modos de operación de JPEG dado que

en un encabezado del archivo se deben configurar.

9 MODOS DE OPERACIÓN DE

JPEG

JPEG tiene 4 modos de operación:

secuencial, loseless, jerárquico y

progresivo.

Modo secuencial

Consiste en codificar las componentes

de izquierda a derecha y de arriba hacia

abajo. Un ejemplo es el descripto en este informe.

Figura 12. Modo secuencial.

Page 12: FORMATO DE COMPRESIÓN JPEG · ^Una imagen vale más que mil palabras _ deja de ser una frase metafórica cuando se analiza la cantidad de información que realmente una imagen contiene

Formato de compresión JPEG Higa, UTN FRBA

Página 12 de 18

Modo losless

No utiliza ni la DCT ni la cuantización

(quienes son las fuentes de pérdidas) sino

que utiliza un método de codificación

predictivo que permite que no haya

pérdidas de información.

Modo jerárquico

Consiste en codificar la imagen en

distintas resoluciones y luego transmitir

comenzando desde la de menor y finalizando con la de mayor resolución.

Modo progresivo

Permite obtener rápidamente al

principio una imagen de baja calidad pero

que va mejorando con las sucesivas

transmisiones. Es muy utilizado en las

páginas web donde las imágenes suelen

tardar en cargarse. Hay 2 maneras de realizarlo y es a través de:

Selección espectral

Las componentes de DCT se agrupan

en bandas espectrales y se envían primero

las de menor frecuencia. A medida que se

envían más bandas, más componentes se obtienen y mejora la imagen.

Aproximación sucesiva

Se transmiten todas las componentes

de la DCT pero primero los MSB (Most

Significant Bits) de cada una y luego los LSB

(Least Significant Bits).

Estos modos se configuran en el

header SOS: Start Of Scan que se describirá en la siguiente sección.

Figura 13. Modo progresivo.

10 ARMADO DEL ARCHIVO

10.1 SOI: START OF IMAGE

Descripción

Primeros 2 bytes de cualquier archivo JPEG.

Esctructura

Marker: 0xFFD8

10.2 APPN: APPLICATION DATA N

Descripción

APPn describe información del archivo

que no se encuentra definido en el estándar

oficial de JPEG. Puede ser de APP0 a APP15.

El APP0 particularmente es el que define

información específica a las

implementaciones de JFIF (JPEG File

Interchange Format) y EXIF (Exchangeable

Image Format) de JPEG. En el ejemplo se utiliza JFIF.

JFIF define algunos detalles que no

están definidos en JPEG, como por ejemplo,

la resolución y la relación de aspecto, que se

describen en APP0, y la codificación de color, establecido en YCbCr.

Esctructura

Marker: 0xFFE0 – 0xFFEF

Tamaño (2 bytes)

Identificador

Puede ser “JFIF\x00” o “EXIF”. En el

ejemplo se utiliza el primero.

Versión (2 bytes)

El byte más significativo se utiliza para

las revisiones mayores y el menos

significativo para las revisiones menores. En el ejemplo es 1 1.

Unidades de las densidades en x e y (1

byte)

Page 13: FORMATO DE COMPRESIÓN JPEG · ^Una imagen vale más que mil palabras _ deja de ser una frase metafórica cuando se analiza la cantidad de información que realmente una imagen contiene

Formato de compresión JPEG Higa, UTN FRBA

Página 13 de 18

0: sin unidades (x e y definen la relación de

aspecto). Este valor es el usado en el ejemplo.

1: la unidad es de puntos por pulgada.

2: la unidad es de puntos por cm.

Densidad de pixeles horizontal y vertical

(2 bytes cada uno)

Tamaño del thumbnail en x e y (1 byte

cada uno)

En el ejemplo, ambos son 0, indicando que no hay thumbnail.

Thumbnail (3*tamaño del thumbnail, debido a los 3 canales en RGB)

10.3 DQT: DEFINE QUANTIZATION

TABLE

Descripción

Dentro del header DQT se describen las

tablas de cuantización, las cuales deben

estar ordenadas según el patrón zigzag descripto en la sección Zigzag.

Estructura

Marker: 0xFFDB

Tamaño (2 bytes)

A partir de este punto se describe cada

tabla de cuantización con los siguientes campos:

ID de la tabla de cuantización (1 byte)

Los 4 bits más significativos

determinan cuántos bytes ocupa cada

elemento (0: 1 byte, 1: 2 bytes). Los otros 4

bits menos significativos son el identificador correspondiente a la tabla (1 a 3)

Tabla de cuantización (64 o 128bytes

dependiendo del tamaño descripto anteriormente)

En el ejemplo se guardan las tablas QL

y QC modificadas por un factor de calidad

q=10, como se describe en la sección

Cuantización.

10.4 SOF: START OF FRAME

Descripción

Indica el inicio de un frame.

Estructura

Marker: 0xFFC0

Tamaño (2 bytes)

Precisión (1 byte)

Puede ser de 8 o 12bits.

Alto y ancho en pixeles (2 bytes cada

uno)

Número de componentes (1 byte)

En el ejemplo son 3 ya que se usan los 3 canales de YCbCr.

A partir de este punto se describe cada componente con los siguientes campos:

ID del componente (1 byte)

JFIF al manejar YCbCr se restringe en 1,

2 y 3.

Muestreo horizontal y vertical (4 bits cada uno)

Pueden ser 1, 2, 3 o 4. En el ejemplo

son 1 ya que no se realizó ningún método de “chroma subsampling”.

ID de la tabla de cuantización utilizada en el componente (1 byte).

Page 14: FORMATO DE COMPRESIÓN JPEG · ^Una imagen vale más que mil palabras _ deja de ser una frase metafórica cuando se analiza la cantidad de información que realmente una imagen contiene

Formato de compresión JPEG Higa, UTN FRBA

Página 14 de 18

0000-0010: FF D8 FF E0-00 10 4A 46-49 46 00 01-01 00 00 01

0000-0020: 00 01 00 00-FF DB 00 84-00 50 37 3C-46 3C 32 50

...

0000-00A0: FF FF FF FF-FF FF FF FF-FF FF FF C0-00 11 08 02

0000-00B0: 00 02 00 03-01 11 00 02-11 01 03 11-01 FF C4 01

Resultado 4. Hexdump de las secciones SOI, APP0, DQT y SOF del JPEG obtenido.

10.5 DHT: DEFINE HUFFMAN TABLES

Descripción

Dentro del header DHT se describen las tablas de Huffman utilizadas.

Estructura

Marker: 0xFFC4

Tamaño (2 bytes)

A partir de este punto se describe cada

tabla de Huffman con los siguientes campos:

ID de la tabla de Huffman (1 byte)

Los 4 bits más significativos

determinan la clase (0: DC, 1: AC). Los otros

4 bits menos significativos son el

identificador correspondiente a la tabla (1 a 3)

Cantidad de code words para cada code length (16 bytes)

Si se toma de ejemplo a la Tabla 3.

Tabla de Huffman para las componentes de

DC de iluminancia., este campo sería:

0 0 1 5 1 1 1 1 1 1 0 0 0 0 0 0 0

ya que para los code lenghts 0, 1, 10, 11, 12,

13, 14 y 15 no hay ningún code word y, por

ejemplo, para el code length 3 hay 5 code words.

Categorías (16 bytes)

Continuando con el ejemplo anterior, las categorías son de la 0 a la 11.

10.6 SOS: START OF SCAN

Descripción

Este es el encabezado previo a la información de la imagen.

Estructura

Marker: 0xFFDA

Tamaño (2 bytes)

Cantidad de componentes (1 byte)

En el ejemplo son 3 ya que se usan los

3 canales de YCbCr.

Descripción de cada componente

ID de la componente (1 byte)

ID de las tablas de Huffman (1 byte,

los 4 bits más significativos son para

el ID del DC y los otros 4 bits menos significativos son para el ID del AC)

Configuración del modo progresivo

(descripto en Modos de operación de JPEG)

Inicio y el fin de la selección espectral (1 byte cada uno).

En ejemplo, son 0 y 63 (se envía la

componente entera) ya que no se utilizará este modo.

Aproximación sucesiva (1 byte)

Está compuesto por dos pares de 4bits

que determinan los parámetros bit position

high y low de este modo, respectivamente.

En ejemplo son 0, ya que no se utiliza este modo.

Page 15: FORMATO DE COMPRESIÓN JPEG · ^Una imagen vale más que mil palabras _ deja de ser una frase metafórica cuando se analiza la cantidad de información que realmente una imagen contiene

Formato de compresión JPEG Higa, UTN FRBA

Página 15 de 18

10.7 EOI: END OF IMAGE

Descripción

Últimos 2 bytes de cualquier archivo JPEG.

Esctructura

Marker: 0xFFD9

0000-00B0: 00 02 00 03-01 11 00 02-11 01 03 11-01 FF C4 01

0000-00C0: A2 00 00 01-05 01 01 01-01 01 01 00-00 00 00 00

0000-00D0: 00 00 00 01-02 03 04 05-06 07 08 09-0A 0B 10 00

...

0000-0260: FA FF DA 00-0C 03 01 00-02 11 03 11-00 3F 00 62

...

0000-4040: B3 11 28 00-A0 02 80 0A-00 43 D2 93-D8 6B FF D9

Resultado 5. Hexdump de las secciones DHT, SOS, Imagen y EOI del JPEG obtenido. Se observa que finaliza en

0x403F (16,5KBytes aproximadamente)

11 RESULTADO

Finalmente, en el código JPEG_encoder.m se pueden apreciar todos los pasos de la

compresión y codificación de JPEG descriptos en este informe y en la Figura 14 se compara el

resultado obtenido con la imagen original. Si se realiza un zoom, se logran ver los bloques de

8x8 pixels con los que se estuvo trabajando para la compresión.

Figura 14. Comparación de la imagen antes y después de la compresión JPEG.

Page 16: FORMATO DE COMPRESIÓN JPEG · ^Una imagen vale más que mil palabras _ deja de ser una frase metafórica cuando se analiza la cantidad de información que realmente una imagen contiene

Formato de compresión JPEG Higa, UTN FRBA

Página 16 de 18

12 ANEXO

Category Value Bit code representation 0 0 -

1 -1,1 0,1 2 -3,-2,2,3 00,01,10,11

3 -7,-6,-5,-4,4,5,6,7 000,001,010,011,100,101,110,111 4 -15,...,-8,8,...,15 0000,...,0111,1000,...,1111

5 -31,...,-16,16,...31 00000,...,01111,10000,...,11111

6 -63,...,-32,32,...63 000000,...,011111,100000,...,111111 7 -127,...,-64,64,...,127 0000000,...,0111111,1000000,...,1111111

8 -255,..,-128,128,..,255 ... 9 -511,..,-256,256,..,511 ...

10 -1023,..,-512,512,..,1023 ...

11 -2047,..,-1024,1024,..,2047 ...

Tabla 2. Tabla de codificación (value) -> (category, bitcode).

Category Code length Code word

0 2 00

1 3 010

2 3 011

3 3 100

4 3 101

5 3 110

6 4 1110

7 5 11110

8 6 111110

9 7 1111110

10 8 11111110

11 9 111111110

Tabla 3. Tabla de Huffman para las componentes de DC de iluminancia.

Category Code length Code word

0 2 00

1 2 01

2 2 10

3 3 110

4 4 1110

5 5 11110

6 6 111110

7 7 1111110

8 8 11111110

9 9 111111110

10 10 1111111110

11 11 11111111110

Tabla 4. Tabla de Huffman para las componentes de DC de crominancia.

Page 17: FORMATO DE COMPRESIÓN JPEG · ^Una imagen vale más que mil palabras _ deja de ser una frase metafórica cuando se analiza la cantidad de información que realmente una imagen contiene

Formato de compresión JPEG Higa, UTN FRBA

Página 17 de 18

Run length/Category Code length Code word

0/0 (EOB) 4 1010

...

0/6 7 1111000

...

0/10 16 1111111110000011

1/1 4 1100

...

4/5 16 1111111110011000

...

16/11 16 1111111111111110

Tabla 5. Tabla de Huffman para las componentes de AC de la iluminancia.

Run length/Category Code length Code word

0/0 (EOB) 2 00

...

0/6 6 111000

...

0/10 12 111111110100

1/1 4 1011

...

4/5 16 1111111110011001

...

16/11 16 1111111111111110

Tabla 6. Tabla de Huffman para las componentes de AC de crominancia.

Page 18: FORMATO DE COMPRESIÓN JPEG · ^Una imagen vale más que mil palabras _ deja de ser una frase metafórica cuando se analiza la cantidad de información que realmente una imagen contiene

Formato de compresión JPEG Higa, UTN FRBA

Página 18 de 18

13 BIBLIOGRAFIA

Cursos:

“Image Compression using Matlab”, The Learning Square.

http://www.thelearningsquare.in/

“Image and Video Processing: From Mars to Hollywood with a Stop at the Hospital”,

Guillermo Sapiro, Coursera.

https://es.coursera.org/

“Lecture 108 - 7.6* The JPEG compression algorithm”, Paolo Prandoni y Martin Vetterli,

Coursera.

https://www.coursera.org/learn/dsp/lecture/Q6hgv/7-6-the-jpeg-compression-algorithm

Web:

https://www.quora.com/What-is-the-best-image-compression-algorithm

http://www.ams.org/samplings/feature-column/fcarc-image-compression

http://www.dspguide.com/ch27/6.htm

http://www.impulseadventure.com/photo/jpeg-compression.html

https://petapixel.com/2015/05/30/jpeg-compression-test-google-photos-vs-jpegmini/

https://behindthesciences.com/coding/zigzag-codification-and-huffman-coding-in-jpeg-

matlab-code

http://sep.stanford.edu/sep/jon/family/jos/webtv/developer3/design/satcolor/

Libros:

Image Processing and Analysis, Stan Birchfield.

JPEG: Still Image Data Compression Standard, William B. Pennebaker, Joan L. Mitchell.

Application Notes:

JPEG Algortihm baseline on embedded systems.