Durante años, he creído que recomprimir archivos JPEG varias veces degradaría gradualmente su calidad hasta que sean un desastre irreconocible, como lo hacen las fotocopias de fotocopias. Esto tiene sentido intuitivamente porque JPEG es un formato con pérdida. También hay otras preguntas y respuestas que afirman que esto es así:
¿Qué calidad de imagen se pierde al volver a guardar una imagen JPEG en MS Paint?
¿Simplemente abrir y cerrar un archivo JPEG disminuye la calidad de la imagen?
Sin embargo, también he leído que volver a comprimir archivos JPEG con el mismo nivel de calidad no degradará la calidad de la imagen. Esto va en contra de la degradación gradual que se describe en otra parte.
¿Qué sucede técnicamente cuando se vuelve a comprimir un JPEG? ¿Qué se está perdiendo y cómo? ¿La imagen realmente se transformará en el desorden nevado que solía aparecer en la televisión? ¿Qué pasa con esos videos que muestran imágenes que se desmoronan después de ser recomprimidas varias veces?
(Por favor, no simplemente agite a mano y apele al concepto general de pérdida).
(Esta pregunta, y las respuestas que ha atraído hasta ahora, se centran en los factores técnicos (configuraciones específicas y manipulaciones de imagen) que causan o evitan la degradación de la imagen cuando un archivo JPEG se vuelve a comprimir varias veces).
fuente
Respuestas:
Casi todas las pérdidas de calidad de imagen ocurren la primera vez que una imagen se comprime como JPEG. Independientemente de cuántas veces se vuelva a comprimir un JPEG con la misma configuración , las pérdidas generacionales se limitan al error de redondeo.
Los límites de MCU permanecen intactos (bloques de 8x8).
El submuestreo de croma está deshabilitado.
DQT constante (misma configuración de calidad).
Sin embargo, los errores de redondeo pueden ser grandes para cada iteración si no se cumplen los criterios anteriores, y es prudente mantener copias de seguridad de todos los archivos originales.
El algoritmo de compresión JPEG
Convertir espacio de color. Si lo desea, disminuya la información de color (submuestreo de croma) (con pérdida) . Si no se disminuye la muestra, la pérdida de información es el resultado de un error de redondeo .
Segmentación. Divida cada canal en bloques de 8x8 (MCU = Unidad de codificación mínima). (Sin pérdida)
Nota: Si el submuestreo de croma está habilitado, las MCU pueden ser efectivamente 16x8, 8x16 o 16x16, en términos de la imagen original. Sin embargo, las MCU todavía son todos bloques 8x8.
Transformación discreta de coseno (DCT) en cada MCU. La pérdida de información es el resultado de un error de redondeo .
Cuantización El valor en cada celda de la MCU se divide por un número especificado en una tabla de cuantificación (DQT). Los valores se redondean hacia abajo, muchos de los cuales se convertirán en cero. Esta es la porción primaria con pérdida del algoritmo.
Escaneo en zigzag. Reorganice los valores en cada MCU en una secuencia de números siguiendo un patrón en zig-zag. Los ceros que ocurrieron durante la cuantización se agruparán. (Sin pérdida)
DPCM = Modulación diferencial de código de pulso. Convierta las secuencias numéricas en una forma que sea más fácil de comprimir. (Sin pérdida)
RLE = Ejecutar codificación de longitud. Los ceros consecutivos están comprimidos. (Sin pérdida)
Entropía / Codificación Huffman. (Sin pérdida)
Recomprimir archivos JPEG
Tenga en cuenta que la disminución de muestreo de los canales de color y la cuantización son los únicos pasos intencionalmente con pérdida . Dejando de lado el error de redondeo por ahora, todos los demás pasos no tienen pérdidas. Una vez que se ha producido la cuantización, invertir y repetir el paso da resultados idénticos. En otras palabras, la recuantificación (con el mismo DQT) no tiene pérdidas .
En principio, es posible crear un algoritmo de remuestreo que no tenga pérdidas después de la primera pasada. Sin embargo, con la implementación en ImageMagick, los colores pueden cambiar drásticamente antes de alcanzar el estado estable, como se ve en la imagen de esta.
En condiciones óptimas, volver a comprimir un JPEG con la misma configuración de calidad daría como resultado exactamente el mismo JPEG. En otras palabras, volver a comprimir archivos JPEG es potencialmente sin pérdidas . En la práctica, la recompresión de archivos JPEG no es sin pérdidas, sino que está sujeta a errores de redondeo y está limitada por ellos. Aunque los errores de redondeo a menudo eventualmente convergen a cero , de modo que se recrea exactamente la misma imagen, el submuestreo de croma puede provocar cambios de color significativos.
Demostración (misma configuración de calidad)
Escribí el siguiente
bash
script, que usa ImageMagick para recomprimir repetidamente un archivo JPEG con una configuración de calidad dada:Después de dejar que se ejecute durante unos cientos de iteraciones, ejecuté
md5sum
los resultados:Podemos ver que, de hecho, el error de redondeo ha convergido a cero, y se reproduce exactamente la misma imagen, una y otra vez .
Lo he repetido varias veces con diferentes imágenes y configuraciones de calidad. Por lo general, se alcanza el estado estable y se reproduce exactamente la misma imagen una y otra vez.
¿Qué pasa con los resultados de @ mattdm ?
He intentado replicar los resultados de mattdm usando Imagemagick en Ubuntu 18.04. El original era una conversión en bruto a TIFF en Rawtherapee, pero parece que ya no está disponible. En su lugar, tomé la versión ampliada y la reduje a su tamaño original (256x256). Luego repetidamente recomprimí a 75 hasta que logré la convergencia. Aquí está el resultado (original, 1, n, diferencia):
Mis resultados son diferentes. Sin el verdadero original, la razón de la diferencia es imposible de determinar.
¿Qué pasa con el montaje de @ ths ?
Comprimí la imagen desde la esquina superior izquierda del montaje hasta la convergencia en 90. Este es el resultado (original, 1, n, diferencia):
Después de habilitar el submuestreo de croma, los colores cambian cuando se alcanza el estado estable.
Cambiar entre una pequeña cantidad de configuraciones
Al modificar la variable
q2
, la configuración de calidad puede limitarse a un conjunto de valores distribuidos uniformemente.Para un pequeño número de opciones de configuración, el equilibrio puede eventualmente alcanzarse , lo que se ve cuando los valores de md5 comienzan a repetirse. Parece que cuanto más grande es el conjunto, más se demora y peor es la imagen, antes de que se pueda alcanzar el equilibrio.
Lo que parece suceder en el equilibrio es que el coeficiente DCT antes de la cuantización debe ser divisible en todos (o la mayoría) de los valores cuánticos. Por ejemplo, si se cambia entre dos DQT donde el coeficiente DCT se divide alternativamente por 3 y 5, se alcanzará el equilibrio cuando el coeficiente DCT sea divisible por 15. Esto explica por qué la caída en la calidad es mucho mayor que la diferencia entre las configuraciones originales.
Cambiar entre una mayor cantidad de configuraciones
Eeyore no está contento cuando
q2
se cambia así:Para hacer un video, use
ffmpeg
:Ver las primeras 9999 iteraciones es casi como ver hervir el agua. Es posible que desee duplicar la velocidad de reproducción. Aquí está Eeyore después de 11999 iteraciones:
¿Qué pasa si los límites de MCU cambian?
Si se producen cambios un número limitado de veces, es probable que la recompresión repetida alcance el estado estable. Si se producen cambios en cada iteración, la imagen probablemente se degradará de manera similar a cuando cambia DQT.
¿Qué pasa con la edición?
El efecto de volver a comprimir después de la edición depende de la edición particular realizada. Por ejemplo, guardar con la misma configuración de calidad después de reducir los artefactos JPEG reintroduciría los mismos artefactos. Sin embargo, la aplicación de un cambio localizado, como un pincel de curación, no afectaría las áreas que no fueron tocadas.
La mayor caída en la calidad de la imagen ocurre la primera vez que el archivo se comprime en una configuración de calidad dada. Posteriormente, volver a comprimir con la misma configuración no debería introducir ningún cambio mayor que el error de redondeo. Por lo tanto, esperaría que los ciclos de edición-resave en una configuración de calidad dada se vean como cualquier otra imagen guardada con la misma configuración de calidad (siempre que los límites de MCU permanezcan intactos y el submuestreo de croma esté desactivado ).
¿Qué hay de esos videos?
¿Implementación JPEG defectuosa? ( Volver a guardar 500 veces con Photoshop al 10/12. )
Cambiar la configuración de calidad. (La mayoría de los videos)
Interrumpiendo los límites de MCU. (Recortar o rotar )
¿Otras maniobras que reducen la calidad de la imagen o interfieren con el algoritmo JPEG?
¿Puedo sobrescribir mis originales con archivos JPEG comprimidos?
Es prudente mantener copias de seguridad de todos los archivos originales, pero si accidentalmente sobrescribe uno, es probable que el daño sea limitado. También estaría bien trabajar en JPEG con submuestreo de croma deshabilitado.
JPEG no se puede usar para imágenes que usan más de 8 bits por color.
fuente
La pérdida de recompresión es real, especialmente cuando se trabaja con niveles más altos de compresión JPEG.
En teoría, si vuelve a guardar archivos JPEG con los mismos parámetros exactos y ha alineado su recorte a bloques de 8 × 8, la degradación debería ser mínima. Sin embargo, si está utilizando un alto nivel de compresión, verá una mayor pérdida, ya que los artefactos introducidos por la compresión inicial son cambios permanentes en la imagen y también se volverán a comprimir, causando más artefactos.
Si vuelve a guardar con un bajo nivel de compresión (alta calidad, como "100" en Gimp u 11 o 12 en Photoshop), será difícil notar cualquier artefacto agregado recientemente. No hará que la imagen de cualquier mejor , pero no significativamente peor. Sin embargo, será introducir cambios a través de toda la imagen.
Como prueba rápida, usé ImageMagick para recomprimir una imagen JPEG una y otra vez al 75%. Los ejemplos a continuación se cargan como archivos PNG para evitar una nueva compresión adicional, y se duplicaron en tamaño cuando convertí a PNG para que el efecto sea más obvio. (Los originales utilizados en la prueba no se duplicaron). Resulta que después de ocho remuestreos, el efecto convergió en un resultado perfectamente estable, donde la recompresión nuevamente da como resultado un archivo idéntico bit por bit.
Aquí está el original sin comprimir:
Aquí está el resultado de ir a 75% JPEG:
Y aquí está eso guardado:
¡Ese solo segundo guardado causa una gran cantidad de degradación adicional!
Y aquí está la imagen convergente final (octavo pase):
Nuevamente, los colores definitivamente están aún más apagados, incluidos algunos patrones de colores falsos, y los artefactos en bloque saltan más. El algoritmo converge, pero a una versión significativamente degradada. Entonces, no hagas eso.
Pero aquí está lo mismo con un nivel de calidad del 99%, después de 9 pases (el punto en el que converge para que otros pases sean idénticos):
Aquí, la diferencia apenas se registra. (Lo digo literalmente; compárelos píxel por píxel con la versión no comprimida y la desviación es un ruido aleatorio muy leve). Entonces, ¿qué pasa si vuelvo a esa primera imagen del 75% y luego la vuelvo a guardar al 99%? Bueno, esto (después de solo una vez):
Ahorrar a alta calidad definitivamente es visiblemente mejor que volver a guardar con los mismos parámetros, algo para mi sorpresa. Pero, hay una nueva degradación obvia alrededor del recorte rosado y los ojos. Con la versión reciclada de la misma configuración, los artefactos JPEG se exageran con cada recompresión. Con la baja resolución y la baja calidad que he elegido, eso resulta ser peor que volver a comprimir todo de manera diferente.
En esos videos: encontré este como uno de los principales éxitos de Google. Tenga en cuenta que dice en la descripción:
Énfasis agregado : esto explica por qué no hay convergencia, porque en lugar de guardar con la misma configuración, o guardar con una calidad súper alta, se usan configuraciones aleatorias cada vez .
El segundo video que encontré dice:
Entonces, nuevamente, se hizo algo para mantener los errores acumulados.
En cualquier caso, para la edición práctica de fotos , vale la pena mencionar que ahorrar un 75% una vez es mucho peor que ahorrar un 99% un millón de veces . En mi caso de ejemplo, los artefactos al 75% son tan obvios que la degradación adicional es como arrojar agua al océano. Si guarda a un nivel lo suficientemente alto como para que estos artefactos no sean realmente visibles, guardar de nuevo con la configuración original es una buena estrategia. Por supuesto, si puede seguir trabajando siempre con originales sin comprimir, es mejor que lo haga.
Si por alguna razón tiene que (o prefiere) trabajar con JPEG, configure su cámara para guardar con la mayor calidad posible , incluso si no nota la diferencia en los archivos iniciales. Ver ¿Vale la pena usar la configuración de calidad Premium JPEG de Pentax? para más información sobre eso, no necesariamente realmente Pentax específico.
fuente
La recompresión tiene un efecto medible en la calidad de la imagen y ese efecto es mucho más pronunciado al cambiar las tasas de compresión.
Como una comprobación rápida aquí, algunos valores SSIM para operaciones realizadas en una imagen de prueba que contiene una combinación de características de línea y características continuas. Seleccioné JPG95 porque eso es lo que me enseñaron a usar en Ad-photo school y JPG83 porque eso es común entre los proveedores de contenido digital.
Por lo tanto, la cantidad de similitud estructural que se pierde al volver a guardar en la misma compresión 10 veces es 1/10 de la pérdida que se ahorra en la calidad de tiff. Sin embargo, la pérdida de calidad al cambiar la compresión JPG, incluso una vez, es la misma que la calidad perdida al guardar esa imagen de Tiff a JPG.
Ejecutaré esta prueba de algunas maneras más y la actualizaré.
Metodología : En ImageJ:
NOTA: muchas personas que miran los valores SSIM por primera vez los leen como porcentajes y suponen que la diferencia es pequeña. Esto no es necesariamente cierto. Los valores de SSIM deben compararse entre sí en lugar de considerarse como una variación de 1.
fuente
Nada como algo de experimentación. El siguiente script bash (escrito en Linux, podría funcionar en OSX si tiene ImageMagick ):
step000.jpg
)El resultado es que:
Por supuesto, todo esto supone que el JPEG es guardado por el mismo software con los mismos parámetros cada vez.
Por el momento no mostraré los resultados, prefiero dejar que experimentes con tus propias imágenes. Con suficientes comentarios, agregaré una muestra.
fuente