Codage des images – Exercices

Codage-Décodage RLE

Le système de codage RLE (Run Length Encoding ou codage par longueur des plages), est certes ancien, mais a longtemps été utilisé dans les transmissions par fax. L’image ci-contre est codée par les nombres figurant à sa droite.
  • Expliciter le codage employé
  • Quel est le taux de compression de cette image ?
  • S'agit-il d'un système de compression avec ou sans pertes ?
Une image en noir et blanc peut aisément être exprimée en Python sous la forme d'une liste de listes : img_nb = [[0,1,1,1,0], [0,0,0,0,1], [0,1,1,1,1], [1,0,0,0,1], [1,0,0,0,1], [0,1,1,1,1]]
  • Écrire une fonction afficheur()  permettant de générer simplement une image en noir et blanc avec des caractères.
Par exemple : print(afficheur(img_nb))  doit afficher dans la console :
  • Écrire une fonction encoder()  permettant d'encoder une image en noir et blanc en codage RLE
Par exemple : encoder(img_nb)  doit renvoyer : [[1,3,1], [4,1], [1,4], [0,1,3,1], [0,1,3,1], [1,4]]
  • Écrire une fonction decoder()  permettant de réaliser l'opération inverse.

Éléments de Correction

Version longue :

Version "courte" :

 

Conversion image→ascii

Écrire un programme qui converti une image en caractères ascii. Indications :
  • télécharger l'image ci-contre,
  • utiliser la bibliothèque PIL pour la convertir  en niveaux de gris, puis en obtenir une liste de valeurs de pixels,
  • utiliser les caractères suivants pour coder les couleurs :
    • coul70 = """$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,"^`'. """
    • coul16 = "MNHQ$OC?7>!:-;. "
 

$ZZZ$Z777777II777777III?IIII??+++????++++++??++++++======+++ Z$$7$$77$77777II777IIII???ZDNNNNNDO7+?+++=+++++++=+====~==++ $$$$$$7777III?IIIIII????NDOODNNNMMNDN8+?=++=++===~=========+ $$$$77II7IIIIIIII?I??+ZNDDZODNNNNNMMMN8I===+++=====~~~~~==== $7777777IIII??I?I??++7D$+===+?I$DNMMNMNM7==~=~==~~~~~~~~==== $$77IIIIIIII?????+++?MI+~~~~~=+?$8NNMMMNM+====~~~~~~~:::~=== 7I7II???+?????++?+~+OD?+===~==??7Z8DMMNMM8??+++==~=~~~::~~== 7I$$7I???++???++?=?$NO?+=~====++?I$ONNMMMMI7II+===~~::::~~== O8ZZ8$777$??+==+==7ONO+++===?7I?I7Z8MMMNNM$O$?II??++~~~:,~=+ DDOOOZ8OOOOZZI=+=+88ND8$8$+7DINNN87ZNMMMMMOZZ$I7I$I?~~~~~=++ 8888O88O88OZO?+II?8NMZ7?7I=7$+III+IZNMMMNM8ZZZ7$777I=::~~=+? DD88888D88DD88OO8ZONM$+==++II=~~=I$OMMMMMND$$Z$$$ZZ$?====+?? MNNNDN88D8DDDDD8DNNNND+++++II+=+?$8DMMNNMMNDOO$$$$II????I7$I NNDNNDNN88D88DDDDMMMMM7I+IDMD=??7ZDNMMMMMMMN8OOOOOZZ$Z$$$$ZZ NMNNNNDDN8DDD8DDDNMMNM$77+7$7$II7ZDNMMMMMMNNOZOOZOOOZ$$77$OO MNDDNDDDDNNNDNDDDDMNMMNZI+77$7II$ODNMMMMMMNNOOZZZZZZZZZZOZZO MNNNNNNNNDDD8888OODNMMMMN+==I7$ODDNMMMMMMMMNOZZ$$ZOOZ$$$ZZOO NMNMNDDDNNNND88OZ$NNMMMMMMD8DDNDNMNNMMMMMMNN8O8OZOOO8OOOOZ$$ MNMMMNNNDDD88OOOZ$NMMMMMMMMNMMMMNNDDDMMMMMMNDOOZZ$O8OO88O8OO MMMMMNND88OOZOOZZZODMMMMMMMN7ZO88OZZONNNMNNNNO$777$$$Z77IIZZ NNNNND88NDNNO8OOOODNMMMMMMMD7I77$7II$8NNNNNMMNND8DZON$IIIZ7Z NNNNDDD88DD8MNNMDMNMMMMMMD7II?I?I???IZDN8NNNMMDDN8DO8ZI?Z$7$ NDNMNDDNNDDDMNMMDMMMMMMDII+?++++==++IZDDZ8NNNNMN8OI?I$7Z7ZOO NNMMDDDD8ODNNNMMNMMMMNO7++====+====+?$OO8DMNNNNNN8Z$$77I7777 DNDNNO88ZODDNDNDNMMMD87?==========++IO888MNDO8DDMMD8Z7I?I??? NNNMMD$$ZO8DN8NNMMMMZ$+===========++IO8DDO$$$$Z88NNMD88O$O7$ DNDDNNNNDOOOONMMMMN8I?=======~~~==+?7ZZOZ7I7ODNNNMMMMND88NZ7 NNNNDDNDD8OO8MMMMMNNZ+~~=+=~~~~~~~=+7ZZZNMDDNMMMMMMMMMNN88D8 DND8OO8OZZ8DMMMMMMD88O$I?=~~~~~~==I$ODMMNNMMMMMMMMMMMNMNOOO8 ND88DD88DDMMMMMMMDD8DD8D8888OZZ$$88D8MMMMNNDNNMMMMMMMMMNNDDD MDD88OOOZOMMMMMMMDNDMDMD8888DDDD8NNMMMMMNNDNDMDDNDMMMMMMM8D8 MNNNNDNDDNMMMMMMMMNMNMNDDDDDMNDNMMMMMMMNNNNND88DNDNMMMNNNNZZ MMNNDNDDNMMMMMMMMMMMMMNNNNNNMNMNMMMMMMMMMMDND88O8NMMMMNNMMNN M88OO8OODMMMMMMMMMMMMMMMMMMMNNMMMMMMMMMMMNNN8DDNMMMMMMNNNMD8 8D888O8OMMMMMMMMMMMMMMMMMMMMNMNMMMMMMMMMMNNNDNMMMMMMMMNNNNND MMMMNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMMMMMMMMMMMMNMNMN MMMNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMMMMMMMMMMMMNNMMN MMMMMMMMMMMNNMMMMMMMMMMMMMNMMMMMMMMMMMMMMMNMMMMMMMMMMMMMMNNN NMMMMMMMNMMMMMMMMMMMMMMMMNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMN NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMMMMMMMMNN MMMMMMMNDNMNDNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMNNNNMNN MMMMMMMMMONN8D8DMN88NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMNNNMN MMMMMMNDNMONDDNO77II777$ODMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNMN MMMMMMNNMDMNNN887777777$$7$OMMMMMMMMMMMMMMMMMMMMMMMMMNNNMMNN MMMMMMMMNMMNNMNNZZZ$$7777$$$7$ODMMMMMMMMMMMMMNMNMMMMMNNNNNNN MMMMMMMMMMMMMMMMNND8ZZ$$$$7$Z7I7D8DDO8DNN8DND8NMMMMMMNNNNNNN NMMMMMMMMMMMMMMMMMD8ZZZ$$Z$$8D$$$DDDO8D88D88NNNNMMMMMNMNNNMN

 

