ISN Menton TP JAVA : représenter des images 2012

Transcription

ISN Menton TP JAVA : représenter des images 2012
ISN Menton
TP JAVA : représenter des images
2012-2013
Objectif : Utiliser la proglet JavaScool CodagePixel pour comprendre des
transformations effectuées sur les pixels d’une image.
I Créer des carrés uniformes, des carrés avec des bandes et un échiquier !
Voici un programme JavaScool qui utilise la proglet CodagePixels.
void main(){
int taille = 10;
reset(taille,taille);
for (int i=-taille;i<=taille;i++)
for (int j=-taille;j<=taille;j++)
{
setPixel(i,j,0);
}
}
a) Coder ce programme dans JavaScool et décrire ce qu’il produit.
b) Décrire ce que fait l’instruction reset(taille,taille)
c) Préciser le rôle des deux variables i et j et des deux boucles imbriquées
for.
d) Préciser les paramètres de l’instruction setPixel(i,j,0) ;
e) Modifier le programme pour afficher un carré de couleur blanche, puis en
nuance de gris, puis d’une couleur de ton choix (rouge, vert, jaune ….)
f) Modifier ce programme (le sauvegarder sous un autre nom) pour créer une
image de ce type (bandes verticales ou horizontales alternées)
g) S’inspirer du programme précédent pour créer le damier d’un jeu de dames
puis un échiquier.
1
ISN Menton
TP JAVA : représenter des images
2012-2013
II Appliquer des transformations sur une image
1) Sur une image en niveaux de gris
void main(){
String image =
"http://javascool.gforge.inria.fr/documents/sketchbook/codagePixels/doisneaubuffon.jpg";
load(image);
if(readBoolean("On traite l'image ?")) {
for (int i=-getHeight();i<=getHeight();i++)
for (int j=-getWidth();j<=getWidth();j++)
{
int pix = getPixel(i,j);
setPixel(i,j,255 - pix);
}
}
}
a) Coder ce programme avec la proglet CodagePixels de JavaScool et
décrire ce que fait ce programme.
Préciser ce que fait l’instruction pix = getPixel(i ;j) ;
Préciser ce que fait l’instruction setPixel(i,j,255 - pix);
b) Augmenter ou baisser la luminosité d'une image revient à ajouter ou
soustraire une valeur constante à la valeur de chaque pixel.
Faire varier la luminosité de l’image en modifiant le programme
précédent.


Que se passe-t-il si on choisit setPixel(i,j,pix + 255); et pourquoi ?
Que se passe-t-il si on choisit setPixel(i,j,pix - 255); et pourquoi ?
c) Augmenter ou baisser le contraste d'une image revient à multiplier ou
diviser par un gain constant la valeur de chaque pixel.
essayez en modifiant la fonction f().
Faire varier le contraste de l’image en modifiant le programme
précédent.



Que se passe-t-il si on choisit setPixel(i,j,0.5*pix); et pourquoi ?
Que se passe-t-il si on choisit setPixel(i,j,0*pix); et pourquoi ?
Que se passe-t-il si on choisit setPixel(i,j, 100 * (pix - 128)); et
pourquoi ?
2
ISN Menton
TP JAVA : représenter des images
2012-2013
2) Sur une image en couleurs
On se propose d’écrire un programme JavaScool qui transforme une image en
couleurs vers une image en niveaux de gris.
A l’aide de l’instruction int rgb[] = getPixelColor(i,j), on déclare et récupére un
tableau nommé rgb dont les 3 premiers indices contiennent les composantes RGB
du pixel de coordonnées (i,j) de l’image en couleur.
Principe de l’algorithme de transformation d’une image en couleurs vers une image
en niveaux de gris :
Pour chaque pixel, on fait la moyenne des 3 composantes R, G et B, et on
remplace ce pixel avec cette moyenne pour chaque composante R, G et B.
a) Ecrire un programme JavaScool qui réalise cette transformation et le
tester avec une image couleur de votre choix prise sur Internet.
b) A ton avis, est-il possible de réaliser facilement l’opération inverse : à
partir d’une image en niveaux de gris, récupérer l’image en couleurs
correspondante ?
Argumente ta réponse.
3