¿Cuál es el límite de datos de compresión sin pérdida? (si existe tal límite)


14

Últimamente he estado tratando con algoritmos relacionados con la compresión, y me preguntaba cuál es la mejor relación de compresión que puede lograrse mediante la compresión de datos sin pérdida.

Hasta ahora, la única fuente que pude encontrar sobre este tema fue Wikipedia:

La compresión sin pérdida de datos digitalizados como video, película digitalizada y audio conserva toda la información, pero rara vez puede ser mucho mejor que la compresión 1: 2 debido a la entropía intrínseca de los datos.

Desafortunadamente, el artículo de Wikipedia no contiene una referencia o cita para respaldar esta afirmación. No soy un experto en compresión de datos, por lo que agradecería cualquier información que pueda proporcionar sobre este tema, o si pudiera señalarme una fuente más confiable que Wikipedia.


1
No estoy seguro si la informática teórica es el mejor sitio para hacer este tipo de preguntas. Siéntase libre de votar sobre cerrar o migrar esta pregunta a un sitio más adecuado, si es necesario.
Auron

3
Esto puede ser lo que estás buscando: en.wikipedia.org/wiki/Entropy_encoding . La palabra clave es entropía .
Hsien-Chih Chang 張顯 之

3
No sé cuál sería un sitio más adecuado, desafortunadamente. El error de cuantificación es una fuente de entropía que probablemente impediría grandes relaciones de compresión.
Peter Shor

2
¿Necesita compresión de datos sin pérdida para qué tipo de datos? Imágenes, música, habla, datos genéricos, ...? Sin embargo, para una introducción de alto nivel, visite data-compression.com/theory.html (y recursos al final de las páginas)
Marzio De Biasi

2
@Vor Images. Más específicamente, imágenes médicas. Echaré un vistazo a esa página. Gracias.
Auron

Respuestas:


27

No estoy seguro de si alguien ha explicado aún por qué el número mágico parece ser exactamente 1: 2 y no, por ejemplo, 1: 1.1 o 1:20.

Una razón es que, en muchos casos típicos, casi la mitad de los datos digitalizados es ruido , y el ruido (por definición) no se puede comprimir.

Hice un experimento muy simple:

  • Tomé una tarjeta gris . Para un ojo humano, se ve como una simple pieza neutral de cartón gris. En particular, no hay información .

  • Y luego tomé un escáner normal, exactamente el tipo de dispositivo que la gente podría usar para digitalizar sus fotos.

  • Escaneé la tarjeta gris. (En realidad, escaneé la tarjeta gris junto con una tarjeta postal. La tarjeta postal estaba allí para verificar la cordura para poder asegurarme de que el software del escáner no haga nada extraño, como agregar contraste automáticamente cuando ve la tarjeta gris sin características).

  • Recorté una parte de 1000x1000 píxeles de la tarjeta gris y la convertí a escala de grises (8 bits por píxel).

Lo que tenemos ahora debería ser un buen ejemplo de lo que sucede cuando estudias una parte sin rasgos distintivos de una foto escaneada en blanco y negro , por ejemplo, cielo despejado. En principio, no debería haber exactamente nada que ver.

Sin embargo, con un aumento mayor, en realidad se ve así:

Cultivo 30x30, ampliado por factor 10

No hay un patrón claramente visible, pero no tiene un color gris uniforme. Parte de esto es probablemente causado por las imperfecciones de la tarjeta gris, pero supongo que la mayor parte es simplemente ruido producido por el escáner (ruido térmico en la celda del sensor, amplificador, convertidor A / D, etc.). Se parece bastante al ruido gaussiano; Aquí está el histograma (en escala logarítmica ):

histograma

Ahora, si suponemos que cada píxel tiene su sombra seleccionada en esta distribución, ¿cuánta entropía tenemos? Mi script de Python me dijo que tenemos hasta 3.3 bits de entropía por píxel . Y eso es mucho ruido.

Si este fuera realmente el caso, implicaría que no importa qué algoritmo de compresión usemos, el mapa de bits de 1000x1000 píxeles se comprimiría, en el mejor de los casos, en un archivo de 412500 bytes. Y lo que sucede en la práctica: obtuve un archivo PNG de 432018 bytes, bastante cerca.


Si generalizamos demasiado, parece que no importa qué fotos en blanco y negro escanee con este escáner, obtendré la suma de lo siguiente:

  • información "útil" (si la hay),
  • ruido, aprox. 3 bits por píxel.

Ahora, incluso si su algoritmo de compresión comprime la información útil en << 1 bits por píxel, seguirá teniendo hasta 3 bits por píxel de ruido incompresible. Y la versión sin comprimir es de 8 bits por píxel. Por lo tanto, la relación de compresión estará en el estadio de 1: 2, sin importar lo que haga.


