Fundamentos y Técnicas de Compresión de Datos en Imagen y Video

Objetivos de la Compresión

  • Minimizar la cantidad de datos: Reducir el volumen de información para almacenamiento o transmisión.
  • Calidad: Lograrlo sin pérdida de calidad o con una pérdida que no sea perceptible para el ojo humano.

Estrategias para Disminuir la Cantidad de Datos

  • Reducción por diezmado: Recuperación por réplica.
  • Cuantificación: Disminuir el número de bits por píxel.

Tipos de Compresión

Lossless (Sin pérdida)

El sistema es reversible, lo que permite una reconstrucción perfecta del archivo original. Sus características principales son:

  • Poca capacidad de compresión.
  • No se puede garantizar un grado de compresión específico.

Lossy (Con pérdida)

El sistema no es reversible; durante la reconstrucción se pierde parte de la calidad original. Sus ventajas incluyen:

  • Grado de compresión significativo (por ejemplo, 1:3).

Diferencia entre Codificación y Compresión

La codificación consiste en traducir la información a otro alfabeto; puede comprimir o no, y siempre es lossless. Por el contrario, la compresión puede ser lossless o lossy, y reduce la información a transmitir eliminando información redundante (repetitiva o predecible) o irrelevante (no apreciable por el usuario). El flujo de trabajo estándar es: primero se comprime y luego se codifica.

Tipos de Redundancias

Redundancia Estadística

Aprovecha las probabilidades de aparición de los símbolos para optimizar el espacio.

Irrelevancia (Redundancia Perceptual)

Es siempre lossy y se utiliza principalmente para imágenes que serán valoradas por el ojo humano.

Redundancia Temporal

Se utiliza exclusivamente en video. Consiste en una correlación estadística entre píxeles en instantes cercanos de tiempo (imágenes sucesivas). Se explota de diversas formas en estándares como MPEG:

  • Codificación del movimiento en la escena.
  • Predicción de valores futuros y codificación de diferencias.
  • Interpolación entre valores pasados y futuros.

Redundancia Espacial

Consiste en una correlación estadística entre píxeles próximos, considerando que el valor de un píxel está estrechamente relacionado con los de su entorno. Para explotarla:

  • Dividimos la imagen en bloques no solapados (donde los píxeles deben ser muy parecidos).
  • Transformamos los bloques para lograr una concentración de energía en pocos coeficientes.
  • El objetivo es eliminar (o cuantificar) los coeficientes de menor energía.

Reducción de Redundancia Estadística

Se realiza a través de diversos métodos de codificación:

Codificación Entrópica

Basada en probabilidades, aprovecha la distribución estadística de los símbolos de la fuente. Se consigue un ahorro de bits asignando menos bits a los símbolos más frecuentes (código VLC frente a FLC).

  • VLC (Variable Length Coding): Codificación de longitud variable. Su ventaja es que comprime, pero su inconveniente es que tiene un diseño e interpolación más complejos.
  • FLC (Fixed Length Coding): Código de longitud fija. Es fácil de implementar, pero no aprovecha la estadística de los símbolos.

Codificación Aritmética

Otra forma de codificación entrópic que no asigna a cada símbolo su propio código, sino que calcula una única palabra para un mensaje entero. Reemplaza el mensaje por un número en coma flotante entre 0 y 1; cada símbolo añadido modifica el código de salida.

  • Ventaja: Ofrece casi la compresión óptima según Shannon; es ideal para modelos adaptativos (MPEG-4).
  • Desventaja: Es un proceso complejo y lento, ya que requiere varias multiplicaciones y divisiones por símbolo.

Esquema de Compresión con Pérdida

  1. Transformación: Transforma la señal a una forma alternativa que concentra la energía en unos pocos coeficientes (a mayor energía y varianza, se asignan más bits). Esto decorrelaciona la señal.
  2. Cuantificación: Reduce a un número finito los valores de los coeficientes transformados (índices).
  3. Codificación: Asigna eficientemente un código binario a cada uno de los índices obtenidos. El sistema más eficiente es la codificación entrópic, que es estadística y sin pérdidas, asignando palabras de código más cortas a los símbolos más probables.

Diferencia entre Coeficientes e Índice

Los coeficientes son los valores obtenidos del bloque 8×8 tras aplicar la DCT (Transformada Discreta del Coseno). Estos se concentran en las primeras posiciones (mayor energía) para lograr mayor compresión. Tras ser cuantificados (proceso con pérdida), pasan a llamarse índices de cuantificación, los cuales se dirigen al bloque de codificación para formar los bits finales.

El Proceso de Cuantificación

¿Qué se cuantifica?

Se cuantifican los coeficientes DCT 8×8 de datos de imagen y los valores de las componentes Y, Cb, Cr de:

  • Píxeles de imagen en JPEG o MPEG cuadros I (intra).
  • Imagen de error de predicción en MPEG cuadros P y B (inter).

Consideraciones importantes:

  • No se eliminan los de alta frecuencia por defecto; todos se cuantifican según su relevancia visual.
  • Imágenes intra-codificadas: No necesitan datos de otras imágenes.
  • Imágenes inter-codificadas: Requieren datos de otras imágenes para su decodificación.

¿Cómo se cuantifica?

Se realiza mediante la división por un escalón de cuantificación y un posterior redondeo. Esto reduce los valores de los coeficientes transformados a índices finitos. La reconstrucción multiplica el índice por el escalón, asignando cada índice a un rango de valores, lo que genera pérdidas irreversibles.

El escalón de cuantificación:

  • Es diferente para cada coeficiente de la DCT.
  • Se puede modificar para controlar el grado de compresión final.

Proceso de Codificación VLC: Índice DC Intra

  1. Si el bloque no es Intra, se omite este proceso.
  2. Hallar la diferencia con el índice DC «anterior» del mismo tipo (Y, Cb, Cr). Si no hay anterior, se toma un valor de reseteo según tablas técnicas.
  3. Poner la diferencia en binario sin signo y anotar el signo.
  4. Obtener el código de tamaño T usando el número de bits del valor sin signo.
  5. Obtener el código de la amplitud A: si es positivo, se usa el valor binario; si es negativo, se usa el complemento a 1 (cambiar 0 por 1).
  6. El código binario final del índice DC es la concatenación TA.

Diferencia con el Índice DC Anterior

El punto de partida es el coeficiente DC cuantificado acorde con la variable intra_dc_precision. Se calcula la diferencia: Índice_DC_actual – Índice_DC_anterior, siempre que el bloque anterior sea del mismo tipo (Y, Cb, Cr).

Serialización de los Índices

Consiste en la colocación en serie de los índices. Dado que la frecuencia crece tanto en el eje u como en el v, se ordenan en zigzag para agrupar los ceros. Generalmente, los valores suelen ser cada vez menores, apareciendo largas secuencias de ceros al final del recorrido.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.