Cómo funciona el algoritmo de compresión JPEG. Decodificación JPEG para tontos

"Implementación de algoritmos

JPEG y JPEG2000"

Terminado:

estudiante del grupo 819

Dmitri Ugarov

Principios operativos de los algoritmos JPEG y JPEG2000.

1. Algoritmo JPEG

JPEG (Grupo Conjunto de Expertos en Fotografía) es un método ampliamente utilizado para comprimir imágenes fotográficas. El formato de archivo que contiene datos comprimidos también suele denominarse JPEG; Las extensiones más comunes para este tipo de archivos son .jpeg, .jfif, .jpg, .JPG o .JPE. Sin embargo, de ellas, .jpg es la extensión más popular en todas las plataformas.

El algoritmo JPEG es un algoritmo de compresión. con perdida de calidad.

Ámbito de aplicación

El formato es un formato de compresión con pérdida, por lo que es incorrecto pensar que JPEG almacena datos a 8 bits por canal (24 bits por píxel). Por otro lado, dado que los datos JPEG comprimidos y descomprimidos normalmente se representan en formato de 8 bits por canal, a veces se utiliza esta terminología. También se admite la compresión de imágenes de medios tonos en blanco y negro.

Al guardar un archivo JPEG, se puede especificar el grado de calidad y, por tanto, el grado de compresión, que suele especificarse en algunas unidades convencionales, por ejemplo, de 1 a 100 o de 1 a 10. Un número mayor corresponde a una mejor calidad. , pero el tamaño del archivo aumenta. Por lo general, la diferencia de calidad entre 90 y 100 prácticamente no se percibe a simple vista. Cabe recordar que la imagen restaurada bit a bit siempre es diferente de la original. Un error común es creer que la calidad JPEG es la misma que el porcentaje de información almacenada.

Etapas de codificación

El proceso de compresión JPEG incluye varios pasos:

1. Convierta la imagen al espacio de color óptimo;

Si se utiliza el espacio de color luma/crominancia (YCbCr), se logra una mejor relación de compresión. En esta etapa de codificación, el modelo de color RGB se convierte a YCbCr utilizando las relaciones apropiadas:

Y = 0,299*R + 0,587*G + 0,114*B

Cb = - 0,1687*R – 0,3313*G + 0,5*B

Cr = 0,5*R – 0,4187*G – 0,0813*B.
Durante la decodificación, se puede utilizar la transformada inversa apropiada:
R = Y + 1,402*Cr

G = Y – 0,34414*Cb – 0,71414*Cr

B = Y + 1,772*Cb.
Nota que relaciona Y,Cb,Cr en el sistema visual humano:

El ojo, especialmente la retina, tiene dos tipos de células como analizadores visuales: las células de visión nocturna que perciben sólo tonos de gris (desde el blanco brillante hasta el negro oscuro) y las células de visión diurna que perciben los matices de color. Las primeras celdas, que producen color RGB, detectan un nivel de brillo similar al valor Y. Otras celdas, responsables de la percepción del tono, determinan el valor asociado con la diferencia cromática.


2. Submuestreo de componentes de color promediando grupos de píxeles;

La mayor parte de la información visual a la que el ojo humano es más sensible consiste en componentes de luminancia (Y) en escala de grises de alta frecuencia del espacio de color YCbCr. Los otros dos componentes de cromaticidad (Cb y Cr) contienen información de color de alta frecuencia a la que el ojo humano es menos sensible. Por lo tanto, se puede descartar una determinada parte y, de este modo, se puede reducir el número de píxeles que se tienen en cuenta para los canales de color.

1) escriba 4:2:0 (cuando la imagen se divide en cuadrados de 2x2 píxeles y en cada uno de ellos todos los píxeles reciben los mismos valores de los canales Cb y Cr, y el brillo Y sigue siendo diferente para cada uno)

2) tipo 4:2:2 (la combinación por componentes de cromaticidad se produce sólo horizontalmente en grupos de dos píxeles).

3) El tipo 4:4:4 significa que cada píxel de cada fila tiene su propio valor único de los componentes Y, Cb y Cr. (Figura 1a)

4) tipo 4:2:2. Submuestreando la señal de crominancia con un factor de 2 horizontalmente, obtenemos de un flujo de YCbCr 4:4:4 un flujo de YCbCr 4:2:2. La entrada “4: 2: 2” significa que en una sola línea hay 4 valores de brillo para 2 valores de cromaticidad (ver Fig. 1 b). La señal 4:2:2 YCbCr es ligeramente inferior en calidad de imagen a la señal 4:4:4 YCbCr, pero el ancho de banda requerido se reduce en un 33% del original.

3. Aplicación de transformadas de coseno discretas para reducir la redundancia de datos de imágenes;

La etapa principal del algoritmo es la transformada de coseno discreta (DCT o DCT), que es un tipo de transformada de Fourier. Se utiliza cuando se trabaja con imágenes para diversos fines, no solo para fines de compresión. La transición a la representación de frecuencia de los valores de píxeles nos permite mirar la imagen de manera diferente, procesarla y, lo que nos interesa, comprimirla. Además, conociendo los coeficientes de conversión, siempre podemos realizar la acción opuesta: devolver la imagen original.

DCT aplicado directamente a un bloque (en nuestro caso de 8x8 píxeles) de la imagen se verá así:

donde x, y son las coordenadas espaciales del píxel (0..7),

f(x,y) - valores de píxeles del macrobloque original (por ejemplo, brillo)

u,v - coordenadas de píxeles en representación de frecuencia (0..7)

w(u) =1/SQRT(2) para u=0, en otros casos w(u)=1 (SQRT - raíz cuadrada)

w(v) =1/SQRT(2) para v=0, en otros casos w(v)=1

O en forma matricial:

4. Cuantización de cada bloque de coeficientes DCT utilizando funciones de ponderación optimizadas teniendo en cuenta la percepción visual humana;

La transformada de coseno discreta prepara información para compresión y redondeo con pérdidas. Para cada elemento de la matriz que se transforma, hay un elemento de matriz correspondiente cuantización. La matriz resultante se obtiene dividiendo cada elemento de la matriz que se está transformando por el elemento correspondiente de la matriz de cuantificación y luego redondeando el resultado al número entero más cercano. Al compilar una matriz de cuantificación, sus elementos grandes se ubican en la esquina inferior izquierda, de modo que al dividirlos por ellos, los datos en esta esquina después de una transformación discreta del coseno (precisamente aquellos cuyo redondeo será menos doloroso) se redondean de manera más aproximada. En consecuencia, la información perdida es menos importante para nosotros que la información restante.


5. Etapa de compresión secundaria

La etapa final del codificador JPEG es codificar la matriz resultante.

5.1 Permutación en zigzag de 64 coeficientes DCT

Entonces, después de haber realizado la transformación DCT en el bloque de valores de 8x8, tenemos un nuevo bloque de 8x8. Luego, este bloque de 8x8 se recorre en un patrón de zigzag como este:

(Los números en el bloque de 8x8 indican el orden en el que escaneamos la matriz bidimensional de 8x8)

0, 1, 5, 6,14,15,27,28,

2, 4, 7,13,16,26,29,42,

3, 8,12,17,25,30,41,43,

9,11,18,24,31,40,44,53,

10,19,23,32,39,45,52,54,

20,22,33,38,46,51,55,60,

21,34,37,47,50,56,59,61,

35,36,48,49,57,58,62,63

Como puede ver, primero está la esquina superior izquierda (0,0), luego el valor en (0,1), luego (1,0), luego (2,0), (1,1), (0, 2), (0,3), (1,2), (2,1), (3,0), etc.

Después de hacer zigzag en la matriz de 8x8, ahora tenemos un vector con 64 coeficientes (0..63). El objetivo de este vector en zigzag es que estamos mirando a través de los coeficientes DCT de 8x8 en orden de frecuencias espaciales crecientes. Entonces, obtenemos un vector ordenado por criterios de frecuencia espacial: el primer valor del vector (índice 0) corresponde a la frecuencia más baja en la imagen; se denota con el término DC. A medida que aumenta el índice del vector, obtenemos valores correspondientes a frecuencias más altas (un valor con índice 63 corresponde a la amplitud de la frecuencia más alta en el bloque 8x8). El resto de coeficientes DCT se denotan por AC.

