En teoría de la información , compresión de datos , codificación 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 en particular tiene o no pérdidas . La compresión sin pérdidas reduce los bits al identificar y eliminar la redundancia estadística . No se pierde información en la compresión sin pérdidas. La compresión con pérdida reduce los bits al eliminar información innecesaria o menos importante. [3] Normalmente, un dispositivo que realiza la compresión de datos se denomina codificador y uno que realiza la inversión del proceso (descompresión) se denomina decodificador.
El proceso de reducir el tamaño de un archivo de datos a menudo se denomina 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 almacenarlos o transmitirlos. [4] La codificación fuente 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. Por ejemplo, se necesitan del orden de 6MiB para representar un único fotograma sin procesar de imágenes de vídeo de 1080p (144MiB/seg@24fps, o 8GiB/min). Los DVD más pequeños sólo contienen 4,7 GiB de datos, por lo que necesitan esquemas de compresión de vídeo para aprovechar al máximo el almacenamiento disponible. Estos esquemas proporcionan una reducción en el almacenamiento o el ancho de banda de transmisión necesario para el contenido de video a costa de requerir CPU , GPU o ASIC personalizados potentes para decodificar la transmisión de video en tiempo real. El diseño de todos los esquemas de compresión de datos implica equilibrar el grado de compresión, la cantidad de distorsión introducida (cuando se utiliza 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érdidas suelen aprovechar la redundancia estadística para representar datos sin perder información , de modo que el proceso sea reversible. La compresión sin pérdidas 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 en 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 de longitud de ejecución ; Existen muchos esquemas para reducir el tamaño del 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, 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 elegido para la mayoría de los sistemas de compresión de uso general. LZW se utiliza en imágenes GIF , programas como PKZIP y dispositivos de hardware como módems. [7] Los métodos LZ utilizan un modelo de compresión basado en tablas donde las entradas de la tabla se sustituyen por cadenas repetidas de datos. 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í suele estar codificada por Huffman . Los códigos basados en gramática como este pueden comprimir entradas altamente repetitivas de manera extremadamente efectiva, 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, archivos de Internet, etc. La tarea básica de los códigos basados en gramática es construir una gramática libre de contexto que deriva de una sola cadena. Otros algoritmos prácticos de compresión gramatical incluyen 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 verse como una forma indirecta de modelado estadístico. [8] 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 más conocido algoritmo de Huffman. 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 usan un número entero de bits, y borra 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 tareas de compresión de datos adaptativos donde las estadísticas varían y dependen del contexto, ya que puede combinarse fácilmente con un modelo adaptativo de la distribución de probabilidad de los datos de entrada. Un ejemplo temprano del uso de codificación aritmética fue una característica opcional (pero no ampliamente utilizada) del estándar de codificación de imágenes JPEG . [9] Desde entonces se ha aplicado en varios otros diseños, incluidos H.263 , H.264/MPEG-4 AVC y HEVC para codificación de vídeo. [10]
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. [11] [12]
A finales de la década de 1980, las imágenes digitales se hicieron más comunes y surgieron estándares para la compresión de imágenes sin pérdidas. A principios de la década de 1990, los métodos de compresión con pérdidas comenzaron a utilizarse ampliamente. [13] En estos esquemas, se acepta cierta pérdida de información, ya que eliminar detalles no esenciales puede ahorrar espacio de almacenamiento. Existe una contrapartida correspondiente entre preservar la información y reducir el tamaño. Los esquemas de compresión de datos con pérdida están diseñados mediante investigaciones sobre cómo las personas perciben los datos en cuestión. Por ejemplo, el ojo humano es más sensible a variaciones sutiles de luminancia que a variaciones de color. La compresión de imágenes JPEG funciona en parte redondeando fragmentos de información no esenciales. [14] Varios formatos de compresión populares explotan estas diferencias de percepción, incluida la psicoacústica para el sonido y la psicovisual para imágenes y videos.
La mayoría de las formas de compresión con pérdida se basan en la codificación por transformada , especialmente la transformada de coseno discreta (DCT). Fue propuesto 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 presentarlo en enero de 1974. [15] [16] 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 ), [17] 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 las cámaras digitales para aumentar las capacidades de almacenamiento. De manera similar, los DVD , Blu-ray y la transmisión de video utilizan formatos de codificación de video 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 psicoacústicos para eliminar 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 uso general. La codificación de voz se utiliza en la telefonía por Internet ; por ejemplo, la compresión de audio se utiliza para extraer CD y los reproductores de audio la decodifican. [8]
La compresión con pérdida puede causar 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 fuente de Shannon ; Las teorías de dominio específico incluyen la teoría de la información algorítmica para la compresión sin pérdidas y la teoría de distorsión de velocidad 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 finales de los años 1940 y principios de los 1950. Otros temas asociados con la compresión incluyen la teoría de la codificación y la inferencia estadística . [18]
Existe una estrecha conexión entre el aprendizaje automático y la compresión. Se puede utilizar un sistema que predice las probabilidades posteriores de una secuencia dada su historia completa para una compresión de datos óptima (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 (encontrando el símbolo que se comprime mejor, teniendo en cuenta el historial anterior). Esta equivalencia se ha utilizado como justificación para utilizar la compresión de datos como punto de referencia para la "inteligencia general". [19] [20] [21]
Una vista alternativa puede mostrar que los algoritmos de compresión asignan implícitamente cadenas en vectores de espacio de características implícitos , y las medidas de similitud basadas en compresión calculan la similitud dentro de estos espacios de características. Para cada compresor C(.) definimos un espacio vectorial asociado ℵ, tal que C(.) asigna una cadena de entrada x, correspondiente a la norma vectorial ||~x||. El espacio impide un examen exhaustivo de los espacios de características subyacentes a todos los algoritmos de compresión; en cambio, los vectores de características optan por examinar tres métodos de compresión sin pérdidas representativos, LZW, LZ77 y PPM. [22]
Según la teoría AIXI , una conexión explicada más directamente en Premio Hutter , 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.
Ejemplos de software de compresión de audio/vídeo impulsado por IA incluyen NVIDIA Maxine , AIVC. [23] 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. [24]
En el aprendizaje automático no supervisado , la agrupación en clústeres de k-medias se puede utilizar para comprimir datos agrupando puntos de datos similares en clústeres. Esta técnica simplifica el manejo de conjuntos de datos extensos que carecen de etiquetas predefinidas y encuentra un uso generalizado en campos como la compresión de imágenes . [25]
La compresión de datos tiene como objetivo reducir el tamaño de los archivos de datos, mejorar la eficiencia del almacenamiento y acelerar la transmisión de datos. La agrupación K-means, un algoritmo de aprendizaje automático no supervisado, se emplea para dividir un conjunto de datos en un número específico de agrupaciones, k, cada una representada por el centroide de sus puntos. Este proceso condensa extensos conjuntos de datos en un conjunto más compacto de puntos representativos. Particularmente beneficioso en el procesamiento de imágenes y señales , la agrupación k-means 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 y al mismo tiempo disminuyendo significativamente el espacio de almacenamiento requerido. [26]
Los modelos de lenguajes grandes (LLM) también son capaces de comprimir datos sin pérdidas, como lo demuestra la investigación de DeepMind con el modelo Chinchilla 70B. Desarrollado por DeepMind, Chinchilla 70B comprimió datos de manera efectiva, superando a los métodos convencionales como Portable Network Graphics (PNG) para imágenes y Free Lossless Audio Codec (FLAC) para audio. Logró la compresión de datos de imagen y audio al 43,4% y 16,4% de sus tamaños originales, respectivamente. [27]
La compresión de datos puede verse como un caso especial de diferenciación de datos . [28] [29] La diferenciación de datos consiste en producir una diferencia dada una fuente y un destino, y el parche reproduce el objetivo dada una fuente y una diferencia. Dado que no existe un origen y un destino separados en la compresión de datos, se puede considerar la compresión de datos como datos que se diferencian de los datos de origen vacíos, correspondiendo el archivo comprimido a una diferencia de nada. Esto es lo mismo que considerar la entropía absoluta (correspondiente a la compresión de datos) como un caso especial de entropía relativa (correspondiente 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 , [30] la base de la codificación de Huffman que se desarrolló en 1950. [31] La codificación por transformada se remonta a finales de la década de 1960, con la introducción de la transformada rápida de Fourier (FFT ) codificación en 1968 y la transformada de Hadamard en 1969. [32]
Una técnica importante de compresión de imágenes es la transformada de coseno discreto (DCT), una técnica desarrollada a principios de la década de 1970. [15] 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. [33] JPEG reduce en gran medida la cantidad de datos necesarios para representar una imagen a costa de un coste relativamente bajo. pequeña reducción en la calidad de la imagen y se ha convertido en el formato de archivo de imagen más utilizado . [34] [35] Su algoritmo de compresión basado en DCT altamente eficiente fue en gran medida responsable de la amplia proliferación de imágenes y fotografías digitales . [36]
Lempel–Ziv–Welch (LZW) es un algoritmo de compresión sin pérdidas desarrollado en 1984. Se utiliza en el formato GIF , introducido en 1987. [37] DEFLATE , un algoritmo de compresión sin pérdidas especificado en 1996, se utiliza en Portable Network Graphics ( PNG) formato. [38]
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. [39] El estándar JPEG 2000 se introdujo en 2000. [40] A diferencia del algoritmo DCT utilizado por el formato JPEG original, JPEG 2000 utiliza algoritmos de transformada wavelet discreta (DWT). [41] [42] [43] La tecnología JPEG 2000, que incluye la extensión Motion JPEG 2000 , fue seleccionada como estándar de codificación de vídeo para cine digital en 2004. [44]
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 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] [45]
El equilibrio 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érdidas o 7 horas de música comprimida en formato MP3 a una velocidad de bits media . Una grabadora de sonido digital normalmente puede almacenar alrededor de 200 horas de voz claramente inteligible en 640 MB. [46]
La compresión de audio sin pérdidas produce una representación de datos digitales que se pueden decodificar en un duplicado digital exacto del original. Los índices de compresión rondan el 50-60% del tamaño original, [47], lo cual es similar a los de la compresión de datos genérica sin pérdidas. Los códecs sin pérdidas 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. [48]
Existen varios formatos de compresión de audio sin pérdidas. Consulte la lista de códecs sin pérdidas para obtener una lista. Algunos formatos están asociados a un sistema distinto, como Direct Stream Transfer , utilizado en Super Audio CD y Meridian Lossless Packing , utilizado en DVD-Audio , Dolby TrueHD , Blu-ray y HD DVD .
Algunos formatos de archivos de audio presentan una combinación de formato con pérdida y corrección sin pérdida; esto permite eliminar la corrección para obtener fácilmente un archivo con pérdida. Dichos formatos incluyen MPEG-4 SLS (escalable a sin pérdida), WavPack y OptimFROG DualStream .
Cuando se van a procesar archivos de audio, ya sea mediante una mayor compresión o para editarlos , es deseable trabajar desde un original sin cambios (sin comprimir o comprimido sin pérdidas). El procesamiento de un archivo comprimido con pérdidas para algún propósito generalmente produce un resultado final inferior a la creación del mismo archivo comprimido a partir de un original sin comprimir. Además de la edición o mezcla de sonido, la compresión de audio sin pérdidas se utiliza a menudo para el almacenamiento de 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 solo 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 por Internet , radio satelital y por cable y, cada vez más, en transmisiones de radio terrestre. La compresión con pérdida normalmente logra una compresión mucho mayor que la compresión sin pérdidas, al descartar datos menos críticos basándose en optimizaciones psicoacústicas . [49]
La psicoacústica reconoce que no todos los datos de un flujo de audio pueden ser percibidos por el sistema auditivo humano . La mayor parte de la compresión con pérdida reduce la redundancia al identificar primero los sonidos perceptivamente irrelevantes, es decir, los sonidos que son muy difíciles de escuchar. Los ejemplos típicos incluyen frecuencias altas o sonidos que ocurren 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 un archivo se descomprime y se recomprime. Esto hace que la compresión con pérdida no sea adecuada para almacenar resultados intermedios en aplicaciones profesionales de ingeniería de audio, como edición de sonido y 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 al 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 patentados de compresión con pérdida que proporcionan un rendimiento de audio de mayor calidad mediante el uso de una combinación de algoritmos con y sin pérdida con velocidades de bits adaptativas y relaciones de compresión más bajas. Los ejemplos incluyen aptX , LDAC , LHDC , MQA y SCL6.
Para determinar qué información en una señal de audio es perceptivamente irrelevante, la mayoría de los algoritmos de compresión con pérdida utilizan transformaciones como la transformada de coseno discreto modificado (MDCT) para convertir formas de onda muestreadas en el dominio del tiempo en un dominio de transformación, generalmente el dominio de la frecuencia . Una vez transformadas, las frecuencias de los componentes se pueden priorizar según su nivel de audibilidad. 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 (en el que una señal es enmascarada por otra señal). separados por el tiempo. También se pueden utilizar contornos de igual volumen para sopesar 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 . [50]
Otros tipos de compresores con pérdida, como la codificación predictiva lineal (LPC) que se utiliza con la voz, son codificadores basados en fuente. LPC utiliza un modelo del tracto vocal humano para analizar los sonidos del habla e inferir los parámetros utilizados por 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 comunicaciones interactivas (como en redes de telefonía móvil). En tales 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 transmisión. [49]
La latencia la introducen los métodos utilizados para codificar y decodificar los datos. Algunos códecs analizarán un segmento más largo, llamado marco , 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, retrasos importantes pueden degradar gravemente 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 procesar un bloque de audio. En el caso mínimo, la latencia es cero muestras (por ejemplo, si el codificador/decodificador simplemente reduce el número de bits utilizados para cuantificar la señal). Los algoritmos en el dominio del tiempo, 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, es necesario 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 de percepción utilizados para estimar qué aspectos del habla puede oír el oído humano son generalmente algo diferentes de los utilizados para la música. La gama de frecuencias necesarias para transmitir los sonidos de una voz humana es normalmente mucho más estrecha que la necesaria para la música, y el sonido suele ser menos complejo. Como resultado, la voz se puede codificar con alta calidad utilizando una velocidad de bits relativamente baja.
En general, esto se logra mediante alguna 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 de ley A y el algoritmo de ley μ .
Las primeras investigaciones sobre audio se llevaron a cabo en Bell Labs . Allí, en 1950, C. Chapin Cutler presentó la patente sobre la modulación diferencial de impulsos codificados (DPCM). [51] En 1973, P. Cummiskey, Nikil S. Jayant y James L. Flanagan introdujeron el DPCM adaptativo (ADPCM) . [52] [53]
La codificación perceptiva se utilizó por primera vez para la compresión de la codificación del habla , con codificación predictiva lineal (LPC). [54] Los conceptos iniciales para LPC se remontan al trabajo de Fumitada Itakura ( Universidad de Nagoya ) y Shuzo Saito ( Nippon Telegraph and Telephone ) en 1966. [55] Durante la década de 1970, Bishnu S. Atal y Manfred R. Schroeder en Bell Labs desarrolló una forma de LPC llamada codificación predictiva adaptativa (APC), un algoritmo de codificación perceptual 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 es la hora. [54] La codificación perceptual es utilizada por formatos de compresión de audio modernos como MP3 [54] y AAC .
La transformada de coseno discreta (DCT), desarrollada por Nasir Ahmed , T. Natarajan y KR Rao en 1974, [16] proporcionó la base para la transformada de coseno discreta modificada (MDCT) utilizada por los formatos de compresión de audio modernos como MP3, [56] Dolby Digital , [57] [58] y AAC. [59] La TCMD fue propuesta por JP Princen, AW Johnson y AB Bradley en 1987, [60] siguiendo trabajos anteriores de Princen y Bradley en 1986. [61]
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 . [62] En 1983, utilizando el principio psicoacústico del enmascaramiento de bandas críticas publicado por primera vez en 1967, [63] comenzó a desarrollar una aplicación práctica basada en la computadora PC IBM recientemente desarrollada , y el sistema de automatización de transmisiones se lanzó en 1987 bajo el nombre Audicom . [64] 35 años después, casi todas las estaciones de radio del mundo utilizaban 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 publicándolo [65]
En febrero de 1988 se publicó un compendio de literatura para una gran variedad de sistemas de codificación de audio en el Journal on Selected Areas in Communications ( JSAC ) del IEEE. Si bien hubo algunos artículos anteriores a esa época, esta colección documentó una variedad completa de sistemas terminados y en funcionamiento. codificadores de audio, casi todos ellos utilizando técnicas de percepción y algún tipo de análisis de frecuencia y codificación silenciosa de fondo. [66]
El vídeo sin comprimir requiere una velocidad de datos muy alta . Aunque los códecs de compresión de vídeo sin pérdidas funcionan con un factor de compresión de 5 a 12, un vídeo típico de compresión con pérdida H.264 tiene un factor de compresión de entre 20 y 200. [67]
Las dos técnicas clave de compresión de video utilizadas en los estándares de codificación de video son DCT y 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 codificación de vídeo DCT con compensación de movimiento (compensación de movimiento en bloque). [68] [69]
La mayoría de los códecs de vídeo se utilizan junto con técnicas de compresión de audio para almacenar flujos de datos separados pero complementarios como un paquete combinado utilizando los llamados formatos contenedores . [70]
Los datos de vídeo se pueden representar 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 códecs y formatos de compresión de vídeo aprovechan la redundancia tanto espacial como temporal (por ejemplo, mediante codificación diferencial con compensación de movimiento ). Las similitudes pueden codificarse almacenando únicamente diferencias entre, por ejemplo, cuadros temporalmente adyacentes (codificación entre cuadros) o píxeles espacialmente adyacentes (codificación dentro de cuadros). 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 intracuadro , por otro lado, utiliza solo datos dentro del cuadro actual, siendo efectivamente una compresión de imágenes fijas. [50]
Los formatos de codificación de vídeo intracuadro utilizados en videocámaras y edición de vídeo emplean una compresión más simple que utiliza únicamente predicción intracuadro. Esto simplifica el software de edición de vídeo, ya que evita una situación en la que un fotograma comprimido haga referencia a datos que el editor ha eliminado.
Por lo general, la compresión de vídeo emplea además 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 perceptuales 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 manera similar a los utilizados en la compresión de imágenes JPEG. [9] Como en toda compresión con pérdida, existe un equilibrio entre la calidad del vídeo y la velocidad de bits , el costo de procesar la compresión y descompresión y los requisitos del sistema. Los vídeos muy comprimidos pueden presentar artefactos visibles o que distraigan .
Otros métodos distintos de los formatos de transformación predominantes basados en DCT, 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 análisis teóricos recientes que muestran una falta comparativa de efectividad de tales métodos. [50]
En la codificación entre fotogramas, los fotogramas individuales de una secuencia de vídeo se comparan 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 marco contiene áreas donde no se ha movido nada, el sistema puede simplemente emitir un comando corto que copia esa parte del marco anterior en el siguiente. Si las secciones del marco se mueven de manera simple, el compresor puede emitir un comando (un poco más largo) que le indica al descompresor que desplace, gire, aclare u oscurezca la copia. Este comando más largo sigue siendo mucho más corto que los datos generados por la compresión intracuadro. Normalmente, el codificador también transmitirá una señal residual que describe las diferencias más sutiles restantes con respecto a las imágenes de referencia. Utilizando codificación entrópica, estas señales residuales tienen una representación más compacta que la señal completa. En áreas de video con más movimiento, la compresión debe codificar más datos para mantenerse al día con la mayor cantidad de píxeles que están cambiando. Comúnmente durante explosiones, llamas, bandadas de animales y en algunas tomas panorámicas, los detalles de alta frecuencia provocan disminuciones de la calidad o aumentos en la tasa de bits variable .
Muchos métodos de compresión de vídeo comúnmente utilizados (por ejemplo, los de los estándares aprobados por ITU-T o ISO ) comparten la misma arquitectura básica que se remonta a H.261 , que fue estandarizada en 1988 por 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 en la actualidad también 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 descorrelacionar los datos y describir nuevos datos basados en datos ya transmitidos.
Luego, los bloques rectangulares de datos de píxeles restantes se transforman al dominio de la frecuencia. En la etapa principal de procesamiento con pérdidas, los datos en el dominio de la 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 pueden aplicarse al material de referencia antes de que se utilice en el proceso de predicción y pueden guiarse 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 del bloque 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ógicas. [71] La DCT, que es fundamental para la compresión de vídeo moderna, [72] fue introducida por Nasir Ahmed , T. Natarajan y KR Rao en 1974. [16] [73]
H.261 , que debutó en 1988, introdujo comercialmente la arquitectura básica predominante de la tecnología de compresión de vídeo. [74] Fue el primer formato de codificación de vídeo basado en la compresión DCT. [72] H.261 fue desarrollado por varias empresas, incluidas Hitachi , PictureTel , NTT , BT y Toshiba . [75]
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 Motion Picture Experts Group (MPEG) en 1991 y fue diseñado para comprimir vídeo con calidad VHS . Fue sucedido en 1994 por MPEG-2 / H.262 , [74] que fue desarrollado por varias empresas, principalmente Sony , Thomson y Mitsubishi Electric . [76] MPEG-2 se convirtió en el formato de vídeo estándar para la televisión digital DVD y SD . [74] En 1999, le siguió MPEG-4 / H.263 . [74] También fue desarrollado por varias empresas, principalmente Mitsubishi Electric, Hitachi y Panasonic . [77]
H.264/MPEG-4 AVC fue desarrollado en 2003 por varias organizaciones, principalmente Panasonic, Godo Kaisha IP Bridge y LG Electronics . [78] 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 vídeo para discos Blu-ray y se utiliza ampliamente en sitios web para compartir vídeos y servicios de streaming de Internet como YouTube , Netflix , Vimeo y iTunes Store , software web como Adobe Flash Player y Microsoft Silverlight , y varios Emisiones HDTV a través de televisión terrestre y satelital.
Los algoritmos de compresión genética son la última generación de algoritmos sin pérdidas 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), proporcionando una compresión de 2 a 4 veces mejor y es menos intensivo desde el punto de vista computacional que las principales utilidades de compresión de uso general. Para ello, Chanda, Elhaik y Bader introdujeron la codificación basada en MAF (MAFE), que reduce la heterogeneidad del conjunto de datos al clasificar los SNP por su frecuencia de alelo menor, homogeneizando así el conjunto de datos. [79] Otros algoritmos desarrollados en 2009 y 2013 (DNAZip y GenomeZip) tienen relaciones 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 promediados sobre muchos genomas). . [80] [81] Para obtener una referencia en compresores de datos genéticos/genómicos, consulte [82]
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 en un factor promedio restante de 4,5:1. [83] 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 manera óptima, esto sólo representa 295 exabytes de información de Shannon . [84]
El objetivo amplio de la codificación fuente es explotar o eliminar la redundancia "ineficiente" en la fuente PCM y así lograr una reducción en la tasa de fuente general R.
{{cite book}}
: Mantenimiento CS1: falta el editor de la ubicación ( enlace ){{citation}}
: Mantenimiento CS1: nombres numéricos: lista de autores ( enlace )Básicamente, la codificación wavelet es una variante de la codificación por 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.