90

Como el algoritmo de compresión JPEG engaña al ojo humano

Publicado el: 03/08/2011
Imagen JPG muy comprimida

Seguro que todos conocéis los archivos de imagen ".JPG", y si no os suenan, deberiáis saber que vuestro móvil, cámara digital, web cam, tablet PC, etc., hace fotos en ese formato. Su uso ha proliferado tanto porque consigue reducir el tamaño de la imagen sin compresión 10 veces, sin que notemos demasiado que la calidad se ha visto mermada, y esto se logra gracias a la aplicación en el algoritmo de compresión del conocimiento que tenemos del funcionamiento del ojo.

El algoritmo de compresión JPEG, es un algoritmo de compresión con pérdida, esto quiere decir que pierde información y, por tanto, calidad de imagen, pero, gracias a cómo aprovecha los defectos del ojo humano, no nos damos cuenta de la pérdida.

Veamos paso a paso el funcionamiento del algoritmo:

Normalmente se parte de una imagen donde cada píxel o punto de la imagen está formado por una intensidad de rojo, otra de verde y otra de azul (se dice que tenemos un canal por cada color). Así que lo primero que hace el algoritmo es transformar esa manera de representar la imagen, a otra en la que tenemos dos canales de color y uno de brillo, en lugar de los tres canales de color rojo, verde y azul originales.

Después coge los canales de color y les quita resolución o, dicho de otra forma, les hace un submuestreo. Esto es algo así como pixelar la imagen. Se realiza asignando un mismo color a cada bloque de, por ejemplo, cuatro pixeles de los canales de color, procurando que sea lo más parecido posible a los colores que había en la imagen original ahí. Veámoslo más claro con una imagen donde se muestra el resultado de pixelar los distintos canales de distintas formas (pincha aquí).

Esto se hace así porque el ojo tiene más resolución de brillo que de color. Tenemos un millón de bastones (los fotoreceptores del brillo en la retina), frente a 300.000 conos (fotoreceptores del color), así que si le quitamos resolución al canal de brillo lo notaremos en seguida, mientras que si lo hacemos con los canales de color, nos libraremos de gran parte de la información y no notaremos la diferencia, como podemos observar en la imagen de antes.

Este primer paso normalmente lo podemos configurar en los programas de retoque fotográfico al guardar una imagen JPG. Suele aparecer algo como "4:2:2", "4:2:0" o "4:4:4". Los valores vienen dados en la notación del submuestreo de la crominancia, y su significado es el siguiente:

Para "X:Y:Z":

X= frecuencia de muestreo horizontal del canal de brillo. La frecuencia de muestreo es la velocidad a la que un cuentagotas iría cogiendo píxeles al pasar la imagen por debajo, siempre a la misma velocidad y en este caso, como es horizontal, lo que pasaría por debajo del cuentagotas sería la imagen recortada de forma que cada fila estuviera una detrás de otra.

Este valor siempre es 4 porque es la velocidad que se ha establecido como velocidad de referencia para el caso en el que se recogen todos los pixeles, por lo que no se pierde resolución. Históricamente se cogió este valor porque esta relacionado con la frecuencia de muestreo de la televisión sin alta definición. Aquí tenéis un ejemplo visual de lo que sería la frecuencia de muestreo 4 (la primera) y la velocidad de muestreo 2:

ejemplo velocidad de muestreo ideal

ejemplo velocidad de muestreo mitad de la ideal

Y= frecuencia de muestreo horizontal de los canales de color en relación a X. X marca la velocidad máxima de referencia, así que si tenemos un 2, estaremos cogiendo la mitad de los píxeles (ya que es la mitad de la velocidad de referencia dada en X), o lo que es lo mismo, cogemos 2 pixeles de cada 4, por lo tanto tendremos la mitad de resolución horizontal.

Z= frecuencia de muestreo vertical de los canales de color en relación a Y. En este caso, el valor de Y marca la velocidad máxima de referencia, así que si tenemos un 2 en Y, y un 2 en Z, Z estará cogiendo píxeles a la velocidad necesaria para no saltarse ninguno. Lo mismo ocurre con un 4:4:4. En el 4:2:0, el 0 se usa para indicar que se coge la mitad de resolución horizontal y vertical, como sería en el 4:2:1, pero recogiendo la media de los bloques de 2x2 que se forman, en lugar del primer píxel que aparece.

Con esta información ya podéis deducir que formatos pierden más calidad, comprimiendo más y en cuales sucede lo contrario.

Después se dividen todos los canales en cuadrados de 8x8 píxeles (los cuadrados que podemos apreciar cuando vemos una imagen muy comprimida) y se les aplica por separado los siguientes pasos del algoritmo de compresión.

En el siguiente paso se hace algo llamado transformada discreta bidimensional del coseno y cuantificación perceptual. Visualmente lo que le hace a la imagen es suavizar las variaciones bruscas de brillo y de color. Es como aplicar una especie de desenfoque imperceptible a la imagen. Esto se hace así debido a que la visión humana es menos sensible a las grandes variaciones en una zona pequeña que a las pequeñas variaciones en una zona amplia. Esta eliminación selectiva de información se hace en base a estudios estadísticos de la visión humana, realizados a base de encuestar a personas.

En los programas de edición de imágenes podemos ajustar este suavizado de las grandes variaciones en zonas pequeñas, moviendo una barra que indica el nivel de compresión o calidad del JPG. Cuánta menos calidad tengamos, más se notarán los cuadros en los que esta dividida la imagen, menos se apreciarán los detalles de las texturas y menos ocupará el archivo final.

Por último, se aplica un algoritmo de compresión sin perdida de información, llamado algoritmo de Huffman.

Pensamientos (0): Comentar
Categorías:

Comparte:

Copia y pega en tu página:

Comparte
Escribe tus pensamientos computables

Respondiendo a los siguientes comentarios:

Para comprobar que eres un humano responde correctamente:

Esta pregunta no me gusta, ¡cambialá!

Ninguno de estos datos será almacenado.

(Escribe el correo electrónico)

Campo obligatorio.

(Escribe el correo eléctronico o los correos electrónicos separados por comas)

Campo obligatorio.

Para comprobar que eres un humano responde correctamente:

Esta pregunta no me gusta, ¡cambialá!