PANDORE Version 6 GREYC-IMAGE

pgradient



Calcul du module et de la direction du gradient.



Synopsis

pgradient halfsize [-m mask] [im_in|-] [im_out1|-] [im_out2|-]

Description

L'opérateur pgradient calcule la derivée première de l'image d'entrée im_in. Le résultat est une image d'amplitude du gradient dans im_out1 du même type que l'image im_in et une image de direction de ce gradient dans im_out2 qui est de type Char.

La valeur d'amplitude du gradient en un point reflète la variation de niveau de gris observée dans l'image im_in en ce point. Plus cette valeur est élévée plus cette variation est forte. L'amplitude est obtenue par le maximum de la dérivée en x et en y (et en z en 3D).

La direction du gradient est orthogonale à la frontière qui passe au point considéré. Elle est obtenue par l'artang(dy/dx) suivie d'une discrétisation pour obtenir les valeurs en code de Freeman. L'image de direction est donc une image contenant des codes de Freeman [0..7] en 2D, [0..25] en 3D.

Les codes de Freeman:

  en 2D                   en 3D:
                            z-1:	  z:		   z+1:
 1 2 3                    2  3  4	10 11 12	 19 20 21
 0   4                    1  0  5	9     22	 18 13 14
 7 6 5                    8  7  6	25 24 23	 17 16 15

Le calcul de la dérivée se fait par convolution de l'image avec un masque -1, 0, 1 dans toutes les directions. La valeur d'amplitude est prise que celle qui est maximale.

Pour les images couleur, c'est l'algorithme de Di Zenzo qui est utilisé. Il est basé sur la recherche des valeurs propres de la matrice:

  | p t |
  | t q |
où p=gxR*gxR+gxG*gxG+gxB*gxB
où q=gyRy*gyR+gyG*gyG+gyB*gyB
où t=gxR*gyR+gxG*gyG+gxB*gyB

Le module du gradient est donné par:

module=sqrt(lambda1 + lambda2)
avec lambda1=1/2 * (p+q + sqrt((p-q)*(p-q)-4*t*t)) 
     lambad2=1/2 * (p+q - sqrt((p-q)*(p-q)-4*tt)) 

et l'orientation est donnée par:

orientation = 1/2 *arctan (2*t / (p-q))

suivi d'une discrétisation selon le codage de Freeman.

Paramètres

Entrées

Sorties

Résultat

Retourne SUCCESS ou FAILURE.

Exemples

Détection de contours basée sur le seuillage par hystérésis:

   pgradient 1 tangram.pan i1.pan i2.pan
   pbinarization 30 1e30 i1.pan i3.pan
   pbinarization 60 1e30 i1.pan i4.pan
   pgeodesicdilation 1 1 -1 i4.pan i3.pan i4.pan
   surperimposition 0 tangram.pan i4.pan out.pan

Voir aussi

Détection de contours

Prototype C++

Errc PGradient( const Img2duc &im_in, Img2duc &im_out1, Img2duc &im_out2, int halfsize );

Auteur: Régis Clouard