Le codage par plages ou codage par longueur de plage[1],[2](appelé en anglais Run-Length Encoding/RLE) est un algorithme de compression de données sans perte qui consiste à remplacer les suites de valeurs identiques par une paire composée du nombre de répétition et de la valeur à répéter.
Exemple
Considérons un ensemble de données contenant des plages de valeurs répétées comme suit.
aaaabcccccd
Cet ensemble pourrait être représenté ainsi par un système de codage par plages:
a4b1c5d1
Dans cette représentation, des caractères ont été épargnés aux deux endroits dans l'ensemble où se trouvaient des caractères répétés. Cependant, comme chaque caractère est suivi d'un nombre de répétitions, un caractère a été rajouté aux deux emplacements ou se trouvaient des caractères n'étant pas répétés. Une approche pour éviter cet inconvénient pourrait être d'utiliser un caractère spécifique pour signaler une répétition:
*a4b*c5d
Cependant, cette approche a pour défaut de nécessiter un caractère de plus pour chaque répétition ; l'algorithme devient donc inutile pour des plages de moins de quatre valeurs identiques. Par ailleurs, selon la façon dont une telle approche est implémentée, il est possible que l'on doive lui dédier un caractère, qui ne pourra donc pas apparaître dans l'ensemble de données puisqu'il sera réservé à la signalisation des répétitions. Une solution à ce deuxième problème serait de plutôt signaler la présence d'un nombre de répétitions en répétant d'abord la valeur un certain nombre de fois dans l'ensemble comprimé[3].
Applications
- Le format BMP de Windows et OS/2 permet d'utiliser la compression RLE pour les images en 1, 4 et 8 bits/pixel (respectivement noir & blanc, 16 couleurs et 256 couleurs).
- Le format TIFF l'utilise en modes monochrome et couleur.
- Le format PCX utilise également le principe de la compression RLE pour les images en 8 et 24 bits/pixel. Dans le cas des images en 24 bits/pixel, l'image est en fait découpée en trois plans de couleur (rouge, vert et bleu) où chaque plan est encodé comme une image en 8 bits/pixel[4].
Le codage par longueur de plage est aussi utilisé pour les fax Groupe 3 et Groupe 4 (Recommandations ITU-T T.4 et T.6), son usage le plus fréquent hors informatique. Les lignes, ici des successions de points blancs ou noirs, sont codées par leur longueur en pixel de chaque couleur. Mais les longueurs sont codées en fonction de leur fréquence d'apparition. Et ce codage fait partie de la spécification. Il s'agit d'une sorte de compression Huffman prédéfinie. Chaque segment est forcément de la couleur opposée et cette couleur ne doit donc pas être transmise, augmentant la compression. Dans l'exemple le W et B ne sont pas transmis. Par contre, cela implique que chaque ligne commence par une couleur connue. Et quand la longueur dépasse celle possible, on intercale l'autre couleur mais de longueur nulle.
La même compression peut être utilisée en niveaux de gris mais elle est alors peu efficace en raison de la faible vitesse de transmission des fax pour de telles images.
Notes et références
- Nikola Stikov/Yves Goussard, « Compression et codage : méthodes élémentaires », (consulté le )
- UIT, « T.4 : Normalisation des télécopieurs du Groupe 3 pour la transmission de documents » (consulté le )
- (en) Steven Pigeon, « Ad Hoc Compression Methods: RLE », (consulté le )
- David C. Key/John R. Levine, Graphics File Formats, Windcrest McGraw-Hill, , 2e éd.