5.2 Codificación cero RunLength (RLE)

Ahora tenemos un vector con una larga secuencia de ceros. Podemos usar esto codificando ceros consecutivos. IMPORTANTE: Verá por qué más adelante, pero aquí nos saltamos la codificación del primer coeficiente vectorial (el coeficiente DC), que está codificado de manera diferente. Considere el vector 64 original como un vector 63 (este es un vector 64 sin el primer coeficiente)

Digamos que tenemos 57,45,0,0,0,0,23,0,-30,-16,0,0,1,0,0,0,0,0,0, solo 0,... .0

Así es como se realiza la compresión RLC JPEG para este ejemplo:

(0,57); (0,45); (4.23); (1,-30); (0,-16); (2.1); EOB

Como puede ver, codificamos para cada valor distinto de 0 el número de ceros PRINCIPALES consecutivos antes del valor, luego sumamos el valor. Otra nota: EOB es la forma abreviada de Fin de bloque, es un valor codificado especial (marcador). Si hemos alcanzado una posición en un vector desde la cual solo tenemos ceros vectoriales hasta el final, asignaremos esa posición con un EOB y completaremos la compresión RLC del vector cuantificado.

[Tenga en cuenta que si el vector cuantificado no termina en cero (tiene el último elemento distinto de 0), no tendremos un token EOB.]

(0,57); (0,45); (4,23); (1,-30); (0,-16); (2,1); (0,0)

Otra cosa BÁSICA: digamos que en algún lugar del vector cuantificado tenemos:

57, dieciocho ceros, 3, 0,0, 0,0 2, treinta y tres ceros, 895, EOB

La codificación JPG Huffman impone la restricción de que el número de ceros a la izquierda deben codificarse como un valor de 4 bits y no puede exceder 15.

Entonces, el ejemplo anterior debería codificarse como:

(0,57); (15,0) (2,3); (4,2); (15,0) (15,0) (1,895), (0,0)

(15,0) es un valor codificado especial que indica que le siguen 16 ceros consecutivos.

5.3 Paso final: codificación Huffman

Primero, una nota IMPORTANTE: en lugar de almacenar el valor real, el estándar JPEG especifica que almacenamos el tamaño de bits mínimo en el que podemos mantener este valor (esto se llama categoría de este valor) y luego una representación codificada en bits de este valor. como esto:

7,..,-4,4,..,7 3 000,001,010,011,100,101,110,111

15,..,-8,8,..,15 4 0000,..,0111,1000,..,1111

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

63,..,-32,32,..,63 6 .

127,..,-64,64,..,127 7 .

255,..,-128,128,..,255 8 .

511,..,-256,256,..,511 9 .

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

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

4095,..,-2048,2048,..,4095 12 .

8191,..,-4096,4096,..,8191 13 .

16383,..,-8192,8192,..,16383 14 .

32767,..,-16384,16384,..,32767 15 .

Posteriormente para el ejemplo anterior:

(0,57); (0,45); (4,23); (1,-30); (0,-8); (2,1); (0,0)

codifiquemos solo el valor correcto de estos pares, excepto los pares que son tokens especiales como (0,0) o (si es necesario) (15,0)

45, de manera similar, se codificaría como (6.101101)

30 -> (5,00001)

Y ahora, escribiremos nuevamente la cadena de pares:

(0,6), 111001; (0,6), 101101; (4,5), 10111; (1,5), 00001; (0,4), 0111; (2,1), 1; (0,0)

Los pares de 2 valores entre paréntesis se pueden representar en un byte, ya que de hecho cada uno de los 2 valores se puede representar en un fragmento de 4 bits (el recuento de ceros a la izquierda es siempre menor que 15 y el mismo que la categoría [números codificados en el archivo JPG - en el área -32767..32767]). En este byte, el bit alto representa el número de ceros anteriores y el bit bajo representa la categoría del nuevo valor distinto de 0.

El paso final de codificación es codificar Huffman este byte y luego registrar en un archivo JPG, como un flujo de bits, el código Huffman de este byte, seguido de la representación bit a bit de este número.

Por ejemplo, para el byte 6 (equivalente a (0,6)) tenemos código Huffman = 111000;

21 = (1,5) - 11111110110

4 = (0,4) - 1011

33 = (2,1) - 11011

0 = EOB= (0,0) - 1010

El flujo de bits final escrito en el archivo JPG en el disco para el ejemplo anterior es de 63 coeficientes (recuerde que nos saltamos el primer coeficiente).

111000 111001 111000 101101 1111111110011001 10111 11111110110 00001

1011 0111 11011 1 1010
Ventajas y desventajas

Las desventajas del formato incluyen el hecho de que con altos niveles de compresión, la estructura de datos en bloque se hace sentir, la imagen se "divide en cuadrados" (cada uno de 8x8 píxeles de tamaño). Este efecto es especialmente notable en áreas con baja frecuencia espacial (transiciones de imágenes suaves, por ejemplo, un cielo despejado). En áreas con alta frecuencia espacial (por ejemplo, bordes contrastantes de la imagen), aparecen "artefactos" característicos: una estructura irregular de píxeles con color y/o brillo distorsionados. Además, pequeños detalles de color desaparecen de la imagen. Recuerde también que este formato no admite transparencia.

Sin embargo, a pesar de sus deficiencias, JPEG se ha generalizado mucho debido a su alta relación de compresión en relación con las alternativas que existían en el momento de su introducción.

2. Algoritmo JPEG2000

El algoritmo JPEG-2000 fue desarrollado por el mismo grupo de expertos en fotografía que desarrolló JPEG. La formación de JPEG como estándar internacional se completó en 1992. En 1997, quedó claro que se necesitaba una norma nueva, más flexible y potente, que se ultimó en el invierno de 2000.

Las principales diferencias entre el algoritmo en JPEG 2000 y el algoritmo en JPEG son las siguientes:

1) Mejor calidad de imagen con un alto grado de compresión. O, lo que es lo mismo, una mayor relación de compresión con la misma calidad para relaciones de compresión altas. De hecho, esto significa una reducción notable en el tamaño de los gráficos de "calidad web" utilizados por la mayoría de los sitios.

2) Soporte para codificar áreas individuales con mejor calidad. Se sabe que determinadas zonas de la imagen son críticas para la percepción humana (por ejemplo, los ojos en una fotografía), mientras que la calidad de otras puede verse sacrificada (por ejemplo, el fondo). Con la optimización “manual”, se aumenta la tasa de compresión hasta perder calidad en alguna parte importante de la imagen. Ahora es posible establecer la calidad en áreas críticas, comprimiendo otras áreas con más fuerza, es decir. obtenemos una relación de compresión final aún mayor con una calidad de imagen subjetivamente igual.

3) El algoritmo de compresión principal ha sido reemplazado por wavelet. Además del aumento especificado en la relación de compresión, esto hizo posible deshacerse del bloqueo de 8 píxeles que ocurre cuando se aumenta la relación de compresión. Además, el desarrollo fluido de la imagen ahora se incluye inicialmente en el estándar (el JPEG progresivo, utilizado activamente en Internet, apareció mucho más tarde que el JPEG).

4) Para aumentar la relación de compresión, el algoritmo utiliza compresión aritmética. El estándar JPEG también incluía originalmente compresión aritmética, pero luego fue reemplazada por la compresión Huffman, menos eficiente, porque la compresión aritmética estaba protegida por patentes. Ahora la patente principal ha caducado y existe la oportunidad de mejorar el algoritmo.

5) Admite compresión sin pérdidas. Además de la compresión con pérdida habitual, el nuevo JPEG ahora admitirá la compresión sin pérdida. Por lo tanto, es posible utilizar JPEG para comprimir imágenes médicas, imprimir, guardar texto para su reconocimiento mediante sistemas OCR, etc.