Otro ejemplo, con un intento de encontrar condiciones sobre idealizadas:

  • Una cámara réflex digital moderna, que utiliza la configuración de sensibilidad más baja (menos ruido).
  • Una toma desenfocada de una tarjeta gris (incluso si hubiera alguna información visible en la tarjeta gris, sería borrosa).
  • Conversión de archivo RAW en una imagen en escala de grises de 8 bits, sin agregar ningún contraste. Usé configuraciones típicas en un convertidor RAW comercial. El convertidor intenta reducir el ruido por defecto. Además, estamos guardando el resultado final como un archivo de 8 bits: en esencia, estamos tirando los bits de orden más bajo de las lecturas sin procesar del sensor.

¿Y cuál fue el resultado final? Se ve mucho mejor que lo que obtuve del escáner; el ruido es menos pronunciado y no hay exactamente nada que ver. Sin embargo, el ruido gaussiano está ahí:

Cultivo 30x30, ampliado por factor 10 histograma

¿Y la entropía? 2.7 bits por píxel . Tamaño del archivo en la práctica? 344923 bytes para 1M píxeles. En el mejor de los casos, con algunas trampas, empujamos la relación de compresión a 1: 3.


Por supuesto, todo esto no tiene exactamente nada que ver con la investigación de TCS, pero creo que es bueno tener en cuenta lo que realmente limita la compresión de datos digitalizados del mundo real. Los avances en el diseño de algoritmos de compresión más sofisticados y la potencia de CPU sin procesar no ayudarán; Si desea guardar todo el ruido sin pérdidas, no puede hacerlo mucho mejor que 1: 2.


3
¡frio! Si el ruido es gaussiano, creo que proyectar en los primeros k vectores singulares (o una técnica similar más sofisticada) eliminaría mucho ruido. Una búsqueda rápida en Google Académico reveló un artículo de M. Elad y M. Aharon, que utiliza el método de proyección + algunos trucos de estadísticas bayesianas: ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4011956 . supuestamente, en 2006 fue "estado del arte". Por supuesto, no es sin pérdidas, pero los datos de Jukka muestran que si insiste en un tamaño pequeño, debe perder al menos el ruido.
Sasho Nikolov

Sus ejemplos son solo sobre la compresión sin pérdida de imágenes . De mala gana, le otorgaré su generalización a cualquier información proveniente de sensores físicos (sonido, imagen, video, pero probablemente con un factor distinto), pero hay (¿muchos?) Otros campos donde se aplica la compresión, con una relación mucho mejor que 1: 2 (me viene a la mente el lenguaje natural), porque hay menos ruido.
Jeremy

2
@Jukka: +1: ¡Hermoso experimento! @ Sasho: para las imágenes médicas, la sabiduría convencional es que no se puede perder nada, incluso si es muy probable que solo sea ruido.
Peter Shor

2
Muy bonita y clara explicación!
Marzio De Biasi

2
Un comentario más: esto es realmente inevitable para las imágenes médicas. Si no usa la precisión suficiente para tener una cantidad sustancial de este ruido en las imágenes médicas, entonces probablemente esté perdiendo algunos detalles relevantes reales, que realmente querría conservar.
Peter Shor

16

¿Ya sabes sobre el teorema de codificación silenciosa de Shannon ? Este teorema establece límites teóricos sobre la compresión sin pérdidas. Algunos de los comentarios de los demás parecen suponer que usted conoce este teorema, pero a partir de la pregunta, creo que puede ser la respuesta que está buscando.


No sabía sobre ese teorema. Supongo que la afirmación de Wikipedia no es exactamente correcta, ya que la relación de compresión alcanzable depende de la entropía de los datos a comprimir.
Auron

Creo que es realmente bastante difícil determinar la entropía intrínseca de las imágenes: es mucho más fácil si los datos son lineales en lugar de 2-D.
Peter Shor

Entonces, ¿cuál sería la relación de compresión máxima para un texto generado aleatoriamente (uniforme)?
skan

11

norte>0 0

  1. norte

  2. La solución práctica común es usar 8 bits, si los únicos enteros que codificará son todos entre 1 y 256 (generalice a 16, 32 y 64 bits si lo desea).

  3. norte+1nortenorte

  4. Iniciar sesión2norteIniciar sesión2norte+1norteIniciar sesión2norte-1Iniciar sesión2norte2Iniciar sesión2norte-1nortelgnorte=max(1,Iniciar sesión2norte)

  5. 2Iniciar sesión2norte-1

  6. KKNo es computable. Los programas de auto delimitación de Levin ofrecen una solución fácil a esta noción , donde considera solo los programas con un tiempo de ejecución limitado (por ejemplo, dentro de un factor constante de la longitud de la instancia original, que es un límite inferior en el complejidad del algoritmo que necesita escribir cada símbolo).

