Existe-t-il un exemple efficace, rapide et simple de compression différentielle d'image en noir et blanc? Ou encore mieux, certains simples (mais sans perte - images 1bpp déchiquetées ne semblent pas très convaincant lorsqu'il est compressé en utilisant la compression avec perte) technique de streaming qui pourrait accepter un certain nombre de cadres en entrée? J'ai un simple flux image noir et blanc (320x200), affichant quelque chose de similaire à un affichage LED, qui est mis à jour environ une fois par seconde en utilisant AJAX. Les images sont assez similaires la plupart du temps, donc si je les soustrais, le résultat se compresserait assez bien (même avec un simple RLE). Est-ce que quelque chose comme ça est disponible?Compression d'image différentielle bicolore simple
Répondre
Je ne connais aucune bibliothèque qui existe déjà et qui puisse faire ce que vous demandez, autre que de l'exécuter simplement via gzip ou un autre algorithme de compression sans perte. Cependant, puisque vous savez que les cadres sont fortement corrélés, vous pouvez XOR les cadres comme le compilateur remarquable suggéré, puis lancez gzip sur cela. S'il y a peu de changements entre les trames, le résultat du XOR devrait avoir beaucoup moins d'entropie que le frame original. Cela permettra à gzip ou à un autre algorithme de compression sans perte d'atteindre un taux de compression plus élevé.
Vous voudriez également envoyer une trame clé (non différentielle) de temps en temps pour que vous puissiez resynchroniser en cas d'erreurs.
Si vous souhaitez simplement en savoir plus sur la compression, vous pouvez essayer d'implémenter le RLE après avoir XORé les images. Découvrez le RLE au niveau du bit discuté here à mi-chemin de la page. Il devrait être assez facile à implémenter car il stocke juste dans chaque octet une longueur de 7 bits et une valeur d'un bit afin qu'il puisse atteindre un taux de compression dans le meilleur des cas de 128/8 = 16 s'il n'y a pas de changements entre les trames.
Une autre pensée est que s'il y a très peu de changements, vous pouvez simplement encoder les positions de bits qui basculent entre les trames. Vous pouvez adresser l'image 320x200 avec un entier de 16 bits. Par exemple, si seulement 100 pixels changent, vous pouvez simplement stocker 100 entiers de 16 bits représentant ces positions (1600 bits) où le RLE discuté ci-dessus prendrait 64000/16 = 4000 bits au minimum (ce serait probablement un peu plus élevé) . Vous pouvez réellement basculer entre cette méthode et RLE selon le contenu du cadre.
Si vous vouliez aller au-delà des méthodes simples, je suggèrerais d'utiliser des codes de longueur variable pour représenter les passages possibles pendant le codage en longueur de ligne. Vous pouvez ensuite attribuer des codes plus courts aux séries ayant la probabilité la plus élevée. Ce serait similaire au RLE utilisé en JPEG ou MPEG après que la partie avec perte de la compression soit effectuée (DCT et quantification).
- 1. Compression simple en C++
- 2. Compression de texte simple/efficace
- 3. Bibliothèque de compression C++ simple et rapide/classe
- 4. Sauvegarde différentielle SQL Server aux instructions SQL
- 5. singularité à l'équation différentielle avec MATLAB
- 6. Comment résoudre une équation différentielle avec MATLAB
- 7. compression/empaquetage
- 8. compression tomcat
- 9. Compression de fichier DICOM
- 10. Python scientifique: interrompre l'équation différentielle de résolution avec une condition
- 11. Paralléliser la résolution de l'équation différentielle en Python
- 12. XP/2003 Problème de correction différentielle de Windows Installer 4.5
- 13. Restauration d'une sauvegarde différentielle avec un objet SMO Restore
- 14. Comment faire une archive différentielle compressée dans .NET?
- 15. Compression TDD et JPEG
- 16. Streams et Compression
- 17. PHP compression d'image iMagick
- 18. Demande de compression
- 19. Compression dans J2ME
- 20. Compression PPMD en Java?
- 21. iphone NSMutableURLRequest compression
- 22. Silverlight 4 Compression audio
- 23. Compression de fichiers distribués
- 24. algorithme de compression
- 25. compression GZIP en PHP
- 26. Bibliothèques de compression LZH
- 27. GZIP Compression Issue
- 28. svn stockage compression
- 29. Compression Memcache - bon/mauvais?
- 30. Flex remoteObject compression
Les images sont-elles simplement stockées sous la forme d'un bit par pixel? –
C'est leur profondeur de bits, oui. Leur représentation réelle en mémoire peut être modifiée au besoin (à un moment donné, ils sont gérés avec des objets .NET Image avec une profondeur de 1bpp, puisque j'utilise .NET). Mais c'est un tas d'images, pas un flux vidéo. – Groo
Je suis sûr que ce n'est pas la méthode la plus efficace, mais je considérerais faire 1 pixel par octet et XORing les deux images. Tous les bits dont la valeur a changé seront 1, la plupart des bits seront nuls. Ensuite, run-length code le tableau résultant. - Si vous déposez des cadres, cependant, cela se comportera mal. –