Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1310 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] Compression et archivage

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Compression et archivage

n°891547
Pandinus2k​4
Posté le 05-11-2004 à 21:45:46  profilanswer
 

Bonjour tout le monde,
 
Dans le cadre d'un projet de fin d'études je dois réaliser un programme C qui permet la compression et l'archivage de données (comme tar et gzip). Parmis les algorithmes de compression, je me suis bien entendu tourner vers un algorithme de compression sans pertes (compressions de fichiers de données). Pour cela j'hésite entre l'algo d'Huffman et le LZW. Mon problème est que j'ai du mal à trouver une implémentation d'un de ces deux algorithmes pour la compression niveau bit. En effet, la plupart des docs sur ces algos sont en rapport avec des fichiers textes, et mise à part la manipulation des fichiers en binaire (via fopen et les paramètres "wb" et "rb" ) je ne vois pas comment construire un dictionnaire ou un arbre avec des mots binaires.
 
J'aimerais donc savoir si quelqu'un a un exemple d'implémentation afin que je comprenne le fonctionnement à ce niveau.
 
Merci d'avance.

mood
Publicité
Posté le 05-11-2004 à 21:45:46  profilanswer
 

n°891550
masklinn
í dag viðrar vel til loftárása
Posté le 05-11-2004 à 21:54:29  profilanswer
 

regarde 7zip, il est open source


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°891552
Pandinus2k​4
Posté le 05-11-2004 à 22:01:02  profilanswer
 

Ok merci je vais aller jeter un oeil :)

n°891560
HelloWorld
Salut tout le monde!
Posté le 05-11-2004 à 22:15:37  profilanswer
 

Ou la zlib, libbzip2, ...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°891582
c0wb0y
:d
Posté le 05-11-2004 à 23:19:50  profilanswer
 

zlib pour le LZW, et tu pourras passer un Huffman derriere (car juste faire un LZW pour un projet de synthèse ca va etre un peu leger ^^ )

n°892317
Pandinus2k​4
Posté le 07-11-2004 à 01:00:31  profilanswer
 

Ok merci mais le principe est de ne pas utiliser de librairies auxiliaires pour la compression, je dois moi même me retapper l'algo :(

n°892327
chrisbk
-
Posté le 07-11-2004 à 01:07:48  profilanswer
 

RLE ? [:kunks]

n°892329
gilou
Modérateur
Modzilla
Posté le 07-11-2004 à 01:13:29  profilanswer
 

pandinus2k4 a écrit :

Bonjour tout le monde,
 
Dans le cadre d'un projet de fin d'études je dois réaliser un programme C qui permet la compression et l'archivage de données (comme tar et gzip). Parmis les algorithmes de compression, je me suis bien entendu tourner vers un algorithme de compression sans pertes (compressions de fichiers de données). Pour cela j'hésite entre l'algo d'Huffman et le LZW. Mon problème est que j'ai du mal à trouver une implémentation d'un de ces deux algorithmes pour la compression niveau bit. En effet, la plupart des docs sur ces algos sont en rapport avec des fichiers textes, et mise à part la manipulation des fichiers en binaire (via fopen et les paramètres "wb" et "rb" ) je ne vois pas comment construire un dictionnaire ou un arbre avec des mots binaires.
 
J'aimerais donc savoir si quelqu'un a un exemple d'implémentation afin que je comprenne le fonctionnement à ce niveau.
 
Merci d'avance.

M'est avis que t'as pas bien compris les algos ou qu'ils etaient mal expliqués, car c'est bien avec des mots binaires (ie des suites finies d'octets) que tu bosses.
A+,

n°892392
c0wb0y
:d
Posté le 07-11-2004 à 11:01:17  profilanswer
 


 
sur une image en niveau de gris c'est pas si mal comme compression (enfin faut pas trop de nuances :/ ) Et c'est simple a mettre en place ^^
Mais evidement, faut utiliser autre chose derriere :x

n°892393
chrisbk
-
Posté le 07-11-2004 à 11:04:04  profilanswer
 

ah bin moi je disais ca paske ca se torche rapidement, sinon effectivement, ca vaut pas trop grand chose

mood
Publicité
Posté le 07-11-2004 à 11:04:04  profilanswer
 

n°892444
Lam's
Profil: bas.
Posté le 07-11-2004 à 13:09:25  profilanswer
 

c0wb0y a écrit :

sur une image en niveau de gris c'est pas si mal comme compression (enfin faut pas trop de nuances :/ ) Et c'est simple a mettre en place ^^
Mais evidement, faut utiliser autre chose derriere :x


Bah le jpeg, c'est surtout du RLE qui est utilisé pour faire la compression (la partie huffman ou arithmétique, c'est juste pour frimer devant les filles).

n°892521
shurik'n
Posté le 07-11-2004 à 15:50:01  profilanswer
 

Tiens c est marrant exactement le projet qu on a faire dans mon ecole (mais en premiere année et en 1 mois).

n°892837
c0wb0y
:d
Posté le 07-11-2004 à 22:56:58  profilanswer
 

Lam's => Dans mon cours on parle de compression par bloc, ya peut etre les deux? on a pas vu en details le format jpg =/

n°892845
chrisbk
-
Posté le 07-11-2004 à 23:04:37  profilanswer
 

le jpeg compresse par block de 8x8
je sais pas si c'est la reponse a la question mais c'en est une [:marc]

