Pérdida acumulativa de calidad en ficheros JPEG

Si sólo estas interesado en comprobar visualmente la pérdida de calidad acumulativa de la compresión JPEG y no te interesa, o ya sabes lo suficiente sobre la compresión JPEG, puedes pasar directamente a visualizar los vídeos e imágenes al final de esta entrada. Sin embargo, si no tienes ningún conocimiento sobre este tema, te aconsejaría leer el artículo completo, e incluso, si quieres profundizar más, leer los enlaces relacionados en las referencias que incluyo más adelante.

Índice

  1. Introducción
  2. Tipos de compresión
  3. Fundamentos de la compresión JPEG
  4. Fases del proceso de compresión JPEG
  5. Ficha técnica de las pruebas realizadas
  6. Análisis de las imágenes resultantes
    1. Escena con altos contrastes (bodegón)
    2. Escena con bajos contrastes (playa)
  7. Conclusiones
  8. Imágenes  ilustrativas de los resultados obtenidos
  9. Vídeos con la secuencia de imágenes que muestran la degradación progresiva.
  10. Referencias

Introducción.

El formato más utilizado actualmente al trabajar con imágenes, es sin duda el JPEG. Prácticamente todos los dispositivos, cámara, móviles, etc. graban en este formato, debido principalmente a sus altos ratios de compresión con apenas perdida de calidad, una gran ventaja sobre todo a la hora de transmisión por Internet. Con él formato JPEG es posible conseguir compresiones de 15:1 o 20:1 (o sea ficheros 10 o 20 veces más pequeños) sin aparentemente ninguna pérdida de calidad, pero incluso, y dependiendo del tipo de imagen podríamos llegar a compresiones del 52:1,o superiores, sin tener perdidas demasiado apreciables.

Sin embargo no debemos olvidar que se trata de un formato de compresión con pérdida, y lo que es peor que esta pérdida es acumulativa cuando se realizan sucesivas compresiones, Esto significa que si se comprime una imagen y se descomprime, se perderá calidad de imagen, pero si se vuelve a comprimir una imagen ya comprimida se obtendrá una pérdida todavía mayor. Cada sucesiva compresión causará pérdidas adicionales de calidad
Hay mucha literatura en Internet, como era de esperar, sobre este formato, pero pocas o ninguna prueba real, o al menos yo no la he encontrado, en la que se muestre la degradación progresiva que se va produciendo en la imagen en las sucesivas copias. Y esto es lo que me he propuesto en esta prueba: Mostrar visualmente esta degradación.

Tipos de compresión de información digital

En primer lugar voy a explicar someramente la compresión de ficheros en general y la compresión JPEG en particular, y digo someramente, pues para quien este interesado en este tema, dejo al final de este artículo un apartado de enlaces, que recomiendo visitar, en los que se pueden encontrar estudios pormenorizados y detallados sobre este tipo de compresión.
Cuando hablamos de compresión de archivos hay dos grandes apartados: la compresión sin pérdidas, es decir aquella en la que una vez que recomponemos el fichero este es exactamente igual que el original, y la compresión con pérdidas, aquella en la que aprovechando las limitaciones de los órganos sensoriales humanos, eliminamos aquella información que teóricamente nos pasa desapercibida o en la que menos nos fijamos.
Como ejemplos de compresión sin pérdidas podemos citar los ficheros ZIP, a los que todos estamos acostumbrados en Internet para comprimir aplicaciones o documentos escritos. En estos casos evidentemente que no podemos permitirnos ninguna pérdida, el simple cambio de un «1» por un «0» puede ser catastrófico. Centrándonos en lo que aquí nos interesa, que son las imágenes, tenemos formatos en los que no se realiza ninguna compresión, como los BMP y formatos que nos permiten realizar una compresión sin pérdidas, como los TIF o los PNG, y por supuesto, el que nos interesa en este caso, ficheros de compresión con pérdidas, el JPEG.

Fundamento de la compresión JPEG

Y como logra el formato JPEG unos ratios de compresión tan grandes. Pues básicamente aprovechando dos limitaciones o características del ojo humano, a saber:
A.- Somos mucho más capaces de distinguir con  facilidad los cambios en la luminancia que en la crominancia. Es decir nos damos cuenta con más facilidad de los cambios en el brillo que de los cambios en el color.
B.- Nos percatamos con más facilidad de pequeños cambios de brillo en zonas homogéneas que en zonas donde hay una gran variación. Es decir, cuando hay una gran diferencia lumínica entre dos zonas, por ejemplo en los borde de los objetos, nos damos cuenta de la diferencia, pero somos incapaces de cuantificarla con precisión.

Fases del proceso de compresión JPEG

