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