EN JA ZH ES

Transformada Wavelet y JPEG 2000 - Análisis multirresolución para compresión de imágenes

· 9 min de lectura

Fundamentos de la transformada wavelet - Análisis simultáneo tiempo-frecuencia

La transformada wavelet analiza señales a diferentes escalas (resoluciones) y posiciones simultáneamente. Mientras la transformada de Fourier extrae componentes de frecuencia de señales completas, la transformada wavelet identifica dónde existen componentes de escala específica. En compresión de imágenes, esta propiedad de análisis multirresolución permite estrategias de codificación eficientes.

Diferencia con la transformada de Fourier:

La transformada de Fourier pierde completamente la información espacial, proporcionando solo datos de frecuencia. La transformada de Fourier de tiempo corto (STFT) localiza con funciones ventana pero el tamaño fijo de ventana crea compromisos de resolución tiempo-frecuencia. La transformada wavelet aplica automáticamente ventanas estrechas (alta resolución temporal) para altas frecuencias y ventanas amplias (alta resolución frecuencial) para bajas frecuencias, optimizando este compromiso.

Wavelet madre:

Las funciones base de la transformada wavelet se llaman wavelets madre psi(t), generando familias de funciones de análisis mediante escalado (dilatación) y desplazamiento (traslación). Forma: psi_a,b(t) = (1/sqrt(a)) x psi((t-b)/a) donde a es escala y b es parámetro de posición. La compresión de imágenes usa ampliamente wavelets Daubechies y CDF 9/7.

Transformada wavelet 2D:

La aplicación a imágenes aplica secuencialmente transformadas wavelet 1D a lo largo de filas y luego columnas. Un nivel de descomposición divide la imagen en 4 subbandas: LL (baja-baja), LH (baja-alta: bordes horizontales), HL (alta-baja: bordes verticales), HH (alta-alta: bordes diagonales). Descomponer LL adicionalmente produce representación multirresolución.

Transformada wavelet discreta (DWT) y bancos de filtros

La transformada wavelet discreta (DWT) se implementa eficientemente usando estructuras de bancos de filtros. Pares de filtros paso bajo y paso alto descomponen señales, con submuestreo logrando descomposición multirresolución en cada nivel.

Banco de filtros de análisis:

Las señales de entrada pasan por filtro paso bajo h0 (correspondiente a función de escalado) y filtro paso alto h1 (correspondiente a función wavelet), cada uno seguido de submuestreo 2x. La salida paso bajo son coeficientes de aproximación; la salida paso alto son coeficientes de detalle. Descomponer la aproximación permite descomposición multinivel.

Banco de filtros de síntesis:

La transformada inversa sobremuestrea cada subbanda por 2x, pasa por filtros de síntesis g0, g1, y suma. Diseños de filtros que satisfacen condiciones de reconstrucción perfecta recuperan señales originales sin pérdida de información - la base para compresión sin pérdida.

Wavelet CDF 9/7:

La compresión con pérdida de JPEG 2000 usa la wavelet Cohen-Daubechies-Feauveau 9/7 con filtros paso bajo de 9 coeficientes y paso alto de 7 coeficientes. Filtros biortogonales simétricos con características de fase lineal minimizan artefactos en bordes. La implementación con esquema lifting reduce el conteo de multiplicaciones para cálculo rápido.

Wavelet CDF 5/3:

La compresión sin pérdida de JPEG 2000 usa la wavelet CDF 5/3 implementable solo con aritmética entera. Los coeficientes de filtro racionales garantizan reconstrucción perfecta sin errores de redondeo. Menor ratio de compresión que CDF 9/7 pero adecuada para imágenes médicas y archivo donde la pérdida de información es inaceptable.

Pipeline de compresión JPEG 2000

JPEG 2000 es un estándar de compresión de imágenes basado en wavelets, estandarizado como ISO/IEC 15444 en 2000. Comparado con JPEG convencional (basado en DCT), ofrece mejor calidad a bajo bitrate, marco unificado sin pérdida/con pérdida, y capacidades de transmisión progresiva.

Flujo general de compresión:

1. Preprocesamiento (desplazamiento de nivel DC, conversión de espacio de color RGB a YCbCr). 2. División en tiles (opcional, dividiendo imágenes grandes en tiles procesables independientemente). 3. DWT (CDF 9/7 o CDF 5/3, descomposición de 5-6 niveles). 4. Cuantización (dividiendo coeficientes de subbanda por tamaño de paso y redondeando). 5. Codificación EBCOT (codificación por planos de bits + codificación aritmética). 6. Empaquetado y generación de flujo de código.

