Partenaires

CNRS
Logo PHIL
Logo lal



Rechercher

Sur ce site

Sur le Web du CNRS


Accueil du site > L’accélérateur PHIL > Description technique > Diagnostics faisceau > Mesure du profil transverse du faisceau (Stations YAG:Ce et YAG) > Code Matlab pour l’analyse des images "version 1.1" (27 juin 2011)

Code Matlab pour l’analyse des images "version 1.1" (27 juin 2011)

par BROSSARD Julien - 28 juin 2011

Cet article complète et prolonge l’article "Code Matlab pour l’analyse des images "version 1.0" (11 avril 2011)" décrivant le logiciel permettant d’analyser les images du faisceau PHIL. Le présent article vise à décrire la version 1.1 du logiciel (version du 27 juin 2011).

La présente version 1.1 du logiciel permet :
-  1/ de prendre en compte le gain de la caméra (utilisée pour capturer les images), lorsque celle-ci est en réglage "manuel" (dans le code, la variable associée s’appelle "CCD_gain" ). Le mode opératoire permettant de capturer une image sur PHIL est détaillée sur la partie restreinte du site.
-  2/ de prendre en compte la présence d’une densité optique (DO) devant la caméra lors de l’acquisition des images (dans le code, la variable associée s’appelle "DO_value"). La définition et l’utilisation des roues à DO est détaillée sur la partie restreinte du site.
-  3/ d’analyser l’image sur un sous-ensemble de celle-ci (afin d’extraire les effets de "lumières parasites" qui ne sont pas enlevés lors de la soustraction du courant d’obscurité). Un code matlab "AOI.m" permettant de définir un pattern "elliptique" est librement disponible en annexe.
-  4/ de stoker dans le fichier de sortie "output.txt" une information supplémentaire sur la version du code utilisé et la présence ou non d’un "pattern".
-  5/ de corriger un bug.

  1. détails des mises à jour
  2. Descriptif du code version 1.0 (11 avril 2011)
  3. Téléchargement du code version 1.1 (27 juin 2011)
  4. Correction de bug
  5. Comparaison résultat version 1.0 et 1.1 avec pattern
  6. Annexes

Détail des mises à jour

Les 2 premières mises à jour (gain de la caméra et présence éventuelle d’une densité optique) sont définies - par l’utilisateur - via le fichier d’entrée "input.txt" (qui comporte - donc - plus de lignes que dans la version 1.0 du logiciel). Vous trouverez une comparaison des fichier input.txt ici de la version1.0 et de la version 1.1). Les fichiers "output.txt" de la version1.1 contient 2 lignes supplémentaires.

Remarques :

  • si la caméra est utilisée en "gain automatique", on doit fixer la variable "CCD_gain" à 0.
  • si aucune DO n’est placée devant la caméra, alors il faut fixer la variable "DO_value" à 0.

La troisième mise à jour (analyse de l’image sur une sous-partie) est réalisée via l’appel à un fichier "pattern.mat" représentant une matrice 2x2 de pixels ayant même dimensions que l’image initiale, mais dont les valeur sont égales à 1 ou 0. La valeur "1" est utilisée pour définir un pixel qui sera intégré à l’analyse. La valeur "0" sera utilisée pour sortir un pixel de l’analyse.

Remarque :

  • Si l’utilisateur ne souhaite pas utiliser de "pattern", alors il faut placer la variable associée dans le fichier "input.txt" à ’non’

La figure ci-dessous présente un exemple d’analyse réalisée sur une sous-partie elliptique décentrée tournée.

Figure 1 : à gauche : image brute avec courant d’obscurité. A droite : même image où les pixels ont été multipliés par le fichier "pattern.mat" (la matrice contenue dans ce fichier est visualisée ci-dessous). En Annexe, vous trouverez la définition du format du fichier "pattern.mat".

Figure 2 : matrice enregistrée dans le fichier "pattern.mat"

Afin de rendre plus visible l’effet et l’intérêt de travailler sur une sous-partie de l’image, la figure 1 est reproduite ci-dessous avec un codage couleur différent. A gauche (image sans pattern), on peut distinguer le pourtour (silhouette elliptique) de l’écran phosphorescent utilisé, ainsi que des lumières parasites émises par la pièce mécanique supportant l’écran. L’utilisation d’un "pattern" permets d’extraire de l’analyse, les parties externes à l’écran.


Téléchargement du code (version 1.1 au 27 juin 2011)

Le code en fichier "zip" est disponible ici.

Deux répertoires d’images peuvent être téléchargées ici afin d’utiliser le code sur de vrais images.

Remarques :

  • ce code a été rédigé sur un environnement Linux Ubuntu. Il est probable (pour les utilisateurs "windows") que quelques modifications mineures soient nécessaires (exemple, modifier les "/" par des "\").
  • la version 1.0 du code fonctionne aussi avec la version 7.10.0 de Matlab sous windows 2010.

Correction de Bug

L’étape (réalisée, dans la version 1.0, via la routine "det_niveau_du_zero.m") visant à rapprocher les valeurs "basses" des projections horizontales et verticales à une valeur proche de "zéro" a été supprimée. En effet, cette opération était mal calculée : lors de la soustraction du signal, il fallait additionner le variable "minimum" et non la soustraire, et la variable "somme" n’était pas incrémentée correctement [1]. Les corrections de ces erreurs ont démontrées l’inefficacité de cette opération. Heureusement, dans la version 1.0, cette opération n’avait pas beaucoup d’impact. En effet, une comparaison des fichiers "output.txt" entre la version 1.0 et "1.1 sans pattern" montre que les écarts sur les dimensions transverses sont de l’ordre de 2%.


Comparaison résultat version 1.0 et 1.1 avec pattern

Les version 1.0 et 1.1 avec pattern ont été exécuté sur les même fichiers d’entrée. La comparaison des fichiers "output.txt" montre que les dimensions de faisceau estimé par la version 1.1 sont 1 à 2% inférieur à ceux de la version 1.0.


Annexes

Format du fichier "pattern.mat". Le fichier "pattern.mat" est créé en utilisant l’option "save" de matlab. Le pattern "elliptique" présenté dans cet article, a été créer via un petit code matlab, à partir d’une image prise sur PHIL. Ce code "AOI.m" (et la routine "ellipsedraw.m") sont disponible dans le fichier zip suivant.

Figure 3 : Localisation des points utilisés pour définir l’ellipse du pattern.


[1] Merci à L. Kamga, stagiaire 2011 pour avoir identifier ce bug