TD4 - Antoine Crouzet
Transcription
TD4 - Antoine Crouzet
T.D. n˚Rep-3 Représentation d’une image ISN 27 mars 2015 I - Introduction La représentation d’une image repose sur une idée assez simple : pour chaque pixel de l’image, on indique quelle couleur l’ordinateur doit afficher. a) Représentation d’une couleur Pour représenter une couleur, on utilise les trois couleurs primaires : le Rouge, le Vert et le Bleu, dont le mélange permet d’obtenir toutes les couleurs. Ainsi, pour obtenir du rouge, il faut prendre 100% de Rouge, 0% de Vert et 0% de Bleu ; pour obtenir du jaune, il faut prendre 100% de Rouge, 100% de Vert et 0% de Bleu. En informatique, on utilise ainsi le système RGB (Red Green Blue, RVB en français), où chaque proportion de couleur est codée avec 1 octet, de 0 (0%) à 255 (100%). Ainsi, le rouge est représenté par le triplet (255, 0, 0), et le jaune par le triplet (255, 255, 0). Exercice : Déterminer la représentation RVB des couleurs suivantes : bleu, vert, cyan et magenta. Question : toutes les couleurs existantes sont-elles représentées par le système RVB ainsi défini ? Combien de couleurs sont-elles représentées par ce système ? b) Représentation d’une image Pour représenter une image, l’idée est de la découper le plus finement possible en pixels, et d’indiquer, pour chaque pixel, sa couleur associée en RVB. On utilise ainsi une matrice de couleur. Exemple : on souhaite coder l’image suivante, où chaque carré représente un pixel. Sa matrice RVB est donc : (0, 0, 255) (0, 255, 0) (255, 0, 0) (255, 255, 255) Soit, en binaire 00000000 00000000 11111111 00000000 11111111 00000000 11111111 00000000 00000000 11111111 11111111 11111111 Exercice : déterminer la représentation matricielle, puis en binaire, de l’image suivante : Question : comment, connaissant la représentation en binaire d’une image, et connaissant sa largeur et sa hauteur en pixel, retrouve-t-on l’image elle-même ? Cette représentation code ainsi chaque pixel sur 3 octets, donc sur 24 bits. On la nomme BMP 24 bits, pour Bitmap (tableau de bits). c) Taille des images Exercice : on dipose d’une image de taille 800 pixels en largeur et 600 pixels en hauteur. Déterminer sa taille sur le disque en octets, puis en méga octets, si on la représente au format BMP 24 bits. Faites de même pour une image obtenue avec un appareil photos de 3000 pixels de large, et 2000 pixels de haut. II - Application informatique En Caml, pour représenter une image, on utilise exactement la même représentation : une image est représentée par une matrice (un vect vect) de triplets représentant le code RVB de l’image. Exercice : 1. Récupérer sur http ://cours.antoine-crouzet.fr/ ?id=ISN le fichier Graphique.ml. Ce fichier contient deux fonctions importantes : • dessin_pixel qui demande une couleur (type color) en Caml, l’abscisse x et l’ordonnée y d’un puxel et la taille choisie du pixel, et affiche le pixel avec la couleur demandée. • dessin_mat qui prend une matrice de triplet (r, v, b) et qui affiche l’image ainsi codée. Le fichier contient également un exemple de matrice. En vous inspirant de cette matrice, représenter, avec Caml, les deux images vues dans le cours. 2. Implémenter une fonction rouge : (int*int*int*) vect vect -> int -> int -> int qui, à une matrice de triplet, et à x et y représentant les coordonnées d’un pixel, renvoie la quantité de rouge de l’image codée par la matrice. Faites de même avec vert et bleu. 3. Implémenter une fonction negative : (int*int*int) vect vect -> (int*int*int) vect vect qui, à une matrice de triplet représentant une image, renvoie une autre matrice de triplet, où chaque pixel a été remplacé par son négatif (si un pixel a pour code RGB (0,255,110), il est remplacé par le code RGB (255,0,145)). On pourra utiliser l’instruction make_matrix lig col depart qui créé une matrice de lig lignes, col colonnes, et où tous les éléments sont remplies avec depart. 4. Implémenter une fonction retourne : (int*int*int) vect vect -> (int*int*int) vect vect qui, à une matrice de triplet représentant une image, renvoie une autre matrice de triplet représentant l’image précédente qui a été retournée (verticalement, ou horizontalement, au choix).