División en tiles:

Imágenes grandes (satélite, médicas) se dividen en tiles procesados independientemente, típicamente de 256x256 a 1024x1024 píxeles. Los artefactos en bordes de tiles se mitigan mediante solapamiento o procesamiento de bordes. El procesamiento sin tiles es posible - imágenes más pequeñas logran mejor compresión sin división.

Cuantización:

La cuantización de coeficientes DWT reduce información. Diferentes tamaños de paso Delta por subbanda cuantizan coeficientes como q = sign(c) x floor(|c|/Delta). Tamaños de paso mayores aumentan la compresión pero reducen la calidad. El modo sin pérdida omite la cuantización (Delta=1), codificando coeficientes directamente.

Comparación con JPEG:

  • Artefactos de bloque: La DCT de bloques 8x8 de JPEG causa bordes visibles a bajo bitrate. Las bases wavelet solapadas de JPEG 2000 eliminan el ruido de bloque
  • Eficiencia de compresión: A PSNR igual, JPEG 2000 logra calidad equivalente con 20-30% menos bitrate
  • Visualización progresiva: JPEG 2000 soporta nativamente transmisión progresiva por calidad, resolución y posición espacial

EBCOT - Mecanismo de codificación por planos de bits

EBCOT (Embedded Block Coding with Optimized Truncation) es el algoritmo central de codificación de JPEG 2000. Dividir subbandas en bloques de código (típicamente 64x64) y codificar plano de bits por plano de bits permite truncamiento a bitrates arbitrarios para control flexible de tasa.

Codificación por planos de bits:

Los coeficientes cuantizados se codifican un bit a la vez desde MSB (bit más significativo) hacia LSB (bit menos significativo). Los primeros planos de bits contienen la información más importante (signos y posiciones de coeficientes grandes); los planos posteriores añaden detalle. Terminar en cualquier plano de bits permite control progresivo de calidad.

Tres pasadas de codificación:

Cada plano de bits se codifica en 3 pasadas: 1. Pasada de propagación de significancia: codifica bits alrededor de coeficientes significativos adyacentes. 2. Pasada de refinamiento de magnitud: codifica bits adicionales de coeficientes ya significativos. 3. Pasada de limpieza: codifica todos los bits restantes. Esta división asegura que la información de mayor importancia se codifique primero.

Codificación aritmética MQ:

La salida de cada pasada se comprime por el codificador MQ (codificador aritmético). La codificación aritmética adaptativa al contexto actualiza modelos de probabilidad basados en patrones de bits circundantes. Se definen 18 contextos, explotando eficientemente la correlación espacial de coeficientes.

Control de tasa:

La mayor ventaja de EBCOT es el truncamiento óptimo post-codificación a bitrates arbitrarios. La optimización Tasa-Distorsión por bloque de código por pasada selecciona combinaciones de pasadas que logran mínima distorsión dentro de presupuestos de bits dados. Esto permite control preciso de bitrate durante la codificación.

Aplicaciones de JPEG 2000 y posición actual

JPEG 2000 es técnicamente superior pero tiene adopción Web limitada. Sin embargo, está ampliamente adoptado como estándar en campos profesionales específicos. Esta sección cubre aplicaciones y posicionamiento dentro del ecosistema actual de compresión de imágenes.

Cine digital (DCI):

El estándar de distribución cinematográfica DCI (Digital Cinema Initiatives) adopta JPEG 2000 como único formato de compresión. Cada fotograma 4K (4096x2160) se comprime con JPEG 2000 en contenedores MXF. Profundidad de color de 12 bits en espacio de color XYZ requiere compresión de alta calidad a aproximadamente 1.3MB por fotograma (250Mbps a 24fps).

Imagen médica (DICOM):

El estándar de imagen médica DICOM usa ampliamente la compresión sin pérdida de JPEG 2000. Imágenes de CT, MRI y rayos X donde la pérdida de información diagnóstica es inaceptable logran reducción de tamaño de archivo de 2-3x mediante compresión sin pérdida. El soporte de imágenes de 16 bits también es un requisito crítico.

Imágenes satelitales y geoespaciales:

