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

[PREV][SUIV]

Graphics: plots, profiles

Affichages d'opérateurs: profils, courbes, reliefs

Pour l'affichage de courbes, on fait appel à gnuplot. Toutes les fonctions (presque) initialisent gnuplot si cela n'a pas déjà été fait.

Les fonctions suivantes affichent un "profil", cad .les valeurs d'un opérateur le long d'un segment de droite. Le segment de droite est défini comme expliqué au paragraphe saisie d'une ligne. Une première série de fonctions affiche des profils multiples, selon différents niveaux de filtrage: gradient, gradient normalisé, laplacien, laplacien normalisé,


plot-mu-grad-profile(line,list(level1,...))
plot-mu-ngrad-profile(line,list(level1,...))
plot-mu-lap-profile(line,list(level1,...))
plot-mu-nlap-profile(line,list(level1,...))
Une deuxième série de fonctions affiche des profils simples:

plot-grad-profile(line,level)
plot-angle-profile(line,level)
plot-dir-profile(line,level)

Une troisième série de fonctions affiche des profils le long d'une ligne suivi par un générateur de lignes (voir paragraphe précédent). (Fonctions hautement "expérimentales": il y a de nombreux paramètres pour jouer, on peut facilement les adapter pour afficher d'autres profils, par exemple la direction du gradient).


