Qual è il limite dei dati di compressione senza perdita? (se esiste un limite del genere)


14

Ultimamente ho avuto a che fare con algoritmi relativi alla compressione e mi chiedevo quale sia il miglior rapporto di compressione che può essere raggiunto con la compressione dei dati senza perdita di dati.

Finora, l'unica fonte che ho potuto trovare su questo argomento era la Wikipedia:

La compressione senza perdita di dati digitalizzati come video, film digitalizzato e audio conserva tutte le informazioni, ma raramente può fare molto meglio della compressione 1: 2 a causa dell'entropia intrinseca dei dati.

Sfortunatamente, l'articolo di Wikipedia non contiene riferimenti o citazioni a supporto di questa affermazione. Non sono un esperto di compressione dei dati, quindi apprezzerei tutte le informazioni che puoi fornire su questo argomento o se potessi indicarmi una fonte più affidabile di Wikipedia.


1
Non sono sicuro che Theoretical Computer Science sia il sito migliore per porre questo tipo di domande. Sentiti libero di votare in chiusura o di migrare questa domanda su un sito più adatto, se necessario.
Auron,

3
Questo potrebbe essere quello che stai cercando: en.wikipedia.org/wiki/Entropy_encoding . La parola chiave è entropia .
Hsien-Chih Chang 張顯 之

3
Purtroppo non so quale sarebbe un sito più adatto. L' errore di quantizzazione è una fonte di entropia che probabilmente precluderebbe ampi rapporti di compressione.
Peter Shor,

2
Hai bisogno di una compressione senza perdita di dati per quale tipo di dati? Immagini, musica, parole, dati generici, ...? Tuttavia, per un'introduzione di alto livello consultare data-compression.com/theory.html (e risorse in fondo alle pagine)
Marzio De Biasi,

2
@Vor Immagini. Più specificamente, immagini mediche. Dò un'occhiata a quella pagina. Grazie.
Auron,

Risposte:


27

Non sono sicuro se qualcuno abbia ancora spiegato perché il numero magico sembra essere esattamente 1: 2 e non, ad esempio, 1: 1.1 o 1:20.

Una ragione è che in molti casi tipici quasi la metà dei dati digitalizzati è rumore e il rumore (per definizione) non può essere compresso.

Ho fatto un esperimento molto semplice:

  • Ho preso una carta grigia . A un occhio umano, sembra un semplice pezzo neutro di cartone grigio. In particolare, non ci sono informazioni .

  • E poi ho preso uno scanner normale, esattamente il tipo di dispositivo che le persone potrebbero usare per digitalizzare le loro foto.

  • Ho scannerizzato la carta grigia. (In realtà, ho scansionato la carta grigia insieme a una cartolina. La cartolina era lì per il controllo della sanità mentale in modo da poter essere sicuro che il software dello scanner non facesse nulla di strano, come aggiungere automaticamente contrasto quando vede la carta grigia senza caratteristiche.)

  • Ho ritagliato una parte di 1000x1000 pixel della scheda grigia e l'ho convertita in scala di grigi (8 bit per pixel).

Ciò che abbiamo ora dovrebbe essere un buon esempio di ciò che accade quando studi una parte senza caratteristiche di una foto in bianco e nero scansionata , ad esempio il cielo limpido. In linea di principio, non ci dovrebbe essere esattamente nulla da vedere.

Tuttavia, con un ingrandimento maggiore, in realtà si presenta così:

Ritaglio 30x30, ingrandito dal fattore 10

Non esiste un motivo chiaramente visibile, ma non ha un colore grigio uniforme. Probabilmente una parte è causata dalle imperfezioni della scheda grigia, ma suppongo che la maggior parte sia semplicemente un rumore prodotto dallo scanner (rumore termico nella cella del sensore, amplificatore, convertitore A / D, ecc.). Sembra praticamente un rumore gaussiano; ecco l'istogramma (in scala logaritmica ):

istogramma

Ora, se assumiamo che ogni pixel abbia la sua tonalità scelta tra questa distribuzione, quanta entropia abbiamo? Il mio script Python mi ha detto che abbiamo fino a 3,3 bit di entropia per pixel . E questo è molto rumore.

Se così fosse, ciò implicherebbe che, indipendentemente dall'algoritmo di compressione che utilizziamo, la bitmap da 1000x1000 pixel sarebbe compressa, nel migliore dei casi, in un file di 412500 byte. E cosa succede in pratica: ho un file PNG da 432018 byte, abbastanza vicino.


Se eseguiamo una generalizzazione eccessiva, sembra che, indipendentemente dalle foto in bianco e nero che eseguo la scansione con questo scanner, otterrò la somma di quanto segue:

  • informazioni "utili" (se presenti),
  • rumore, ca. 3 bit per pixel.

Ora, anche se il tuo algoritmo di compressione comprime le informazioni utili in << 1 bit per pixel, avrai comunque fino a 3 bit per pixel di rumore incomprimibile. E la versione non compressa è di 8 bit per pixel. Quindi il rapporto di compressione sarà nel campo di gioco di 1: 2, qualunque cosa tu faccia.


