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ì:
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 ):
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ì:
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.