plot-border-grad-profile(point,dir,level1,pred,level2[,lpos)
plot-mu-border-grad-profile(point,dir,level1,pred,list_level[,lpos)
plot-mu-border-ngrad-profile(point,dir,level1,pred,list_level[,lpos)
Les paramètres: point, dir, level1 indiquent le point initial et la direction de la recherche du point de départ, level1 est le niveau du laplacien pour cette recherche. pred est le prédicat qui définit le contour - les valeurs prévues sont: yp2(level) bord d'une région à laplacien positif, gp2(level) bord d'une région négative, lrp(level,eps) arrête dans le laplacien.

Des fonctions plus anciennes existent, avec un jeu de paramètres plus compliqué, notamment:


multi-gradprof(port,x0,y0,list(i1,i2,...))
Affichage des profils du gradient en un point, pour plusieurs niveaux de filtrage. Le port à utiliser est gnu-port (sauf mise au point).

multi-gradlap(port,x0,y0,list(i1,...))
Mêmes paramètres que la fonction précédente. Affiche le gradient, et le laplacien.


lap-profile(p,port=gnuplot-port)
Affichage du laplacien du point p, en fonction du niveau de filtrage.

Affichage en relief

gnuplot et geomview permettent d'afficher sous forme de relief. Pour essayer, il y a les 2 fonctions, avec des paramètres analogues:

zmesh-rect-float(rectangle,img,e) active geomview pour afficher sous forme de "zmesh" la fenêtre de l'image img définie par rectangle; e est un facteur d'échelle, permettant d'adapter la hauteur du relief.

splot-rect-grid(rectangle,img,e) affiche sous forme d'une une "grille-3D" - un grid au sens de gnuplot - la fenêtre de l'image img définie par rectangle; e est un facteur d'échelle, permettant d'adapter la hauteur du relief.

Ces fonctions initialisent geomview/gnuplot si besoin.

Plot d'une ligne

plot-line(ima,y) affiche la ligne y de l'image ima.

plot-lines(ima,ly) affiche plusieurs lignes, liste ly

mu-plot-line(lima,y) affiche une même ligne dans plusieurs images; liste lima.

Fonctions pour affichages graphiques

La fonction mu-circle affiche un cercle dans chacune des places dans la fenêtre, au même endroit.


mu-circle()  point défini par un clic, dans n'importe quelle image
mu-circle(x,y)

La macro to-screen permet d'envoyer des commandes à la fenêtre. Chaque argument est un appel de méthode, écrit comme un appel de fonction.


to-screen Raise
to-screen(DrawRectangle(100,100,10,20),DrawLine(30,50,150,56))
ceci est strictement équivalent à:

screen.Raise()
screen.DrawRectangle(100,100,10,20)
screen.DrawLine(30,50,150,56))
screen.Flush()

Les commandes qu'on peut envoyer à l'écran sont (voir les méthodes de la classe TTrueColor24Win (GlobalVision/src/X11Win/UTrueColor24Win.hh). Elles correspondent directement à des fonctions X; par exemple, la commande DrawString appèle la fonction XDrawString documentée dans le Xlib Reference Manual (p.166).


  void DrawPoint(int x1, int y1);
  void DrawCross(int x1, int y1, int s);
  void DrawLine(int x1, int y1, int x2, int y2);
  void DrawRectangle(int x1, int y1, int w, int h);
  void FillRectangle(int x1, int y1, int x2, int y2);
  void DrawArc(int x1, int y1, int w, int h,int a1,int a2);
  void DrawEllipse(int x1, int y1, int w, int h);
  void DrawCircle(int x1, int y1, int r);
  void DrawString (const char * st, int x, int y);
  void DrawImageString (const char * st, int x, int y);
  int SetForeground(char* color);
  int SetForeground(int color_code);
  int SetColor(char* color);   // synonyme for SetForeground
  int SetForeground(int r, int g, int b);
  void SetBackground(char* color);
  void SetBackground(int r,int g,int b);
  void SetWindowBackground(char* color);
  void SetWindowBackground(int r,int g,int b);
  int SetFunction (int);   // cf. Xlib Programming Manual, p.120
  void Lower();
  void Raise();
  void ClearWindow();
  void ClearArea(int x,int y,int w,int h);

Affichages avec Gnuplot

Fonctions


init-gnuplot()
to-gnu(string)  écrit dans gnuplot-port, ajoute fin de ligne
q-gnuplot()     pour terminer gnuplot

La fonction init-gnuplot crée un pipe Unix vers gnuplot; ce pipe correspond au port-ravi gnuplot-port. En écrivant dans ce port, toute fonction peut commander gnuplot. La fonction to-gnu facilite l'envoi d'une commande courte; cette fonction envoie son argument,puis ajoute une fin de ligne et un flush.

La fonction init-gnuplot est appelé automatiquement par les fonctions "splot-..." décrites ci-après, on n'a donc pas à s'en soucier. Le gnuplot-port est fermé automatiquement à la sortie de imalab.

Possibilités d'affichage:

splot-grid(port,img,x0,y0,l,e) affiche une grille 3-D (grid) représentant le relief d'une fenêtre carrée de l'image img. La fenêtre a pour point supérieur gauche (x0,y0) et le coté l; e est un facteur d'échelle, pour adapter l'allure du relief. Le port sera gnuplot-port; utiliser *scstdout* pour voir ce qui est envoyé à gnuplot. Cette fonction est analogue à la fonction zmesh-float (voir le paragraphe ci-après sur geomview).

Exemple: laplacien d'une imagette

splot-grid(gnuplot-port,mflap[4],60,80,20,20)

Commandes gnuplot utiles à connaitre

A envoyer à l'aide de la fonction to-gnu (par exemple).

set terminal x11 1
      permet d'utiliser plusieurs fenêtres
set data style linespoints
            ou lines points impulses dots steps fsteps histeps boxes financebars
               candlesticks vector
Pour plus de détail voir la brochure Gnuplot, version 3.7

Affichage avec Geomview

http://www.geomview.org/

La situation est parfaitement analogue à celle de gnuplot. Notamment, le fonctions init-geomwview, q-geomview sont appelées automatiquement selon besoin.


init-geomview()       ouvre le port geom-port
to-geomview(string)   écrit dans geom-port, ajoute fin de ligne + flush
q-geomview()          pour terminer geomview

Possibilités d'affichage:

Il y a plusieurs fonctions avec des paramètres plus ou moins identiques (même prototype pour les fonctions).

zmesh-rect-float(rectangle,img,e) affiche sous forme de "zmesh" (relief quadrillé) la fenêtre de l'image img définie par rectangle; e est un facteur d'échelle, permettant d'adapter la hauteur du relief.

zmesh-float(port,img,x0,y0,w,h,e) affiche sous forme de "zmesh" (relief quadrillé) une fenêtre de l'image img. La fenêtre a pour point supérieur gauche (x0,y0), largeur w, hauteur h; e est un facteur d'échelle, permettant d'adapter l'allure du relief. Le port sera geom-port, sauf mise au point.

zmesh-byte(port,img,x0,y0,l,c) affiche de facon analogue le canal c d'un bitmap possedant des canaux (méthode GetPixelByte à 3 arguments).