Cómo JPEG engaña al sistema visual: ingeniería arraigada en la neurofisiología
El primer paso en la codificación JPEG es convertir RGB a YCbCr. Esto no es una mera conveniencia técnica; es una implementación directa de la anatomía retiniana. Los seres humanos tenemos aproximadamente 120 millones de bastones (sensibles a la luminosidad) y solo 6–7 millones de conos (receptores del color), una proporción de alrededor de 20:1. En consecuencia, el sistema visual puede distinguir gradaciones de luminosidad mucho más precisamente que tonalidades de color.
La fórmula para calcular el canal Y es:
Y = 0.299 × R + 0.587 × G + 0.114 × B
Estos coeficientes no son arbitrarios: el 0.587 para el verde refleja la máxima sensibilidad del ojo humano en torno a los 555 nm —la región amarillo-verde del espectro, evolutivamente adaptada para detectar frutas maduras entre el follaje. Por eso, las imágenes en blanco y negro con estos pesos lucen voluminosas y de alto contraste, mientras que un promedio uniforme (0.33R + 0.33G + 0.33B) produce una imagen plana y “jabonosa”.
En YCbCr, el canal Y contiene toda la información crítica para la percepción: estructura, contornos y texturas. Cb y Cr son meramente ajustes para el tono de color. Pueden procesarse agresivamente sin comprometer la calidad perceptiva.
Submuestreo de crominancia: comprimiendo el color según la anatomía de la visión periférica
Después de la conversión, se aplica el submuestreo de crominancia, reduciendo la resolución de los canales de color. El modo más común, 4:2:0, significa un bloque de Cb y uno de Cr por cada cuatro bloques de Y (2×2 píxeles). En efecto, se descarta el 75% de la información de color.
Esto corresponde directamente a la anatomía retiniana: los conos están concentrados en la fóvea, mientras que su densidad disminuye bruscamente hacia la periferia. La resolución espacial para la visión del color es, en promedio, cuatro veces menor que para la visión monocromática. JPEG no “pierde” color; preserva exactamente la cantidad que el sistema visual puede discernir en cada área local de la imagen.
Para verificar esto, basta abrir cualquier JPEG en Photoshop, dividirlo en canales YCbCr y comparar la calidad visual de Y frente a Cb/Cr: estos últimos aparecerán borrosos y de baja frecuencia —pero cuando se superponen a Y, el cerebro automáticamente restaura la integridad de la imagen. Esto no es un defecto del formato; es aprovechar cómo funciona la corteza visual.
DCT y cuantización: un mapa de frecuencias de puntos ciegos
La Transformada Discreta del Coseno (DCT) divide la imagen en bloques de 8×8 y descompone cada bloque en 64 componentes básicos —desde gradientes de baja frecuencia hasta bordes de alta frecuencia, ruido y texturas. Esto no es abstracto: las neuronas en la corteza visual primaria (V1) responden a franjas orientadas con frecuencias espaciales específicas —en efecto, realizando una aproximación biológica de la DCT.
A continuación, los coeficientes se someten a cuantización: división por valores de una tabla de cuantización y redondeo. La tabla estándar para el canal Y tiene la siguiente estructura: divisores mínimos en la esquina superior izquierda (bajas frecuencias, alta sensibilidad), divisores máximos en la esquina inferior derecha (altas frecuencias, baja sensibilidad). Esta tabla no es una suposición ingenieril; es un mapa empírico de la sensibilidad al contraste (CSF) derivado de experimentos psicovisuales en humanos. El pico de la CSF ocurre a 3–5 ciclos por grado de ángulo visual; más allá de ~60 ciclos/°, los seres humanos físicamente no pueden distinguir detalles.
Cuando estableces calidad=80 en Photoshop, estás fijando un umbral en el que la cuantización afecta únicamente aquellas frecuencias por debajo del umbral perceptivo. A calidad=5, el algoritmo comienza a anular incluso las frecuencias intermedias —aquellas que el cerebro realmente utiliza para reconocer forma y textura. De ahí la pronunciada caída en la calidad percibida.
Experimento: visualizando lo que el ojo no nota
Para ver exactamente qué componentes considera JPEG “invisibles”, puedes realizar un sencillo experimento: guardar la misma imagen como JPEG a diferentes calidades y luego calcular la diferencia entre la original (PNG) y la versión comprimida.
from PIL import Image
import numpy as np
original = np.array(Image.open("photo.png")).astype(np.float32)
for q in [95, 80, 50, 20, 5]:
Image.open("photo.png").save(f"q{q}.jpg", quality=q)
compressed = np.array(Image.open(f"q{q}.jpg")).astype(np.float32)
diff = original - compressed
diff_visual = ((diff - diff.min()) / (diff.max() - diff.min()) * 255)
Image.fromarray(diff_visual.astype(np.uint8)).save(f"diff_q{q}.png")
Los resultados son sorprendentes:
- A calidad=95, el mapa de diferencias es casi negro —las pérdidas se limitan al ruido.
- A calidad=80, las diferencias se concentran en contornos, líneas finas y texturas de alta frecuencia (cabello, telas) —exactamente los componentes que la DCT ubica en coeficientes de alta frecuencia y que la cuantización elimina primero.
- A calidad=5, el mapa de diferencias se vuelve reconocible como una “versión granulada de la original” —el algoritmo ya ha sobrepasado los límites de la CSF y ha comenzado a eliminar información esencial para percibir la forma.
Esto no es un artefacto de codificación; es un mapa de tus propios umbrales visuales.
Calidad 80: el punto de inflexión en la curva de la CSF
¿Por qué exactamente 80 —el estándar de facto en la web? La gráfica que muestra el tamaño del archivo versus SSIM (índice de similitud estructural) en función de la calidad revela un claro punto de inflexión alrededor de 80. Antes de eso, aumentar la calidad (SSIM) implica solo un pequeño incremento en el tamaño del archivo. Después de eso, el tamaño del archivo se duplica por una ganancia insignificante en SSIM (menos de 0.001).
Esto coincide con el cambio de “eliminar frecuencias invisibles” a “eliminar frecuencias visibles”. La cuantización a calidad < 80 opera en la zona donde la CSF está cerca de cero; a calidad > 80, opera en la zona donde la CSF aumenta bruscamente. Así, la regla “calidad=80” no es un número mágico; es una aproximación práctica del umbral de sensibilidad al contraste para una imagen típica vista bajo condiciones estándar (30 cm, 1080p).
Lo que importa
- JPEG no comprime la “imagen”; modela cómo funciona el sistema visual: bastones/conos → Y/CbCr, visión periférica del color → submuestreo de crominancia, selectividad neural de frecuencias en V1 → DCT, umbrales de sensibilidad al contraste → tabla de cuantización.
- Los coeficientes en la fórmula Y = 0.299R + 0.587G + 0.114B no son aproximaciones; son un modelo parametrizado de la sensibilidad espectral del ojo humano.
- El modo de submuestreo de crominancia 4:2:0 coincide con la relación real de resolución entre visión monocromática y color (~4:1), no con limitaciones técnicas del hardware.
- La tabla de cuantización no es una plantilla estática; es un mapa empírico de la CSF derivado de experimentos de laboratorio en sujetos vivos.
- Calidad=80 no es un “compromiso”; es el punto en el que el algoritmo deja de trabajar en la zona de pérdidas invisibles y comienza a afectar componentes perceptibles en la imagen.
— Editorial Team
Aún no hay comentarios.