Comprimere molte immagini simili di grandi dimensioni?


16

Ho a che fare con un grande archivio di immagini satellitari della Terra, ognuna presa a 15 minuti di distanza sulla stessa area, quindi sono abbastanza simili tra loro. Due contigui si presentano così: inserisci qui la descrizione dell'immagine

Gli algoritmi video comprimono molto bene più immagini simili. Tuttavia, queste immagini sono troppo grandi per i video (10848x10848) e l'uso di codificatori video eliminerebbe i metadati delle immagini, quindi estrarli e ripristinarli sarebbe ingombrante anche se ottengo un codificatore video per lavorare con immagini così grandi.

Per fare alcuni test ho ridotto le 96 immagini di un giorno a 1080x1080 pixel, per un totale di 40,1 MB e provando una compressione diversa con i seguenti risultati:

  1. zip: 39,8 MB
  2. rar: 39,8 MB
  3. 7z: 39,6 MB
  4. tar.bz2: 39,7 MB
  5. zpaq v7.14: 38.3 MB
  6. fp8 v2: 32,5 MB
  7. paq8pxd v45: 30.9 MB

Gli ultimi tre dovrebbero sfruttare molto meglio il contesto e funzionare meglio della compressione tradizionale, ma il rapporto di compressione è ancora piuttosto scarso rispetto al video mp4 che può portarlo a 15 MB o anche meno preservare la qualità dell'immagine.

Tuttavia, nessuno degli algoritmi utilizzati da tali programmi di compressione sembra trarre vantaggio dalla somiglianza delle immagini rispetto alla compressione video. Infatti, usando packJPG , che comprime ciascuna immagine separatamente, l'intero set scende a 32,9 MB, abbastanza vicino a fp8 e paq8pxd, ma senza sfruttare appieno le somiglianze tra le immagini (perché ogni immagine viene compressa singolarmente).

In un altro esperimento, ho calcolato in Matlab la differenza tra le due immagini sopra e si presenta così:

inserisci qui la descrizione dell'immagine

La compressione di entrambe le immagini originali (219,5 + 217,0 = 436,5 kB totali) con fp8 le porta a 350,0 kB (80%), ma comprimendone una e l'immagine della differenza (come jpg della stessa qualità e usando 122,5 kB), risulta in un file di 270,8 kB (62%), quindi di nuovo (come rivelato dal confronto tra mp4 e packJPG), fp8 non sembra trarre molto vantaggio dalle somiglianze. Anche compresso con rar, un'immagine più la differenza fanno meglio di fp8 sulle immagini originali. In tal caso, raramente arriva a 333,6 kB (76%).

Immagino che ci debba essere una buona soluzione di compressione per questo problema, dal momento che posso immaginare molte applicazioni. Accanto al mio caso particolare, immagino che molti fotografi professionisti abbiano molti scatti simili a causa di scatti sequenziali o immagini time-lapse, ecc. Tutti i casi che trarrebbero beneficio da tale compressione.

Inoltre, non ho bisogno di una compressione senza perdita, almeno non per i dati dell'immagine (i metadati devono essere conservati).

Quindi ... Esiste un metodo di compressione che sfrutta le somiglianze tra le immagini compresse?

Le due immagini del test sopra possono essere scaricate qui e le 96 immagini del primo test qui .


1
Sarebbero apprezzati ulteriori feedback da parte delle persone che hanno posto la domanda. Ritengo che la domanda sia abbastanza generale e alla quale si possa rispondere senza indicare un prodotto specifico, ma un metodo, un algoritmo o una tecnica.
Camilo Rada,

1
Galleria di arachidi (non ho votato per chiudere) ma Is there a compression utility that take advantage of the similarities between images better than zpaq and fp8?e Is there a updated/maintained version of the fp8 utility?sono probabilmente le linee offensive. Contrasto che con es. Is there a compression *method, algorithm or technique* that take advantage of the similarities between images better than zpaq and fp8?Il focus è probabilmente molto diverso. La richiesta di software è probabilmente comunque ridondante, dato che software specifico (se applicabile) verrà quasi certamente menzionato in qualsiasi risposta fornita.
Anaksunaman,

1
Sono d'accordo. E fatto. In bocca al lupo. =)
Anaksunaman

2
"Troppo grande per i video"? Non sono sicuro di essere d'accordo con questo. Alcuni codec hanno risoluzioni massime molto elevate o illimitate. Non stai cercando di creare un video guardabile, basta comprimere alcune immagini statiche. Potresti codificare i metadati come sottotitoli o altri dati?
benshepherd l'

1
Per aggiungere all'elenco delle applicazioni, avrei bisogno di questo per archiviare i frame originali di un progetto time lapse che otterrà parti aggiuntive in futuro. Le attuali 10.000 immagini JPG 4K x occupano 25 GB di spazio, mentre un MP4 composto da esse occupa solo 85 MB.
Akseli Palén,

Risposte:


5

Non conosco un software specifico che lo faccia, ma ci sono alcune ricerche sull'argomento. Ad esempio, vedere gli articoli Comprimere set di immagini simili di Samy Ait-Aoudia, Abdelhalim Gabis, Amina Naimi e comprimere set di immagini simili utilizzando il modello di compressione ibrido di Jiann-Der Lee, Shu-Yen Wan, Chemg-Min Ma, Rui -Feng Wu.

A un livello più pratico, è possibile estendere la tecnica di sottrazione, ad esempio scrivendo uno script che utilizza ImageMagick per calcolare la differenza tra immagini consecutive, salvando il risultato come jpeg (o un png compresso se lo si desidera senza perdita). Otterrai un'immagine di base e una serie di immagini "delta" compresse che dovrebbero essere molto più piccole. Per calcolare la differenza utilizzando ImageMagick:

convert image2.png image1.png -compose MinusSrc -composite -depth 24 -define png:compression-filter=2 -define png:compression-level=9 -define png:compression-strategy=1 difference-2-1.png

Per ricalcolare aggiungendo nuovamente:

convert image1.png difference-2-1.png -compose Plus -composite image2-reconstructed.png

(Puoi fare lo stesso usando jpg invece e risparmiare molto spazio).


Sembra che questo non gestisca gli overflow. Ho alcune immagini simili con colori molto diversi, e quindi ho alcuni artefatti nelle immagini ricalcolate, usando Meno / Più o Sottrai / Aggiungi.
Adrien Clerc,
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.