| Prima Homepage ImaLab Generating C++ Modules User Manual The Command Shell Running Imalab Plugin Process Pixels and Images Interactive selection Graphics: plots, profiles Image file I/O Image display Connectivity Analysis Image Processing(1) Gaussian operators Technical Documentation Creating New Modules Tutorial Tutorial Download | Connectivity AnalysisLe module modaaregion propose un ensemble de classes permettant une segmentation d'images sophistiquée et rapide, selon des critères programmables; et une analyse en régions performante. La segmentation procède en deux étapes: étiquettage des pixels, analyse de connexité; qui peuvent être suivies d'une troisième étape: calcul de propriétés supplémentaires des régions. Exemple d'enchainement d'opérations.
Ceci crée d'abord l'image d'étiquettes etiq, à partir de l'image de flottants iflt1; l'argument 0 indique le critère d'étiquettage. La fonction d'analyse de regions a-regions prend comme arguments l'image d'étiquettes et un seuil sur la taille des régions, et fournit comme résultat la liste des régions. Comme c'est une liste potentiellement longue, il est pratique d'en imprimer juste des éléments.
Beaucoup plus pratique: on peut interroger les régions en cliquant. C'est le rôle de la fonction describe-region. La fonction describe-region(etiq,point,pos) identifie une région à l'aide du point donné, trace son contour dans la sous-fenêtre pos, et affiche diverses propriétés du contour. Autre exemple: séquence de commandes complètes pour construire les région définies par le signe du laplacien au niveau 6.
On donne sur une page séparée un exemple complet avec des segmentations plus complexes, utilisant les codes-fonction 1 et 2. Nous étudierons plus loin les classes et les fonctions utilisées pour la segmentation: RLEImage, hori_seg, pv_region, RegionProps, prop_vec. Important:la gestion mémoire des classes pv_region et hori_seg. Manipulation des régions d'une segmentationLa segmentation a tendance à produire un grand nombre de régions. Afin d'étudier en détail une telle segmentation, il existe de nombreuses fonctions pour afficher, trier, décrire les régions (voir les fichiers regf.scm, geom.scm). Ces manipulations passent le plus souvent par des listes (au sens Scheme). La fonction describe-region(rle,point,pos) a été décrite plus haut. La fonction draw-region(id [,pos])affiche le centre, et le point SG de la région ayant l'identificateur id. Le paramètre id doit être une pv_region; dans l'exemple ci-cessus, c'est un élément d'une liste. On peut aussi trouver la région d'un point en cliquant, avec point2region(rle,point) tri-regs(l) trie une liste de régions, selon la taille. sort-big(l,s) trie, et conserve seulement les régions de taille supérieure à s. Histogramme des régions La fonction rle-histo(rle,regs) construit une paire d'histogrammes - le nombre de pixels pour chaque étiquette, et le nombre de régions pour chaque étiquette - qu'on peut ensuite afficher avec la fonction gnu-histo.
Une "étiquette" sera pour nous un entier, comme 0 pour négatif et 1 pour positif; raisonnablement, le nombre d'étiquettes sera toujours faible. Pour des raisons d'efficacité, nous avons choisi de représenter une image d'étiquettes sous forme codée: une suite de pixels identiques forme un "segment" - d'où le nom de la classe RLEImage pour Run Length Encoded Image. Le nombre de segments est petit par rapport au nombre de pixels (sinon les paramètres d'étiquettage sont mal choisis), ce qui assure une analyse de connexité rapide. Critères d'étiquettage Premier constructeur:
Le deuxième argument de ce constructeur indique par un code le critère d'étiquettage:
Paramètres de la fonction en escalier:
Deuxième constructeur:
On compare l'image src à l'image "de reférence" ref; les étiquettes sont 0 (égalité) et 1 (différent). Méthodes de la classe RLEImage
toABGR(TBitmapABGR& dst,int a,int b)sert à l'affichage. On affiche val*a+b en fausses couleurs (jaune positif - vert négatif). PseudoColor(TBitmapABGR& dst,TIntVector& cmap,int del=0)pour l'affichage avec une colormap (souvent plus pratique que la methode precedente). Le parametre del est utile s'il y a des etiquettes negatives: on translate toutes les valeurs de del, sachant que les indices de la colormap commencent a 0. CopySegs(TBitmapABGR& dst,TBitmapABGR& src) copie avec masque. Constructeurs - re-initialiseurs A chaque constructeur correspond une methode "Encode" qui permet de re-initialiser le RLE; ainsi on evite des "new" dans une boucle d'analyse d'images
Les propriétés calculées pour une région sont:
Méthodes
La gestion mémoire des classes pv_region et hori_segUtiliser les procédures statiqueset les fonctions Scheme
La classe RegionProps permet de calculer des propriétés supplémentaires pour les régions d'une segmentation. Exemple: Dans cet exemple, rle est une RLEImage déjà segmentée. On calcule, pour toutes les régions, des propriétés par rapport à l'image redi qu'on peut interroger ensuite:
Plus exactement, une instance de la classe RegionProps attache une instance de prop_vec à chaque région. Les méthodes de prop_vec sont:
C'est puissant: on peut construire autant de RegionProps différents que l'on veut; les méthodes permettent de réactualiser les propriétés sans nouvelle allocation, comme c'est normalement le cas dans l'analyse d'une séquence d'images. Remarque: le constructeur d'une RegionPropos alloue une place en fonction de la taille du pool des régions - si on change cette taille, il faut penser à ré-allouer les RegionProps. |