Compression Huffman

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Lord Nelson
Messages : 355
Inscription : dim. 01/déc./2013 15:29

Compression Huffman

Message par Lord Nelson »

Salut,

Comme djes m'a conseillé j’essaie de comprendre comment fonctionne l'algo d'Huffman.
Cependant c'est chaud à comprendre alors je viens vous demander de l'aide :)

Si quelqu'un pouvait m’expliquer très simplement comme cella fonctionne
bien que j’ai regardé certain site mais ou j'ai rien capté :oops:

J'aimerais le reproduire en PureBasic mais il faut que je comprenne comment ça fonctionne pour ça !
Et aussi, y à t-il déjà un code existant que quelqu’un aurais fait ?

Merci d'avance :)
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Compression Huffman

Message par G-Rom »

http://fr.wikipedia.org/wiki/Codage_de_Huffman

le but est de compter le nombre d’occurrence de chaque caractère , chaque caractère compose un noeud avec un poids , son poids représente son occurrence , l'arbre est créer à partir des noeuds , les noeuds les plus faible sont les "terminal leaf" et on remonte l'arbre suivant les poids , regarde le schéma sur wiki , il est plus que parlant...

Code : Tout sélectionner

structure node
  char.a
  weight.l
  *parent.node
  *childLeft.node
  *childRight.node
endstructure
a toi de faire le reste.

@++
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Compression Huffman

Message par djes »

Tu peux commencer par quelque chose de plus simple, sur lequel est en train de plancher un ami ;). Il s'agit de l'algorithme ByteRun, qui est notoirement utilisé dans le format d'image IFF ILBM (voir là : http://home.comcast.net/~erniew/lwsdk/d ... /ilbm.html).

J'en profite pour traduire vite fait la fin de la doc qui l'explique par un pseudo-code, très simple tu vas voir : l'algo de décompression (voir l'annexe C)
DéCompresseur:
BOUCLER jusqu'à la fin de l'image
LIRE le prochain octet et le mettre dans n
SELECTIONNER n PARMI
[0..127] => copier les prochains octets (n+1) littéralement
[-1..-127] => répliquer le prochain octet (-n+1) fois
-128 => noop (pas d'opération)
FINBOUCLER;
Dernière modification par djes le ven. 28/nov./2014 12:19, modifié 1 fois.
Lord Nelson
Messages : 355
Inscription : dim. 01/déc./2013 15:29

Re: Compression Huffman

Message par Lord Nelson »

Désoler mais tous ça c'est du chinois pour moi :oops:
Si tu veux bien expliquer c'est quoi le ByteRun :)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Compression Huffman

Message par djes »

Lord Nelson a écrit :Désoler mais tous ça c'est du chinois pour moi :oops:
Si tu veux bien expliquer c'est quoi le ByteRun :)
Pas de souci, et après, essaye de comprendre l'algo ; c'est vraiment le plus simple qui existe.

Alors voilà, regarde ton écran, tu vois des pixels de toutes les couleurs. Parfois, il y en a qui sont de la même couleur.

Exemple :
Rouge-bleu-blanc-blanc-blanc-blanc-blanc-rouge
Sans compression, il y a 8 valeurs à enregistrer.

Si, au lieu de tout enregistrer, on enregistrait différemment les fois où les pixels sont de la même couleur. Ca donnerait, par exemple :
Rouge-bleu-5 fois-blanc-rouge
On n'a plus que 5 valeurs. D'où un gain de 3 valeurs, il y a compression.

Le pseudo-code que je t'ai donné est celui qui sert dans un véritable fichier image (format IFF ILBM) pour interpréter et décompresser les données. L'algo de compression doit juste faire l'inverse...
Lord Nelson
Messages : 355
Inscription : dim. 01/déc./2013 15:29

Re: Compression Huffman

Message par Lord Nelson »

Tu sais sa fait des tonnes d’essais que je fais sur les images, rien ne fonctionne !

Sauf un truc (Secret) et j'ai aussi mais sans certitude réussi à compresser une image de pixel totalement aléatoire de 5.49 Mm à 5 Mo !
Mais ça n'as aucun intérêt car ça fonctionne pas pour les autre images sans pixel aléatoire !

J'en est essayé tu sais des choses, j'ai notamment fais un genre que t'as fais là, je compte tous les pixels
identique et je stocke seulement la couleur et le nombre de fois qu'elle apparait, exemple:

124959256 3892942 1484 26 225461265458 254163231 254163231 254163231 254163231 254163231 254163231 254163231 5485262654 4885116
Devient: 124959256 3892942 1484 26 225461265458 254163231.6 5485262654 4885116

Mais..... ça marche même pas !!!, dingue hein !
Quand je compresse le résultat avec un logiciel de compression comme 7-Zip par exemple, les résultat sont encore pire !!!

J'ai aussi fais une variante ou à la place de mettre le nombre de fois qu'apparais la couleur, je remplace tous les autre couleur identique qui suivent par 0
(Avent de faire ça je remplace toutes les couleur 0 de l'image par la couleur 1)

Exemple:

124959256 3892942 1484 26 225461265458 254163231 254163231 254163231 254163231 254163231 254163231 254163231 5485262654 4885116
Devient: 124959256 3892942 1484 26 225461265458 254163231 0 0 0 0 0 0 5485262654 4885116

Ici, j'étais sur que ça fonctionnerais !!!
Mais la encore c'est encore pire !!!

Moi je sais plus quoi faire !
Mais je cherche encore !
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Compression Huffman

Message par djes »

Ne me dis pas que tu stockes ton image en texte...
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Compression Huffman

Message par falsam »

Lord Nelson a écrit :Moi je sais plus quoi faire !
Mais je cherche encore !
Pour quelle raison ? pour le fun ?
Dernière modification par falsam le ven. 28/nov./2014 20:24, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Lord Nelson
Messages : 355
Inscription : dim. 01/déc./2013 15:29

Re: Compression Huffman

Message par Lord Nelson »

Ne me dis pas que tu stockes ton image en texte...
J'ai tous essayé !!!
Texte, Binaire, Byte ou Ascii !

T'as une autre idée toi ?
Si t'as une piste, une idée, hésite pas hein :)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Compression Huffman

Message par falsam »

Lord Nelson a écrit :J'ai tous essayé !!!
Texte, Binaire, Byte ou Ascii !
A mon avis Djes pense qu'il hallucine !
Image
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Compression Huffman

Message par SPH »

Lord Nelson, tu me fais rire :lol:
Attaque toi a un truc plus facile qu'a la compression...

Tiens, fais un casse brique :mrgreen:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Compression Huffman

Message par djes »

Quand je lis byte, binaire, texte ou ascii, oui, là, j'hallucine. La compression que je t'ai montrée ici fonctionne en moyenne assez bien pour des images qui ont des aplats (une copie d'écran par exemple). Par contre si tous les pixels sont différents, il n'y a rien à gagner. Tu pourrais me montrer le code que tu avais fait ? Il y a peut-être une petite erreur.
Répondre