The Andy touch

source : http://isn.codelab.info/projets/mini-projets/mp03b-andy-dis-moi-oui/

À partir d’une image en couleur de votre choix, on se propose de dessiner une mosaïque inspirée par le portrait de Marylin  Monroe réalisé par Andy Warhol. Vous devez coder un programme qui reproduira cette image avec les traitements suivants sur sa table de couleurs (R1,G1,B1) :
  • Image n° 2 : les nouvelles couleurs (R2,G2,B2) des pixels sont permutées de telle manière que : R2=B1, G2=R1, B2=G1
  • Image n° 3 : les nouvelles couleurs (R3,G3,B3) des pixels sont permutées de telle manière que : R3=G1, G3=B1, B3=R1
  • Image n° 4 : les nouvelles couleurs (R4,G4,B4) des pixels sont inversées de telle manière que : R4=255-R1, G4=255-G1, B4=255-B1
  • Image n° 5 : elle représente l’image en niveaux de gris en faisant la moyenne des composantes (R1,G1,B1) de l’image initiale
  • Image n° 6 : les couleurs (R5,G5,B5) des pixels de l’image n° 5 sont inversées de telle manière que : R6=255-R5, G6=255-G5, B6=255-B5
  • Image n° 7 : elle représente l’image initiale en supprimant la composante bleue.
  • Image n° 8 : elle représente l’image initiale en supprimant la composante rouge.
  • Image n° 9 : elle représente l’image initiale  en supprimant la composante verte.

Détourage

Écrire une fonction permettant de réaliser un détourage automatique sur une image.
Idéalement, cela donnerait ça :
Mais en pratique, un tel résultat n'est pas possible de manière automatique. En première approche, une solution consiste à "effacer", autour d'un pixel de départ, les pixels qui ont des propriétés (luminosité, teinte, ...) "proches" de celles du pixel de départ. Par exemple, un logiciel comme Paint.NET est capable de cela :

Widget not in any sidebars
 

Vous aimerez aussi...

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

code