Académique Documents
Professionnel Documents
Culture Documents
Traitement D'images Avec Java2d: × X × y × X × y
Traitement D'images Avec Java2d: × X × y × X × y
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’.
Traitement d’images 2 TP 3