Cette partie de notre site est dédiée au traitement d'images. Après une introduction brève des méthodes utilisées, nous allons présenter le programme Qlisp. Des exemples concrets termineront ce chapitre.
En analyse d'images, on distingue deux théories différentes : la morphologie mathématique et le traitement de signaux.
La morphologie mathématique est une science basée sur la théorie ensembliste. Elle fut fondée dans les années 1960 par G. Mathéron et J. Sierra. Depuis cette période, le Centre de la Morphologie Mathématique de l''Ecole des Mines de Paris a contribué au succès de cette approche par de nombreuses avances théoriques et leur application.
Les transformations principales de la morphologie mathématique sont l'intersection, l'union et la translation des ensembles. Par leur combinaison, on peut obtenir des fonctions complexes : par exemple, un filtré alterné séquentiel de taille 11x11 effectue 240 translations, 120 intersections et 120 unions. Les transformations morphologiques possèdent des propriétés mathématiques bien définies et leur application donne des résultats stables et prévisibles.
Beaucoup d'efforts ont permis d'accélérer le temps de calcul des fonctions complexes. La "ligne de partage des eaux" ou la "reconstruction numérique" ne nécessitent que quelques millisecondes en utilisant des algorithmes basés sur des files d'attentes.
Le traitement de signaux décrit mathématiquement le comportement de systèmes linéaires et invariants dans le temps. La théorie est bien étudiée et appliquée dans des domaines très variés : l'électrotechnique, la biologie, la médecine, la sismologie, pour n'en citer que quelques exemples. Dans les années 50, le traitement digital de signaux fut introduit. La puissance des ordinateurs personnels récents permet aujourd'hui de traiter des images en un temps de calcul raisonnable.
Les transformations principales sont la convolution et la transformation de Fourier. La compréhension de ces outils est moins intuitive et nécessite de bonnes connaissances théoriques.
Nous pensons qu'un grand atout pour le contrôle industriel est la non-linéarité des transformations morphologiques : à partir de l'image de départ on élimine, par chaque étape du traitement, l'information inutile en ne gardant que la partie d'intérêt.
Dans d'autres domaines, comme l'amélioration visuelle d'images, la description de contours ou la compression, le traitement de signaux est incontestablement mieux adapté.
Les exemples à la fin de cette section vous montreront des applications typiques de la morphologie mathématique et du traitement de signaux. Mais d'abord, nous aimerions vous présenter l'outil que nous utilisons dans ce cadre.
La première version de Qlisp fut programmée en 1991 sur la station de traitement d'images Q570 de Cambridge Instruments en combinant la bibliothèque des transformations de la Q570 avec l'interpréteur Lisp. La thèse "Morphologie Mathématique Appliquée au Contrôle Industriel de Pièces Coulées", soutenue à l'ENSMP par T. Jochems, décrit la conception et l'application de cette version.
La croissance rapide de la puissance des ordinateurs est à la base de la deuxième version : les transformations réalisées électroniquement sur la Q570 ont été remplacées par des transformations codées en C. Programmé sur une station Alpha de DEC, Qlisp sert désormais d'outil pédagogique pour l'enseignement de la visionique à l'Ecole d'Ingénieurs IMERIR/Perpignan.
Depuis, le système accroît continuellement et possède aujourd'hui les possibilités suivantes :
Dans le cadre industriel, les routines d'analyse d'images sont souvent utilisées dans un environnement informatique spécifique qui assure la stabilité et la cohérence de l'application. C'est la raison pour laquelle nous avons séparé Qlisp en deux parties distinctes :
une bibliothèque de routines d'analyse d'images programmées en C. Cette bibliothèque est complètement indépendante du langage Lisp ; elle a été utilisée avec des outils de programmation et des systèmes d'exploitation différents (C++Builder, Bc5, Gcc, Linux, Unix sur DEC) ;
une couche mince qui relie Lisp avec la bibliothèque.
L'avantage de cette approche est que l'on peut développer et tester des applications d'abord avec l'interpréteur Lisp. Cela diminue sensiblement la durée de cette étape. Le prototype résultant se laisse ensuite intégrer dans l'application industrielle.
Voici la liste des transformations qui sont à votre disposition, le code source étant intégré dans la version téléchargeable :
Fichier |
Fonctions |
intern.cpp |
extern
void imainit(); |
base.cpp |
extern
int binrpix(int id,int x,int y); |
trans.cpp |
extern
void bingrey(int bin,int gout); |
queue.cpp |
extern
void qinit(); |
measure.cpp |
extern
void greymeas(int id,int *min,int *max,double *mean); |
signal.cpp |
extern
void convh(int gin,int gout,...); |
io.cpp |
extern
void loadcamera(char *name); |
color.cpp |
extern
void colgrey(int col, int red, int green, int blue); |
Nous utilisons Qlisp pour enseigner l'analyse d'images. C'est son architecture hiérarchique, expliquée dans la figure suivante, qui appuie fortement son aptitude pour la formation :
Dans la couche de base, les fonctions sont codées en C en raison de la rapidité de ce langage. Il n'y a aucun intérêt pédagogique à faire coder ces fonctions par des débutants en analyse d'images, le temps nécessité étant trop élevé.
Dans la couche Lisp, on peut combiner les fonctions de base pour obtenir de nouvelles méthodes plus complexes et plus puissantes. Cette propriété de Qlisp est bien adaptée pour la morphologie mathématique : une érosion de taille n, par exemple, se calcule en appliquant n fois l'érosion de la taille 1 (décomposition de l'élément structurant) ; une ouverture présente une érosion suivie d'une dilatation avec l'élément structurant transposé. Le tableau suivant montre le codage de trois nouvelles transformations. Le codage est facilité par le caractère fonctionnel de Lisp :
Fonction |
Codage en Lisp |
dilatation géodésique |
(defun gdsdilation(ima mask se size) |
ouverture morphologique |
(defun opening(ima se size) |
gradient |
(defun gradient(ima &key (se se-c) (size 1)) |
Les participants des cours travaillent sur la couche Lisp et mettent ainsi en pratique la théorie. Dans le système actuel, plus de 100 transformations sont définies en Lisp.
Dans la couche "Applications", on peut finalement résoudre des problèmes réels et complexes en utilisant, et la bibliothèque de base, et les transformations codées en Lisp. Dans le chapitre suivant, nous en montrerons trois exemples qui sont aussi traités dans nos cours.
Dans ce chapitre, nous illustrerons les différentes approches de l'analyse d'images par des exemples. Tous les traitements sont calculés avec le système Qlisp.
Cet exemple montre la détection de lignes dans un métal. Il a été traité à l'ENSMP par A. Tuzikov pour la société belge OCAS.
L'image (1) montre de la tôle de métal (25x25 mm) sur laquelle on a tracé des lignes noires. L'intérêt est la détection automatique de ces lignes après avoir déformé la pièce par une presse. Les données ainsi obtenues servent à optimiser l'outil de déformation.
1) original |
2) ouverture |
3) seuillage |
|
4) filtrage binaire |
5) résultat |
Le traitement commence par un filtrage du bruit (2). Un "chapeau haut de forme" élimine ensuite l'effet d'un éclairage hétérogène. Un seuillage consécutif donne l'image (3). Un filtrage binaire du bruit (4) et un "squelette par zone d'influence" termine le traitement, le résultat est visualisé dans l'image (5).
L'exemple montre bien la philosophie du filtrage morphologique : on supprime de plus en plus d'informations (bruit, niveaux de gris, taille) en ne gardant que le résultat souhaité.
Cet exemple montre une application du traitement de signaux. L'image (1) présente l'image de départ acquise par une caméra défectueuse. Il s'agit d'un défaut dans l'amplificateur du signal vidéo. Bien que nous ayons simulé ce défaut, il pourrait s'agir d'un problème réel, voir Apollo ou Hubble...
1) original |
2) caractéristique |
3) spectre |
4) résultat |
Pour corriger le défaut, on a besoin de sa description. Dans notre cas, nous avons acquis l'image (2) avec un seul point central éclairé. L'image représente donc la réponse impulsionnelle de la caméra défectueuse. Il reste de calculer le spectre (3) de l'image (1), le spectre de la réponse impulsionnelle et de diviser ces représentations fréquentielles. La transformation de Fourier inverse donne l'image (4) qui n'est plus floue, le défaut est corrigé. Le traitement de signaux est gourmand en temps de calcul : 85ms pour cet exemple.
Cet exemple montre la reconnaissance de filigranes. Il a été étudié par un groupe de 4 élèves dans le cadre d'un projet de l'école d'ingénieurs IMERIR.
1) original |
2) contraste amplifié |
3) échantillon |
4) résultat |
L'image (1) montre le filigrane acquise par une caméra noir et blanc. La première étape consiste à améliorer et à stabiliser le contraste de l'image. On utilise le "chapeau haut de forme" et "l'imposition d'histogrammes". Dans le résultat (2), on recherche ensuite un échantillon (3) qui montre une partie caractéristique du filigrane auparavant stocké dans une base de données. Le résultat (4) montre que l'échantillon est détecté 4 fois dans l'image de départ. La reconnaissance de l'échantillon est effectuée par une corrélation accélérée entre l'image (2) et (3), le temps de traitement est 25ms pour le processus complet.
Peut-être avez-vous maintenant envie d'apprendre plus sur l'analyse d'images et ses transformations. Dans ce cas, vous pouvez télécharger Qlisp. Des nombreux exemples vous montreront des applications industrielles concrètes. Et vous pouvez tester les méthodes sur vos propres images.
Présentation Début Télécharger