Vous êtes sur la page 1sur 2

M1 Ingénierie et Innovations en Images et Réseaux

Traitement d’images - TP 3 - Février 2019

Traitement d’images avec java2D

Remarque
– Ces travaux pratiques font l’objet d’un Compte Rendu papier qui doit être rendu à l’enseignant
responsable du TP à la fin de la séance. Ce compte rendu fera état d’une description détaillée des
réponses et programmes développés.
– Attention : L’enseignant responsable du TP vérifiera que vos programmes fonctionnent, en fin de
séance.

But
Le but de ce TP est de vous permettre à prendre en main la bibliothèque de traitement d’images java2D.
Comme nous l’avons expliqué en cours, il est possible d’intervenir directement sur l’image en manipulant
les pixels (leurs cordonnées ou leurs valeurs) grâce à l’objet BufferedImage qui contient :
– un WritableRaster qui contient les données brutes des pixels (tableau d’objets de la classe DataBuffer)
et la manière d’interprétation des données brutes (objet de la classe SampleModel),
– un ColorModel qui spécifie la manière d’interprétation des couleurs.
En outre et afin de faciliter le traitement d’images, java2D fournit toute une panoplie d’opérations qu’il
est possible d’appliquer sur les images. Nous rappelons qu’une opération consiste à tranformer une image
source en modifiant les coordonnées ou contenus des pixels afin d’obtenir une nouvelle image de destination.
Nous distingons deux types d’opérations :
– Déplacement de pixels qui consiste à déplacer toutes les cordonnées des pixels, suivant une trasfor-
mation affine ((xdest , ydest ) = (a × xsrc + b × ysrc + c, a′ × xsrc + b′ × ysrc + c′ )). Parmi les opérations
fournies, nous citons la translation, la mise à l’échelle (aggrandissement/réduction), la rotation, etc. Il
est aussi possible de spécifier l’opération de transformation affine à effectuer en définissant la matrice
de transformation affine Aff comme suit :
 
af f(0,0) af f(0,1) af f(0,2)
Af f = af f(1,0) af f(1,1) af f(1,2) 
0 0 1

Nous obtenons les nouvelles coordonnées xdest et ydest d’un pixel dont les coordonnées dans l’image
source sont xsrc et ysrc par :
    
xdest af f(0,0) af f(0,1) af f(0,2) xsrc
 ydest  = af f(1,0) af f(1,1) af f(1,2)   ysrc 
1 0 0 1 1

Par exemple, pour réaliser un aggrandissement d’une image (×coef ), la transformation affine à réaliser
sera définie par la matrice Af faggrandir suivante :

Traitement d’images 1 TP 3
M1 Ingénierie et Innovations en Images et Réseaux

 
coef 0 0
Af faggrandir = 0 coef 0
0 0 1
Le code java correspondant est :
protected BufferedImage zoomerImage (double coef, BufferedImage srcIm){
BufferedImage dstImg
= new BufferedImage ((int)(srcImg.getWidth()*coef), (int)(srcImg.getHeight()*coef), srcImg.getType());

// new AffineTransform (double m00, double m10, double m01, double m11, double m02, double m12)
AffineTransform zoom = new AffineTransform (coef, 0., 0., coef, 0., 0.) ;
int interpolation = AffineTransformOp.TYPE BICUBIC ;
AffineTransformOp zoomOp = new AffineTransformOp (zoom, interpolation);

zoomOp.filter(srcImg, dstImg );
return dstImg ;
}
– Convolution qui consiste à modifier le contenu des pixels de l’image en appliquant un noyau défini
par une matrice Kn×m . En cours, nous avons vu trois noyaux permettant de flouter, déterminer les
contours horizontaux et déterminer les contours verticaux. Pour éclaircir une image, nous pourrons
utiliser le noyau défini par la matrice (1/0.7) (pour assombrir une image, nous pourrons utiliser le
noyau (0.7)). Il est aussi possible d’utiliser l’opération RescaleOp qui modifie chaque couleur c d’un
pixel en c × constante + constante’.

Question 1 Implémenter les fonctionalités suivantes :


1. Miroire horizontal (l’ordonnée reste inchangée),
2. Miroire vertical (l’abcisse reste inchangée),
3. Rotation à gauche (rotation dans le sens inverse des aiguilles d’une montre) d’un multiple de π/2. Le
centre de rotation c est défini par les coordonnées (⌈LargeurImage/2⌉, ⌈HauteurImage/2⌉)
4. Vue mozaı̈que de l’image (à partir de l’image actuelle, construire une nouvelle image dont la taille est
4 fois plus petite. Ensuite, afficher 4 fois cette image à raison de 2 images par ligne),
5. Superposition de deux images en les distançant de 10 pixels (ce que vous apercevez sur une TV 3D sans
lunettes 3D). De ce fait, la nouvelle image sera plus large de 10 pixels par rapport à l’image source.
Pour ce faire, nous utiliserons les instructions suivantes :
Graphics2D graphics2D = imageDestination.createGraphics() ;
Composite newComposite = AlphaComposite.getInstance(AlphaComposite.SRC OVER, transparence);
// transparence == 0 --> image completement transparente, transparence == 1 --> pas de transparence
graphics2D.setComposite(newComposite);
graphics2D.drawImage(monImage, 0, 0, null) ;
...
graphics2D.dispose ();
6. Inversion des couleurs (les nouveaux niveaux rouge, vert et bleu sont respectivement égaux à 255 -
rouge, 255 - vert, 255 - bleu).

Traitement d’images 2 TP 3

Vous aimerez peut-être aussi