Traitement d'images en Java avec JAI

Slides:



Advertisements
Présentations similaires
Ghost (Création d'image Système)‏ C.R.I.P.T Informatique (BOYER Jérôme)‏
Advertisements

Vénuti Eric, Professeur documentaliste stagiaire, Février 2014.
L'image: Le codage des images BacPro SEN Lycée Condorcet.
Modélisation Géométrique Cours 4 : Acquisition de la géométrie.
Hypergraph Lossless Compression, Quadtrees et notion de complexité sur les images G graphes et sécurité Sujet de stage de Master en cours: Sujet de thèse.
L'image: Formats et compression BacPro SEN Lycée Condorcet ➢ 1ère partie: Généralités ➢ 2ème partie: Les espaces de couleurs ➢ 3ème partie: Codage des.
Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 1 TD 6 IJA Structures de données JAVA.
1- Introduction 1ère partie Le langage SQL 2- Connexion 3- Structure & Contenu 4- Requêtes.
Tableau Numérique Interactif Quels usages du TNI dans sa pratique de classe et pourquoi ? Prise en main des différentes fonctionnalités et applications.
1 Le stage informatique de Masters APIM et PIE (2012/2013) Ivana Hrivnacova Vincent Lafage Basé sur le stage informatique du LAL et IPN par (2005/2006):
Comparing color edge detection and segmentation methods Projet TIM.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
Chapitre 5 XHTML et CSS. Votre titre …votre code xhtml … Gabarit xhtml sans feuilles de style.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Types et opérations fondamentales ● Tests ● Boucles ● Pointeurs, références.
WIKITTY Base de données orientée documents et API de persistance pour Java.
Système d’annotation et de détection de modèle de véhicule Université de Sfax *** Institut Supérieur d’Informatique et de Multimédia de Sfax Réalisé par.
Windows NT/2000/XP Enjeux et contraintes techniques
Interfaçage entre Maple et du code externe
Cartographie sur le web (webmapping)
Communication client-serveur
Mettre à jour les données
Les outils de sélection Cours préparé par l’enseignante Wafa Bourkhis.
Construire des requêtes
Bases de données multimédia
Quelques Termes INFORMATIQUE ? ORDINATEUR ( Système Informatique)?
Pas de variable globale
Les notions de classe et d'objet
Tice (logiciels) et aide personnalisée.
Pointeurs et langage C.
Javadoc et débogueur Semaine 03 Version A17.
Les Processeurs Graphiques Programmables
7.1 Transformation linéaire
MOUTON Marielle - DUMETZ François - LEVECQUE Alain
Les bases de données et le modèle relationnel
Centralisation de logs
Session 1 31 mai 2017 Plateforme ICONICS Justine Guégan
DESSIN TECHNIQUE Té de dessin Collège technique Sousse Collège technique Sousse.
POL1803: Analyse des techniques quantitatives
Outils Statistiques pour la Sémantique Décembre 2013
Plans d’experiences : plans de melanges
Introduction à OpenCV GEL – Design III Charles du Tremblay
Extension de fichiers*
Août 2009.
HATRY Emmanuel TALIDEC Sebastien DENIS Maxime
Programmation en C++ C++ de base
ACP Analyse en Composantes Principales
Message Oriented Middleware MOM - Beghdad abdelkrim -abass youcef.
Le contenu est basé aux transparents du 7 ème édition de «Software Engineering» de Ian Sommerville«Software Engineering» de Ian Sommerville B.Shishedjiev.
1 Copyright © 2004, Oracle. Tous droits réservés. Extraire des données à l'aide de l'instruction SQL SELECT.
Royaume de Maroc Université Hassan Premier Settat Faculté des Sciences et Techniques de Settat LA CLASSIFICATION K-MEANS SOUS R /MATLAB Master :Automatique.
Le morphage d’images Steph Hoffman
Programmation Android GUI (widgets) et ressources
Architecture BD Récif.
Tableau Numérique Interactif
P LAMBOLEZ Partie maths V GILLOT Partie anglais
SIF1033 TRAITEMENT D’IMAGE
Sylvie DELAËT 2002 Architecture des machines Bienvenus en Amphi d’Architecture des Machines.
Créer un diaporama avec Open Office Impress
BUFFER CIRCULAIRE Meryem EL BAKRI. PLAN Introduction Buffer circulaire Fonctionnement.
Sujets Spéciaux en informatique II
1 Architecture des ordinateurs Généralités. 2 Définition Informatique = Information + Automatique Ce terme a été introduit en France. Il est très répandu.
Outils numérique pour la chimie Logiciel ChemSketch Réalisé par : Abdillahi Robleh Mohamed Martin Julien.
Principes de programmation (suite)
Piles et files.
Révision – mathématiques 8
COURS ADMINISTRATION DE BASES DE DONNÉES IMPORT/EXPORT Karim LABIDI ISET Ch
INTELLIGENCE ARTIFICIELLE
Contenu Systèmes de test parallèles Multithreading Synchronisation
Je découvre PowerPoint
DONNÉE DE BASE QM Manuel de formation. Agenda 2  Introduction  Objectif de la formation  Données de base QM: Caractéristique de contrôle Catalogue.
Transcription de la présentation:

Traitement d'images en Java avec JAI Fabien Chaillou – Ingénieurs 2000 19 février 2008

Sommaire Comment est construite une image ? Différents traitements à l'aide de JAI Autres fonctionnalités de JAI Démos Conclusion Bibliographie

Qu'est ce qu'une image ? Un élement visuel d'une certaine taille Unité de mesure : le pixel De l'anglais picture's elements Résolution : Nombre de pixels en largeur Nombre de pixels en hauteur Chaque pixel est représentée par une couleur

Définition JAVA d'une Image Java 1.0 : la classe Image Problèmes : peu de détails sur le contenu précis A partir de Java 1.2 (Java2) Introduction de l'API Java2D : interfaces RenderedImage et RenderableImage. Classe BufferedImage Java Advanced Imaging Mêmes interfaces que Java2D Implémentations différentes : PlanarImage et TiledImage

Dissection d'une Image (1)

Dissection d'une Image (2) Deux composants inter-dépendants Raster : contient les données de l'image DataBuffer contient les données binaires de l'image SampleModel permet d'extraire un pixel du DataBuffer ColorModel Associer la valeur d'un pixel à une couleur

Images ”standard” Image RGB(A) Chaque pixel sur 3 octets (4 octets si alpha) RGB(A) => Red, green, blue, (alpha) Chaque octet représente une valeur entre 0 et 255 pour la couleur associée (16,7 millions de couleurs) Image en niveau de gris Palette de 256 niveaux de gris Chaque pixel sur un octet dont la valeur est l'index du niveau de gris dans la palette

Sommaire Comment est construite une image ? Différents traitements à l'aide de JAI Autres fonctionnalités de JAI Démos Conclusion Bibliographie

Différents types de traitements Transformations géométriques Opérations Point à Point Opérations locales Opérations mixant plusieurs images

Transformations géométriques Redimensionner l'image Plusieurs techniques : Nearest neighbor interpolation : Si diminution de taille prendre un pixel sur deux Si augmentation de taille, recopier deux fois le même pixel Bilinear interpolation Bicubic interpolation

Implémentation PlanarImage source = readSourceImage(”source.png”); float scaleX = 0.5f, scaleY = 0.5f; float translationX = 0f, translationY = 0f; RenderingHints hints = new RenderingHints(); RenderedOp scaleOp = ScaleDescriptor.create(source, scaleX, scaleY, translationX, translationY, Interpolation.getInstance( Interpolation.INTERP_BILINEAR), hints); PlanarImage result = scaleOp.getRendering();

Opérations point à point Traitement pixel par pixel Modification de la teinte Exemples : Passage d'une image en niveau de gris A partir d'une image RGB : faire la moyenne des valeurs de chaque couleur. Modification du contraste Amplifier la différence de valeur entre chaque pixel. Multiplier la valeur du pixel par une constante.

Implémentations (1) PlanarImage source = readSourceImage(”source.png”); double[][] bandMerge = {{0.33, 0.33, 0.33, 0}}; RenderingHints hints = new RenderingHints(); hints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); RenderedOp op = BandCombineDescriptor.create( source, bandMerge, hints); PlanarImage result = op.getRendering();