6) Admite la compresión de imágenes de un solo bit (2 colores). Para guardar imágenes de un solo bit (dibujos en tinta, texto escaneado, etc.), anteriormente se recomendaba ampliamente el formato GIF, ya que la compresión DCT es muy ineficaz para imágenes con transiciones de color nítidas. En JPEG, cuando se comprimía, una imagen de 1 bit se convertía a 8 bits, es decir. aumentó 8 veces, después de lo cual se intentó comprimir, a menudo menos de 8 veces. Ahora podemos recomendar JPEG 2000 como algoritmo universal.

7) Se admite la transparencia a nivel de formato. Ahora será posible aplicar un fondo sin problemas al crear páginas WWW no sólo en GIF, sino también en JPEG 2000. Además, no sólo se admite 1 bit de transparencia (el píxel es transparente/opaco), sino también un canal separado, que le permitirá establecer una transición suave de una imagen opaca a un fondo transparente.

Además, a nivel de formato, admite la inclusión de información de derechos de autor en la imagen, soporte para resistencia a errores de bits durante la transmisión y transmisión, puede solicitar herramientas externas (complementos) para su descompresión o procesamiento, puede incluir su descripción. , buscar información, etc. .d.

Etapas de codificación

El proceso de compresión JPEG2000 incluye varios pasos:

1. Convierta la imagen al espacio de color óptimo.
En esta etapa de codificación, el modelo de color RGB se convierte a YUV utilizando las relaciones apropiadas:

Al descomprimir se aplica la transformación inversa correspondiente:

2. Transformada wavelet discreta.

La transformada wavelet discreta (DWT) también puede ser de dos tipos: para el caso de compresión con pérdidas y para compresión sin pérdidas.

Esta transformación en el caso unidimensional es un producto escalar de los coeficientes correspondientes y una cadena de valores. Pero porque muchos coeficientes son cero, entonces la transformación wavelet directa e inversa se puede escribir mediante las siguientes fórmulas (para transformar los elementos extremos de una línea se utiliza su expansión en 2 píxeles en cada dirección, cuyos valores son simétricos con el valores de los elementos de la línea con respecto a sus píxeles extremos):
y(2*n + 1) = x(2*n + 1) - (int)(x(2*n) + x(2*n + 2)) / 2

y(2*n) = x(2*n) + (int)(y(2*n - 1) + y(2*n + 1) + 2) / 4

y viceversa

x(2*n) = y(2*n) - (int)(y(2*n - 1) + y(2*n + 1) + 2) / 4

x(2*n + 1) = y(2*n + 1) + (int)(x(2*n) + x(2*n + 2)) / 2.

3. Cuantización de coeficientes.

Al igual que el algoritmo JPEG, la cuantificación se utiliza al codificar una imagen en formato JPEG2000. La transformada wavelet discreta, al igual que su análoga, clasifica los coeficientes por frecuencia. Pero, a diferencia de JPEG, el nuevo formato tiene una matriz de cuantificación para toda la imagen.


4. Etapa de compresión secundaria

. Al igual que JPEG, el último paso del algoritmo de compresión en el nuevo formato es la codificación sin pérdidas. Pero, a diferencia del formato anterior, JPEG2000 utiliza un algoritmo de compresión aritmética.

Implementación de software

En este trabajo se implementan los algoritmos JPEG y JPEG2000. Ambos algoritmos implementan codificación directa e inversa (la última etapa de compresión secundaria está ausente). El cálculo de JPEG lleva bastante tiempo (unos 30 segundos) debido al cálculo "directo" de DCT. Si necesita aumentar la velocidad de trabajo, primero debe calcular la matriz DCT (los cambios deben realizarse en la clase DCT).

Pasemos al programa:


  1. Después del lanzamiento, aparece una ventana donde