Y estos son básicamente los cinco pasos en los que podemos dividir el trabajo que realiza el compresor JPEG. Repito, si estas interesado en ello, mira el apartado de referencias, esto no deja de ser una explicación superficial.

  1.  Cambiar el espacio de color. Lo primero que se hace es cambiar el espacio de color de la imagen que normalmente procederá de un dispositivo del tipo: escáner, cámara, móvil, etc. y que vendrá codificada como RGB a un espacio de color YCbCr. Puedes consultar mi anterior artículo sobre espacios de color para más información. Pero en este caso, basta con saber que en lugar de representar los pixeles con valores de Rojo,Verde y Azul lo hacemos dividiendo la información en tres canales, uno que nos da la luminancia y otros dos la crominancia. Lógico por otra parte, si lo que hemos dicho es que vamos a explotar la diferente forma en que nuestro ojo capta estas cualidades de la luz.
  2.  Submuestreo de los canales de crominancia. En este paso se realiza un submuestreo de los canales de color, es decir eliminamos parte de la información asignándole el mismo color a un bloque de por ejemplo 4 pixels, procurando eso sí, que el conjunto sea lo más parecido al original. Esto como es normal produce un ligero pixelado en la imagen. Hay aplicaciones (como el GIMP) que nos permiten elegir como se realiza este submuestreo, y otros tan afamados como el Photoshop donde lo decide él en base al nivel de compresión que seleccionemos. Sólo decir que la compresión realizada en este paso suele denominarse con tres números del tipo 4:4:4 (equivale a no realizar ningún submuestreo, y que es la que elige Photoshop en los niveles más altos de calidad); 4:2:2 (que elimina la mitad de la información cromática en el eje horizontal y ninguna en el vertical, y que se trata de una opción moderada que suele ser la elegida por defecto por la mayoría de los programas de edición); 4:1:1 (un submuestreo mucho más agresivo que elimina una cuarta parte de la información crómatica en los dos ejes, es el que usa Photoshop en los niveles de calidad más bajo, y que puede ser totalmente aceptable en muchas imágenes).
  3.  Transformada del Coseno Discreto. Para realizar este paso la imagen se divide en bloques de 8×8 pixeles y se aplica una transformación mediante una función matemática que se denomina «transformada del coseno discreto» o DTC Para los que no estén muy metidos en la materia, simplemente puntualizar que con esta función DTC no se realiza ninguna compresión, simplemente, o bueno, no tan simplemente, lo que se hace es pasar de una representación espacial a una representación por frecuencias. Es decir hasta ahora la información del cuadro superior izquierdo del fichero se correspondía con la información del pixel superior izquierdo de la imagen en cuanto a color y brillo, pero a partir de ahora la parte superior izquierda se corresponderá con las altas frecuencias, y la parte inferior derecha con las bajas frecuencias. No le des vueltas. Si no estás familiarizado con estos temas, la cosa es para volverse loco, pero el caso es que se han separado la bajas frecuencias (áreas donde el brillo cambia lentamente), de las altas (áreas donde el brillo cambia rápidamente en un espacio pequeño) y en las que el ojo humano es menos sensible, y de las cuales por lo tanto podremos desprendernos parcialmente en el siguiente paso.
  4.  Cuantificación. El ojo humano es muy bueno detectando pequeños cambios de brillo en áreas relativamente grandes, pero no cuando el brillo cambia rápidamente en pequeñas áreas (variación de alta frecuencia). Debido a esta condición, se puede eliminar las altas frecuencias, sin pérdida excesiva de calidad visual. Esto se realiza dividiendo cada componente del canal frecuencia por una constante para ese componente, y redondeándolo a su número entero más cercano. Este es el proceso en el que se pierde la mayor parte de la información (y calidad) cuando una imagen es procesada por este algoritmo. El resultado de esto es que los componentes de las altas frecuencias, tienden a igualarse a cero, mientras que muchos de los demás, se convierten en números positivos y negativos pequeños. Este es el componente sobre el que estamos actuando principalmente cuando en nuestra aplicación, a la hora de guardad un fichero JPEG elegímos un menor o mayor grado de compresión. Es decir lo que estamos haciendo con ello es elegir una matriz de cuantificación más o menos agresiva, y que va a transformar más o menos información en ceros. Bueno, en realidad como ya dije anteriormente en el caso del Photoshop, además de variar la matriz ce cuantificación, a veces, y sin que lo sepamos también cambia el tipo de submuestreo del paso 2, ya que este programa no hace diferencias entre una u otra cosa.
  5. Codificación entrópica. Y ahora, para terminar se realiza otra compresión a nivel de bits, es decir sin pérdidas; para entendernos, que simplemente agrupa patrones de ceros y unos para ahorrar espacio. En este caso suele usarse el método de codificación Huffman, aunque algunas aplicaciones nos permiten elegir otro. De nuevo el Photoshop carece de esta característica, aunque el método usado, el Huffman es de un gran rendimiento y rapidez.

Ficha técnica de las pruebas realizadas

