IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Traitement d'images Discussion :

filtre de canny


Sujet :

Traitement d'images

  1. #1
    gup
    gup est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 39
    Par défaut filtre de canny
    Bonjour,

    J'essaie de mettre en place un filtre de canny. J'en suis à l'étape de non maximal suppression, mais je ne comprends pas trop ce qu'il faut faire. Quelqu'un aurait un algo clair pour cette étape s'il vous plait ?

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Dans cette etape on cherche a conserver les pixels qui participent au contour. En terme de gradient, cela signifie un "pic" dans la variation d'intensité.

    Pour detecter un "pic", on regarde les pixels voisins. S'ils ont tous un gradient plus faible que le pixel observé, alors le pixel observé est un "pic".

    On peut optimiser l'algorithme en regardant seulement les 2 pixels voisins qui suivent la ligne de gradient:

    le pixel (x,y) observé est un "pic" si et seulement si

    G(x,y) > G(xp,yp) et G(x,y) > G(xn,yn)

    avec (xp,yp) et (xn,yn) les pixels precedent et suivant (dans le sens du gradient) du pixel observé, et G(x,y) = |Gx(x,y)| + |Gy(x,y)| la valeur du gradient.

    Pour calculer xp,yp,xn,yn on suit la ligne de gradient:

    xp = x - Gx(x,y) * scale
    yp = y - Gy(x,y) * scale

    et

    xp = x + Gx(x,y) * scale
    yp = y + Gy(x,y) * scale

    avec "scale" un facteur d'echelle, permetant que (xp,yp) et (xn,yn) soient differents de (x,y). Par exemple

    scale = 1 / Max( Gx(x,y) , Gy(x,y) )

    Si Gx(x,y) = Gy(x,y) = 0, alors le gradient est nul ==> (x.y) n'est pas un pic
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    gup
    gup est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 39
    Par défaut canny
    Je ne comprends pas tout, aurais-tu un algo qui détail cette méthode s'il te plait ?

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Mince, ca m'avait l'air clair...

    bon, va pour l'algo:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    private static boolean isLocalMaxima0(ImageMap c, int x, int y) {
     
    	// gradient at current position
    	double[] grad = gradient(c,x,y);
     
    	// gradient direction
    	double gx = grad[0];
    	double gy = grad[1];
     
    	// gradient ~= 0 => consider this is not a local maxima
    	double gmax = Math.max( Math.abs(gx), Math.abs(gy) );
    	if (gmax<EPSILON) return false;
     
    	// scaling
    	double scale = 1.0/gmax;
     
    	// gradient value at next position in the gradient direction
    	int nx = (int) (x + gx * scale);
    	int ny = (int) (y + gy * scale);
    	int ngrad = gradient(c,nx,ny);
     
    	// gradient value at previous position in the gradient direction
    	int px = (int) (x - gx * scale);
    	int py = (int) (y - gy * scale);
    	int pgrad = gradient(c, px, py);
     
    	// is the current gradient value a local maxima ?
    	if (norme(grad)>=norme(ngrad) && norme(grad)>=norme(pgrad)) return true;
     
    	// otherwise
    	return false;
    }
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Le code complet du filtre est dispo dans le sous-forum "Contribuez"
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  6. #6
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    si tu cherches sur google, tu trouveras ce filtre déjà implémenté, notamment dans les plugins supplémentaires de ImageJ.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  7. #7
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par ToTo13
    Bonjour,

    si tu cherches sur google, tu trouveras ce filtre déjà implémenté, notamment dans les plugins supplémentaires de ImageJ.
    Mince... dire que j'ai fait ca pour rien
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

Discussions similaires

  1. filtre de canny-deriche
    Par ouss747 dans le forum Images
    Réponses: 10
    Dernier message: 29/05/2011, 16h09
  2. Détection de contours après filtre de Canny
    Par nomidia dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 19/04/2010, 16h50
  3. Contours dans un filtre de Canny
    Par lidaa dans le forum OpenCV
    Réponses: 4
    Dernier message: 18/05/2009, 11h40
  4. Réponses: 19
    Dernier message: 09/07/2008, 18h42
  5. [Image] Filtre de Canny pour ImageJ
    Par pseudocode dans le forum Contribuez
    Réponses: 18
    Dernier message: 13/09/2007, 19h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo