JPEG sin pérdida es una adición de 1993 al estándar JPEG por parte del Joint Photographic Experts Group para permitir la compresión sin pérdida . 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 , JPEG-LS y JPEG XL .
El JPEG sin pérdida se desarrolló como una adición tardía al 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, izquierdo y superior izquierdo), y se utiliza codificación de entropía en el error de predicción. Las bibliotecas estándar del Independent JPEG Group no pueden codificarlo ni decodificarlo, pero Ken Murchison de Oceana Matrix Ltd. escribió un parche que extiende la biblioteca IJG para manejar JPEG sin pérdida. [1] El JPEG sin pérdida tiene cierta popularidad en imágenes médicas y se utiliza en DNG y algunas cámaras digitales para comprimir imágenes en bruto, pero por lo demás nunca se adoptó ampliamente. El DNG SDK de Adobe proporciona una biblioteca de software para codificar y decodificar JPEG sin pérdida con hasta 16 bits por muestra.
El grupo de expertos en fotografía ISO/IEC mantiene una implementación de software de referencia que puede codificar tanto el formato base JPEG (ISO/IEC 10918-1 y 18477-1) como las extensiones JPEG XT (ISO/IEC 18477 Partes 2 y 6-9), así como JPEG-LS (ISO/IEC 14495). [2]
El JPEG sin pérdida [3] es en realidad un modo de funcionamiento del JPEG. Este modo existe porque la forma basada en la transformada discreta del coseno (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 la DCT, el proceso de codificación sin pérdida emplea un modelo de codificación predictiva simple llamado modulación diferencial de pulsos codificados (DPCM). Este es un modelo en el que las predicciones de los valores de 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 por encima 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 la siguiente 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 más tarde será una muestra anterior.
Los pasos principales del modo de operación sin pérdida se representan en la Fig. 2. En el proceso, el predictor combina hasta tres muestras vecinas en A, B y C que se muestran en la Fig. 3 para producir una predicción del valor de la muestra en la posición etiquetada por X. Las tres muestras vecinas deben ser muestras ya codificadas. Cualquiera de los predictores que se muestran en la tabla a continuación se puede utilizar para estimar la muestra ubicada en X. [4] Se puede utilizar 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 en la tabla, cero, solo se utiliza para la codificación diferencial en el modo de operación jerárquico. Una vez que se predicen todas las muestras, se pueden obtener las diferencias entre las muestras y codificar por entropía de manera sin pérdida utilizando la codificación de Huffman o la codificación aritmética .
Por lo general, las compresiones que utilizan el modo de operación sin pérdida pueden lograr una relación de compresión de alrededor de 2:1 para imágenes en color. [5] 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 hacer cálculos aritméticos en valores de 10, 12 o 14 bpp en un procesador de 32 bits integrado típico y una pequeña ganancia resultante en espacio. [ cita requerida ]
JPEG-LS es un estándar de compresión sin pérdida o casi sin pérdida para imágenes de tono continuo. [6] Su designación oficial es ISO-14495-1/ITU-T.87. [7] Es un algoritmo 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érdida y casi sin pérdida de baja complejidad que pudiera ofrecer una mejor eficiencia de compresión que JPEG sin pérdida. Se desarrolló porque en ese momento, el estándar JPEG sin pérdida basado en la codificación Huffman y otros estándares estaban limitados en su rendimiento de compresión. La decorrelació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 decorrelación. [8] [9] La Parte 1 de este estándar 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, [10] que se basa en la predicción, el modelado de residuos y la codificación basada en el contexto de los residuos. La mayor parte de la baja complejidad de esta técnica proviene de la suposición de que los residuos de predicción siguen una distribución geométrica bilateral (también llamada distribución de Laplace discreta ) 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érdida, JPEG-LS también proporciona un modo con pérdida ("casi sin pérdida") donde el error absoluto máximo puede ser controlado por el codificador.
Antes de la codificación, hay dos pasos esenciales que se deben realizar en la etapa de modelado: decorrelación (predicción) y modelado de errores.
En el algoritmo LOCO-I, la detección primitiva de bordes horizontales o verticales se logra examinando los píxeles vecinos del píxel actual X, como se ilustra en la figura 3. El píxel etiquetado con B se utiliza en el caso de un borde vertical, mientras que el píxel ubicado en A se utiliza en el caso de un borde horizontal. Este predictor simple se denomina predictor de detección de borde medio (MED) [11] o predictor LOCO-I. El píxel X se predice mediante el predictor LOCO-I 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 X, (2) A en los casos en que existe un borde horizontal por encima de X, o (3) A + B – C si no se detecta ningún borde.
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, se puedan explotar 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 como la suavidad y la arista de las muestras vecinas. Nótese 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 en regiones aproximadamente equiprobables y conectadas. 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 muestra actual y su contexto de modo que se puedan capturar las dependencias de orden superior. Se pueden obtener los contextos basándose en el supuesto de que
Después de fusionar contextos de signos positivos y negativos, el número total de contextos es contextos. Se puede obtener una estimación de sesgo dividiendo los errores de predicción acumulativos 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 sustracciones y adiciones. El procedimiento de cálculo de sesgo sin división se demuestra en [2]. Luego, se puede realizar un refinamiento de la predicción aplicando estas estimaciones en un mecanismo de retroalimentación que elimina los sesgos de predicción en diferentes contextos.
En el modo regular de JPEG-LS, el estándar utiliza códigos Golomb-Rice , que son una forma de codificar longitudes de secuencia no negativas. Su caso especial con el valor de codificación óptimo 2k permite procedimientos de codificación más simples.
Dado que los códigos Golomb-Rice son bastante ineficientes para codificar distribuciones de baja entropía debido a que la tasa de codificación es de al menos un bit por símbolo, se puede producir una redundancia significativa debido a que las regiones suaves en una imagen se pueden codificar a menos de 1 bit por símbolo. Para evitar tener un exceso de longitud de código sobre la entropía, se puede utilizar la extensión del alfabeto que codifica bloques de símbolos en lugar de codificar símbolos individuales. Esto distribuye el exceso de longitud de codificación sobre 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 gradientes cero. Se espera una ejecución del símbolo oeste "a" y el final de la ejecución ocurre cuando aparece un nuevo símbolo o se alcanza el final de la línea. La ejecución total de la longitud se codifica y el codificador volvería al modo "regular".
JPEG 2000 incluye un modo sin pérdida basado en un filtro wavelet entero especial (biortogonal 3/5). El modo sin pérdida de JPEG 2000 funciona más lentamente y a menudo tiene peores relaciones de compresión que JPEG-LS en imágenes artificiales y compuestas [12] [13] pero funciona mejor que la implementación UBC de JPEG-LS en imágenes de cámaras digitales. [14] JPEG 2000 también es escalable, progresivo y está implementado de manera más amplia. [ cita requerida ]
JPEG XT incluye un modo de transformación DCT de entero a entero sin pérdida basado en la compresión wavelet de JPEG 2000. [ cita requerida ]
JPEG XL incluye un modo sin pérdida/casi sin pérdida/responsivo llamado Modular que opcionalmente utiliza una transformación Haar modificada (llamada "squeeze") y que también se utiliza para codificar la imagen DC (escala 1:8) en modo VarDCT así como varias imágenes auxiliares como campos de cuantificación adaptativa o canales adicionales como alfa . [15]
Varias personas se han interesado en mi parche que agrega compatibilidad con JPEG sin pérdida (según la especificación original, no JPEG-LS) a libjpeg v6b. He decidido poner este parche a disposición a través de mi sitio FTP (ftp://ftp.oceana.com/pub/ljpeg-6b.tar.gz).
{{cite newsgroup}}
: Enlace externo en |quote=
( ayuda ){{cite web}}
: CS1 maint: archived copy as title (link){{cite web}}
: CS1 maint: archived copy as title (link)