Al crear un JPEG, ¿cómo puedo minimizar la aparición de artefactos?

10

Hay 2 factores principales que parecen conducir a artefactos digitales al crear imágenes JPEG: Aliasing y Compresión.

Ejemplo:

La conversión de un PNG con caracteres en un JPEG o la colocación de imágenes vectoriales sobre una fotografía dará como resultado una pixelización en sus bordes. El antialiasing generalmente crea una especie de desenfoque a su alrededor, pero si la imagen está comprimida con pérdida , parte de los detalles también se pierden, por lo tanto, el desenfoque y la pixelización pueden volverse menos notorios.

¿Es esto lo correcto? Es decir, dado que una compresión sin pérdidas genera una imagen muy detallada, los artefactos resultantes del alias serán más notorios, por lo que se puede encontrar un equilibrio utilizando la compresión correcta, aunque comprometiendo la calidad de la imagen.

Editar

Acabo de guardar este JPEG en mspaint (3.46KB):

Sin pérdida

Aquí está el mismo JPEG con compresión máxima (calidad más baja, 0.5 KB):

Con pérdida

Aquí está el mismo JPEG con una compresión del 50% (observe la diferencia de tamaño, 1.29 KB):

Mitad sin opciones

La misma compresión del 50% pero guardada como "JPG progresivo", mantuvo los datos EXIF ​​y XMP originales, y "trató de guardar con calidad JPG original" (puede notar que no hay píxeles grises alrededor, 2.96KB):

Medias opciones

Y finalmente lo mismo que antes con el submuestreo de croma deshabilitado (mismo tamaño de archivo, 2.96KB):

Medio sin croma

Brazo
fuente
1
Por curiosidad, ¿cuál es su razón para querer jpg, es el tamaño de archivo más pequeño? En caso de que ayude a su situación específica, ¿conoce la compresión dxt o las texturas de campo de distancia?
Alan Wolfe
1
No me queda claro cuál es tu pregunta. ¿Quieres saber si es bueno comprimir usando JPEG? ¿Quieres saber qué tipo de imágenes se comprimen bien con JPEG? ¿O ya está usando JPEG y le gustaría saber cómo crear sus imágenes para minimizar los artefactos causados ​​por JPEG?
Mokosha
@AlanWolfe En algunas ocasiones me encontré con que solo podía usar JPEG (principalmente en aplicaciones web), y es por eso que necesitaba que estuviera en JPEG. Gracias, pero no estaba familiarizado con la compresión dxt ni las texturas de campo de distancia, por lo que he visto en wikipedia , los algoritmos dxt son diferentes de los que se usan en JPEG, ¿quiere decir que se pueden usar para crear JPEG?
Brazo
@Moshoka, gracias, está más relacionado con tu última pregunta: ¿cómo minimizar el "impacto visual" provocado por los artefactos en las imágenes JPEG?
Brazo
tenga en cuenta que el mozjpegcompresor tiene un truco especial para producir menos distorsión en este tipo de imágenes. (y es más eficiente en general que los escritores de JPEG habituales también.) ¿Lo intentaste?
Nombre para mostrar el

Respuestas:

9

La compresión JPEG implica tres pasos principales:

  1. Submuestreo de croma . La imagen se convierte de RGB a espacio de color YCbCr, en el que la luma o brillo (Y) se almacena por separado de los componentes de croma o color, Cb y Cr. El componente Y se mantiene a resolución completa, pero Cb y Cr se disminuyen, generalmente a media resolución en cada eje. Esto explota el hecho de que el sistema visual humano es más sensible a los detalles finos del brillo que del color.

  2. Cuantización de frecuencia. Las imágenes Y, Cb y Cr se convierten en una representación de frecuencia, dividiéndolas en bloques de 8x8 y aplicando la transformada discreta del coseno (una variante de la transformada de Fourier) a cada bloque. El resultado es una matriz de números que describe las amplitudes de diferentes frecuencias espaciales en el bloque. Estos números pueden ser cuantificados (redondeados a un número elegido de bits de precisión). Se utilizan diferentes niveles de cuantización para diferentes frecuencias, explotando la sensibilidad relativamente baja de nuestro sistema visual a las frecuencias altas. Aquí es donde entra en juego la configuración de calidad del codificador JPEG: las calidades inferiores utilizan una cuantización más gruesa.

  3. Codificación de entropía . Los valores de DCT cuantificados se pasan a través de un codificador de entropía, que comprime sin pérdidas el flujo de bits utilizando menos bits para representar los valores más comunes, algo así como un archivo zip.

Los pasos 1 y 2 son los con pérdida, y cada uno produce su propio tipo de artefactos (aunque hay cierta superposición). El submuestreo de croma tiende a difuminar los bordes afilados entre regiones de diferentes colores. Esto es particularmente visible en el arte vectorial, donde las formas de colores brillantes recogen irregularidades viciosas alrededor de sus bordes. La cuantificación de frecuencia difumina los detalles finos en general, y también crea artefactos en forma de bloque en configuraciones de baja calidad, porque el DCT se realiza bloque por bloque. Es particularmente visible en el texto.

Esta es la razón por la que JPEG generalmente no se usa para imágenes que contienen gráficos vectoriales o texto: sus algoritmos de compresión son poco adecuados para esos casos, aunque funcionan bien para fotografías y otras imágenes con textura compleja y bordes no demasiado nítidos.

Nathan Reed
fuente
Muchas gracias por tu explicación detallada Nathan +1. Entiendo que los algoritmos de compresión tienen sus limitaciones para JPEG, pero solo quería saber si hay un equilibrio correcto de la cantidad de compresión junto con otras opciones (al guardarlo) que pueden hacer que los artefactos sean menos visibles. Edité mi pregunta con muestras.
Brazo