TP4 - Manipulation d'Images en Niveaux de Gris
Projet réalisé par SAEZ Théo
Contexte
Ce TP porte sur la représentation et la manipulation d’images en niveaux de gris. Les images sont constituées de pixels dont la couleur est caractérisée par un niveau de gris, représenté par un nombre entre 0 (noir) et 1 (blanc).
L’objectif est d’implémenter plusieurs classes Java permettant de manipuler ces images, d’appliquer des transformations simples, et de comprendre la gestion des couleurs en niveaux de gris.
Organisation du TP
Le TP est divisé en plusieurs parties correspondant à des tâches à réaliser :
1. Représentation des couleurs en niveaux de gris
- Compléter la classe
ByteGrayColor
qui implémente l’interfaceGrayColor
. - Implémenter les méthodes pour obtenir la luminosité, la couleur, et la comparaison entre couleurs.
- Ajouter des constantes pour les couleurs noir et blanc.
2. Représentation des images en niveaux de gris
- Compléter la classe
MatrixGrayImage
qui implémente l’interfaceGrayImage
. - Gérer la matrice de pixels, initialiser une image blanche.
3. Transformations d’images
Implémenter plusieurs transformations en créant des classes qui implémentent l’interface Transform
:
- Invert : inversion des niveaux de gris.
- DecreaseGrayLevels : diminution du nombre de niveaux de gris.
- Outline : extraction des contours avec un seuil donné.
- Pixelate : pixelisation de l’image avec une taille de carré donnée.
- CompositeTransform : composition de plusieurs transformations successives.
4. Tâches supplémentaires (optionnelles)
- Création d’une transformation miroir (verticale, horizontale, ou les deux).
- Gestion d’images en couleurs au format PPM.
- Ajout d’un menu dans l’application pour contrôler les transformations et la gestion des fichiers.
Installation et exécution
- Forker le projet GitLab fourni (lien dans le sujet).
- Cloner votre fork localement.
- Importer le projet en tant que projet Gradle dans votre IDE (ex : IntelliJ IDEA, Eclipse).
- Compiler le projet.
- Exécuter l’application via la classe
Display
:- L’image sera chargée, transformée selon la transformation appliquée dans la méthode
initialize
, puis affichée.
- L’image sera chargée, transformée selon la transformation appliquée dans la méthode
- Faire régulièrement des commits pour suivre votre progression.
Conseils
- Suivez les consignes de chaque tâche dans le PDF du TP.
- Supprimez les commentaires TODO une fois les méthodes complétées.
- Testez régulièrement vos classes et transformations.
- Utilisez
Math.floor
pour la quantification des niveaux de gris. - Respectez la gestion des coordonnées
(x, y)
avec(0,0)
en haut à gauche.
Résultats attendus
Pour chaque transformation, vous devriez obtenir un affichage correspondant aux exemples fournis dans le sujet :
- Image inversée pour
Invert
. - Image avec un nombre réduit de niveaux de gris pour
DecreaseGrayLevels
. - Contours extraits pour
Outline
. - Image pixelisée pour
Pixelate
. - Image transformée par la composition des trois transformations dans
CompositeTransform
.
Structure du projet
-
GrayColor
(interface) -
ByteGrayColor
(classe) -
GrayImage
(interface) -
MatrixGrayImage
(classe) -
Transform
(interface) - Transformations :
Invert
DecreaseGrayLevels
Outline
Pixelate
CompositeTransform
-
Display
(classe principale pour lancer l’application)