Un altro esempio, con un tentativo di trovare condizioni troppo idealizzate:

  • Una moderna fotocamera DSLR, utilizzando l'impostazione di sensibilità più bassa (meno rumore).
  • Una foto sfocata di una carta grigia (anche se nella carta grigia fossero presenti informazioni visibili, questa verrebbe sfocata).
  • Conversione del file RAW in un'immagine in scala di grigio a 8 bit, senza aggiungere alcun contrasto. Ho usato le impostazioni tipiche in un convertitore RAW commerciale. Il convertitore tenta di ridurre il rumore per impostazione predefinita. Inoltre, stiamo salvando il risultato finale come un file a 8 bit - in sostanza, stiamo eliminando i bit di ordine più basso delle letture del sensore grezzo!

E qual è stato il risultato finale? Sembra molto meglio di quello che ho ottenuto dallo scanner; il rumore è meno pronunciato e non si vede esattamente nulla. Tuttavia, il rumore gaussiano è lì:

Ritaglio 30x30, ingrandito dal fattore 10 istogramma

E l'entropia? 2,7 bit per pixel . Dimensione del file in pratica? 344923 byte per 1 milione di pixel. Nel migliore dei casi, con alcuni imbrogli, abbiamo portato il rapporto di compressione a 1: 3.


Ovviamente tutto ciò non ha esattamente nulla a che fare con la ricerca TCS, ma penso che sia bene tenere presente ciò che limita davvero la compressione dei dati digitalizzati nel mondo reale. I progressi nella progettazione di algoritmi di compressione più elaborati e potenza della CPU grezza non aiuteranno; se vuoi salvare tutto il rumore senza perdita, non puoi fare molto meglio di 1: 2.


3
freddo! se il rumore è gaussiano, la mia sensazione è che proiettare sui primi k vettori singolari (o una simile tecnica più elaborata) eliminerebbe molto il rumore. una rapida ricerca di Google studioso ha rivelato un articolo di M. Elad e M. Aharon, che utilizza il metodo di proiezione + alcuni trucchi delle statistiche bayesiane: ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4011956 . presumibilmente, nel 2006 era "stato dell'arte". ovviamente, non è senza perdita di dati, ma i dati di Jukka mostrano che se insisti su piccole dimensioni devi almeno perdere il rumore.
Sasho Nikolov,

I tuoi esempi riguardano solo la compressione senza perdita di immagini . Con riluttanza garantirò la loro generalizzazione a tutti i dati provenienti da sensori fisici (suono, immagine, video, ma probabilmente con un fattore distinto) ma ci sono (molti?) Altri campi in cui viene applicata la compressione, con un rapporto molto migliore di 1: 2 (mi viene in mente il linguaggio naturale), perché c'è meno rumore.
Jeremy,

2
@Jukka: +1: bellissimo esperimento! @Sasho: per le immagini mediche, la saggezza convenzionale è che non si può perdere nulla, anche se molto probabilmente è solo rumore.
Peter Shor,

2
Spiegazione molto bella e chiara!
Marzio De Biasi,

2
Un altro commento: questo è davvero inevitabile per le immagini mediche. Se non usi abbastanza precisione per avere una quantità sostanziale di questo rumore nelle immagini mediche, probabilmente stai perdendo alcuni dettagli rilevanti, che vorresti davvero conservare.
Peter Shor,

16

Conosci già il teorema della codifica silenziosa di Shannon ? Questo teorema stabilisce limiti teorici sulla compressione senza perdita. Alcuni dei commenti degli altri sembrano supporre che tu sappia di questo teorema, ma dalla domanda, penso che potrebbe essere la risposta che stai cercando.


Non sapevo di quel teorema. Immagino che l'affermazione di Wikipedia non sia esattamente corretta, in quanto il rapporto di compressione raggiungibile dipende dall'entropia dei dati da comprimere.
Auron,

Credo che sia davvero abbastanza difficile determinare l'entropia intrinseca delle immagini - è molto più facile se i dati sono lineari piuttosto che 2-D.
Peter Shor,

Quindi, quale sarebbe il rapporto di compressione massimo per un testo generato casualmente (uniforme)?
skan

11

n>0

  1. n

  2. La soluzione pratica comune è quella di utilizzare 8 bit, se i soli numeri interi che codificherai saranno tutti compresi tra 1 e 256 (generalizza a 16, 32 e 64 bit se lo desideri).

  3. n+1nn

  4. log2nlog2n+1nlog2n-1log2n2log2n-1nlgn=max(1,log2n)

  5. 2log2n-1

  6. KKnon è calcolabile. Una semplice soluzione a questa nozione è data dai programmi di auto-delimitazione di Levin , in cui si considerano solo i programmi con un tempo di esecuzione limitato (ad esempio, entro un fattore costante della lunghezza dell'istanza originale, che è un limite inferiore al complessità dell'algoritmo che deve scrivere ogni simbolo).

