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