Image et Son : TD 2
Transcription
Image et Son : TD 2
Université Bordeaux 1 Licence Sciences et Technologies Image et Son : TD 2 Manipulation d’images Exercice 2.1 Format PGM et PPM Une image PGM (portable grey map) est une image en niveaux de gris : à chaque pixel est affectée une intensité correspondant au niveau de gris du pixel. Par exemple, un pixel avec une intensité de 0 apparaitra noir, un pixel avec l’intensité maximale apparaitra blanc. Une image PPM est une image couleur : à chaque pixel est affecté une couleur représentée par ses 3 composantes (rouge, vert, bleu). Par exemple, le pixel de couleur (255, 0, 0) sera un rouge vif, alors que le pixel de couleur (0, 0, 10) apparaitra bleu foncé. Chaque format d’image devant répondre à un ensemble de spécifications strictes, un fichier représentant une image au format PGM/PPM devra contenir, dans l’ordre : – – – – P2 si au format PGM, P3 pour le format PPM La hauteur et la largeur de l’image La valeur maximale que peut prendre une intensité (255 dans notre cas), L’intensité du niveau de gris de chaque pixel si P2, la valeur de chacune des composantes de la couleur du pixel si P3. Les pixels sont stockés ligne par ligne, de gauche à droite et de haut en bas. 1 - Ouvrez avec Emacs un des fichiers PGM que vous avez manipulé au dernier TD. Repérez l’emplacement des sections ci-dessus, puis modifiez la couleur des pixels supérieur gauche et inférieur droit. Visualisez cette modification avec GIMP. Exercice 2.2 Lecture et écriture d’images aux formats PGM/PPM Pour charger et enregistrer des images aux formats PGM/PPM, nous utiliserons le fichier images.c, que vous trouverez a la page http://www.labri.fr/~boubek/ens/is/index.html. Attention, à ne pas écraser l’image source lors de vos sauvegardes en utilisant un nom de fichier différent. 1 - Analysez le code source, et plus particuliérement les fonctions lireNdgImage et ecrireNdgImage. Compilez et exécutez le programme. Que fait-il ? 2 - Ajoutez une instruction affectant au pixel en haut à gauche de l’image la couleur noire. Vérifiez sous GIMP que votre modification est prise en compte et que l’image est bien enregistrée. 3 - En vous inspirant de ce code et de la définition du type coulIm, écrivez une fonction lireCoulImage (char *nom, coulIm) et une fonction ecrireCoulImage (char *nom, coulIm) effectuant des opérations analogues sur des images couleurs. 4 - Chargez une image couleur, puis modifiez en jaune la couleur du pixel se trouvant en son milieu. Sauvegardez l’image sous un nouveau nom et vérifiez votre résultat. Exercice 2.3 Création d’images PGM 1 - Ecrivez et testez une nouvelle fonction qui va créer et enregistrer une image unie présentant un niveau de gris de 127. 1 2 - Ecrivez et testez une nouvelle fonction enregistrant une image avec un dégradé horizontal du noir vers le blanc. Exercice 2.4 Quantification On appelle quantification l’opération qui consiste a réduire le nombre de couleurs représentant une image. 1 - Ecrivez et testez une fonction binarisation (ndgIm src, ndgIm dest) transformant une image en niveau de gris en une image binaire1 . Vous utiliserez le niveau de gris moyen 127 pour déterminer si le pixel de destination est blanc ou noir. 2 - Modifiez la valeur de seuil (qui était fixé à 127) pour que la distribution des pixels blancs et noirs dans l’image de destination soit plus équilibrée. Exercice 2.5 Manipulations classiques 1 - Ecrivez et testez une fonction inversionHorizontale (ndgIm src, ndgIm dest) qui va inverser horizontalement les pixels de l’image source. 2 - Ecrivez une nouvelle fonction inversionHorizontaleSrc (ndgIm im) qui va modifier directement l’image source. Vous n’utiliserez pas d’image temporaire. 3 - Ecrivez et testez une fonction enregistrerSelection (ndgIm src, int x, int y) qui va enregistrer une région de l’image source dans un nouveau fichier. La région sera définie par son coin supérieur gauche (x, y) passé en paramètres et par ses dimensions LARGEUR REGION et HAUTEUR REGION prédéfinies. Exercice 2.6 Images couleur Pour adapter les algorithmes précédents à des images couleur, il suffit de considérer les trois composantes associées à chaque pixel au lieu d’une unique intensité. 1 - Ecrivez deux fonctions ndgVersCoul (ndgIm src, coulIm dest) et coulVersNdg (coulIm src, ndgIm dest) transformant une image en niveaux de gris en couleur et réciproquement. Vérifiez toujours vos résultats en visualisant avec GIMP l’image enregistrée. 2 - Ecrivez une fonction remplacerCouleur (coulIm src, ...) dont l’en-tête est compléter. La fonction devra remplacer dans l’image toutes les occurences d’une certaine couleur par une autre. Exercice 2.6 Opérations arithmétiques Le résultat de l’application d’une opération (arithmétique ou booléenne dans notre cas) à deux images est une troisième image dont la valeur de chaque pixel est le résultat de l’application de l’opération aux 2 pixels correspondants. Par exemple, la différence de 2 images a et b est une 3ème image c dont chaque pixel c(x, y) a pour valeur a(x, y) − b(x, y). 1 Une image binaire ne contient que des pixels blanc ou noir. 2 1 - Ecrivez une fonction réalisant la différence entre deux images en niveaux de gris. Pour tester votre implémentation, vous pourrez utiliser les images diffA.pgm et diffB.pgm. 2 - Ecrivez une fonction réalisant l’addition de deux images couleur. 3 - L’opération de mélange (blending en anglais) consiste à superposer deux images l’une sur l’autre. Ecrivez-en une variante simplifiée superposer (coulIm fond, coulIm objet, coulIm resultat) qui va incruster l’objet dans le fond. Vous pourrez tester vos résultats avec les images fond.ppm et objet.ppm. 3