Quelqu'un connaît-il des techniques de compression d'image présentant les caractéristiques suivantes:
- sans perte
- streaming - je veux compresser à la volée, pixel par pixel.
- surcharge de mémoire faible - je peux me permettre de mettre en mémoire tampon une seule ligne, mais idéalement pas même cela.
- pas de dictionnaires dynamiques
- Images "du monde réel" uniquement, donc les performances sur des "cas désagréables" comme des damiers ne sont pas importantes
- 2-3x compression (5x-10x serait encore mieux, mais c'est beaucoup demander, je sais)
- peut fonctionner sur des pixels de 10 à 16 bits (selon mon appareil photo)
Mes images auront une largeur de ~ 1k pixels, avec des taux de pixels de ~ 20Mpix / sec. La profondeur de pixel sera comprise entre 10 et 16 bits par pixel (selon le choix de la caméra). Supposons que les largeurs de pixels inférieures à 16 bits soient représentées dans un mot de 16 bits pour le moment, plutôt que d'avoir besoin d'être extraites d'un flux binaire continu.
Une forme de codage delta + arithmétique peut-être?
image-processing
image-compression
Martin Thompson
la source
la source
Réponses:
Vous pouvez envisager d'utiliser Huffyuv: http://neuron2.net/www.math.berkeley.edu/benrg/huffyuv.html
Ce n'est pas mieux qu'un simple zip, mais reste légèrement optimisé pour les images.
Toute compression liée à l'image provient de techniques telles que la quantification vectorielle ou le codage de transformation. Afin d'utiliser des transformations telles que DCT / Wavelet tout en les rendant sans perte, vous pouvez penser à JPEG-LS ou JPEG2000 pour la compression. La seule chose est que ce n'est pas en streaming dans votre sens de la définition.
la source
Cela ressemble à ce que vous mettriez dans un appareil photo numérique pour un RAW sans perte.
1 / Vérifiez le code source de dcraw pour voir ce que font déjà différents fabricants d'appareils photo. Par exemple, Pentax utilise un schéma int de longueur variable (longueur N codée avec un code de Huffman, puis N bits) pour coder le delta d'un pixel par rapport au pixel précédent de la même couleur dans la mosaïque Bayer; et ceci atteint régulièrement des rapports de 1: 1,5 à 1: 2.
2 / Les fichiers DNG peuvent également être compressés. Vérifiez comment cela est fait à partir des spécifications Adobe ... Je ne sais pas si elle est basée sur une prédiction similaire + un codage int de longueur variable (qui est en streaming); ou s'il utilise le JPEG-LS plus avancé basé sur LOCO (et qui nécessite malheureusement plusieurs passes sur les données).
la source
zlib a un mode de compression ("HUFFMAN_ONLY") qui est rapide et ne nécessite pas beaucoup de mémoire. Pour les photos typiques utilisant zlib avec libpng, j'obtiens des taux de compression d'environ 1: 2. Vous pouvez l'essayer avec ImageMagick, GraphicsMagick ou pngcrush.
Ces exemples utilisent tous le filtre "sub" PNG (1) qui est efficace pour les photos. Pour * Magick, "-quality 1" et pour pngcrush, "-m 12" signifie utiliser le filtre "sub" et la compression "huffman_only".
la source