PANDORE Version 6 | GREYC-IMAGE |
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.
Retourne SUCCESS ou FAILURE.
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
Auteur: Régis Clouard