Section Numérique   –   Lycée Saint-Paul IV

Traitement de l'image

image_accueil


I. Présentation

Objectif du projet

L'idée du projet est de développer avec le langage Python et ses nombreuses bibliothèques une modeste application de traitement d'image.

Chaque filtre ou traitement particulier est développé par un des membres du projet sous la forme d'une fonction. Et un membre de l'équipe a pour mission de construire le programme global à l'aide de la bibliothèque tkinter la GUI (Graphical User Interface) standart de Python.

Nous détaillerons ci-après les différentes fonctions de traitement de l'image développées puis dans une dernière partie nous verrons le code dans sa globalité avec les différents widgets tkinter mis en oeuvre. Dans cette dernière partie vous trouverez également une exécutable windows vous permettant de tester l'application sans être obligé d'installer Python sur votre machine.



II. Les différents filtres et traitements proposés.

1. Négatif de l'image

Le principe est simple. Nous souhaitons passer d'une image couleur à son négatif c'est à dire le complément dans 255 de la quantité de chaque couleur primaire. En effet dans l'image initiale considérée chaque pixel est codé sur 24 bits, 8 bits pour chaque couleur soit un entier compris entre 0 et 255.

Prenons l'exemple du blanc (255 ; 255 ; 255) dont nous savons tous que le négatif est le noir (255-255 ; 255-255 ; 255-255).

Ainsi, pour chaque pixel nous remplacerons les trois valeurs entières (r, g, b) qui définissent sa couleur par (255-r, 255-g, 255-b)

La fonction "négatif" peut se coder de la façon suivante :





Exemple de traitement "négatif"

Exemple d'utilisation de la fonction de traitement "négatif".
Nous avons travaillé sur la base d'une magnifique photo de Mihaela Noroc, photographe roumaine qui parcourt la Terre pour capturer la beauté dans sa diversité. Vous trouverez ici un extrait de 28 des photos qu'elle a réalisées lors de son voyage à travers 37 pays à la rencontre des plus belles femmes du monde...



2. Image en niveau de gris

Ici, nous souhaitons du gris. Il suffit donc de mettre la même valeur de rouge , de vert et de bleu.

Nous allons donc remplacer chaque couleur par la moyenne des trois couleurs initiales.

gris = (rouge + vert + bleu)//3.

Le double slash "//" signifie que nous prenons la division entière afin d'obtenir un nombre entier.

La fonction "Gris" peut se coder de la façon suivante :





Exemple de traitement "négatif"

Exemple d'utilisation de la fonction de traitement "Gris".

3. Image en nuances de rouge

Afin d'obtenir des nuances de rouge et non de gris la méthode que nous avons choisie est extrêment simple : nous avons simplement mis le vert et bleu à 0 !

La fonction "Rouge" peut se coder de la façon suivante :





Exemple de traitement "négatif"

Exemple d'utilisation de la fonction de traitement "Rouge".

4. Symétrie

Le principe ici n'est pas très compliqué. Il ne s'agit pas de modifier les valeurs de rouge, vert et bleu par un savant calcul mais simplement de déplacer le pixel.

Il faut en changer l'abscisse pour une symétrie axiale suivant un axe vertical. Nous remplaçons donc les valeurs de rouge, vert et bleu du pixel d'abscisse "i" par celles du pixel d'abscisse "largeur de l'image - i".

La fonction "Renverser" peut se coder de la façon suivante :





Exemple de traitement "négatif"

Exemple d'utilisation de la fonction de traitement "Renverser".

5. Contours

On aborde ici des filtres plus complexes.

Afin de faire resortir les pixels situés aux bords des formes il faut comparer la valeur de chaque couleur avec les valeurs des pixels voisins. Nous nous sommes contenté ici de comparer avec les 4 pixels situés au dessus, en dessous, à droite et à gauche.

Nous vous laissons découvrir les problèmes d'effet de bords lorsqu'il n'y a pas de pixel au dessus et/ou à droite etc.

La valeur initiale de la couleur est remplacée par la somme des valeurs absolues des différences avec les pixels voisins. Si le résultat dépasse 255 alors on prend 255. Les bords très contrastés deviennent ainsi très clairs. De même l'absence de contraste avec les pixels voisins met le pixel en noir.

La fonction "Contour" peut se coder de la façon suivante :





Exemple de traitement "négatif"

Exemple d'utilisation de la fonction de traitement "Contour".

6. Débruitage

L'exemple d'illustration a été réalisé sur une image sans bruit. On ne constate alors que la perte de définition du filtre.

La méthode consiste à remplacer la valeur de chaque couleur d'un pixel par la médiane des valeurs de cette couleur pour les 8 pixels qui entourent le pixel considéré.

Nous rencontrons ici les mêmes problèmes d'effets de bords que dans le filtre précédent ce qui explique la longueur du code.

La fonction "Debruit" peut se coder de la façon suivante :





Exemple de traitement "négatif"

Exemple d'utilisation de la fonction de traitement "Débruit".

7. Pixellisation

Le principe consiste à remplacer la valeur de chaque couleur des pixels d'un carré de taille choisie par la moyenne des valeurs de cette couleur pour tous les pixels contenus dans le carré.

Nous rencontrons ici les mêmes problèmes d'effets de bords que dans les filtres précédents ce qui explique la longueur du code.

En effet, sur les bords nous n'avons plus des carrés mais des rectangles.

La fonction "Pixellisation" peut se coder de la façon suivante :





Exemple de traitement "négatif"

Exemple d'utilisation de la fonction de traitement "Pixellisation".

III. Code et rendu

1. Code Python complet.

Avec tous les widgets tkinter mis en oeuvre :

Le programme complet






2. Executable pour Windows

Nous vous mettrons très prochainement à disposition un executable windows si vous êtes sur ce système d'exploitation et que vous souhaitez essayer notre programme sans installer Python.

www.000webhost.com