La prueba consiste en el salvado repetitivo de una imagen en formato JPEG. Las imagen se abre y sin realizar ningún cambio se vuelve a grabar, se abre la imagen resultante y se vuelve a grabar, y así hasta 300 veces que he considerado suficiente para apreciar el deterioro producido en el proceso (esto como es natural se ha llevado a cabo usan un proceso automatizado).
Se ha realizado la prueba con dos imágenes distintas, una con un tono muy continuo, la escena de la playa; y la otra, el bodegón en la que hay mas variaciones de tono y por lo tanto de altas frecuencias.
En ambos casos se ha utilizado un submuestreo del tipo 4:2:2, es decir reduciendo a la mitad la información de crominancia en uno de los ejes, el horizontal, sin reducción en el vertical y seleccionando una calidad alta del 90%. Estos valores son muy habituales y es curioso que en el primer caso, el de la escena de playa, con esos mismos parámetros, se consigue un ratio de compresión de 49,4:1 y en el segundo el del bodegón de 26,1:1.
Al final se ha realizado un vídeo con las imágenes resultantes, indicando en cada una el número de imagen correspondiente, o lo que viene a ser lo mismo, el número de veces que se ha decodificado y vuelto a codificar la imagen.
Análisis de las imágenes resultantes
Escena del bodegón
Hasta la imagen 12 aproximadamente no comienzan a aparecer, aunque de forma muy sutil, en la parte más clara de la imagen, los primeros signos de pixelado, que empiezan a hacerse más evidentes a partir de la imagen 18 en la que el pixelado y los artefactos que aparecen podrían hacernos considerar la imagen no apropiada para algunos fines. A partir de ahí comienza un deterioro progresivo siendo cada vez más visibles los artefactos y pixelado en general.
Escena de la playa
En esta escena con tonos claros y de bajas frecuencias, es decir de poco variación tonal, los resultados empeoran sensiblemente. A a partir de la imagen 5 notamos claramente el pixelado y en el 8 la imagen es muy deficiente. En esta ocasión los artefactos introducidos por la cuantificación no son tan problemáticos, claro que el pixelado arruina completamente la imagen en muy pocas codificaciones.

Conclusiones

Es evidente que la codificación JPEG es muy adecuada para la transmisión de imágenes debido a los grandes ratios de compresión que se consiguen con muy poca pérdida de calidad. Sin embargo mientras estemos trabajando con la imagen, es conveniente utilizar otros formatos que realicen una compresión sin pérdidas, tipo TIF, pues dependiendo  de las características de la imagen, es posible que a partir de las primeras conversiones ya se produzca un degradado en algunas zonas, ya sea por la aparición de pixelado o de artefactos, que pueden ser inaceptables según el tipo de trabajo que estemos realizando.
Es cierto que la mayoría de los usuarios no van a realizar más de una decena de salvados sucesivas de un mismo fichero, pero como se ha demostrado hay algunos tipos de imágenes, sobre todo en aquellas con poco contraste en las que predomina algún tono continuo, en las que incluso a partir de la quinta iteración ya aparecen  signos evidentes de degradación

Imágenes y vídeos resultantes de la pruebas

A continuación se muestran las imágenes que se han utilizado para el experimento y unos recortes de las mismas de algunas de las iteraciones del proceso que se han considerado más significativas.

Imagen completa, aunque a baja resolución, que se ha usado en una de las pruebas como imagen de alto contraste.

Imagen completa, aunque a baja resolución, que se ha usado en una de las pruebas como imagen de alto contraste.

Recorte de la imagen del bodegón en la primera iteración.

Recorte de la imagen del bodegón en la primera iteración.

Recorte de la imagen del bodegón después de 12 iteraciones.

Recorte de la imagen del bodegón después de 12 iteraciones.

Recorte de la imagen del bodegón después de 18 iteraciones

Recorte de la imagen del bodegón después de 18 iteraciones

Recorte de la imagen del bodegón después de 50 iteraciones

Recorte de la imagen del bodegón después de 50 iteraciones

x

Imagen completa, aunque a baja resolución, que se ha usado en una de las pruebas como imagen de bajo contraste.

Imagen completa, aunque a baja resolución, que se ha usado en una de las pruebas como imagen de bajo contraste.

Recorte de la imagen de la playa después del primer salvado de la imagen.

Recorte de la imagen de la playa después del primer salvado de la imagen.

Recorte de la imagen de la playa después de 5 iteraciones,

Recorte de la imagen de la playa después de 5 iteraciones,

Recorte de la imagen de la playa después de 8 iteraciones,

Recorte de la imagen de la playa después de 8 iteraciones,

Vídeos con la secuencia de imágenes que muestran la degradación progresiva.

Páginas de referencias o enlaces aconsejados para profundizar en la compresión JPEG.

Comparte esta entrada

One Reply to “Pérdida acumulativa de calidad en ficheros JPEG”

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *