2008-09-16 5 views
8

El proceso de codificación de compresión JPEG divide una imagen determinada en bloques de 8x8 píxeles, trabajando con estos bloques en futuras compresiones con y sin pérdida. [source]¿Existe una calidad, tamaño de archivo u otro beneficio para los tamaños JPEG que son múltiplos de 8px o 16px?

También se menciona que si la imagen es un bloque múltiple de 1MCU (definido como Unidad de codificación mínima, "normalmente 16 píxeles en ambas direcciones") se pueden realizar modificaciones sin pérdida en un JPEG. [source]

Estoy trabajando con imágenes de productos y me gustaría saber si, y cuánto beneficio puede obtenerse al usar múltiplos de 16 en el tamaño de imagen final (por ejemplo, usando una imagen con tamaño 480px por 360px) vs. un no múltiplo de 16 (como 484x362). En este ejemplo, no estoy interesado en más alteraciones, edición o recompresión de la imagen final.

para tratar de conseguir más cerca de una respuesta específica en la que sé que debe ser en gran parte generalidades: Dada una imagen de 480x360 que es 64k y se guarda en la máxima calidad en Photoshop [example]:

  • puedo esperar ninguna pérdida de calidad desde una imagen que es 484x362
  • ¿Qué cantidad de tamaño de archivo adicional puedo esperar? (para este ejemplo, el espacio adicional sería píxeles blancos)
  • ¿Hay alguna otra desventaja para crecer más que la cuadrícula de 8px?

sé que es arbitraria para utilizar ese ejemplo específico, pero aún así sería muy útil (para mí y, potencialmente, cualquier otro que ponderan un tamaño de imagen) para entender cuál es el nivel de compromiso que estaría tratando con romper el no -8px grilla

El problema clave aquí es un debate que he tenido es si las imágenes divisibles en 8 píxeles son de mayor calidad que las imágenes que no son divisibles en 8 píxeles.

Respuesta

18

8 píxeles es el límite. La razón es porque las imágenes JPEG son simplemente una matriz de bloques 8x8 DCT; si la resolución de la imagen no es mod8 en ambas direcciones, el codificador debe rellenar los lados hasta la siguiente resolución mod8. Esto en la práctica no es muy costoso en cuanto a bits; lo que es mucho peor son los casos en que una imagen tiene líneas negras definidas (como una imagen de buzón) que no se encuentran en los límites del bloque. Esto es especialmente problemático en la codificación de video. La razón de que esto sea un problema es que la transformación de frecuencia de una línea nítida es una distribución gaussiana de coeficientes, lo que da como resultado una enorme cantidad de bits para codificar.

Para los curiosos, el método más común de relleno de bordes en la compresión interna (como las imágenes JPEG) es reflejar las líneas de píxeles antes del borde. Por ejemplo, si necesita rellenar tres líneas y la línea X es el borde, la línea X + 1 es igual a la línea X, la línea X + 2 es igual a la línea X-1, y la línea X + 3 es igual a la línea X- 2. Esto minimiza bastante eficazmente el costo en los coeficientes de transformación de las líneas adicionales.

Sin embargo, en la intercodificación, los algoritmos de relleno generalmente solo duplican la última línea, porque el método espejo no funciona bien para la intercompresión, como en la compresión de video.

2

Las dimensiones de la imagen que son múltiplos de 8 o 16 no afectarán mucho el tamaño del disco, pero puede obtener un ahorro considerable si puede alinear los contenidos visuales en la cuadrícula de 8x8 píxeles, como un patrón o textura repetitiva en la imagen.

2

Un JPG con tamaños multiplicados por 8 también se puede rotar/voltear sin pérdida de calidad. Por ejemplo, gthumb puede hacer esto en Linux.

1

Lo que Tometzky dijo. Si no tiene el múltiplo correcto, los algoritmos de inversión y rotación sin pérdida no funcionan. Esto se debe a que el relleno en la parte derecha/inferior que se puede ignorar de forma segura ahora termina en la parte superior izquierda, donde no puede.

3

A veces es necesario utilizar límites de 16 píxeles en lugar de 8 debido al submuestreo; cada segundo píxel se descarta durante el proceso de codificación, y esos bloques DCT de 8x8 comenzaron como 16x16 y se descodificarán de nuevo a 16x16. Esto no será un problema en la configuración de más alta calidad.

Cuestiones relacionadas