La distribución de imágenes satelitales y aéreas usa ampliamente JPEG 2000. La transmisión progresiva de imágenes enormes (decenas de miles de píxeles) y la codificación ROI (Región de Interés) para acceso parcial de alta calidad se adaptan al uso en sistemas de información geográfica (GIS).

Posicionamiento Web:

El soporte de JPEG 2000 en navegadores es solo Safari (a 2023) - Chrome y Firefox no lo soportan. AVIF (basado en AV1) y WebP cubren la mayoría de las ventajas técnicas de JPEG 2000 para web con soporte de navegador más amplio, haciendo que AVIF/WebP sean recomendados para web. JPEG 2000 se posiciona como un estándar especializado para dominios profesionales.

Implementación y uso - OpenJPEG y procesamiento con Python

Cubre bibliotecas de implementación de JPEG 2000 y métodos de lectura/escritura/conversión en Python. Patrones de uso práctico e implementación de transformada wavelet para desarrollo práctico.

Biblioteca OpenJPEG:

OpenJPEG es la implementación de referencia de código abierto de JPEG 2000 que soporta tanto codificación como decodificación. Implementada en C, sirve como backend para muchas herramientas de procesamiento de imágenes (GDAL, ImageMagick, Pillow). Las herramientas de línea de comandos opj_compress y opj_decompress permiten conversión directa.

Procesamiento JPEG 2000 en Python:

Pillow (PIL) soporta lectura/escritura de JPEG 2000. img.save('output.jp2', 'JPEG2000', quality_mode='rates', quality_layers=[20]) codifica con ratio de compresión 20:1. La biblioteca Glymur proporciona control detallado de parámetros JPEG 2000 incluyendo tamaño de tile, niveles de descomposición y tamaños de bloque de código.

Implementación DWT con PyWavelets:

PyWavelets (pywt) es óptimo para manipulación directa de transformada wavelet en Python. coeffs = pywt.dwt2(image, 'db4') ejecuta DWT 2D de 1 nivel, retornando formato (cA, (cH, cV, cD)) de coeficientes de aproximación y detalle. La descomposición multinivel usa pywt.wavedec2(image, 'db4', level=5).

Implementación simple de compresión wavelet:

La compresión educativa establece coeficientes DWT pequeños a cero (umbralización) y luego reconstruye mediante transformada inversa. Descomponer con coeffs = pywt.wavedec2(img, 'bior4.4', level=5), aplicar umbrales poniendo a cero valores pequeños por subbanda. El porcentaje de coeficientes cero corresponde al ratio de compresión - poner a cero el 95% de los coeficientes frecuentemente mantiene calidad visualmente aceptable. Esto aproxima el paso de cuantización de JPEG 2000.

Artículos relacionados

Algoritmos de compresión de imagen en profundidad - DCT, transformada wavelet y codificación predictiva

Explicación profunda de las tecnologías centrales de compresión de imágenes. Comprende los principios matemáticos detrás de la DCT de JPEG, la transformada wavelet de JPEG 2000, la codificación predictiva de H.265/AV1 y la codificación de entropía.

Filtrado de Fourier para eliminación de ruido - Procesamiento de imágenes en el dominio de frecuencia

Explicación sistemática de las técnicas de eliminación de ruido mediante la transformada de Fourier. Cubre filtros paso bajo, paso alto, filtros notch, filtro de Wiener e implementación en Python.

Fundamentos del análisis en dominio de frecuencia - Comprender la frecuencia espacial y el espectro

Explicación sistemática de los conceptos fundamentales del análisis de imágenes en el dominio de frecuencia. Cubre frecuencia espacial, transformada de Fourier, interpretación del espectro y aplicaciones del procesamiento frecuencial.

Historia de los formatos de imagen - 40 años de evolución de BMP a AVIF

Recorrido cronológico por la historia de los principales formatos de imagen: BMP, GIF, JPEG, PNG, WebP y AVIF. Conoce el contexto y las innovaciones técnicas detrás de cada formato.

Compresión de imágenes explicada - Cómo funcionan JPEG, PNG y WebP

Explicación técnica de los algoritmos de compresión de JPEG, PNG y WebP. Aprende las diferencias entre compresión con pérdida y sin pérdida, cuándo usar cada formato y cómo optimizar imágenes para la web.

Compresión sin pérdida vs con pérdida - Cómo elegir la compresión de imagen correcta

Compara mecanismos, características y casos de uso de compresión sin pérdida y con pérdida para elegir el método de compresión óptimo para tus imágenes.

Términos relacionados