Episode 02 : Pixels et Python

Les images en COULEUR !

Les ondes électromagnétiques !

Ce qu'il faut retenir !

Le soleil émet plusieurs types d'ondes electromagnétiques. En fonction de leur fréquences, celles-ci sont :
Les ultraviolets (UV (responsables des coups de soleils),
La lumière visible
Les infrarouges (elles permettent de réchauffer l'atmosphère)
Les micro-ondes
Les ondes radio, tout à fait comparables à celles émises par les émetteurs de programmes radiophoniques et télévisés, si ce n'est que le Soleil n'émet pas votre musique préférée.

L'OEIL

Ce qu'il faut retenir !

L'oeil humain voit en couleur quand il y a beaucoup de lumière et en noir et blanc lorsqu'il y en a peu. En effet, il dispose de deux type de cellules pour récupérer la lumière, les cônes et les bâtonnets.
Les cônes sont divisés en trois types, ceux qui sont sensibles à la lumière rouge, à la lumière verte et à la lumière bleue.

le cerveau "assemble" l'image avec l'ensemble des informations transmises par les cellules.

Ce qu'il faut retenir !

La lumière est composée de plusieurs longueurs d'ondes. Nous sommes sensibles à certaines longueurs d'ondes qui nous permettent de distinguer la lumière rouge, de la lumière verte et de la lumière bleue.

Les lumières rouges, vertes et bleues S'ADDITIONNENT ENTRE ELLES ! Ainsi, si on mélange les trois ensemble, on obtient de la lumière blanche. A l'inverse, on peut séparer les couleurs entre elles, à ce moment là on parle de lumière polarisée

Le système de codage RVB

Ce qu'il faut retenir !

Les informaticiens ont décidé de coder leurs images sur le principe de l'addidtion des couleurs, c'est le système dit RVB, pour rouge, vert, bleu. Chaque pixel utilise trois octets de mémoire, où un octet est utilisé pour le rouge, un octet pour le vert et un octet pour le bleu.
le noir est codé (0,0,0)
le blanc est codé (255,255,255)
Le rouge est codé (255,0,0)
le vert est codé (0,255,0)
Le orange est codé (255,128,0)
Avec ce système, on peut coder 255 x 255 x 255 couleurs différentes, soit 16 581 375 couleurs possibles !

La nécéssité de la programmation

Il y a énormément de nombres à gérer dans une image en couleur. Ainsi, une image d'une vidéo HD fait 1920 pixels en largeur par 1024 pixels en hauteur. Il y a donc 1920 X 1024 = 1 966 080 pixels. Avec trois nombres pour définir la couleur de chacun des pixels, cela fait presque 6 MILLIONS de nombres à gérer !
Avec autant de nombres, on ne peut plus travailler directement sur le bloc notes !

On va donc écrire un programme qui va le faire à notre place !

Le but du code, c’est de pouvoir parler à la machine. Pour cela, il existe plusieurs langages. En réalité, la machine ne comprend qu’un langage, le langage binaire, qui n’est fait que de 0 et de 1. Pour un humain, c’est beaucoup plus difficile et ce n’est pas pratique du tout… Heureusement, les informaticiens ont créé différents langages qui aident à donner des ordres aux machines plus simplement et plus rapidement. Ce sont les langages informatiques. Il en existe plusieurs et ils ont tous leurs particularités. Par exemple, il y a Python qui est utile pour programmer des logiciels ou le HTML qui est utilisé sur tous les sites internet.

Eclaircir une image

Programmer : C'est résoudre un problème avec une suite d'instructions claires.

Ainsi, comment pouvons nous passer de

à

Pour créer un filtre permettant d'éclaircir une photographie, il faut réussir à augmenter la part de blanc de chacun des pixels de l'image.

Nous avons vu lors du TP que l'on peut modifier une image uniquement en manipulant les chiffres qui la composent. Une image en noir et blanc étant composée de 256 nuances de gris allant de 0 à 255.

Pour pouvoir éclaircir une image, nous allons AUGMENTER les valeurs de blanc de chaque couleur.
Nous avons vu qu'un pixel, dans une image en couleur, était composé de trois nombres :
Un nombre entre 0 et 255 pour le rouge,
Un nombre entre 0 et 255 pour le vert,
Un nombre entre 0 et 255 pour le bleu.

De plus, comme le noir est codé (0, 0, 0 ) et le blanc est codé (255, 255, 255 ), il suffit, pour eclaircir une image, que la valeur des pixels soit plus proche de 255 que de 0. Ainsi, on va éclaircir l'image en ajoutant une valeur fixe à chacun des pixels !

Le programme est un algorithme qui se déroule en quatre grandes étapes:
Etape 1 : Tout d'abord, on va ouvrir une image et en créer un clone.
Etape 2 :On va ensuite récupérer la liste de toutes les valeurs de tous les pixels qui la composent.
Etape 3 :Puis on va ajouter une valeur constante à chacun d'eux.
Etape 4 :On va enfin créer une nouvelle image avec les nouvelles valeurs.

Etape 1 : Définir une variable.

Lorsque je travaille sur une image, en Python, je ne vais pas tout coder. Je vais en fait appeler des fonctions préprogrammées par la machine. Elles font gagner un temps considérable. Parfois, certaines instructions ne sont pas directement intégrées à Python. Pour pouvoir les utiliser, on va aller les chercher dans une "bibliothèque". C'est le cas lorsqu'on manipule des images. Dans ce cas, on utilise une biliothèque appelée PIL.

importe la fonction Image à partir de la bibliotheque PIL.

On récupere dans la variable maphoto toutes les donnees numériques de l'image...

MAIS C'EST QUOI UNE VARIABLE ?

Ainsi, on déclare une variable maphoto qui va contenir toutes les données de l'image. Cette variable est une énorme boite qui va contenir tous les nombres de tous les pixels de mon image.

Je ne connais pas le nombre de pixels dans mon image. Avec la fonction .size je crée deux variables longueur et largeur à partir des données contenues dans la variable "maphoto".
.size est bien une instruction préprogrammée.

Je déclare une nouvelle variable : "maphototransformee". Elle va être identique dans sa définition à l'image d'origine car elle est crée avec les même valeurs issues des variables longueur et largeur.

Etape 2 : Créer une boucle

Nous voulons que l'ordinateur répète la même opération sur la totalité des pixels de l'image. Comme cette opération doit être répétée des milliers, voire des millions de fois, on va créer une boucle logique avec la commande for.

Pour que tous les pixels de l'image soient utilisés, on va créer une double boucle !

Souvenons nous qu'une image est composée des pixels contenus sur les lignes et des pixels contenus sur les colonnes.

For va attribuer à la variable y la totalité des valeurs des pixels sur la première colonne.

La deuxime ligne de commande For permet de sélectionner l'ensemble des pixels contenus sur la première ligne.

En combinant les deux instructions, lorsque le programme a fini de faire les opérations sur la première ligne de pixels, il recommence à la suivante.

et il va continuer jusqu'à ce qu'il arrive au dernier pixel de la dernière ligne. A ce moment là, le programme passe enfin à la commande suivante.

Etape 3 : Modifier les valeurs de chacun des pixels

La variable "variablecouleur" récupère les valeurs contenues dans le pixel situé en x et en y grâce à l'instruction getpixel. Ainsi, pour chaque pixel, "variablecouleur" va obtenir trois nombres : la couleur rouge en premier, puis la couleur verte en second et enfin la couleur bleue en dernier.

La variable rouge récupère le premier nombre. Attention, en Python, le premier nombre d'une liste est le numéro 0, le deuxième le numéro 1, le troisième le numéro 2, et ainsi de suite....

Maintenant que l'on a isolé les valeurs de rouge, de vert et de bleu, on peut leur ajouter une valeur constante.

Une fois la valeur de rouge, de vert et de bleu transformée, avec l'instruction putpixel, j'insère les nouvelles valeur dans la variable de la nouvelle image : maphototransformee

Etape 4 : Enregistrer la nouvelle image.

Avec l'instruction .save, j'enregistre les valeurs contenues dans la variable "maphototransformée". Si on prends une image full HD, soit 1920 par 1080 pixels, l'ordinateur va répéter la boucle d'instructions près de 2 millions de fois et mofifier près de 6 millions de valeurs. Tout cela en une quinzaine de ligne de code !

Telephone

06 13 72 75 33

lycée Louis et Auguste Lumière

50 boulevard des Etats Unis
69008 LYON