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).