Hay una comunidad entera que trabaja sobre la complejidad de Kolmogorov y sus variantes, y otra comunidad que trabaja en la compresión sin pérdidas (el ejemplo en enteros que usé tiene equivalente en muchos otros tipos de datos), apenas rasqué la superficie, y otros podrían agregar precisiones (Kolmogorov realmente no es mi especialidad), pero espero que esto pueda ayudarlo a aclarar su pregunta, si no necesariamente le dará la respuesta que esperaba :)


7

(solo una extensión de mi comentario)

(Como señaló Joe en su respuesta) Shannon, en su artículo de 1948, " Una teoría matemática de la comunicación ", formuló la teoría de la compresión de datos y estableció que existe un límite fundamental para la compresión de datos sin pérdida. Este límite, denominado tasa de entropía, se denota por H. El valor exacto de H depende de la fuente de información, más específicamente, la naturaleza estadística de la fuente. Es posible comprimir la fuente, sin pérdidas, con una tasa de compresión cercana a H. Es matemáticamente imposible hacerlo mejor que H.

Sin embargo, algunas clases de imágenes (por ejemplo, imágenes médicas en escala de grises) sin bordes de alto contraste y con transiciones de nivel suaves pueden comprimirse (no de manera tan eficiente).

JPEG-LS y JPEG2000 parecen ser los estándares para el almacenamiento sin pérdida de imágenes médicas. Consulte esta tabla para ver una comparación de las relaciones de compresión (el JPEG-LS logra una compresión ligeramente mejor).

Usando la "compresión de imágenes médicas sin pérdida" encontré los siguientes artículos que pueden ayudarlo:

Una encuesta reciente (2011) sobre técnicas de compresión de imágenes médicas: Técnicas de compresión de imágenes médicas bidimensionales: una encuesta

... Este documento presenta una descripción general de varias técnicas de compresión basadas en DCT, DWT, ROI y redes neuronales para imágenes médicas bidimensionales (2D).

Una presentación detallada de dos algoritmos de compresión estándar sin pérdida: JPEG-LS y JPG2000 en modo sin pérdida: Compresión sin pérdida de imágenes médicas en escala de grises: efectividad de los enfoques tradicionales y de vanguardia

... Se probaron tres mil seiscientos setenta y nueve (3,679) imágenes en escala de grises de un solo cuadro de múltiples regiones anatómicas, modalidades y proveedores. ...

Otra encuesta: una encuesta sobre técnicas médicas contemporáneas de compresión de imágenes

EDITAR

Quizás todavía te estés preguntando "¿Qué demonios es la entropía de una imagen?" ... OK, es la cantidad de información contenida en la imagen ... pero para comprenderla mejor, debe leer algo sobre las 3 fases que generalmente se usan en la compresión de imágenes :

  • transformación (por ejemplo, Transformación discreta de ondículas)
  • cuantización
  • codificación de entropía

Puede usar Google para buscar un tutorial o libro sobre compresión de imágenes (por ejemplo, un tutorial rápido ), o tratar de ver un video técnico en línea (por ejemplo, Lección 16 - Introducción a la codificación de imágenes y videos ).


7

Piense en un archivo como una cadena.

Nunca se puede hacer mejor que la complejidad de Kolmogorov de una cadena (esto es por la definición de la complejidad de Komogorov).

Arreglar una longitud de cadena. Así que ahora solo estamos viendo cadenas de longitud n.

La mitad de todas estas cadenas se pueden comprimir como máximo 1 bit. 1/4 de todas las cadenas se pueden comprimir como máximo 2 bits. 1/8 de todas estas cadenas se pueden comprimir como máximo 3 bits.

Entonces, ¿qué fracción de cadenas (imágenes, archivos, etc.) se puede comprimir en una proporción de 2: 1, muy, muy pocas. Entonces, ¿por qué funciona la compresión? Debido a que casi todos los datos que las personas reales realmente están tratando de comprimir están altamente estructurados, no parece un archivo aleatorio. Cuanto más aleatoria se vean los datos, más difícil de comprimir. Ellos van de la mano. La mayoría de las cadenas se ven al azar.

Para ver esto en acción, genere un archivo aleatorio usando algún proceso aleatorio. Me refiero a un archivo muy, muy aleatorio. Ahora intenta comprimirlo usando tu algoritmo de compresión favorito. Permanecerá del mismo tamaño o se hará más grande, casi todo el tiempo.

Por otro lado, hay cuerdas altamente compresibles. Tome la siguiente cadena: 100000..000 (1 seguido de un millón de ceros). La descripción del mismo encaja en la oración anterior, y una computadora podría reconstruirlo a partir de esa descripción (o una muy parecida). Sin embargo, esa descripción no se acerca a un millón de dígitos.

El hecho es que las cadenas con esa propiedad (de ser altamente compresible) son extremadamente raras entre todas las cadenas posibles. El hecho secundario es que casi todos los datos generados por humanos son supercompresibles porque están muy estructurados.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.