y puede guardarlo haciendo clic en el botón (2) e ingresando el nombre deseado en el cuadro de diálogo.

  • Con un factor de calidad suficientemente grande, la imagen cambiará mucho. Si se trata de un algoritmo JPEG, los bloques de tamaño 8x8 serán claramente visibles (en el caso del algoritmo JPEG2000, no habrá división de bloques).
  • A:

    Después:



    (pronunciado "japeg", Grupo Conjunto de Expertos en Fotografía, después del nombre de la organización de desarrollo) es uno de los formatos gráficos populares utilizados para almacenar fotografías e imágenes similares. Los archivos que contienen datos JPEG suelen tener las extensiones .jpeg, .jfif, .jpg, .JPG o .JPE. Sin embargo, de ellas, .jpg es la extensión más popular en todas las plataformas.

    1. Grupo Mixto de Expertos en Materia de Fotografía;

    2. Un método de compresión de imágenes desarrollado por este grupo y el formato gráfico correspondiente, de uso frecuente en la WWW. Se caracteriza por la compacidad de los archivos y, en consecuencia, por la rápida transferencia, así como por la "pérdida" de calidad de la imagen. Se utiliza principalmente para fotografías, ya que para ellas la pérdida de calidad es menos crítica. Almacena la configuración de color en el modelo de color RGB.

    JPEG(pronunciado " jpeg", Inglés Grupo conjunto de expertos en fotografía, por el nombre de la organización desarrolladora) es uno de los formatos gráficos populares utilizados para almacenar fotografías e imágenes similares. Los archivos que contienen datos JPEG suelen tener la extensión .jpeg, .jfif, .jpg, .JPG, o .JPE. Sin embargo, de estos .jpg la extensión más popular en todas las plataformas. El tipo MIME es imagen/jpeg.

    El algoritmo JPEG es un algoritmo de compresión de datos con pérdida.

    Ámbito de aplicación

    El algoritmo JPEG es más adecuado para comprimir fotografías y pinturas que contienen escenas realistas con transiciones suaves de brillo y color. JPEG se utiliza más ampliamente en fotografía digital y para almacenar y transmitir imágenes a través de Internet.

    Por otro lado, JPEG no es adecuado para comprimir dibujos, textos y gráficos de caracteres, donde el fuerte contraste entre píxeles adyacentes produce artefactos notables. Es recomendable guardar dichas imágenes en formatos sin pérdida como TIFF, GIF, PNG o RAW.

    JPEG (al igual que otros métodos de compresión de distorsión) no es adecuado para comprimir imágenes durante el procesamiento en varias etapas, ya que se introducirán distorsiones en las imágenes cada vez que se guarden los resultados del procesamiento intermedio.

    JPEG no debe utilizarse en casos en los que incluso las pérdidas mínimas sean inaceptables, por ejemplo, al comprimir imágenes astronómicas o médicas. En tales casos, se puede recomendar el modo de compresión Lossless JPEG proporcionado por el estándar JPEG (que, desafortunadamente, no es compatible con los códecs más populares) o el estándar de compresión JPEG-LS.

    Compresión

    La compresión convierte la imagen del espacio de color RGB a YCbCr (YUV). Cabe señalar que el estándar JPEG (ISO/IEC 10918-1) no regula en modo alguno la elección de YCbCr, permitiendo otros tipos de conversión (por ejemplo, con un número de componentes distintos de tres) y compresión sin conversión. (directamente a RGB), sin embargo, la especificación JFIF (JPEG File Interchange Format, propuesta en 1991 por los especialistas de C-Cube Microsystems y que ahora se ha convertido en un estándar de facto) implica el uso de la conversión RGB->YCbCr.

    Luego de la conversión RGB->YCbCr se puede realizar un “submuestreo” para los canales de imagen Cb y Cr, responsables del color, el cual consiste en asignar valores promedio de Cb y Cr (esquema de adelgazamiento “4:2:0” ). Además, para cada bloque de 2x2, en lugar de 12 valores (4 Y, 4 Cb y 4 Cr), solo se utilizan 6 (4 Y y un Cb y Cr promediados cada uno). Si se imponen mayores exigencias a la calidad de la imagen restaurada después de la compresión, el adelgazamiento solo se puede realizar en una dirección: vertical (esquema "4:4:0") u horizontal ("4:2:2"), o no se realiza. en absoluto (“4:4:4”).

    El estándar también permite diezmar con un promedio de Cb y Cr no para un bloque de 2x2, sino para cuatro píxeles ubicados secuencialmente (vertical u horizontalmente), es decir, para bloques de 1x4, 4x1 (esquema “4:1:1”), así como como 2x4 y 4x2. También es posible utilizar diferentes tipos de dilución para Cb y Cr, pero en la práctica estos esquemas se utilizan muy raramente.

    A continuación, el componente de brillo Y y los componentes de color Cb y Cr se dividen en bloques de 8x8 píxeles. Cada uno de estos bloques está sujeto a una transformada de coseno discreta (DCT). Los coeficientes DCT resultantes se cuantifican (en general, se utilizan diferentes matrices de cuantificación para Y, Cb y Cr) y se empaquetan utilizando códigos de Huffman. El estándar JPEG también permite el uso de una codificación aritmética mucho más eficiente, sin embargo, debido a restricciones de patentes (la patente del codificador aritmético QM descrito en el estándar JPEG pertenece a IBM), no se utiliza en la práctica.

    Las matrices utilizadas para cuantificar los coeficientes DCT se almacenan en la parte del encabezado del archivo JPEG. Por lo general, se construyen de manera que los coeficientes de alta frecuencia estén sujetos a una cuantificación más fuerte que los de baja frecuencia. Esto da como resultado un engrosamiento de pequeños detalles en la imagen. Cuanto mayor sea la relación de compresión, más fuertemente se cuantificarán todos los coeficientes.

    Cuando guarda una imagen como un archivo JPEG, especifica una configuración de calidad que se especifica en alguna unidad arbitraria, como 1 a 100 o 1 a 10. Un número más alto generalmente equivale a una mejor calidad (y un tamaño de archivo comprimido más grande). Sin embargo, incluso cuando se utiliza la calidad más alta (correspondiente a una matriz de cuantificación compuesta únicamente por unos), la imagen reconstruida no coincidirá exactamente con la original, lo que está asociado tanto con la precisión final del DCT como con la necesidad de redondear la imagen. valores de Y, Cb, Cr y coeficientes DCT al número entero más cercano. El modo de compresión Lossless JPEG, que no utiliza DCT, proporciona una coincidencia exacta entre las imágenes restauradas y originales, sin embargo, su baja eficiencia (la relación de compresión rara vez supera 2) y la falta de soporte de los desarrolladores de software no han contribuido a la popularidad de JPEG sin pérdida.

    Variedades de esquemas de compresión JPEG.

    El estándar JPEG proporciona dos formas principales de representar datos codificados.

    La más común, compatible con la mayoría de los códecs disponibles, es la representación secuencial de datos JPEG, que implica el recorrido secuencial de la imagen codificada bloque por bloque de izquierda a derecha, de arriba a abajo. Las operaciones descritas anteriormente se realizan en cada bloque de imagen codificado y los resultados de la codificación se colocan en el flujo de salida en forma de un único "escaneo", es decir. una matriz de datos codificados correspondientes a una imagen pasada ("escaneada") secuencialmente. El modo de codificación principal o "base" sólo permite esta representación. El modo extendido, junto con el modo secuencial, también permite la presentación progresiva de datos JPEG.

    En el caso del JPEG progresivo, los datos comprimidos se escriben en el flujo de salida como un conjunto de escaneos, cada uno de los cuales describe la imagen completa con un grado de detalle cada vez mayor. Esto se logra registrando en cada escaneo no el conjunto completo de coeficientes DCT, sino solo una parte de ellos: primero, los de baja frecuencia, en los escaneos posteriores, los de alta frecuencia (el método de "selección espectral", es decir, muestras espectrales ), o mediante el refinamiento secuencial, de escaneo en escaneo, de los coeficientes DCT (método de “aproximación sucesiva”, es decir, aproximaciones sucesivas). Esta representación progresiva de datos es especialmente útil cuando se transmiten imágenes comprimidas utilizando canales de comunicación de baja velocidad, ya que le permite obtener una visión general de toda la imagen después de que solo se haya transmitido una pequeña parte del archivo JPEG.

    Ambos esquemas descritos (tanto JPEG secuencial como progresivo) se basan en DCT y fundamentalmente no permiten obtener una imagen reconstruida absolutamente idéntica a la original. Sin embargo, el estándar también permite una compresión que no utiliza DCT, sino que se construye sobre la base de un predictor lineal (sin pérdidas, es decir, “sin pérdidas”, JPEG), lo que garantiza una coincidencia completa, bit por bit, del original y Imágenes restauradas. Al mismo tiempo, la relación de compresión de las imágenes fotográficas rara vez llega a 2, pero en algunos casos se exige la ausencia garantizada de distorsión. Se pueden obtener relaciones de compresión notablemente más altas utilizando el método de compresión JPEG-LS, que, a pesar de la similitud en los nombres, no está directamente relacionado con el estándar JPEG ISO/IEC 10918-1 (Recomendación ITU T.81), descrito por ISO/ Estándar IEC 14495-1 (Recomendación ITU T.87).

    Sintaxis y estructura del formato JPEG

    El archivo JPEG contiene la secuencia. marcadores, cada uno de los cuales comienza con el byte 0xFF, que indica el comienzo del marcador, y un byte identificador. Algunos marcadores constan únicamente de este par de bytes, mientras que otros contienen datos adicionales que consisten en un campo de dos bytes con la longitud de la parte de información del marcador (incluida la longitud de este campo, pero menos los dos bytes del comienzo del marcador, es decir, 0xFF y el identificador) y los datos en sí.

    Marcadores JPEG básicos
    Marcador bytes Longitud Objetivo
    El viejo JPEG, a pesar de sus muchas ventajas innegables, todavía tiene limitaciones importantes. Para eliminarlos se recurrió a un nuevo método de compresión de imágenes, cuyo desarrollo se había estado desarrollando durante mucho tiempo. Ahora que JPEG2000 se ha convertido en un formato oficialmente reconocido, esto debería servir como el comienzo de su soporte activo por parte de varios fabricantes de software.

    Seguramente muchos de los que trabajan con gráficos en una computadora están interesados ​​​​en la pregunta: ¿cómo se puede comprimir una imagen que ocupa una cantidad impresionante de espacio en la memoria de la PC en un tamaño mucho más pequeño en el disco? Recuerdo que en los albores de mi carrera editorial, la palabra "compresión" era tan misteriosa y sorprendente para mí... De hecho, ¿cómo se produce la compresión de imágenes? Después de todo, sin ella ahora es impensable imaginar la Web, ¿O fotografía digital o impresión en color?

    Entonces, compresión. Puede o no provocar una pérdida de calidad. El último caso son métodos como RLE (Codificación de longitud de ejecución, codificación de longitudes de ejecución, que da como resultado pares como ( saltar, valor, Dónde saltar es el número de ceros consecutivos, y valor- el valor que les sigue) y LZW (compresión mediante el método Lempel-Ziff-Welch), implementado en formatos PSD, GIF y TIFF. También son muy utilizados por archivadores como RAR y ZIP. El grado medio de compresión sin pérdidas es de 2 a 3 veces.

    Si necesitas comprimir más una imagen, no puedes hacerlo sin perder calidad. ¿Cuáles son los principios? En primer lugar, cualquier imagen contiene una cierta redundancia, cuya eliminación no provocará un cambio notable en la calidad de la imagen. En segundo lugar, el ojo humano es más sensible a los cambios de brillo que de color. Por lo tanto, se aplican diferentes grados de compresión a diferentes canales de imagen: se pierde información, pero esto no se nota visualmente. Además, la sensibilidad del ojo a los elementos pequeños de la imagen es baja, lo que permite eliminarlos sin comprometer la calidad. De esta manera puedes comprimir la imagen (incluso si el deterioro de la calidad ya es notable) hasta un umbral aceptable. El grado de degradación de la calidad se determina para cada caso concreto. Para imprimir, solo se permiten distorsiones mínimas, pero para publicar en Internet (según el propósito), mucho más.

    El más popular entre los métodos de compresión con pérdida es JPEG, que, incluso con una compresión treinta veces mayor, conserva una calidad de imagen suficiente. Por cierto, la mayoría de los métodos modernos de compresión de datos (por ejemplo, Layer-4, conocido como mp3, así como MPEG) implementan mecanismos similares a JPEG. Echemos un vistazo más de cerca a este formato, especialmente porque no hace mucho tiempo finalmente se aprobó su implementación más reciente, JPEG2000, que incluía todas las adiciones realizadas a JPEG/MPEG durante diez años de su desarrollo.

    JPEG

    El nombre del algoritmo de compresión es una abreviatura de Joint Photographic Expert Group, un grupo de iniciativa formado por expertos de la UIT (Unión Internacional de Telecomunicaciones) y la ISO (Organización Internacional de Normalización). Por eso su nombre contiene el prefijo Articulación. En 1992, JPEG fue declarado estándar internacional para gráficos.

    Al comprimir utilizando el método JPEG, siempre se pierde calidad. En este caso, siempre hay una opción: dar preferencia a la calidad a expensas del volumen (el tamaño del archivo se comprimirá aproximadamente tres veces) o, por el contrario, lograr un tamaño mínimo de imagen en el que aún permanecerá. reconocible (el grado de compresión puede llegar a 100). La compresión, en la que la diferencia de calidad entre la imagen resultante y la original sigue siendo imperceptible, da como resultado una reducción de 10 a 20 veces en el tamaño del archivo.

    Ámbito de aplicación

    JPEG es el mejor compresor para imágenes monocromáticas y a todo color con calidad fotográfica. Si desea guardar una imagen con una paleta de índice, primero se convierte a todo color. Al comprimir utilizando el método JPEG, debe tener en cuenta que todo depende de la naturaleza de las imágenes: mucho menos volumen ocuparán aquellas en las que los cambios de color son insignificantes y no hay transiciones de color nítidas. JPEG se utiliza dondequiera que sea necesario almacenar imágenes fotográficas: en cámaras digitales, impresión (EPS DCS 2.0) e Internet es impensable sin él.

    Existen varios tipos de compresión JPEG, pero consideraremos solo dos de ellos, utilizados en el paquete estándar para trabajar con imágenes rasterizadas en Adobe Photoshop: base Y progresivo. Los otros dos métodos, arifmético y sin pérdidas, son exóticos y, por diversas razones, no se han generalizado.

    ¿Cómo se produce la compresión?

    1. La primera etapa es conversión de modelo de color imágenes (generalmente RGB) en un modelo donde los componentes de brillo y color están separados (por ejemplo, YCbCr o YUV), lo que permite una elección óptima de los niveles de compresión para cada canal (teniendo en cuenta las características de la percepción ocular). La conversión se produce de la siguiente manera:

    Y = 0,299xR+0,587*G+0,114xB Cb = (B-Y)/0,866/2+128 Cr = (R-Y)/0,701/2+128

    2. En la siguiente etapa, la llamada prefiltración, en el que los píxeles vecinos por separado en cada uno de los canales Cb y Cr se agrupan en pares en las direcciones horizontal y vertical, y el canal de brillo Y se deja sin cambios. A continuación, todo el grupo de cuatro píxeles recibe el valor medio de los componentes Cb y Cr correspondientes. Para abreviar, dicho esquema se puede designar como 4:1:1 (la misma forma de representación se adopta en DRAW, la ventana de exportación jpeg). Teniendo en cuenta el hecho de que cada píxel está codificado con 3 bytes (256 niveles para cada uno de los tres canales), como resultado, la cantidad de datos se reduce automáticamente 2 veces (en lugar de 12 bytes, para transferir 4 píxeles es necesario suficiente para transferir sólo 4+1+1 = 6 bytes). Desde un punto de vista matemático, tal transformación conduce a una pérdida significativa de información, pero el ojo humano no percibe la pérdida, ya que existe una redundancia significativa en las imágenes fotográficas ordinarias.

    3. La información recibida, que ha pasado la etapa de "limpieza" primaria, se agrupa nuevamente por separado en cada canal en bloques, pero ya de tamaño 8x8, después de lo cual se les aplica una compresión básica, la llamada. transformada de coseno discreta, para abreviar: DCT (transformada de coseno discreta). Como resultado, la información sobre la distribución El brillo de los píxeles se convierte a otra forma, donde se describe mediante una distribución basada en frecuencia de ocurrencia uno u otro brillo de píxel. DCT tiene una serie de ventajas sobre otras transformadas (por ejemplo, la transformada de Fourier), ya que proporciona una mejor recuperación de la información.

    En lugar de una matriz de 64 valores (8x8 píxeles) para cada bloque que forma la imagen, obtenemos una matriz de 64 frecuencias. Veamos cómo funciona DCT con un ejemplo. Digamos que el brillo de los píxeles en un bloque de nuestra imagen tiene la forma que se muestra en la Fig. 1 a la izquierda, entonces el resultado de la transformación será como se muestra a la derecha.

    1

    A pesar de la gran precisión, en esta etapa se produce cierta pérdida de información; es por eso que JPEG siempre conduce a una pérdida de calidad. El objetivo principal de la transformación es conocer una imagen general de la distribución de objetos grandes (en la figura, arriba a la izquierda) y pequeños (abajo a la derecha), lo que será útil más adelante para eliminar información sin importancia.

    4. La siguiente etapa es eliminar del bloque información que apenas se nota a simple vista, o cuantificación(cuantización). Todos los componentes se dividen en varios coeficientes que determinan la importancia de cada uno de ellos para la restauración de alta calidad de la imagen original y el resultado. redondeado hasta un valor entero. Es este procedimiento el que introduce mayor pérdida de calidad, reduciendo el volumen final de la imagen. Los componentes de alta frecuencia se cuantifican de forma aproximada, mientras que los componentes de baja frecuencia se cuantifican con mayor precisión, ya que son los más perceptibles. Para suavizar un poco la disminución de la calidad, el canal de luminancia utiliza factores de división más pequeños que los canales de crominancia. Pero más a menudo (esto se hace para acelerar los cálculos), en lugar de valores especialmente seleccionados, solo se toma uno: el que ingresó el usuario al elegir el grado de compresión.

    Así es, por ejemplo, cómo se ve la ventana de Photoshop al guardar una imagen usando la operación Guardar para web, donde el parámetro Calidad (o más bien, un derivado del mismo) es el mismo. factor de redondeo(Figura 2).

    Como resultado de la cuantificación, se obtiene un conjunto de componentes, a partir de los cuales se reconstruye la imagen original con una precisión determinada (Fig. 3).

    4

    En la figura. La Figura 4 muestra el resultado de reconstruir un cuadrado blanco y negro usando uno, cuatro y quince componentes, respectivamente.

    5. Una vez completado el trabajo principal de compresión de imágenes, las transformaciones adicionales se reducen a tareas secundarias: los componentes restantes se recogen en secuencia de tal forma que se ubiquen primero los responsables de las piezas grandes, y luego de todas las más pequeñas. Si miras la imagen, el movimiento del codificador parece una línea en zigzag. Esta etapa se llama ZigZag (Fig. 5).

    5

    Luego se comprime la secuencia resultante: primero con el RLE habitual, luego con el método de Huffman.

    6. Y por último limpiar etapa técnica— los datos están encerrados en un caparazón y provistos de un encabezado, que indica todos los parámetros de compresión para que la imagen pueda restaurarse. Sin embargo, a veces esta información no está incluida en los encabezados, lo que brinda beneficios adicionales en la compresión, pero en este caso es necesario asegurarse de que la aplicación que leerá el archivo los conozca.

    Esa, en general, es toda la transformación. Ahora calculemos qué compresión se logró en nuestro ejemplo. Recibimos 7 valores a partir de los cuales se restaurará la imagen original de 8x8. Entonces, la compresión por el uso de la conversión DCT en ambos canales de color fue 8x8/7 9 veces. Al canal de brillo le asignamos no siete, sino 11 coeficientes, lo que dará 8x8/11 6. Para los tres canales será (9+9+6)/3=8 veces. La reducción de la calidad durante el "adelgazamiento" de la imagen, que ocurrió en la segunda etapa, da un doble aumento adicional (esquema 4-1-1, teniendo en cuenta las peculiaridades de la codificación del componente de brillo), lo que dará un resultado final de 16 veces. Se trata de un cálculo aproximado que no tiene en cuenta algunos aspectos, pero refleja la situación real. Para obtener una reducción de treinta veces en el tamaño del archivo, debe dejar solo 3-4 componentes.

    El proceso de restauración de la imagen procede en orden inverso: primero, los componentes se multiplican por los valores de la tabla de cuantificación y se obtienen coeficientes aproximados para la transformada inversa del coseno. Cuanto mejor sea la calidad seleccionada durante la compresión, mayor será el grado de aproximación a los coeficientes originales, lo que significa que la imagen se restaurará con mayor precisión. Sólo queda una acción por agregar: justo antes de finalizar, realice algunos ajustes (ruido) en los píxeles límite de los bloques vecinos para eliminar diferencias marcadas entre ellos.

    Desventajas de JPEG

    1. Incapacidad para lograr altas tasas de compresión debido a restricciones de tamaño de bloque (solo 8x8).
    2. Estructura en bloques a altos niveles de compresión.
    3. Redondea las esquinas afiladas y difumina los elementos finos de una imagen.
    4. Solo se admiten imágenes RGB (JPEG para imágenes CMYK solo se puede usar en formato EPS a través de DCS).
    5. La imagen no se puede mostrar hasta que se haya cargado por completo.

    Han pasado diez años desde que se aprobó JPEG como estándar. Durante este tiempo, grupos de investigadores propusieron una serie de adiciones importantes a la versión original, lo que resultó en la aparición de un nuevo estándar a finales del año pasado.

    JPEG2000

    Desde 1997 se comenzó a trabajar encaminado a crear un sistema de codificación universal que eliminara todas las limitaciones impuestas por JPEG y pudiera trabajar eficazmente con todo tipo de imágenes: blanco y negro, escala de grises, a todo color y multicomponente, independientemente del contenido (ya sean estos). serán fotografías, textos bastante pequeños o incluso dibujos). Junto con las organizaciones internacionales de normalización, en su desarrollo participaron gigantes de la industria como Agfa, Canon, Fujifilm, Hewlett-Packard, Kodak, LuraTech, Motorola, Ricoh, Sony y otros.

    Dado que el nuevo algoritmo pretendía ser universal, se le encomendó además la tarea de utilizar varios métodos de transmisión de datos (en tiempo real y con un ancho de banda estrecho), lo que es especialmente crítico en aplicaciones multimedia, por ejemplo, en transmisiones en tiempo real a través de Internet. .

    Requisitos básicos para el formato JPEG2000:

    1. Logrando un mayor grado de compresión respecto a JPEG.
    2. Admite imágenes monocromáticas, lo que te permitirá usarlo para comprimir imágenes con texto.
    3. Posibilidad de compresión sin pérdida alguna.
    4. Genera imágenes con una mejora gradual en el detalle (como en el GIF progresivo).
    5. El uso de áreas prioritarias en la imagen, cuya calidad se puede establecer por encima del resto de la imagen.
    6. Decodificación en tiempo real (sin retrasos).

    Principio de compresión

    El principal mecanismo de compresión en JPEG2000, a diferencia de JPEG, utiliza la transformación wavelet, un sistema de filtros aplicados a toda la imagen. Sin entrar en detalles sobre la compresión, sólo señalaremos los puntos principales.

    6
    Primero, de la misma manera que para JPEG, la imagen se convierte al sistema YCrCb, después de lo cual se produce la eliminación inicial de la información redundante (mediante la ya conocida combinación de píxeles adyacentes en bloques de 2x2). Luego, toda la imagen se divide en partes del mismo tamaño (mosaico), cada una de las cuales, independientemente de las demás, sufrirá más transformaciones (esto reduce los requisitos de memoria y recursos informáticos). A continuación, cada canal se filtra mediante filtros de paso bajo y paso alto por separado en filas y filas, como resultado de lo cual, después del primer paso, se forman cuatro imágenes más pequeñas (subbanda) en cada parte. Todos ellos contienen información sobre la imagen original, pero su contenido informativo es muy diferente (Fig. 6).

    Por ejemplo, la imagen obtenida después del filtrado de paso bajo por filas y filas (arriba a la izquierda) contiene la mayor cantidad de información, y la imagen obtenida después del filtrado de paso alto contiene la menor. El contenido de información de las imágenes obtenidas después del filtrado de paso bajo de filas y el filtrado de paso alto de columnas (y viceversa) es promedio. La imagen más informativa se filtra nuevamente y los componentes resultantes, como ocurre con la compresión jpeg, se cuantifican. Esto sucede varias veces: para una compresión sin pérdidas, el ciclo generalmente se repite 3 veces, con pérdidas; 10 iteraciones se consideran un compromiso razonable entre tamaño, calidad y velocidad de descompresión. El resultado es una imagen pequeña y un conjunto de imágenes con pequeños detalles, que secuencialmente y con cierta precisión la devuelven a su tamaño normal. Evidentemente, el mayor grado de compresión se obtiene en imágenes de gran tamaño, ya que se puede establecer un mayor número de ciclos.

    Implementación práctica

    Desde que se sentaron las bases de la compresión JPEG2000, varias empresas han desarrollado algoritmos bastante eficaces para su implementación.

    Entre los principales desarrolladores de software se encuentra Corel (por cierto, fue uno de los primeros en introducir en sus paquetes soporte para el formato wi, basado en transformaciones de ondas, por lo que es honrado y elogiado): todas las imágenes se suministran en los CD con el paquete CorelDRAW hasta la novena versión, se comprimieron exactamente de esta manera.

    Más tarde, Adobe se unió. Algunas de las ideas contenidas en JPEG2000 fueron aplicadas por los desarrolladores de Photoshop 6 en forma de opciones avanzadas al guardar una imagen en formato JPEG (normal, basado en la transformación del coseno). Entre ellos se encuentra el JPEG progresivo (la opción Progresivo en la ventana Guardar para Web). Este algoritmo está destinado principalmente a sistemas en tiempo real y funciona exactamente igual que el GIF progresivo. Primero aparece una copia aproximada de la imagen, formada por apenas unos pocos bloques grandes, y con el tiempo, a medida que se cargan el resto de datos, la estructura comienza a verse con mayor claridad hasta que, finalmente, la imagen final se restaura por completo. A diferencia del GIF, este algoritmo supone una mayor carga para el espectador, ya que tendrá que completar todo el ciclo de transformación para cada versión transmitida.

    Entre otros añadidos, destacamos la inclusión en el archivo de varias imágenes comprimidas en JPEG con diferentes grados de compresión, resolución e incluso modelos de color. En consecuencia, en Photoshop 6 fue posible seleccionar áreas individuales en una imagen y aplicarles diferentes configuraciones de compresión ( Región de interés, este mecanismo se propuso por primera vez en 1995), utilizando valores más bajos en la tabla de cuantificación. Para hacer esto, configure el área requerida (por ejemplo, en forma de un nuevo canal en la imagen) y haga clic en el ícono de máscara al lado del elemento Calidad. En la ventana que aparece, puede experimentar con la imagen moviendo los controles deslizantes; el resultado final se muestra en la pantalla, lo que le permite encontrar rápidamente el compromiso necesario entre calidad y tamaño.

    Conversores y visores especializados

    Dado que el estándar no estipula implementaciones específicas de métodos de compresión/descompresión, esto da margen a desarrolladores externos de algoritmos de compresión. De hecho, puede utilizar un algoritmo de conversión de onda simplificado y así acelerar el proceso de compresión o, por el contrario, utilizar uno más complejo y, en consecuencia, que requiera grandes recursos del sistema.

    Hay soluciones personalizadas de otras empresas disponibles como diseños comerciales. Algunos se implementan como programas separados (JPEG 2000 desarrollado por Aware), otros, como módulos adicionales para los editores de trama más comunes (ImagePress JPEG2000 desarrollado por Pegasus Imaging y el módulo LEAD JPEG2000 de LEAD Technologies). En este contexto destaca la empresa LuraTech, que lleva mucho tiempo trabajando en este tema. Promueve su tecnología LuraWave en el producto autónomo LuraWave SmartCompress (la tercera versión ya está disponible) y ofrece módulos para Photoshop, Paintshop, Photopaint. Una característica distintiva es una mayor velocidad de funcionamiento (conversión casi instantánea) incluso con imágenes de varios megabytes de tamaño. En consecuencia, el precio de este módulo es el más alto: 79 dólares.

    Para ver imágenes JPEG2000 en navegadores, debe instalar un módulo de visualización especial (todos los desarrolladores lo ofrecen de forma gratuita). Insertar una imagen en un documento HTML, como cualquier complemento, se reduce a utilizar la construcción EMBED (con parámetros adicionales). Por ejemplo, significa que se utilizará un método de transmisión de imágenes progresiva. Es decir, en nuestro ejemplo (un archivo de 139 KB de tamaño), primero se transfieren solo 250 bytes, sobre la base de los cuales se construirá una imagen aproximada, luego, después de cargar 500 bytes, la imagen se actualiza (esto continúa hasta se alcanza el valor LÍMITE).

    Si desea obtener una mejor imagen, debe seleccionar el elemento Mejorar en el menú que aparece usando el botón derecho (Fig. 9). En cuatro descargas, la imagen completa se descargará por completo.

    9

    Conclusiones

    Por lo tanto, JPEG2000 objetivamente muestra mejores resultados que JPEG sólo con niveles de compresión altos. Con una compresión de 10 a 20 veces, no hay mucha diferencia. ¿Podrá desplazar o simplemente competir con el formato generalizado? En un futuro próximo, es poco probable que, en la mayoría de los casos, la relación calidad/tamaño proporcionada por JPEG sea bastante aceptable. Y es poco probable que ese 10-20% de compresión adicional que proporciona JPEG2000 con la misma calidad visual conduzca a un aumento en su popularidad.

    Pero las empresas fabricantes de cámaras digitales están mostrando un gran interés en el nuevo formato, ya que el tamaño de las matrices fotosensibles aumenta constantemente cada año y cada vez es más difícil almacenar imágenes en la memoria. Y luego el nuevo formato se generalizará y, quién sabe, tal vez después de un tiempo JPEG2000 sea igual a JPEG. En cualquier caso, Analog Micro Devices lanzó recientemente un chip especializado en el que la compresión/descompresión mediante la nueva tecnología se implementa a nivel de hardware, y el Departamento de Defensa de EE. UU. ya está utilizando activamente el nuevo formato para grabar fotografías recibidas de satélites espía.

    Hechos y especulaciones

    1. JPEG pierde calidad al abrir y volver a guardar el archivo.

    No es cierto. Sólo se pierde calidad cuando se selecciona un nivel de compresión inferior al que se guardó la imagen.

    2. JPEG pierde calidad al editar el archivo.

    ¿Es verdad? Cuando guarda el archivo modificado, todas las transformaciones se realizan nuevamente, así que evite la edición frecuente de imágenes. Esto sólo se aplica cuando el archivo está cerrado; si el archivo permanece abierto, no hay motivo de preocupación.

    3. El resultado de la compresión con los mismos parámetros en diferentes programas será el mismo.

    No es cierto. Diferentes programas interpretan la entrada del usuario de manera diferente. Por ejemplo, en un programa se indica la calidad de la imagen guardada (como, por ejemplo, en Photoshop), en otro, el grado de compresión (el valor inverso).

    4. Al configurar la calidad máxima, la imagen se guarda sin pérdida de calidad.

    No es cierto. JPEG siempre se comprime con pérdidas. Pero establecer, por ejemplo, una calidad del 90% en lugar del 100% da como resultado una reducción del tamaño del archivo mayor que el deterioro de la calidad percibido por el ojo.

    5. Cualquier archivo JPEG se puede abrir en cualquier editor que comprenda el formato JPEG.

    No es cierto. Algunos editores no comprenden este tipo de JPEG, llamado JPEG progresivo.

    6. JPEG no admite transparencia.

    ¿Es verdad? A veces puede parecer que una parte de la imagen es transparente, pero en realidad su color simplemente se elige para que coincida con el color de fondo de la página html.

    7. JPEG se comprime mejor que GIF.

    No es cierto. Tienen diferentes áreas de aplicación. En general, una imagen “GIF” típica después de la conversión a JPEG tendrá un volumen mayor.

    JPEG2000 frente a JPEG

    7
    1. Con una compresión de veinte a treinta veces, JPEG2000 y JPEG dan aproximadamente la misma calidad (por cierto, Photoshop no puede comprimir una foto normal más allá de este límite).

    2. Con mayor compresión, la calidad de JPEG2000 es significativamente mayor que la de JPEG, lo que le permite comprimir hasta 50 veces sin pérdidas, y con algunas pérdidas (estamos hablando de imágenes para Internet), hasta 100 e incluso más. a 200.

    3. Con altos niveles de compresión en aquellas áreas donde se produce un cambio de color suave, la imagen no adquiere la estructura de bloques característica de un JPEG simple. JPEG2000 también se emborrona un poco y redondea los bordes afilados; consulte las fotografías (Fig. 7 y 8).

    Muestra los resultados de la compresión de un archivo de prueba con diferentes grados de compresión (a la izquierda, guardado en Photoshop en formato JPG, a la derecha, en formato JPEG2000). Para la imagen de la Fig. 7, se seleccionaron niveles de compresión de 20, 40, 70 y 145 (se pueden especificar explícitamente al guardar en JPEG2000), se eligió el nivel de compresión JPG para que el tamaño del archivo fuera el mismo que después de la compresión con JPEG2000. Como dicen, los resultados son obvios. Para mayor claridad, se llevó a cabo un segundo experimento con una imagen con detalles más nítidos (con niveles de compresión de 10, 20, 40 y 80). La ventaja vuelve a estar del lado de JPEG2000 (Fig. 8).

    8

    4. Dado que, de hecho, las copias con diferentes resoluciones se almacenan en un archivo JPEG2000

    Quiero decir, para aquellos que crean galerías de imágenes en Internet, no es necesario crear miniaturas para ellas.

    5. De particular interés es la compresión sin distorsión (modo sin pérdidas). Así, el archivo de prueba con compresión LZW de Photoshop ocupó 827 KB y el JPEG2000 comprimido 473 KB.

    6. En comparación con JPEG, su homónimo más avanzado consume muchos más recursos del sistema. Pero la potencia de los ordenadores, que ha aumentado considerablemente en los últimos años, permite resolver con éxito los problemas de compresión de imágenes mediante un nuevo método.

    7. Falta de compatibilidad con JPEG2000 en los navegadores. Para ver estas imágenes, debe descargar un módulo adicional bastante grande (1,2 MB).

    8. Falta de software gratuito para guardar imágenes en el nuevo formato.

    Las revistas están disponibles gratuitamente.

    Sobre el mismo tema:


    El algoritmo para convertir una imagen gráfica JPEG consta de varias etapas que se realizan en la imagen de forma secuencial, una tras otra:

    – conversiones de espacio de color,

    – submuestreo,

    – transformada de coseno discreta (DCT),

    – cuantificación,

    – codificación.

    En la etapa de conversión del espacio de color, la imagen se convierte del espacio de color RGB a YCbCr (donde Y es el brillo y Cb y Cr son los componentes de diferencia de color del punto de la imagen):

    Aplicación del espacio YCbCr en lugar de lo habitual RGB se explica por las características fisiológicas de la visión humana, es decir, el hecho de que el sistema nervioso humano tiene una sensibilidad significativamente mayor a la luminosidad ( Y) que a los componentes de diferencia de color (en este caso cb Y cr). Conversión inversa del espacio de color (de YCrCb V RGB) tiene la forma:

    El algoritmo de compresión JPEG le permite comprimir imágenes con diferentes tamaños de planos de color. Denotemos por xyo Y y yo ancho y alto iº plano de color de la imagen. Dejar incógnita= máximo(xyo), Y= máximo(y yo), definimos para cada plano los coeficientes Hola= incógnita/ xyo Y vi yo= Y/ y yo. El mayor valor para incógnita Y Y según el algoritmo JPEG es 2 16, y para Hola Y vi yo– 2 2 . Por tanto, el ancho y la altura de los planos de color pueden ser de 1 a 4 veces más pequeños que las dimensiones del plano más grande. Para ordinario RGB imágenes, los tamaños de todos los planos de color son iguales.

    El submuestreo consiste en reducir el tamaño de los planos. cr Y cb. La reducción más común es 2 veces en ancho y 2 veces en altura (ver Figura 1). Para esto cr Y cb Los planos de la imagen se dividen en bloques de 2 por 2 píxeles y el bloque se reemplaza por una muestra de componentes de diferencia de color (en lugar de las 4 muestras existentes, se coloca su media aritmética para cada bloque, lo que hace que posible reducir el tamaño de la imagen original 2 veces).

    Figura 1 – Tipos comunes de reducción de resolución

    Luego, por separado para cada componente del espacio de color. Y, cb Y cr, se realiza una transformada de coseno discreta directa. Para ello, la imagen se divide en bloques de 8 por 8 píxeles y cada bloque se transforma según la fórmula:

    El uso de la transformación de coseno discreto le permite pasar de la representación espacial de la imagen a la espectral. La transformada inversa del coseno discreto tiene la forma:

    Después de esto, puede proceder a la cuantificación de la información recibida. La idea de la cuantificación es descartar una determinada cantidad de información. Se sabe que el ojo humano es menos sensible a las altas frecuencias (especialmente a las altas frecuencias de los componentes de diferencia de color). La mayoría de las imágenes fotográficas contienen pocos componentes de alta frecuencia; Además, la aparición de altas frecuencias es consecuencia del proceso de digitalización, es decir. debido a la aparición del ruido de muestreo y cuantificación que lo acompaña. En esta etapa, el llamado tablas de cuantificación- matrices que constan de números enteros positivos de 8 por 8, en las que se dividen las frecuencias correspondientes de los bloques de imágenes, el resultado se redondea a un número entero:



    .

    El proceso de descuantización utiliza las mismas tablas que la cuantificación. La descuantización consiste en multiplicar las frecuencias cuantificadas por los elementos correspondientes de la tabla de cuantificación:

    Así, a medida que aumenta el factor de cuantificación, aumenta la cantidad de información descartada. Veamos esto con más detalle usando un ejemplo.

    Bloque antes de la cuantización:

    3862, –22, –162, –111, –414, 12, 717, 490,

    383, 902, 913, 234, –555, 18, –189, 236,

    229, 707, –708, 775, 423, –411, –66, –685,

    231, 34, –928, 34, –1221, 647, 98, –824,

    –394, 128, –307, 757, 10, –21, 431, 427,

    324, –874, –367, –103, –308, 74, –1017, 1502,

    208, –90, 114, –363, 478, 330, 52, 558,

    577, 1094, 62, 19, –810, –157, –979, –98

    Tabla de cuantificación (calidad 90):

    24, 16, 16, 24, 40, 64, 80, 96,

    16, 16, 24, 32, 40, 96, 96, 88,

    24, 24, 24, 40, 64, 88, 112, 88,

    24, 24, 32, 48, 80, 136, 128, 96,

    32, 32, 56, 88, 112, 176, 168, 120,

    40, 56, 88, 104, 128, 168, 184, 144,

    80, 104, 128, 136, 168, 192, 192, 160,

    112, 144, 152, 160, 176, 160, 168, 160

    Bloque después de la cuantificación:

    161, –1, –10, –5, –10, 0, 9, 5,

    24, 56, 38, 7, –14, 0, –2, 3,

    10, 29, –30, 19, 7, –5, –1, –8,

    10, 1, –29, 1, –15, 5, 1, –9,

    –12, 4, –5, 9, 0, 0, 3, 4,

    8, –16, –4, –1, –2, 0, –6, 10,

    3, –1, 1, –3, 3, 2, 0, 3,

    5, 8, 0, 0, –5, –1, –6, –1

    3864, –16, –160, –120, –400, 0, 720, 480,

    384, 896, 912, 224, –560, 0, –192, 264,

    240, 696, –720, 760, 448, –440, –112, –704,

    240, 24, –928, 48,–1200, 680, 128, –864,

    –384, 128, –280, 792, 0, 0, 504, 480,

    320, –896, –352, –104, –256, 0,–1104, 1440,

    240, –104, 128, –408, 504, 384, 0, 480,

    560, 1152, 0, 0, –880, –160,–1008, –160

    Tabla de cuantificación (calidad 45):

    144, 96, 88, 144, 216, 352, 456, 544,

    104, 104, 128, 168, 232, 512, 536, 488,

    128, 112, 144, 216, 352, 504, 616, 496,

    128, 152, 192, 256, 456, 776, 712, 552,

    160, 192, 328, 496, 600, 968, 912, 680,

    216, 312, 488, 568, 720, 920, 1000, 816,

    432, 568, 696, 776, 912, 1072, 1064, 896,

    640, 816, 840, 872, 992, 888, 912, 880

    Bloque después de la cuantificación:

    27, 0, –2, –1, –2, 0, 2, 1,

    4, 9, 7, 1, –2, 0, 0, 0,

    2, 6, –5, 4, 1, –1, 0, –1,

    2, 0, –5, 0, –3, 1, 0, –1,

    –2, 1, –1, 2, 0, 0, 0, 1,

    2, –3, –1, 0, 0, 0, –1, 2,

    0, 0, 0, 0, 1, 0, 0, 1,

    1, 1, 0, 0, –1, 0, –1, 0

    Bloquear después de la conversión inversa:

    3888, 0, –176, –144, –432, 0, 912, 544,

    416, 936, 896, 168, –464, 0, 0, 0,

    256, 672, –720, 864, 352, –504, 0, –496,

    256, 0, –960, 0,–1368, 776, 0, –552,

    –320, 192, –328, 992, 0, 0, 0, 680,

    432, –936, –488, 0, 0, 0,–1000, 1632,

    0, 0, 0, 0, 912, 0, 0, 896,

    640, 816, 0, 0, –992, 0, –912, 0

    Como se puede observar, en el primer caso el cambio corriente continua El coeficiente como resultado de la compresión es 2, y en el segundo 26, mientras está cuantificado. corriente continua el coeficiente en el segundo caso es 6 veces menor que en el primero.

    La codificación es la etapa final de la compresión; durante ella, los bloques de imágenes se convierten en forma vectorial de acuerdo con la regla especificada por bloques de la forma:

    0, 1, 5, 6, 14, 15, 27, 28,

    2, 4, 7, 13, 16, 26, 29, 42,

    3, 8, 12, 17, 25, 30, 41, 43,

    9, 11, 18, 24, 31, 40, 44, 53,

    10, 19, 23, 32, 39, 45, 52, 54,

    20, 22, 33, 38, 46, 51, 55, 60,

    21, 34, 37, 47, 50, 56, 59, 61,

    35, 36, 48, 49, 57, 58, 62, 63

    donde los índices vectoriales de los componentes matriciales correspondientes se indican como elementos de bloque. En este caso, el elemento cero se codifica como la diferencia con el elemento cero del bloque anterior. Los elementos cero indican corriente continua, contienen el componente constante del bloque (todos los demás elementos de CA generalmente se indican C.A.).

    Luego, los datos resultantes se comprimen mediante codificación aritmética o una modificación del algoritmo de Huffman. Esta etapa no es de gran interés desde el punto de vista de la esteganografía en imágenes gráficas, por lo que escapa al alcance de nuestra consideración.



    
    Arriba