En teoría de la información , la compresión de datos , codificación de fuente [1] o reducción de la tasa de bits es el proceso de codificar información utilizando menos bits que la representación original. [2] Cualquier compresión particular es con pérdida o sin pérdida . La compresión sin pérdida reduce bits al identificar y eliminar la redundancia estadística . No se pierde información en la compresión sin pérdida. La compresión con pérdida reduce bits al eliminar información innecesaria o menos importante. [3] Normalmente, un dispositivo que realiza la compresión de datos se conoce como codificador, y uno que realiza la inversión del proceso (descompresión) como decodificador.
El proceso de reducción del tamaño de un archivo de datos se conoce a menudo como compresión de datos. En el contexto de la transmisión de datos , se denomina codificación de origen: la codificación se realiza en la fuente de los datos antes de que se almacenen o transmitan. [4] La codificación de origen no debe confundirse con la codificación de canal , para la detección y corrección de errores, o la codificación de línea , el medio para mapear datos en una señal.
Los algoritmos de compresión de datos presentan un equilibrio de complejidad espacio-temporal entre los bytes necesarios para almacenar o transmitir información y los recursos computacionales necesarios para realizar la codificación y decodificación. El diseño de esquemas de compresión de datos implica equilibrar el grado de compresión, la cantidad de distorsión introducida (cuando se utiliza la compresión de datos con pérdida ) y los recursos computacionales o el tiempo necesarios para comprimir y descomprimir los datos. [5]
Los algoritmos de compresión de datos sin pérdida suelen aprovechar la redundancia estadística para representar los datos sin perder ninguna información , de modo que el proceso sea reversible. La compresión sin pérdida es posible porque la mayoría de los datos del mundo real presentan redundancia estadística. Por ejemplo, una imagen puede tener áreas de color que no cambian a lo largo de varios píxeles; en lugar de codificar "píxel rojo, píxel rojo...", los datos pueden codificarse como "279 píxeles rojos". Este es un ejemplo básico de codificación por longitud de ejecución ; existen muchos esquemas para reducir el tamaño de archivo eliminando la redundancia.
Los métodos de compresión Lempel–Ziv (LZ) se encuentran entre los algoritmos más populares para el almacenamiento sin pérdidas. [6] DEFLATE es una variación de LZ optimizada para la velocidad de descompresión y la relación de compresión, [7] pero la compresión puede ser lenta. A mediados de la década de 1980, tras el trabajo de Terry Welch , el algoritmo Lempel–Ziv–Welch (LZW) se convirtió rápidamente en el método de elección para la mayoría de los sistemas de compresión de propósito general. LZW se utiliza en imágenes GIF , programas como PKZIP y dispositivos de hardware como módems. [8] Los métodos LZ utilizan un modelo de compresión basado en tablas donde las entradas de la tabla se sustituyen por cadenas de datos repetidas. Para la mayoría de los métodos LZ, esta tabla se genera dinámicamente a partir de datos anteriores en la entrada. La tabla en sí misma suele estar codificada mediante Huffman . Los códigos basados en gramática como este pueden comprimir entradas muy repetitivas de forma extremadamente eficaz, por ejemplo, una colección de datos biológicos de la misma especie o de especies estrechamente relacionadas, una enorme colección de documentos versionados, un archivo de Internet, etc. La tarea básica de los códigos basados en gramática es construir una gramática libre de contexto que derive una única cadena. Otros algoritmos prácticos de compresión gramatical son Sequitur y Re-Pair .
Los compresores sin pérdidas modernos más potentes utilizan modelos probabilísticos , como la predicción por coincidencia parcial . La transformada de Burrows-Wheeler también puede considerarse una forma indirecta de modelado estadístico. [9] En un refinamiento adicional del uso directo del modelado probabilístico , las estimaciones estadísticas se pueden acoplar a un algoritmo llamado codificación aritmética . La codificación aritmética es una técnica de codificación más moderna que utiliza los cálculos matemáticos de una máquina de estados finitos para producir una cadena de bits codificados a partir de una serie de símbolos de datos de entrada. Puede lograr una compresión superior en comparación con otras técnicas, como el algoritmo de Huffman más conocido. Utiliza un estado de memoria interna para evitar la necesidad de realizar un mapeo uno a uno de símbolos de entrada individuales a representaciones distintas que utilizan un número entero de bits, y limpia la memoria interna solo después de codificar toda la cadena de símbolos de datos. La codificación aritmética se aplica especialmente bien a las tareas de compresión de datos adaptativos donde las estadísticas varían y dependen del contexto, ya que se puede acoplar fácilmente con un modelo adaptativo de la distribución de probabilidad de los datos de entrada. Un ejemplo temprano del uso de la codificación aritmética fue una característica opcional (pero no muy utilizada) del estándar de codificación de imágenes JPEG . [10] Desde entonces se ha aplicado en varios otros diseños, incluidos H.263 , H.264/MPEG-4 AVC y HEVC para codificación de video. [11]
El software de archivo normalmente tiene la capacidad de ajustar el "tamaño del diccionario", donde un tamaño mayor exige más memoria de acceso aleatorio durante la compresión y descompresión, pero comprime más fuerte, especialmente en patrones repetidos en el contenido de los archivos. [12] [13]
A finales de los años 1980, las imágenes digitales se hicieron más comunes y surgieron estándares para la compresión de imágenes sin pérdida . A principios de los años 1990, los métodos de compresión con pérdida comenzaron a usarse ampliamente. [14] En estos esquemas, se acepta cierta pérdida de información, ya que la eliminación de detalles no esenciales puede ahorrar espacio de almacenamiento. Existe una compensación correspondiente entre preservar la información y reducir el tamaño. Los esquemas de compresión de datos con pérdida se diseñan a partir de investigaciones sobre cómo las personas perciben los datos en cuestión. Por ejemplo, el ojo humano es más sensible a las variaciones sutiles en la luminancia que a las variaciones en el color. La compresión de imágenes JPEG funciona en parte redondeando los bits no esenciales de información. [15] Una serie de formatos de compresión populares explotan estas diferencias perceptivas, incluida la psicoacústica para el sonido y la psicovisual para las imágenes y el video.
La mayoría de las formas de compresión con pérdida se basan en la codificación de transformada , especialmente la transformada de coseno discreta (DCT). Fue propuesta por primera vez en 1972 por Nasir Ahmed , quien luego desarrolló un algoritmo de trabajo con T. Natarajan y KR Rao en 1973, antes de introducirla en enero de 1974. [16] [17] La DCT es el método de compresión con pérdida más utilizado y se utiliza en formatos multimedia para imágenes (como JPEG y HEIF ), [18] vídeo (como MPEG , AVC y HEVC) y audio (como MP3 , AAC y Vorbis ).
La compresión de imágenes con pérdida se utiliza en cámaras digitales para aumentar la capacidad de almacenamiento. De manera similar, los DVD , Blu-ray y el vídeo en streaming utilizan formatos de codificación de vídeo con pérdida . La compresión con pérdida se utiliza ampliamente en vídeo.
En la compresión de audio con pérdida, se utilizan métodos de psicoacústica para eliminar los componentes no audibles (o menos audibles) de la señal de audio . La compresión del habla humana a menudo se realiza con técnicas aún más especializadas; la codificación de voz se distingue como una disciplina separada de la compresión de audio de propósito general. La codificación de voz se utiliza en telefonía por Internet ; por ejemplo, la compresión de audio se utiliza para copiar CD y es decodificada por los reproductores de audio. [9]
La compresión con pérdida puede provocar pérdida de generación .
La base teórica para la compresión la proporciona la teoría de la información y, más específicamente, el teorema de codificación de fuente de Shannon ; las teorías específicas del dominio incluyen la teoría de la información algorítmica para la compresión sin pérdidas y la teoría de la tasa de distorsión para la compresión con pérdidas. Estas áreas de estudio fueron creadas esencialmente por Claude Shannon , quien publicó artículos fundamentales sobre el tema a fines de la década de 1940 y principios de la de 1950. Otros temas asociados con la compresión incluyen la teoría de codificación y la inferencia estadística . [19]
Existe una estrecha relación entre el aprendizaje automático y la compresión. Un sistema que predice las probabilidades posteriores de una secuencia dada toda su historia se puede utilizar para la compresión óptima de datos (mediante el uso de codificación aritmética en la distribución de salida). Por el contrario, se puede utilizar un compresor óptimo para la predicción (al encontrar el símbolo que comprime mejor, dada la historia previa). Esta equivalencia se ha utilizado como justificación para utilizar la compresión de datos como un parámetro de referencia para la "inteligencia general". [20] [21] [22]
Una visión alternativa puede mostrar que los algoritmos de compresión mapean implícitamente cadenas en vectores de espacios de características implícitos , y las medidas de similitud basadas en la compresión calculan la similitud dentro de estos espacios de características. Para cada compresor C(.) definimos un espacio vectorial asociado ℵ, de modo que C(.) mapea una cadena de entrada x, correspondiente a la norma vectorial ||~x||. Un examen exhaustivo de los espacios de características subyacentes a todos los algoritmos de compresión se ve impedido por el espacio; en su lugar, los vectores de características eligen examinar tres métodos de compresión sin pérdida representativos, LZW, LZ77 y PPM. [23]
Según la teoría AIXI , una conexión explicada de forma más directa en Hutter Prize , la mejor compresión posible de x es el software más pequeño posible que genera x. Por ejemplo, en ese modelo, el tamaño comprimido de un archivo zip incluye tanto el archivo zip como el software de descompresión, ya que no se puede descomprimir sin ambos, pero puede haber una forma combinada aún más pequeña.
Algunos ejemplos de software de compresión de audio y video impulsado por IA incluyen NVIDIA Maxine y AIVC. [24] Algunos ejemplos de software que pueden realizar compresión de imágenes impulsada por IA incluyen OpenCV , TensorFlow , Image Processing Toolbox (IPT) de MATLAB y High-Fidelity Generative Image Compression. [25]
En el aprendizaje automático no supervisado , la agrupación en clústeres de k-medias se puede utilizar para comprimir datos mediante la agrupación de puntos de datos similares en clústeres. Esta técnica simplifica el manejo de conjuntos de datos extensos que carecen de etiquetas predefinidas y se usa ampliamente en campos como la compresión de imágenes . [26]
La compresión de datos tiene como objetivo reducir el tamaño de los archivos de datos, mejorando la eficiencia de almacenamiento y acelerando la transmisión de datos. La agrupación en k-medias, un algoritmo de aprendizaje automático no supervisado, se emplea para dividir un conjunto de datos en un número específico de grupos, k, cada uno representado por el centroide de sus puntos. Este proceso condensa conjuntos de datos extensos en un conjunto más compacto de puntos representativos. Particularmente beneficioso en el procesamiento de imágenes y señales , la agrupación en k-medias ayuda en la reducción de datos al reemplazar grupos de puntos de datos con sus centroides, preservando así la información central de los datos originales mientras disminuye significativamente el espacio de almacenamiento requerido. [27]
Los modelos de lenguaje de gran tamaño (LLM) también son capaces de comprimir datos sin pérdida, como lo demuestra la investigación de DeepMind con el modelo Chinchilla 70B. Desarrollado por DeepMind, Chinchilla 70B comprimió datos de manera efectiva, superando los métodos convencionales como Portable Network Graphics (PNG) para imágenes y Free Lossless Audio Codec (FLAC) para audio. Logró una compresión de datos de imagen y audio al 43,4% y 16,4% de sus tamaños originales, respectivamente. [28]
La compresión de datos puede considerarse un caso especial de diferenciación de datos . [29] [30] La diferenciación de datos consiste en producir una diferencia dada una fuente y un destino, y en aplicar parches para reproducir el destino dada una fuente y una diferencia. Dado que no hay una fuente y un destino separados en la compresión de datos, se puede considerar la compresión de datos como una diferenciación de datos con datos de origen vacíos, correspondiendo el archivo comprimido a una diferencia de la nada. Esto es lo mismo que considerar la entropía absoluta (que corresponde a la compresión de datos) como un caso especial de entropía relativa (que corresponde a la diferenciación de datos) sin datos iniciales.
El término compresión diferencial se utiliza para enfatizar la conexión de diferenciación de datos.
La codificación de entropía se originó en la década de 1940 con la introducción de la codificación de Shannon-Fano , [31] la base para la codificación de Huffman que se desarrolló en 1950. [32] La codificación de transformada se remonta a fines de la década de 1960, con la introducción de la codificación de transformada rápida de Fourier (FFT) en 1968 y la transformada de Hadamard en 1969. [33]
Una técnica importante de compresión de imágenes es la transformada de coseno discreta (DCT), una técnica desarrollada a principios de la década de 1970. [16] La DCT es la base de JPEG, un formato de compresión con pérdida que fue introducido por el Joint Photographic Experts Group (JPEG) en 1992. [34] JPEG reduce en gran medida la cantidad de datos necesarios para representar una imagen a costa de una reducción relativamente pequeña en la calidad de la imagen y se ha convertido en el formato de archivo de imagen más utilizado . [35] [36] Su algoritmo de compresión basado en DCT altamente eficiente fue en gran parte responsable de la amplia proliferación de imágenes digitales y fotografías digitales . [37]
Lempel–Ziv–Welch (LZW) es un algoritmo de compresión sin pérdida desarrollado en 1984. Se utiliza en el formato GIF , introducido en 1987. [38] DEFLATE , un algoritmo de compresión sin pérdida especificado en 1996, se utiliza en el formato Portable Network Graphics (PNG). [39]
La compresión wavelet , el uso de wavelets en la compresión de imágenes, comenzó después del desarrollo de la codificación DCT. [40] El estándar JPEG 2000 se introdujo en 2000. [41] A diferencia del algoritmo DCT utilizado por el formato JPEG original, JPEG 2000 utiliza algoritmos de transformada wavelet discreta (DWT). [42] [43] [44] La tecnología JPEG 2000, que incluye la extensión Motion JPEG 2000 , fue seleccionada como el estándar de codificación de vídeo para el cine digital en 2004. [45]
La compresión de datos de audio, que no debe confundirse con la compresión de rango dinámico , tiene el potencial de reducir el ancho de banda de transmisión y los requisitos de almacenamiento de los datos de audio. Los algoritmos de compresión de formatos de compresión de audio se implementan en software como códecs de audio . Tanto en la compresión con pérdida como en la sin pérdida, se reduce la redundancia de información , utilizando métodos como codificación , cuantificación , DCT y predicción lineal para reducir la cantidad de información utilizada para representar los datos sin comprimir.
Los algoritmos de compresión de audio con pérdida proporcionan una mayor compresión y se utilizan en numerosas aplicaciones de audio, incluidas Vorbis y MP3 . Casi todos estos algoritmos se basan en la psicoacústica para eliminar o reducir la fidelidad de los sonidos menos audibles, reduciendo así el espacio necesario para almacenarlos o transmitirlos. [2] [46]
La compensación aceptable entre la pérdida de calidad de audio y el tamaño de transmisión o almacenamiento depende de la aplicación. Por ejemplo, un disco compacto (CD) de 640 MB contiene aproximadamente una hora de música de alta fidelidad sin comprimir , menos de 2 horas de música comprimida sin pérdida o 7 horas de música comprimida en formato MP3 a una velocidad de bits media . Una grabadora de sonido digital puede almacenar normalmente alrededor de 200 horas de voz claramente inteligible en 640 MB. [47]
La compresión de audio sin pérdida produce una representación de datos digitales que se puede decodificar para obtener un duplicado digital exacto del original. Las relaciones de compresión rondan el 50-60 % del tamaño original, [48] lo que es similar a las de la compresión de datos sin pérdida genérica. Los códecs sin pérdida utilizan el ajuste de curvas o la predicción lineal como base para estimar la señal. Los parámetros que describen la estimación y la diferencia entre la estimación y la señal real se codifican por separado. [49]
Existen varios formatos de compresión de audio sin pérdida. Consulta la lista de códecs sin pérdida para obtener una lista. Algunos formatos están asociados a un sistema específico, como Direct Stream Transfer , que se utiliza en Super Audio CD , y Meridian Lossless Packing , que se utiliza en DVD-Audio , Dolby TrueHD , Blu-ray y HD DVD .
Algunos formatos de archivos de audio incluyen una combinación de un formato con pérdida y una corrección sin pérdida; esto permite eliminar la corrección para obtener fácilmente un archivo con pérdida. Entre estos formatos se incluyen MPEG-4 SLS (Scalable to Lossless), WavPack y OptimFROG DualStream .
Cuando se procesan archivos de audio, ya sea para comprimirlos más o para editarlos , es conveniente trabajar a partir de un archivo original sin cambios (sin comprimir o comprimido sin pérdida). El procesamiento de un archivo comprimido con pérdida para algún propósito generalmente produce un resultado final inferior a la creación del mismo archivo comprimido a partir de un archivo original sin comprimir. Además de la edición o mezcla de sonido, la compresión de audio sin pérdida se usa a menudo para el almacenamiento en archivos o como copias maestras.
La compresión de audio con pérdida se utiliza en una amplia gama de aplicaciones. Además de las aplicaciones independientes de reproducción de archivos de audio en reproductores MP3 o computadoras, las transmisiones de audio comprimidas digitalmente se utilizan en la mayoría de los DVD de video, televisión digital, medios de transmisión en Internet , radio por satélite y por cable y, cada vez más, en transmisiones de radio terrestres. La compresión con pérdida generalmente logra una compresión mucho mayor que la compresión sin pérdida, al descartar datos menos críticos según las optimizaciones psicoacústicas . [50]
La psicoacústica reconoce que el sistema auditivo humano no puede percibir todos los datos de una secuencia de audio . La mayoría de las compresiones con pérdida reducen la redundancia al identificar primero los sonidos que no son relevantes para la percepción, es decir, los sonidos que son muy difíciles de escuchar. Algunos ejemplos típicos son las frecuencias altas o los sonidos que se producen al mismo tiempo que sonidos más fuertes. Esos sonidos irrelevantes se codifican con menor precisión o no se codifican en absoluto.
Debido a la naturaleza de los algoritmos con pérdida, la calidad del audio sufre una pérdida de generación digital cuando se descomprime y se vuelve a comprimir un archivo. Esto hace que la compresión con pérdida no sea adecuada para almacenar los resultados intermedios en aplicaciones de ingeniería de audio profesional, como la edición de sonido y la grabación multipista. Sin embargo, los formatos con pérdida como MP3 son muy populares entre los usuarios finales, ya que el tamaño del archivo se reduce a un 5-20% del tamaño original y un megabyte puede almacenar aproximadamente un minuto de música con una calidad adecuada.
Se han desarrollado varios algoritmos de compresión con pérdida patentados que proporcionan un rendimiento de audio de mayor calidad mediante el uso de una combinación de algoritmos con y sin pérdida con tasas de bits adaptativas y relaciones de compresión más bajas. Algunos ejemplos incluyen aptX , LDAC , LHDC , MQA y SCL6.
Para determinar qué información en una señal de audio es perceptualmente irrelevante, la mayoría de los algoritmos de compresión con pérdida utilizan transformadas como la transformada de coseno discreta modificada (MDCT) para convertir las formas de onda muestreadas del dominio del tiempo en un dominio de transformada, típicamente el dominio de la frecuencia . Una vez transformadas, las frecuencias de los componentes se pueden priorizar según lo audibles que sean. La audibilidad de los componentes espectrales se evalúa utilizando el umbral absoluto de audición y los principios de enmascaramiento simultáneo (el fenómeno en el que una señal es enmascarada por otra señal separada por frecuencia) y, en algunos casos, enmascaramiento temporal (donde una señal es enmascarada por otra señal separada por tiempo). Los contornos de igual volumen también se pueden utilizar para ponderar la importancia perceptual de los componentes. Los modelos de la combinación oído-cerebro humano que incorporan tales efectos a menudo se denominan modelos psicoacústicos . [51]
Otros tipos de compresores con pérdida, como la codificación predictiva lineal (LPC) que se utiliza con el habla, son codificadores basados en la fuente. La LPC utiliza un modelo del tracto vocal humano para analizar los sonidos del habla e inferir los parámetros que utiliza el modelo para producirlos momento a momento. Estos parámetros cambiantes se transmiten o almacenan y se utilizan para controlar otro modelo en el decodificador que reproduce el sonido.
Los formatos con pérdida se utilizan a menudo para la distribución de audio en streaming o la comunicación interactiva (como en las redes de telefonía móvil). En dichas aplicaciones, los datos deben descomprimirse a medida que fluyen, en lugar de después de que se haya transmitido todo el flujo de datos. No todos los códecs de audio se pueden utilizar para aplicaciones de streaming. [50]
La latencia se introduce mediante los métodos utilizados para codificar y decodificar los datos. Algunos códecs analizarán un segmento más largo, llamado trama , de los datos para optimizar la eficiencia y luego lo codificarán de una manera que requiera un segmento más grande de datos a la vez para decodificarlo. La latencia inherente del algoritmo de codificación puede ser crítica; por ejemplo, cuando hay una transmisión bidireccional de datos, como en una conversación telefónica, los retrasos significativos pueden degradar seriamente la calidad percibida.
A diferencia de la velocidad de compresión, que es proporcional al número de operaciones requeridas por el algoritmo, aquí la latencia se refiere al número de muestras que deben analizarse antes de que se procese un bloque de audio. En el caso mínimo, la latencia es de cero muestras (por ejemplo, si el codificador/descodificador simplemente reduce el número de bits utilizados para cuantificar la señal). Los algoritmos de dominio temporal como LPC también suelen tener latencias bajas, de ahí su popularidad en la codificación de voz para telefonía. Sin embargo, en algoritmos como MP3, se debe analizar una gran cantidad de muestras para implementar un modelo psicoacústico en el dominio de la frecuencia, y la latencia es del orden de 23 ms.
La codificación de voz es una categoría importante de la compresión de datos de audio. Los modelos perceptivos que se utilizan para estimar qué aspectos del habla puede oír el oído humano son, por lo general, algo diferentes de los que se utilizan para la música. El rango de frecuencias necesario para transmitir los sonidos de una voz humana es normalmente mucho más estrecho que el necesario para la música, y el sonido suele ser menos complejo. Como resultado, el habla se puede codificar con alta calidad utilizando una tasa de bits relativamente baja.
Esto se logra, en general, mediante una combinación de dos enfoques:
Los primeros algoritmos utilizados en la codificación de voz (y en la compresión de datos de audio en general) fueron el algoritmo A-law y el algoritmo μ-law .
Las primeras investigaciones sobre audio se llevaron a cabo en los Laboratorios Bell . Allí, en 1950, C. Chapin Cutler presentó la patente sobre modulación diferencial por código de pulsos (DPCM). [52] En 1973, P. Cummiskey, Nikil S. Jayant y James L. Flanagan introdujeron la DPCM adaptativa (ADPCM) . [53] [54]
La codificación perceptiva se utilizó por primera vez para la compresión de codificación de voz , con codificación predictiva lineal (LPC). [55] Los conceptos iniciales para LPC se remontan al trabajo de Fumitada Itakura ( Universidad de Nagoya ) y Shuzo Saito ( Nippon Telegraph and Telephone ) en 1966. [56] Durante la década de 1970, Bishnu S. Atal y Manfred R. Schroeder en Bell Labs desarrollaron una forma de LPC llamada codificación predictiva adaptativa (APC), un algoritmo de codificación perceptiva que explotaba las propiedades de enmascaramiento del oído humano, seguido a principios de la década de 1980 con el algoritmo de predicción lineal excitada por código (CELP) que logró una relación de compresión significativa para su época. [55] La codificación perceptiva es utilizada por formatos de compresión de audio modernos como MP3 [55] y AAC .
La transformada discreta del coseno (DCT), desarrollada por Nasir Ahmed , T. Natarajan y KR Rao en 1974, [17] proporcionó la base para la transformada discreta del coseno modificada (MDCT) utilizada por los formatos de compresión de audio modernos como MP3, [57] Dolby Digital , [58] [59] y AAC. [60] La MDCT fue propuesta por JP Princen, AW Johnson y AB Bradley en 1987, [61] siguiendo el trabajo anterior de Princen y Bradley en 1986. [62]
El primer sistema de compresión de audio para automatización de transmisiones comerciales del mundo fue desarrollado por Oscar Bonello, profesor de ingeniería de la Universidad de Buenos Aires . [63] En 1983, utilizando el principio psicoacústico del enmascaramiento de bandas críticas publicado por primera vez en 1967, [64] comenzó a desarrollar una aplicación práctica basada en la computadora IBM PC recientemente desarrollada , y el sistema de automatización de transmisiones fue lanzado en 1987 bajo el nombre de Audicom . [65] 35 años después, casi todas las estaciones de radio del mundo usaban esta tecnología fabricada por varias empresas porque el inventor se niega a obtener patentes de invención para su trabajo. Prefiere declararlo de Dominio Público que publicarlo [66]
En febrero de 1988, en la revista Journal on Selected Areas in Communications ( JSAC ) del IEEE, se publicó un compendio de literatura sobre una gran variedad de sistemas de codificación de audio. Si bien había algunos artículos anteriores a esa fecha, esta colección documentaba una variedad completa de codificadores de audio terminados y en funcionamiento, casi todos ellos utilizando técnicas de percepción y algún tipo de análisis de frecuencia y codificación sin ruido de fondo. [67]
El vídeo sin comprimir requiere una velocidad de datos muy alta . Aunque los códecs de compresión de vídeo sin pérdida funcionan con un factor de compresión de 5 a 12, un vídeo con compresión H.264 típica tiene un factor de compresión de entre 20 y 200. [68]
Las dos técnicas de compresión de vídeo clave que se utilizan en los estándares de codificación de vídeo son la DCT y la compensación de movimiento (MC). La mayoría de los estándares de codificación de vídeo, como los formatos H.26x y MPEG , suelen utilizar la codificación de vídeo DCT con compensación de movimiento (compensación de movimiento en bloque). [69] [70]
La mayoría de los códecs de vídeo se utilizan junto con técnicas de compresión de audio para almacenar los flujos de datos separados pero complementarios como un paquete combinado utilizando los denominados formatos contenedores . [71]
Los datos de vídeo pueden representarse como una serie de fotogramas de imágenes fijas. Estos datos suelen contener abundantes cantidades de redundancia espacial y temporal . Los algoritmos de compresión de vídeo intentan reducir la redundancia y almacenar la información de forma más compacta.
La mayoría de los formatos y códecs de compresión de vídeo explotan tanto la redundancia espacial como la temporal (por ejemplo, mediante la codificación de diferencias con compensación de movimiento ). Las similitudes se pueden codificar almacenando únicamente las diferencias entre, por ejemplo, fotogramas adyacentes temporalmente (codificación entre fotogramas) o píxeles adyacentes espacialmente (codificación intrafotograma). La compresión entre fotogramas (una codificación delta temporal ) (re)utiliza datos de uno o más fotogramas anteriores o posteriores en una secuencia para describir el fotograma actual. La codificación intrafotograma , por otro lado, utiliza únicamente datos del interior del fotograma actual, siendo efectivamente una compresión de imagen fija. [51]
Los formatos de codificación de vídeo intracuadro que se utilizan en las videocámaras y en la edición de vídeo emplean una compresión más sencilla que utiliza únicamente la predicción intracuadro. Esto simplifica el software de edición de vídeo, ya que evita una situación en la que un cuadro comprimido hace referencia a datos que el editor ha eliminado.
Por lo general, la compresión de video también emplea técnicas de compresión con pérdida , como la cuantificación , que reducen aspectos de los datos de origen que son (más o menos) irrelevantes para la percepción visual humana al explotar las características perceptivas de la visión humana. Por ejemplo, las pequeñas diferencias de color son más difíciles de percibir que los cambios de brillo. Los algoritmos de compresión pueden promediar un color en estas áreas similares de una manera similar a las utilizadas en la compresión de imágenes JPEG. [10] Como en toda compresión con pérdida, existe un equilibrio entre la calidad del video y la velocidad de bits , el costo de procesamiento de la compresión y descompresión y los requisitos del sistema. El video altamente comprimido puede presentar artefactos visibles o que distraigan .
Otros métodos distintos de los formatos de transformación basados en DCT predominantes, como la compresión fractal , la búsqueda de coincidencias y el uso de una transformada wavelet discreta (DWT), han sido objeto de algunas investigaciones, pero normalmente no se utilizan en productos prácticos. La compresión wavelet se utiliza en codificadores de imágenes fijas y codificadores de vídeo sin compensación de movimiento. El interés en la compresión fractal parece estar disminuyendo, debido a un análisis teórico reciente que muestra una falta comparativa de eficacia de dichos métodos. [51]
En la codificación entre fotogramas, se comparan fotogramas individuales de una secuencia de vídeo de un fotograma al siguiente y el códec de compresión de vídeo registra las diferencias con el fotograma de referencia. Si el fotograma contiene áreas en las que no se ha movido nada, el sistema puede simplemente emitir un comando corto que copia esa parte del fotograma anterior en el siguiente. Si las secciones del fotograma se mueven de forma sencilla, el compresor puede emitir un comando (un poco más largo) que indica al descompresor que desplace, rote, aclare u oscurezca la copia. Este comando más largo sigue siendo mucho más corto que los datos generados por la compresión intrafotograma. Normalmente, el codificador también transmitirá una señal residual que describe las diferencias más sutiles restantes con las imágenes de referencia. Con la codificación por entropía, estas señales residuales tienen una representación más compacta que la señal completa. En las áreas del vídeo con más movimiento, la compresión debe codificar más datos para seguir el ritmo de la mayor cantidad de píxeles que están cambiando. Comúnmente, durante explosiones, llamas, bandadas de animales y en algunas tomas panorámicas, el detalle de alta frecuencia conduce a disminuciones de calidad o a aumentos en la tasa de bits variable .
Muchos métodos de compresión de vídeo de uso común (por ejemplo, los de las normas aprobadas por la ITU-T o la ISO ) comparten la misma arquitectura básica que se remonta a H.261 , que fue estandarizada en 1988 por la ITU-T. Se basan principalmente en la DCT, aplicada a bloques rectangulares de píxeles vecinos, y en la predicción temporal mediante vectores de movimiento , así como también en la actualidad en un paso de filtrado en bucle.
En la etapa de predicción, se aplican diversas técnicas de deduplicación y codificación de diferencias que ayudan a decorrelacionar datos y describir nuevos datos basados en datos ya transmitidos.
A continuación, los bloques rectangulares de los datos de píxeles restantes se transforman al dominio de frecuencia. En la etapa principal de procesamiento con pérdida, los datos del dominio de frecuencia se cuantifican para reducir la información que es irrelevante para la percepción visual humana.
En la última etapa, la redundancia estadística se elimina en gran medida mediante un codificador de entropía que a menudo aplica alguna forma de codificación aritmética.
En una etapa adicional de filtrado en bucle, se pueden aplicar varios filtros a la señal de imagen reconstruida. Al calcular estos filtros también dentro del bucle de codificación, pueden ayudar a la compresión porque se pueden aplicar al material de referencia antes de que se utilice en el proceso de predicción y se pueden guiar utilizando la señal original. El ejemplo más popular son los filtros de desbloqueo que difuminan los artefactos de bloqueo de las discontinuidades de cuantificación en los límites de los bloques de transformación.
En 1967, AH Robinson y C. Cherry propusieron un esquema de compresión de ancho de banda de codificación de longitud de ejecución para la transmisión de señales de televisión analógica. [72] La DCT, que es fundamental para la compresión de video moderna, [73] fue introducida por Nasir Ahmed , T. Natarajan y KR Rao en 1974. [17] [74]
H.261 , que debutó en 1988, introdujo comercialmente la arquitectura básica predominante de la tecnología de compresión de video. [75] Fue el primer formato de codificación de video basado en la compresión DCT. [73] H.261 fue desarrollado por varias empresas, incluidas Hitachi , PictureTel , NTT , BT y Toshiba . [76]
Los estándares de codificación de vídeo más populares utilizados para los códecs han sido los estándares MPEG . MPEG-1 fue desarrollado por el Motion Picture Experts Group (MPEG) en 1991, y fue diseñado para comprimir vídeo de calidad VHS . Fue sucedido en 1994 por MPEG-2 / H.262 , [75] que fue desarrollado por varias empresas, principalmente Sony , Thomson y Mitsubishi Electric . [77] MPEG-2 se convirtió en el formato de vídeo estándar para DVD y televisión digital SD . [75] En 1999, fue seguido por MPEG-4 / H.263 . [75] También fue desarrollado por varias empresas, principalmente Mitsubishi Electric, Hitachi y Panasonic . [78]
H.264/MPEG-4 AVC fue desarrollado en 2003 por varias organizaciones, principalmente Panasonic, Godo Kaisha IP Bridge y LG Electronics . [79] AVC introdujo comercialmente los algoritmos modernos de codificación aritmética binaria adaptativa al contexto (CABAC) y codificación de longitud variable adaptativa al contexto (CAVLC). AVC es el principal estándar de codificación de video para discos Blu-ray , y es ampliamente utilizado por sitios web para compartir videos y servicios de transmisión por Internet como YouTube , Netflix , Vimeo y iTunes Store , software web como Adobe Flash Player y Microsoft Silverlight , y varias transmisiones de HDTV por televisión terrestre y satelital.
Los algoritmos de compresión genética son la última generación de algoritmos sin pérdida que comprimen datos (normalmente secuencias de nucleótidos) utilizando tanto algoritmos de compresión convencionales como algoritmos genéticos adaptados al tipo de datos específico. En 2012, un equipo de científicos de la Universidad Johns Hopkins publicó un algoritmo de compresión genética que no utiliza un genoma de referencia para la compresión. HAPZIPPER fue diseñado para datos de HapMap y logra una compresión de más de 20 veces (reducción del 95 % en el tamaño del archivo), lo que proporciona una compresión de 2 a 4 veces mejor y es menos intensivo computacionalmente que las principales utilidades de compresión de propósito general. Para esto, Chanda, Elhaik y Bader introdujeron la codificación basada en MAF (MAFE), que reduce la heterogeneidad del conjunto de datos al ordenar los SNP por su frecuencia de alelo menor, homogeneizando así el conjunto de datos. [80] Otros algoritmos desarrollados en 2009 y 2013 (DNAZip y GenomeZip) tienen índices de compresión de hasta 1200 veces, lo que permite almacenar 6 mil millones de genomas humanos diploides de pares de bases en 2,5 megabytes (en relación con un genoma de referencia o promediado sobre muchos genomas). [81] [82] Para un punto de referencia en compresores de datos genéticos/genómicos, consulte [83]
Se estima que la cantidad total de datos almacenados en los dispositivos de almacenamiento del mundo podría comprimirse aún más con los algoritmos de compresión existentes por un factor promedio restante de 4,5:1. [84] Se estima que la capacidad tecnológica combinada del mundo para almacenar información proporciona 1.300 exabytes de dígitos de hardware en 2007, pero cuando el contenido correspondiente se comprime de forma óptima, esto solo representa 295 exabytes de información de Shannon . [85]
El objetivo general de la codificación de fuente es explotar o eliminar la redundancia "ineficiente" en la fuente PCM y, de ese modo, lograr una reducción en la tasa de fuente general R.
{{cite book}}
: Mantenimiento CS1: fecha y año ( enlace ){{cite book}}
: Mantenimiento de CS1: falta la ubicación del editor ( enlace ){{citation}}
: CS1 maint: nombres numéricos: lista de autores ( enlace )Básicamente, la codificación wavelet es una variante de la codificación de transformada basada en DCT que reduce o elimina algunas de sus limitaciones. (...) Otra ventaja es que, en lugar de trabajar con bloques de píxeles de 8 × 8, como lo hacen JPEG y otras técnicas DCT basadas en bloques, la codificación wavelet puede comprimir simultáneamente toda la imagen.