Traitement d´images en Java avec JAI

L´imagerie en Java

Définition d´une image

Une image désigne un élément visuel arbitraire. Il peut représenter des éléments concrets du monde extérieur ou des éléments abstraits.

Informatiquement, une image est une structure visuelle constituée d´une ensemble de points appelés pixel (pour pictures elements). Chaque pixel est représénté par une couleur. On qualifie une image par sa résolution qui permet de définir sa taille en multipliant son nombre de pixels en largeur par son nombre de pixels en hauteur. On peut ici faire un parallèle avec les appareils photos numériques qui sont classés selon la définition des images qu´ils produisent : par exemple un appareil 1,2 méga pixel produira des images d´une définition de 1280 pixels en largeur et 1024 pixels en hauteur.

Représentation en Java

Historiquement, en Java 1.0, une image était représenté par la classe abstraite Image. Cette abstraction ne permettait pas d´accéder finement aux pixels de l´image et donc ne fournissait aucune possibilitée pour faire des traitement prés.

La sortie de Java2 avec Java2D corrige cette lacune en ajoutant l´interface RenderedImage et la classe BufferedImage qui l´implémente. Cette classe permet de récupérer les données pixel par pixel ainsi que de modifier le contenu de chaque pixel. Une BufferedImage ne contient pas les données mais elle se compose de sous éléments définissant l´ensemble des parties de l´image qui sont détaillés ici :

On distingue les deux principaux éléments contenus dans l´image :

Java Advanced Imaging

L´introduction de Java2D ajoutait à java des possibilités vastes pour le traitement d´images mais une partie de l´industrie n´a pas considéré ces possibilités comme suffisantes. Il a donc été décidé de créer une nouvelle API compatible avec Java2D mais étendant les possibilités offertes par celle-ci.

Java Advanced Imaging, ou plus simplement nommé JAI, est ainsi compatible avec le coeur de Java en reprenant les mêmes interfaces et classes dès que possible. Ainsi, JAI redéfinit ses propres classes représentant une image, mais continue d´utiliser les classes ColorModel, SampleModel et l´interface RenderedImage. Cela permet de pouvoir indépendemment remplacer les images Java2D par celles définit par JAI.

JAI apporte les avantages suivants par rapport à Java2D :


Un ensemble de filtres de traitements d´images sont fournis avec JAI ainsi que la possibilité de créer ses propres filtres.

la partie suivante va nous permettre de détailler les principaux traitements qui sont effectués sur une image ainsi que les filtres que JAI propose pour effectuer ces traitements.