n°892850
Lam's
Profil: bas.
Posté le 07-11-2004 à 23:08:15  profilanswer
 

c0wb0y a écrit :

Lam's => Dans mon cours on parle de compression par bloc, ya peut etre les deux? on a pas vu en details le format jpg =/


Le jpeg, c'est :  
- on prend des blocs de 8x8
 
- on les transforme en espèce de fréquence via la DCT, donc on garde un bloc de 8x8, où la valeur en haut à gauche représente la valeur moyenne du bloc (appellé DC), et les autres valeurs représentent les fréquences de la plus basse à la plus haute (AC).
 
- on quantize (c'est la qu'on perd de l'info), en divisant les hautes fréquences par 10 par exemple, et les basses par 2 par exemple: ça permet d'arrondir les hautes fréquences en ne définissant que 25 niveaux différents, alors qu'on en a 128 différents pour les basses. En effet, les hautes fréquences sont moins "utiles". Il est à noter que comme déjà les hautes fréquences ne valaient pas grand chose, le fait de les diviser par 10 en a mis un sacré paquet à 0.
 
- on transforme alors le bloc en ziggaz
 
- puis on encode le bloc zigzagé en huffman+RLE. Comme il y a un sacré paquet de 0, ça se compresse très bien.
 
Y a 2-3 autres astuces également (le fait que ce soit encodé en YCbCr, le fait que le Y soit moins compressé que la couleur, le fait qu'on puisse faire du 4:2:2, etc.)


Message édité par Lam's le 07-11-2004 à 23:09:09
n°892955
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 08-11-2004 à 08:28:26  profilanswer
 

pandinus2k4 a écrit :

Pour cela j'hésite entre l'algo d'Huffman et le LZW. Mon problème est que j'ai du mal à trouver une implémentation d'un de ces deux algorithmes pour la compression niveau bit. En effet, la plupart des docs sur ces algos sont en rapport avec des fichiers textes, et mise à part la manipulation des fichiers en binaire (via fopen et les paramètres "wb" et "rb" ) je ne vois pas comment construire un dictionnaire ou un arbre avec des mots binaires.


[:le kneu] Je dirais comme gilou que t'as pas dû bien piger le truc, alors :o
J'ai implémenté Huffman en Java y a pas longtemps et texte ou binaire, je fais pas la différence. Le seul truc, c'est que l'alphabet pour un fichier texte étant plus limité, y aura plus de chances que le taux de compression soit meilleur qu'avec un fichier binaire. Cela étant, c'est à peu près tout au niveau des différences entre binaire et texte, y a aucun traitement spécial qui est infligé à l'un ou à l'autre dans le code.
Pis réfléchis un brin : tu vas ouvrir ton fichier en rb ou rt ? Tu bosses avec quel type de données ? Si t'as pas la réponse immédiatement, ba considère respectivement ces 2 aspects :
* quelle est la différemce entre rt et rb ?
* ça prend quoi comme paramètres, fread() ?


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°893594
c0wb0y
:d
Posté le 08-11-2004 à 18:49:51  profilanswer
 

Lam's => merci pour ces infos :)

n°893657
fafounet
Posté le 08-11-2004 à 21:04:06  profilanswer
 

Lam's : je me rappele plus exactement les détails de l'algo JPEG mais ce qui est sur c'est que tu as laissé de coté notre sympathique Joseph et ses transformées (transformées de fourrier)
 
Edit : http://donut.99.free.fr/En-vrac/tipe/dct.htm


Message édité par fafounet le 08-11-2004 à 21:07:02
n°893963
Lam's
Profil: bas.
Posté le 09-11-2004 à 09:08:51  profilanswer
 

fafounet a écrit :

Lam's : je me rappele plus exactement les détails de l'algo JPEG mais ce qui est sur c'est que tu as laissé de coté notre sympathique Joseph et ses transformées (transformées de fourrier)
 
Edit : http://donut.99.free.fr/En-vrac/tipe/dct.htm


 
Non justement. DCT et Transformée de Fourier ne sont pas la même chose et n'ont pas le même usage.
 
Par exemple, si tu as une couleur unie pour ton bloc de 8x8, alors ta DCT aura le composant DC (en haut à gauche) à ta valeur, et le reste à 0, alors qu'une TdF aurait tous ses coefficients à 1.  
 
La FFT n'est pas très bonne à quantiser pour les images qui varient peu (et c'est le cas des photos numériques), alors que la DCT est très bien.
 
A noter que le JPEG2000 utilise les ondelettes. De mon expérience, ça ne donne pas des résultats spectaculairement meilleurs sur les images en 640x480, mais apparemment, pour les grosses résolutions, y a du mieux.


Message édité par Lam's le 09-11-2004 à 09:09:37

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] Compression et archivage

 

Sujets relatifs
Compression jepg[Matlab] Programme de compression JPEG
[Matlab] Programme de compression JPEGcompression de texte : algo efficace même sur peu de données
[PHP] compression de plusieurs fichiers -> en zipArchivage de fichiers et sécurité
PclZip : compression de plusieurs fichiers = problème !Lire les attributs d'archivage d'un fichier
[Compression DivX En Système Répartis] Multiple thread listener ?[c] librairie de compression ANSI C?
Plus de sujets relatifs à : [C] Compression et archivage


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR