9.2.5  ¿Cómo puedo evitar los artefactos y aun así obtener una buena compresión JPEG?

(Respuesta por Peter J. Holzer)

Primero, debe conocer un poco acerca de cómo se almacena una imagen en formato JPEG.

A diferencia de la mayoría de los formatos de imagen, este no almacena valores RGB sino valores YUV (1 valor de escala de grises y dos valores de "diferencia de color" values) tal como los que usa la señal de la TV a color. Puesto que el ojo humano utiliza mayormente los valores del color gris para detectar bordes, uno puede llevarse el almacenamiento de la información del color a una resolución más baja - un JPEG de 800x 600 tiene típicamente información de escala de grises a 800x600, pero la información del color a 400x300. Esto se denomina supermuestreo -supersampling-.

Para que cada color se canalice separadamente, la imagen se divide entonces en pequeños cuadrados y se computa la transformación del coseno de cada cuadrado. Un aspecto atractivo de esta transformación es que si usted solamente desecha algunos de los valores, la calidad se degradará muy poco, pero la imagen se comprimirá mejor. El porcentaje de los valores almacenados es lo que llama calidad.

Finalmente, los datos se comprimen.

La mayoría de los programas le permiten cambiar el ajuste de calidad. Esto está muy bien para fotografías y renderizados foto-realísticos de escenas "naturales". Generalmente, los valores de calidad cercanos al 75% otorgan el mejor compromiso entre calidad y tamaño de la imagen.

Sin embargo, para imágenes que contienen colores muy saturados, la baja resolución de los canales de color genera artefactos visibles que son muy similares a los que producen los bajos ajustes de calidad. Pueden reducirse ajustando la calidad a un valor extremadamente alto (cercano a 100%), pero el tamaño del archivo se incrementará dramáticamente, y a menudo, los artefactos seguirán viéndose.

Un método mejor es el de desactivar el supermuestreo -supersampling-. La mayor resolución sólo causará un incremento modesto del tamaño del archivo, lo que no es más que una compensación por la facilidad de usar un ajuste de calidad más bajo.

La utilidad del comando de línea cjpeg (que debería estar disponible en todos los sistemas que tienen línea de comando, ej, Linux, MS-DOS, Unix, ...) tiene un "ejemplo -sample" para disponer los factores de muestreo para todos los pases.

        cjpeg -sample 1x1,1x1,1x1 -quality 75 -optimize

debería ser un buen valor por definición, raras veces modificado.