Compression CCITT

Sujet

On se propose de réaliser, par étapes successives, un logiciel de (dé)compression basé sur la le standard CCITT qui permet de coder et décoder des images noir et blanc à des fins de transmission sur des lignes à bas débit..

Le codage de Huffman modifié

Le principe du codage de Huffman modifié est d’obtenir à partir d’une suite de 0 et 1 (blanc et noir) supposée contenir des répétitions consécutives de mêmes valeurs, une suite de codes chacun représentant la couleur et la longueur de la suite de même couleur.

Comme pour un encodage de Huffman, les codes employés sont de longueurs variables. Les codes les plus longs étant réservés aux longueurs de sous-suites les plus rares.

Dans cet encodage, chaque ligne est considérée comme commençant par une suite de blancs (si ce n’est pas le cas, c’est que la suite est de longueur nulle). Et chaque fin de ligne est encodée.

Le tableau suivant contient la liste des codes employés:

LongueurBlancNoirLongueurBlancNoir
00011010100001101113200011011000001101010
10001110103300010010000001101011
20111113400010011000011010010
31000103500010100000011010011
410110113600010101000011010100
5110000113700010110000011010101
6111000103800010111000011010110
71111000113900101000000011010111
8100110001014000101001000001101100
9101000001004100101010000001101101
100011100001004200101011000011011010
110100000001014300101100000011011011
1200100000001114400101101000001010100
13000011000001004500000100000001010101
14110100000001114600000101000001010110
151101010000110004700001010000001010111
1610101000000101114800001011000001100100
1710101100000110004901010010000001100101
18010011100000010005001010011000001010010
190001100000011001115101010100000001010011
200001000000011010005201010101000000100100
210010111000011011005300100100000000110111
220000011000001101115400100101000000111000
230000100000001010005501011000000000100111
240101000000000101115601011001000000101000
250101011000000110005701011010000001011000
2600100110000110010105801011011000001011001
2701001000000110010115901001010000000101011
2800110000000110011006001001011000000101100
29000000100000110011016100110010000001011010
30000000110000011010006200110011000001100110
31000110100000011010016300110100000001100111

Le tableau suivant contient les codes associés aux longueurs, peu fréquentes, mais plus grandes que 62. Pour une longueur comme 298, il suffit de prendre le code de la longueur 256 que l’on fait suivre par le code de 298-256=42.

64110110000001111
12810010000011001000
192010111000011001001
2560110111000001011011
32000110110000000110011
38400110111000000110100
44801100100000000110101
512011001010000001101100
576011010000000001101101
640011001110000001001010
7040110011000000001001011
7680110011010000001001100
8320110100100000001001101
8960110100110000001110010
9600110101000000001110011
10240110101010000001110100
10880110101100000001110101
11520110101110000001110110
12160110110000000001110111
12800110110010000001010010
13440110110100000001010011
14080110110110000001010100
14720100110000000001010101
15360100110010000001011010
16000100110100000001011011
16640110000000001100100
17280100110110000001100101
17920000000100000000001000
18560000000110000000001100
19200000000110100000001101
1984000000010010000000010010
2048000000010011000000010011
2112000000010100000000010100
2170000000010101000000010101
2240000000010110000000010110
2304000000010111000000010111
2368000000011100000000011100
2432000000011101000000011101
2496000000011110000000011110
2560000000011111000000011111
EOL000000000001000000000001

La suite 110000001110000000000<EOL> (de longueur 21) sera encodée par 001101011111101000111000000000001 (de longueur 33).

1. Il est demandé de réaliser dans un langage de programmation de votre choix (de préférence C, C++ ou Java, pour les autres demander à l’enseignant) un programme d’encodage et de décodage CCITT (basé sur le principe précédent). Ce programme devra permettre d’encoder tout fichier donné en entrée et produire en sortie un fichier dont le nom sera étendu en .fax. Ce programme devra en outre produire en sortie le taux de compression obtenu.

2. On testera ce programme sur une variété de fichiers dont les suivants: une image de taille A4 toute blanche et scannée en 200ppp, une image (à télécharger ici) qui est au format PGM, puis une image de son choix.


Le TP devra être rédigé (sous la forme de documents HTML) et rendu avec les codes sources des programmes; ce au plus une semaine après la séance.