JPEG sin pérdida - Lossless JPEG

JPEG sin pérdidas es una adición de 1993 al estándar JPEG del Joint Photographic Experts Group para permitir la compresión sin pérdidas . Sin embargo, el término también puede usarse para referirse a todos los esquemas de compresión sin pérdida desarrollados por el grupo, incluidos JPEG 2000 y JPEG-LS.

JPEG sin pérdida se desarrolló como una adición tardía a JPEG en 1993, utilizando una técnica completamente diferente del estándar JPEG con pérdida. Utiliza un esquema predictivo basado en los tres vecinos más cercanos (causales) (superior, izquierda y superior izquierda), y se utiliza codificación de entropía en el error de predicción. Las bibliotecas estándar de Independent JPEG Group no pueden codificarlo ni decodificarlo, pero Ken Murchison de Oceana Matrix Ltd. escribió un parche que amplía la biblioteca IJG para manejar JPEG sin pérdidas. El JPEG sin pérdida tiene cierta popularidad en las imágenes médicas y se utiliza en DNG y en algunas cámaras digitales para comprimir imágenes sin procesar, pero por lo demás nunca se adoptó de forma generalizada. Adobe 's DNG SDK proporciona una biblioteca de software para codificar y descodificar sin pérdida JPEG de hasta 16 bits por muestra.

ISO / IEC Joint Photography Experts Group mantiene una implementación de software de referencia que puede codificar las extensiones JPEG base (ISO / IEC 10918-1 y 18477-1) y JPEG XT (ISO / IEC 18477 Partes 2 y 6-9), así como JPEG-LS (ISO / IEC 14495).

Modo de funcionamiento sin pérdidas

Figura 1: Modelo de codificador DPCM
Figura 2: Diagramas de bloques simplificados para el modo sin pérdidas
Figura 3: Tres muestras vecinas alrededor de la muestra a predecir

JPEG sin pérdida es en realidad un modo de funcionamiento de JPEG. Este modo existe porque la forma basada en la transformada de coseno discreta (DCT) no puede garantizar que la entrada del codificador coincida exactamente con la salida del decodificador. A diferencia del modo con pérdida que se basa en el DCT, el proceso de codificación sin pérdida emplea un modelo de codificación predictivo simple llamado modulación diferencial de código de impulsos (DPCM). Este es un modelo en el que las predicciones de los valores de la muestra se estiman a partir de las muestras vecinas que ya están codificadas en la imagen. La mayoría de los predictores toman el promedio de las muestras inmediatamente arriba y a la izquierda de la muestra objetivo. DPCM codifica las diferencias entre las muestras predichas en lugar de codificar cada muestra de forma independiente. Las diferencias de una muestra a otra suelen ser cercanas a cero. En la figura 1 se muestra un codificador DPCM típico. El bloque de la figura actúa como un almacenamiento de la muestra actual que luego será una muestra previa.

Los pasos principales del modo de funcionamiento sin pérdidas se muestran en la figura 2. En el proceso, el predictor combina hasta tres muestras vecinas en A, B y C que se muestran en la figura 3 para producir una predicción del valor de la muestra en la posición etiquetada con X. Las tres muestras vecinas deben ser muestras ya codificadas. . Cualquiera de los predictores que se muestran en la tabla siguiente se puede usar para estimar la muestra ubicada en X. Se puede usar cualquiera de los ocho predictores enumerados en la tabla. Tenga en cuenta que las selecciones 1, 2 y 3 son predictores unidimensionales y las selecciones 4, 5, 6 y 7 son predictores bidimensionales. El primer valor de selección de la tabla, cero, solo se utiliza para la codificación diferencial en el modo de funcionamiento jerárquico. Una vez que se predicen todas las muestras, las diferencias entre las muestras se pueden obtener y codificar entropía sin pérdidas utilizando la codificación de Huffman o la codificación aritmética .

Valor de selección Predicción
0 Sin predicción
1 A
2 B
3 C
4 A + B - C
5 A + (B - C) / 2
6 B + (A - C) / 2
7 (A + B) / 2

Normalmente, las compresiones que utilizan el modo de funcionamiento sin pérdidas pueden alcanzar una relación de compresión de alrededor de 2: 1 para imágenes en color. Este modo es bastante popular en el campo de las imágenes médicas y se define como una opción en el estándar DNG, pero por lo demás no se usa mucho debido a la complejidad de realizar aritmética en valores de 10, 12 o 14 bpp en un procesador integrado típico de 32 bits y un poca ganancia de espacio resultante.

JPEG-LS

Descripción general

JPEG-LS es un estándar de compresión sin pérdida / casi sin pérdida para imágenes de tono continuo. Su designación oficial es ISO-14495-1 / ITU-T.87. Es un algoritmo de línea de base simple y eficiente que consta de dos etapas independientes y distintas llamadas modelado y codificación. JPEG-LS se desarrolló con el objetivo de proporcionar un estándar de compresión de imágenes sin pérdidas y casi sin pérdidas de baja complejidad que podría ofrecer una mejor eficiencia de compresión que JPEG sin pérdidas. Fue desarrollado porque en ese momento, el estándar sin pérdidas JPEG basado en codificación de Huffman y otros estándares tenían un rendimiento de compresión limitado. La descorrelación total no se puede lograr mediante la entropía de primer orden de los residuos de predicción empleados por estos estándares inferiores. JPEG-LS, por otro lado, puede obtener una buena descorrelación. La Parte 1 de esta norma se finalizó en 1999. La Parte 2, publicada en 2003, introdujo extensiones como la codificación aritmética . El núcleo de JPEG-LS se basa en el algoritmo LOCO-I, que se basa en la predicción, el modelado de residuos y la codificación de los residuos basada en el contexto. La mayor parte de la baja complejidad de esta técnica proviene del supuesto de que los residuos de predicción siguen una distribución geométrica de dos lados (también llamada distribución discreta de Laplace ) y del uso de códigos similares a Golomb , que se sabe que son aproximadamente óptimos para distribuciones geométricas. . Además de la compresión sin pérdidas, JPEG-LS también proporciona un modo con pérdidas ("casi sin pérdidas") en el que el codificador puede controlar el error absoluto máximo.

Rendimiento

  • La compresión para JPEG-LS es generalmente mucho más rápida que JPEG 2000 y mucho mejor que el estándar JPEG sin pérdida original.
  • La compresión para JPEG-LS es generalmente un poco peor que JPEG 2000, pero esto depende en gran medida del contenido de la imagen.
  • La descompresión para JPEG-LS es generalmente mucho más rápida que JPEG 2000, pero esto depende de las implementaciones exactas del decodificador de software.
    • Esta declaración es válida para implementaciones de código abierto.

Soporte de aplicaciones

Algoritmo LOCO-I

Antes de la codificación, hay dos pasos esenciales que deben realizarse en la etapa de modelado: descorrelación (predicción) y modelado de errores .

Decorrelación / predicción

En el algoritmo LOCO-I, la detección de bordes primitivos de bordes horizontales o verticales se logra examinando los píxeles vecinos del píxel X actual, como se ilustra en la figura 3. El píxel etiquetado con B se usa en el caso de un borde vertical, mientras que el píxel ubicado en A se usa en el caso de un borde horizontal. Este predictor simple se denomina predictor de detección de borde medio (MED) o predictor LOCO-I. El predictor LOCO-I predice el píxel X de acuerdo con las siguientes suposiciones:

Los tres predictores simples se seleccionan de acuerdo con las siguientes condiciones: (1) tiende a elegir B ​​en los casos en que existe un borde vertical a la izquierda de la X, (2) A en los casos de un borde horizontal por encima de X, o (3) A + B - C si no se detecta ningún borde.

Modelado de contexto

El algoritmo JPEG-LS estima las expectativas condicionales de los errores de predicción utilizando las medias de muestra correspondientes dentro de cada contexto Ctx . El propósito del modelado de contexto es que las estructuras de orden superior, como los patrones de textura y la actividad local de la imagen, puedan explotarse mediante el modelado de contexto del error de predicción. Los contextos se determinan obteniendo las diferencias de las muestras vecinas que representan el gradiente local :

El gradiente local refleja el nivel de actividades tales como suavidad y nerviosismo de las muestras vecinas. Tenga en cuenta que estas diferencias están estrechamente relacionadas con el comportamiento estadístico de los errores de predicción. Cada una de las diferencias encontradas en la ecuación anterior se cuantifica luego en regiones conectadas y equiprobables aproximadamente. Para JPEG-LS, las diferencias g1, g2 y g3 se cuantifican en 9 regiones y la región se indexa de -4 a 4. El propósito de la cuantificación es maximizar la información mutua entre el valor de la muestra actual y su contexto de manera que se pueden capturar las dependencias de orden superior. Se pueden obtener los contextos partiendo del supuesto de que

Después de fusionar contextos de signos positivos y negativos, el número total de contextos son contextos. Se podría obtener una estimación de sesgo dividiendo los errores de predicción acumulados dentro de cada contexto por un recuento de ocurrencias de contexto. En el algoritmo LOCO-I, este procedimiento se modifica y mejora de manera que se reduce el número de restas y adiciones. El procedimiento de cálculo de sesgo sin división se demuestra en [2] . El refinamiento de la predicción se puede realizar aplicando estas estimaciones en un mecanismo de retroalimentación que elimina los sesgos de predicción en diferentes contextos.

Codificación de residuos de predicción corregidos

En el modo regular de JPEG-LS, el estándar utiliza códigos Golomb-Rice que son una forma de codificar longitudes de ejecución no negativas. Su caso especial con el valor de codificación óptimo 2 k permite procedimientos de codificación más simples.

Ejecute la codificación de longitud en áreas uniformes

Dado que los códigos Golomb-Rice son bastante ineficientes para codificar distribuciones de baja entropía porque la tasa de codificación es de al menos un bit por símbolo, se puede producir una redundancia significativa porque las regiones suaves en una imagen se pueden codificar a menos de 1 bit por símbolo. Para evitar tener una longitud de código excesiva sobre la entropía, se puede usar la extensión alfabética que codifica bloques de símbolos en lugar de codificar símbolos individuales. Esto distribuye el exceso de longitud de codificación entre muchos símbolos. Este es el modo de "ejecución" de JPEG-LS y se ejecuta una vez que se detecta una región de contexto plana o suave caracterizada por cero gradientes. Se espera un recorrido del símbolo "a" del oeste y el final del recorrido se produce cuando aparece un nuevo símbolo o se alcanza el final de la línea. La ejecución total de la longitud está codificada y el codificador volvería al modo "normal".

JPEG 2000

JPEG 2000 incluye un modo sin pérdidas basado en un filtro de ondículas de enteros especiales (biortogonal 3/5). El modo sin pérdida de JPEG 2000 se ejecuta más lentamente y, a menudo, tiene relaciones de compresión peores que JPEG-LS en imágenes artificiales y compuestas, pero se comporta mejor que la implementación UBC de JPEG-LS en imágenes de cámaras digitales. JPEG 2000 también es escalable, progresivo y está más implementado.

JPEG XT

JPEG XT incluye un modo de transformación DCT de entero a entero sin pérdidas basado en la compresión de ondículas de JPEG 2000.

Referencias

enlaces externos