C'è un'intera comunità che lavora sulla complessità di Kolmogorov e le sue varianti e un'altra comunità che lavora sulla compressione senza perdite (l'esempio sugli interi che ho usato ha equivalenti su molti altri tipi di dati), ho appena graffiato la superficie e altri potrebbero aggiungere precisazioni (Kolmogorov non è davvero la mia specialità), ma spero che ciò possa aiutarti a chiarire la tua domanda, se non ti darà necessariamente la risposta che speravi :)


7

(solo un'estensione del mio commento)

(Come sottolineato da Joe nella sua risposta) Shannon - nel suo articolo del 1948, " Una teoria matematica della comunicazione " formulò la teoria della compressione dei dati e stabilì che esiste un limite fondamentale alla compressione dei dati senza perdita di dati. Questo limite, chiamato tasso di entropia, è indicato da H. Il valore esatto di H dipende dalla fonte di informazione --- più specificamente, dalla natura statistica della fonte. È possibile comprimere la sorgente, in modo lossless, con un tasso di compressione vicino a H. È matematicamente impossibile fare meglio di H.

Tuttavia, alcune classi di immagini (ad esempio immagini mediche in scala di grigi) senza bordi ad alto contrasto e con transizioni di livello uniformi possono essere compresse (non in modo così efficiente).

JPEG-LS e JPEG2000 sembrano essere gli standard per la memorizzazione senza perdita di immagini mediche. Vedere questa tabella per un confronto dei rapporti di compressione (il JPEG-LS ottiene una compressione leggermente migliore).

Usando la "compressione senza perdita di immagini mediche" ho trovato i seguenti articoli che potrebbero esserti utili:

Un recente sondaggio (2011) sulle tecniche di compressione delle immagini mediche: tecniche di compressione delle immagini mediche a due dimensioni - un sondaggio

... Questo documento presenta una panoramica di varie tecniche di compressione basate su DCT, DWT, ROI e reti neurali per immagini mediche fisse bidimensionali (2D).

Una presentazione dettagliata di due algoritmi di compressione senza perdita standard: JPEG-LS e JPG2000 in modalità senza perdita: Compressione senza perdita di immagini mediche in scala di grigi - Efficacia degli approcci tradizionali e all'avanguardia

Sono state testate tremila, seicentosettantanove (3.679) immagini in scala di grigi a fotogramma singolo da più regioni anatomiche, modalità e fornitori. ...

Un altro sondaggio: un sondaggio sulle tecniche di compressione delle immagini mediche contemporanee

MODIFICARE

Forse ti stai ancora chiedendo "Che diavolo è l'entropia di un'immagine?" ... OK, è la quantità di informazioni contenute nell'immagine ... ma per capirla meglio, dovresti leggere qualcosa sulle 3 fasi normalmente utilizzate nella compressione dell'immagine :

  • trasformazione (ad esempio Trasformazione discreta wavelet)
  • quantizzazione
  • codifica entropica

Puoi utilizzare Google per cercare un tutorial o un libro sulla compressione delle immagini (ad esempio un tutorial veloce ) o provare a guardare un video tecnico online (ad esempio lezione 16 - Introduzione alla codifica di immagini e video ).


7

Pensa a un file come a una stringa.

Non puoi mai fare meglio della complessità di Kolmogorov di una stringa (questo è dalla definizione di complessità di Komogorov).

Correggi una lunghezza della stringa. Quindi ora stiamo guardando solo stringhe di lunghezza n.

La metà di tutte queste stringhe può essere compressa al massimo da 1 bit. 1/4 di tutte le stringhe possono essere compresse al massimo da 2 bit. 1/8 di tutte queste stringhe possono essere compresse al massimo da 3 bit.

Quindi quale frazione di stringhe (immagini, file, ecc.) Può essere compressa con un rapporto di 2: 1 - molto, molto pochi. Allora perché la compressione funziona mai? Perché quasi tutti i dati che le persone reali stanno effettivamente cercando di comprimere sono altamente strutturati - non sembra un file casuale. Più i dati sono casuali, più è difficile comprimere. Vanno di pari passo. La maggior parte delle stringhe sembrano casuali.

Per vederlo in azione, genera un file casuale usando un processo casuale. Intendo un file davvero casuale. Ora prova a comprimerlo usando il tuo algoritmo di compressione preferito. Rimarrà della stessa dimensione o diventerà più grande, quasi sempre.

D'altro canto, ci sono stringhe altamente comprimibili. Prendi la seguente stringa: 100000..000 (1 seguito da un milione di zeri). La descrizione si adatta alla frase precedente e un computer potrebbe ricostruirla da quella descrizione (o una molto simile). Tuttavia questa descrizione non è lunga quasi un milione di cifre.

Il fatto è che le stringhe con quella proprietà (di essere altamente comprimibili) sono estremamente rare tra tutte le stringhe possibili. Il fatto secondario è che quasi tutti i dati generati dall'uomo sono super, super comprimibili perché sono così strutturati.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.