Guetzli, il nuovo algoritmo di Google che riduce le immagini del 35%

Scopriamo Guetzli, il nuovo encoder per immagini JPEG, che promette un alto tasso di compressione dati unito a una eccellente qualità di visualizzazione. La dimensione delle foto, infatti, risulta essere anche del 30% in meno dei normali compressori di questo tipo. Guetzli tratta solo JPEG non progressivi (standard) al fine di ottenere la massima velocità nella decompressione e nella visualizzazione.

Velocità del Web

Una delle priorità di Google è quella di favorire una navigazione su Internet estremamente veloce e senza intoppi. E una delle strade percorribili è proprio quella di rendere le immagini più "leggere" e con una decodifica di decompressione più snella e immediata. Ha introdotto, così, l'algoritmo per encoder d'immagini Guetzli. Il suo scopo principale è quello d'incrementare il numero di pagine su Internet diminuendo il flusso dei dati sulla grande rete.

Guetzli, un algoritmo open source

Guetzli è un nuovo algoritmo open source che crea immagini di alta qualità JPEG con dimensioni di file del 35% più piccoli rispetto ai metodi attualmente disponibili. Questo consente ai webmaster di creare le proprie pagine web in grado di caricarsi molto più velocemente e di utilizzare, in tal modo, ancora meno dati sulla Rete.

Si tratta di un encoder JPEG per immagini digitali e grafica per il web che consente di operare online molto più velocemente di prima, dal momento che esso produce file JPEG più leggeri, dal punto di vista dell'occupazione di memoria. L'algoritmo, inoltre, promette di mantenere la compatibilità sia con i browser esistenti e più obsoleti che con le applicazioni per l'elaborazione delle immagini e lo standard JPEG attuale. Google afferma che, praticamente, Guetzli è abbastanza simile all'algoritmo Zopfli, che produce file più piccoli di tipo PNG e gzip.

La qualità finale di una immagine dipende direttamente da un processo di compressione dati, eseguito in diverse fasi:

  • color space transform;
  • discrete cosine transform;
  • quantization.

In particolare, nel processo della quantizzazione, maggiore è la perdita della qualità dell'immagine e più piccolo risulterà il file finale.

Guetzli cerca un buon compromesso ed equilibrio tra la perdita della qualità visuale e la dimensione del file, grazie all'adozione di un algoritmo di ricerca che tenta di superare le differenze tra il modello psico-visuale del formato JPEG e quello di Guetzli, riuscendo ad approssimare in maniera più approfondita e dettagliata la percezione del colore e della maschera visiva.

La figura 1 mostra come il nuovo algoritmo riduce anche gli artefatti, tipici del formato JPEG. A sinistra è raffigurata l'immagine originale dell'occhio di un cane (20x24 pixel). Quella trattata con l'algoritmo Guetzli, sulla destra, è caratterizzata da un numero minore di artefatti rispetto a quella centrale, compressa con libjpeg. Lo si nota soprattutto nell'area chiara superiore e il risultato è ottenuto senza aumentare la dimensione del file.

Figura 1: le differenze tra Guetzli e libjpeg

Figura 1: le differenze tra Guetzli e libjpeg

La stessa riduzione di artefatti si può notare in figura 2, dalla dimensione di 16x16 pixel, con un file finale addirittura più ridotto. La compressione JPEG, è risaputo, soffre di tale aspetto.

Figura 2: la riduzione degli artefatti nella codifica Guetzli

Figura 2: la riduzione degli artefatti nella codifica Guetzli

Prove pratiche

Sul sito del progetto pubblicato su GitHub, (vedi paragrafo dei link in basso), si possono trovare anche le releases per Windows e Linux, sia a 32 bit che a 64 bit. Si tratta di programmi eseguibili direttamente da terminale, con una sintassi estremamente comprensibile. La semplice esecuzione del software, senza specificare alcun parametro, fornisce il seguente messaggio, come anche riportato in figura 3:

Guetzli JPEG compressor. Usage:
guetzli [flags] input_filename output_filename

Flags:
  --verbose    - Print a verbose trace of all attempts to standard output.
  --quality Q  - Visual quality to aim for, expressed as a JPEG quality value.
  --memlimit M - Memory limit in MB. Guetzli will fail if unable to stay under
                 the limit. Default is 6000 MB
  --nomemlimit - Do not limit memory usage.

dove il parametro:

  • --verbose visualizza, a video, i tentativi effettuati dall'algoritmo (vedi figura 4);
  • --quality Q specifica la qualità del JPEG finale;
  • --memlimit M limita la memoria utilizzata, espressa in Mb;
  • --nomemlimit non pone alcun limite alla memoria utilizzata.
Figura 3: l'utilizzo di Guetzli

Figura 3: l'utilizzo di Guetzli

Il più semplice esempio di conversione potrebbe essere il seguente:

c:\>guetzli_windows_x86.exe  originale.png  finale.jpg

che utilizza i parametri di default e genera la nuova immagine compressa dal nome "finale.jpg".

Per specificare la qualità (per esempio 90), invece, si può invocare il seguente comando:

c:\>guetzli_windows_x86.exe --quality 90 originale.png finale.jpg

E' interessante sapere che il programma non accetta un parametro di qualità inferiore a 84. In caso contrario si ottiene il seguente messaggio di errore:

c:\>guetzli_windows_x86.exe --quality 35 originale.png finale.jpg
Guetzli should be called with quality >= 84, otherwise the
output will have noticeable artifacts. If you want to
proceed anyway, please edit the source code.
Guetzli processing failed

Sempre sul progetto pubblicato su GitHub si trovano anche i sorgenti dell'encoder che ognuno può scaricare liberamente e compilare.

Note

Nel file "README.md", che consigliamo sempre di leggere, si trovano alcune importanti annotazioni che l'utente dovrebbe ben considerare:

  • Guetzli utilizza una grande quantità di memoria. Si consiglia di disporre di almeno 300Mb di memoria per una immagine di 1 megapixel;
  • Guetzli utilizza la CPU in modo molto pesante e anche i tempi di elaborazione sono abbastanza significativi. Mediamente, il tempo impiegato per l'elaborazione di una immagine da 1 megapixel si aggira attorno a un minuto;
  • Guetzli considera il profilo dell'immagine di input di tipo sRGB con un valore di gamma pari a 2.2;
  • Guetzli è stato progettato per lavorare sulle immagini di qualità. Per questo motivo si dovrebbe preferire di passare al programma, come input, delle immagini non compresse o che non siano state già precedentemente elaborate da altri encoder JPEG, Guetzli compreso. Quindi è preferibile operare con delle foto in alta risoluzione di tipo PNG;
  • Le immagini di tipo JPEG, come si sa, non sopportano l'alpha channel. Se l'immagine PNG d'input possiede un canale Alpha, esso verrà combinato su uno sfondo nero, prima che il processo di encoding abbia inizio.
Figura 4: la codifica dell'immagine nella modalità Verbose

Figura 4: la codifica dell'immagine nella modalità Verbose

Conclusioni

La speranza di Google è quella di agevolare l'intera comunità d'Internet, con navigazioni molto più fluide e veloci. Saranno sicuramente avvantaggiati anche i Web Master e i grafici che vedranno i loro contenuti visionati con una più alta rapidità riducendo, di fatto, l'ammontare delle spese di connessione e i tempi d'attesa. Si augura, principalmente, che tale algoritmo sia un trampolino di lancio per future ricerche su metodi di compressione e di ottimizzazione nell'ambito delle immagini e dei video. Con la riduzione del peso dei dati e l'aumento della banda a disposizione, la navigazione su Internet vedrà un miglioramento sostanziale proprio nei tempi d'attesa.

Link

 

4 Commenti

  1. Stefano Lovati Stefano Lovati 7 ottobre 2017
  2. Giovanni Di Maria Giovanni Di Maria 8 ottobre 2017
  3. Roberta Fiorucci Roberta Fiorucci 10 ottobre 2017
  4. Luca Giuliodori Luca Giuliodori 11 ottobre 2017

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *