Compression sans perte d'images similaires?

10

Je dois réduire la taille de ma photothèque donc je veux naturellement les compresser. Beaucoup d'entre eux ne sont pas tout à fait identiques, mais toujours très similaires (plans ultérieurs de la même scène). Existe-t-il un algorithme de compression qui tire parti de ce fait pour compresser efficacement ces images? 7zip (LZMA) est inutile.

Erik
la source

Réponses:

11

Vous pouvez essayer Paq 8 (fp8_v2.zip). Je viens de l'essayer moi-même sur 1440 images PNG similaires, puis à nouveau sur 111 images JPG similaires. Voici les résultats.

  • 1440 fichiers PNG, 28,631,615 octets => 2,058,653 octets compressés
  • 111 fichiers JPG, 15 003 820 octets => 489 096 octets compressés

La compression des fichiers PNG a pris environ 8 minutes et 550 Mo de mémoire lors de l'utilisation:

fp8_v2.exe -7 images *.png

La compression des fichiers JPG a pris environ 5 minutes et 125 Mo de mémoire lors de l'utilisation:

fp8_v2.exe -5 images image12*.jpg

Voir aussi: test de compression d'image sans perte jpg

jftuga
la source
Une compression de 97% pour les JPG semble irréaliste. Les nombres dans le test de comparaison que vous liez pour dire que la compression est d'environ 20%
OneSolitaryNoob
@OneSolitaryNoob Avez-vous oublié que les JPEG sont similaires? 110/111 = 99,1% de compression attendue. Le test de comparaison qu'il a lié concerne la compression d'un seul JPEG.
Navin
@Navin, c'est vraiment peu probable. Même s'ils semblent presque identiques, la plupart des pixels seront légèrement différents.
OneSolitaryNoob
@OneSolitaryNoob Et alors? 1 seconde de vidéo (30 images) peut être compressée à peu près à la même taille qu'une seule image. Tant que la légère différence ne représente qu'une petite fraction des données, vous êtes tous bons.
Navin
@Navin est une compression avec perte, de nombreux détails ont disparu mais la plupart des gens ne le remarqueront pas. Paq * est une compression sans perte
OneSolitaryNoob
1

J'imagine que la transformation du terrier avec un codeur arithmétique serait idéale pour cela étant donné une fenêtre suffisamment grande. Que se passe-t-il si vous configurez BZIP2 pour utiliser une taille de bloc égale à une petite série de photos? Ce sera plus lent et prendra plus de mémoire, mais le taux de compression devrait monter en flèche. Et avez-vous déjà essayé LZMA avec des blocs plus grands?

Peter Hanneman
la source
1

Voici une solution simple qui ne fonctionne pas pour les photos mais peut fonctionner si l'on a plusieurs images avec de grandes zones identiques pixel par pixel: enregistrez les images dans un format décompressé comme BMP (pas PNG ou GIF) puis TAR et compressez-les avec un compresseur décent comme XZ, par exemple sous Linux avec quelque chose comme

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

Au lieu de TAR et XZ, on peut utiliser 7-Zip avec l'option «solid archive» pour obtenir à peu près les mêmes performances. De cette façon, je pouvais compresser 16 captures d'écran similaires, qui prenaient environ 900 Ko chacune lorsqu'elles étaient enregistrées en tant que fichiers PNG séparés, dans une archive de 2 Mo. L'avantage de cette solution est qu'elle utilise des formats de fichiers courants, elle fonctionne donc sans installer de nouveau logiciel. (Malheureusement, les programmes plus anciens et encore plus courants GZIP et BZIP2 n'ont pas fait du bon travail pour moi - peut-être parce que la taille de bloc de BZIP2 ne peut pas être configurée pour être supérieure à 900 Ko.)

Jaan
la source
0

Pas que j'aie vu. La chose la plus proche serait probablement de prendre plusieurs JPEG similaires et de les mettre dans un film MJPEG. Vous pouvez également utiliser des APNG ou des GIF animés dans un but similaire.

Je ne sais pas si cela fonctionnerait bien, et il semble que vous parliez déjà de captures d'écran de films, donc les reconditionner dans un fichier film semble ... contre-productif.

Peut-être qu'une meilleure façon, si vous avez toujours les clips dont les écrans sont issus, serait de simplement trouver un outil en ligne de commande qui peut extraire le cadre exact pour vous, copier cet identifiant unique dans un fichier texte quelque part, puis vous pouvez toujours extrayez facilement le cadre lorsque vous en avez besoin.

afrazier
la source
Le GIF n'est pas adapté à la compression de photos et le GIF animé l'est encore moins. Même la compression de photos en vidéo MJPEG ne semble pas utile à mes yeux, car la restauration d'images uniques serait difficile.
Martin
Je n'ai pas dit que c'était une bonne idée ... :-) L'idée ultime était de mettre les photos dans une variante animée de leur format d'origine.
afrazier