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