Implémentation (2) PlanarImage source = readSourceImage(”source.png”); RenderingHints hints = new RenderingHints(); byte[][] datas = new byte[3][256]; for (int i = 0; i < 256; i++) { datas[0][i] = clampValue(i - 50); datas[1][i] = clampValue(i - 50); datas[2][i] = clampValue(i - 50); } LookupTableJAI table = new LookupTableJAI(datas); RenderedOp op = LookupDescriptor.create( source, table, hints); PlanarImage result = op.getRendering();

Opérations locales Opérations sur les pixels d'une image en relation avec les pixel alentours. Utilisation d'une matrice de convolution Permet de nombreux effets et traitements Relativement lourd à calculer Nécéssite de travailler sur une copie de l'image Dépendant de la taille de la matrice de convolution

Matrice de convolution Principe Matrice carrée de taille impaire Pondère la valeur de chaque pixel

Opérations possibles Dépendent du ”Kernel” choisi pour la convolution Flou Affinement de l'image Detection de contours

Implémentation PlanarImage source = readSourceImage(”source.png”); RenderingHints hints = new RenderingHints(); float[] matrix = new float[]{ 1/9f, 1/9f, 1/9f, 1/9f, 1/9f, 1/9f, 1/9f, 1/9f, 1/9f }; KernelJAI kernel = new KernelJAI( 3, 3, matrix); RenderedOp op = ConvolveDescriptor.create(source, kernel, hints); PlanarImage result = op.getRendering();

