Algorithme de Canny

Algorithme de Canny - Algo - Programmation

Marsh Posté le 13-07-2006 à 16:34:14    

Salut à tous.
 
Je souhaiterais comprendre le principe de l'algorithme de canny, sachant que j'ai vu l'article wikipedia et que, pour l'instant, je ne sais pas ce qu'est un filtre matriciel donc ca ne me parle absolument pas  :ouch:  
 
 Donc si quelqu'un s'y connait, ne serais ce qu'en filtres, je veut bien une explication succinte :)  
 
Merci, Skip

Message cité 1 fois
Message édité par skip78 le 13-07-2006 à 16:35:41
Reply

Marsh Posté le 13-07-2006 à 16:34:14   

Reply

Marsh Posté le 14-07-2006 à 14:28:58    

skip78 a écrit :

Salut à tous.
 
Je souhaiterais comprendre le principe de l'algorithme de canny, sachant que j'ai vu l'article wikipedia et que, pour l'instant, je ne sais pas ce qu'est un filtre matriciel donc ca ne me parle absolument pas  :ouch:  
 
 Donc si quelqu'un s'y connait, ne serais ce qu'en filtres, je veut bien une explication succinte :)  
 
Merci, Skip


 salut,
 
le filtrage matriciel est basée sur la convolution de ton image (une matrice L*H) par une autre matrice correspondant à ton filtre... voilà pour la definition.
si cela ne t'avance pas, le pixel de destination de coordonnées (x,y) apres filtrage vaut
dest

Code :
  1. float dest = 0.0f;
  2. for(int j = 0 ; j < h ; j++)
  3. {
  4.     for(int i = 0 ; i < l ; i++)
  5.         dest += s(x- l/2 - i, y - h/2 - j) * c(i, j);
  6. }


et il faut faire cela pour tous les pixels de ton image
 
où s(x,y) est la valeur de ton pixel aux coordonnées x, y dans l'image source de dimension l,h
et c(x,y) les coef de ton filtre de dimension n, m
 
et si c toujours pas clair... google est ton ami... filtrage image sobel... :)
 
le seul truc important est de faire attention aux dépassements (genre tu veux faire tenir tout cela dans un BYTE... ou autre) et bien sur aux effets de bords mais bon ca c'est evident
 
et si tu es TRES feignant, installe opencv :)
 
 
@pluche

Reply

Marsh Posté le 17-07-2006 à 10:13:16    

Merci pour tes explications :)
J'ai effectivement compris le principe de conveolution maintenant. Mais le problème est que les filtres que je trouve fonctionnent à partir de la luminosité des pixels et non pas de leur valeur (couleur)  
 
 Comment faire ? :p

Reply

Marsh Posté le 17-07-2006 à 10:40:05    

Avant de te lancer dans le traitement de l'image il te manque des bases manifestement...
Je te conseille de te renseigner sur les espaces colorimètriques, leur signification (le rôle de chaque couche) etc.
De même sur ce que c'est qu'une convolution (approche temporelle et approche fréquentielle). Juste faire faire bête une multiplication de matrice c'est bien, mais comprendre d'où ça vient et pourquoi on le fait c'est mieux.

Reply

Marsh Posté le 17-07-2006 à 12:07:38    

bah j'aimerais bien mais bon j'ai vraiment pas le temps :S En fait j'ai créé un logiciel en me basant sur le principe que j'avais une image exploitable au départ, et il s'est avéré recemment que ca n'était pas le cas et que j'avais besoin de faire un traitement d'image préalable. Or il me reste moins d'une semaine pour boucler le tout donc bon je t'avouerai que lire des piles de docs sur le traitement d'image (ce que je fais deja depuis ce matin cela étant dit ;)) bah c'est tendu :(
 
 Bilan si quelqu'un sait comment travailler directement sur la luminosité (je devellope sous Allegro en c) ou si il faut absolument passer par une conversion en nuances de gris, (toi par exemple ? :p) merci :)

Reply

Marsh Posté le 17-07-2006 à 12:14:28    

Déjà tu bosses sur quoi? Couleur ou niveaux de gris?
Si c'est de la couleur c'est en quoi? RGB? YC1C2? etc.?
Si tu es en RGB tu peux bêtement prendre la moyenne des 3 couches pour avoir la luminosité... Ca ne sera pas strictement exact, mais c'est une bonne et rapide approximation.
Parfois il vaut mieux laisser un projet inachevé avec toute la doc. qui va bien pour que quelqu'un le finisse facilement derrière, que de chercher à finir salement à tout prix un truc qui sera bancal et non maintenable.
 
Edit: D'ailleurs, l'idée du Canny est bonne mais j'ai peur qu'il soit encore un poil trop sensible au bruit et que tu doives encore te taper une étape de débruitage avant celle là. Je te conseillerai plutôt de partir sur un Deriche voire même d'utiliser les opérateurs de Shen qui sont beaucoup plus robustes au bruit (surtout Shen en fait).


Message édité par Moktar1er le 17-07-2006 à 12:23:03
Reply

Marsh Posté le 18-07-2006 à 15:37:16    

Salut à toi :)
Bah je vais voir ce que je trouves avec Deriche mais bon je pense que Canny devrait suffire. Cela etant dit je n'arrive pas à l'appliquer c'est une cata ! J'ai reussi à transformer mon image en nuances de gris grace à un filtre classique, mais ca me donne des valeurs en 24 bits. Et il me semble que si j'arrivais à les avoir sur 8 bits ca me donnerait la luminosité :) Mais j'ai beau chercher, je ne sais absolument pas comment faire. Pourtant ca me semblait basique mais en fait aucune fonction ne me semble correspondre :(
 
Bon et je vais essayer la moyenne des 3 mais c'est vraiment à l'arrache quand même ;)

Reply

Marsh Posté le 18-07-2006 à 17:37:27    

Renseigne toi sur l'espace TSL (Teinte, saturation, luminance), ça te permet de travailler uniquement sur la notion de luminosité, sans te soucier de la couleur.


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 22-07-2006 à 15:37:21    

si il galere en rgb, je sai spas si le tsl est vraiment une bonne idée... dans un premier temps convertis ton image de trois canaux vers un (une brave moyenne doit etre suffisante, sinon recupere les coef de la matrice de bayer) et effectue ton traitement

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed