Compressione senza perdita di immagini simili?


10

Devo ridurre le dimensioni della mia libreria di foto, quindi naturalmente desidero comprimerle. Molti di loro non sono del tutto identici, ma comunque molto simili (scatti successivi della stessa scena). Esiste un algoritmo di compressione che sfrutta questo fatto per comprimere efficacemente queste immagini? 7zip (LZMA) è inutile.

Risposte:


11

Potresti provare Paq 8 (fp8_v2.zip). L'ho provato da solo su 1440 immagini PNG simili e poi di nuovo su 111 immagini JPG simili. Ecco i risultati

  • 1440 file PNG, 28.631.615 byte => 2.058.653 byte compressi
  • 111 file JPG, 15.003.820 byte => 489.096 byte compressi

La compressione dei file PNG ha richiesto circa 8 minuti e 550 MB di memoria quando si utilizza:

fp8_v2.exe -7 images *.png

La compressione dei file JPG ha richiesto circa 5 minuti e 125 MB di memoria quando si utilizza:

fp8_v2.exe -5 images image12*.jpg

Vedi anche: test di compressione delle immagini lossless jpg


La compressione del 97% per i JPG sembra irrealistica. I numeri nel test di confronto che colleghi per dire che la compressione è di circa il 20%
OneSolitaryNoob,

@OneSolitaryNoob Hai dimenticato che i JPEG sono simili? 110/111 = compressione prevista del 99,1% . Il test di confronto che ha collegato riguarda la compressione di un singolo JPEG.
Navin,

@Navin è davvero improbabile. Anche se sembrano quasi identici, la maggior parte dei pixel sarà leggermente diversa.
OneSolitaryNoob il

@OneSolitaryNoob E allora? 1 secondo di video (30 fotogrammi) può essere compresso alla stessa dimensione di un singolo fotogramma. Fintanto che la leggera differenza costituisce una piccola parte dei dati, tutto va bene.
Navin,

@Navin è una compressione con perdita di dati, molti dettagli sono spariti ma la maggior parte delle persone non se ne accorgerà. Paq * è la compressione senza perdita di dati
OneSolitaryNoob il

1

Immagino che il trasformatore di tane con un codificatore aritmetico sia l'ideale per questo dato che ha una finestra abbastanza grande. Cosa succede se si configura BZIP2 per utilizzare una dimensione di blocco uguale a una piccola serie di foto? Sarà più lento e richiederà più memoria, ma il rapporto di compressione dovrebbe salire alle stelle. E hai già provato LZMA con blocchi di dimensioni maggiori?


1

Ecco una soluzione semplice che non funziona per le foto ma può funzionare se si dispone di più immagini con aree identiche pixel per pixel grandi: salvare le immagini in un formato non compresso come BMP (non PNG o GIF) e quindi TAR e comprimere con un compressore decente come XZ, ad esempio su Linux con qualcosa di simile

tar -c myDirectory | xz -9 >myDirectory.tar.xz

Invece di TAR e XZ, si può usare 7-Zip con l'opzione "archivio solido" per ottenere all'incirca le stesse prestazioni. In questo modo ho potuto comprimere 16 schermate simili, che richiedevano circa 900 KB ciascuna quando salvate come file PNG separati, in un archivio di 2 MB. Il vantaggio di questa soluzione è che utilizza formati di file comuni, quindi funziona senza installare nuovo software. (Sfortunatamente i programmi più vecchi e persino più comuni GZIP e BZIP2 non hanno fatto un buon lavoro per me, forse perché la dimensione del blocco di BZIP2 non può essere configurata per essere maggiore di 900 KB.)


0

Non che io abbia visto. Probabilmente la cosa più vicina sarebbe prendere diversi JPEG simili e metterli in un film MJPEG. Puoi anche usare APNG o GIF animate per uno scopo simile.

Non sono sicuro di come funzionerebbe bene, e sembra che tu stia già parlando di screencaps di film, quindi reimballarli in un file di film sembra ... controproducente.

Forse un modo migliore, se hai ancora le clip da cui provengono le schermate, sarebbe semplicemente trovare uno strumento da riga di comando in grado di estrarre il frame esatto per te, copiare quell'identificatore univoco in un file di testo da qualche parte, e quindi puoi sempre estrarre facilmente la cornice quando ne hai bisogno.


La GIF non è adatta per comprimere le foto e la GIF animata è ancora meno. Anche comprimere le foto in un video MJPEG non mi sembra utile, perché ripristinare le singole immagini sarebbe difficile.
Martin,

Non ho detto che fosse una buona idea ... :-) L'idea finale era quella di mettere le foto in una variante animata del loro formato originale.
Afrazier
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.