Opérations sur plusieurs images Mélange les valeurs des pixels entre deux images Permet de par exemple ajouter un élément d'une image vers une autre Images de même taille

Sommaire Comment est construite une image ? Différents traitements à l'aide de JAI Autres fonctionnalités de JAI Démo Conclusion Bibliographie

Region Of Interest Traitement sur une zone d'une image Ne se limite pas à une zone rectangulaire S'appuie sur l'inteface Shape de Java2D

Chaîne de rendu Ensemble de traitements sur une ou plusieurs images Graphe acyclique dirigé combinant un ensemble de RenderedOp Calcul du résultat au moment du rendu Chaines réutilisables

Exemple de chaine PlanarImage source = readSourceImage(”source.png”); Réduction d'une image puis flou : PlanarImage source = readSourceImage(”source.png”); RenderingHints hints = new RenderingHints(); RenderedOp scaleOp = ScaleDescriptor.create(source, 0.5f, 0.5f, 0f , 0f, Interpolation.getInstance( Interpolation.INTERP_BILINEAR), hints); float[] matrix = new float[]{ 1/9f, 1/9f, 1/9f, 1/9f, 1/9f, 1/9f, 1/9f, 1/9f, 1/9f }; KernelJAI kernel = new KernelJAI( 3, 3, matrix); RenderedOp op = ConvolveDescriptor.create(scaleOp, kernel, hints); PlanarImage result = op.getRendering();

Traitement Client-Serveur Déporter les traitements sur un serveur distant Utilisation de RMI pour la communication réseau Accès transparents aux opérations à distances RemoteRenderedImage RemoteRenderedOp Bonus : serialization des images

Démos

Conclusion API mature de gestion d'image S'appuie sur le JDK, facilite la prise en main Librairie se base sur du code natif donc traitement plus rapide Par contre API parfois peu ”objet” Anti-design Pattern God avec la classe JAI

Perspectives Future Reflexion sur une refonte de JAI avec création d'une nouvelle JSR pour écrire JAI 2.0 Traitement d'image utilisant la carte graphique : Utilisation des architectures programmables des GPU directement en Java

Bibliographie Programming in Java Advanced Imaging : http://java.sun.com/products/java- media/jai/forDevelopers/jai1_0_1guide-unc/ JAI Javadoc : http://java.sun.com/products/java- media/jai/forDevelopers/jai-apidocs Interpolation :http://www.cambridgeincolour.com/tutorials/image- interpolation.htm Définitions : http://www.culture.gouv.fr/documentation/ joconde/fr/partenaires/AIDEMUSEES/museofiche1.htm

Questions ?