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

Algorithmes et structures de données Discussion :

Problème Rayon de Courbure


Sujet :

Algorithmes et structures de données

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 421
    Par défaut Problème Rayon de Courbure
    Bonjour à tous,

    Après avoir approximer le contour d'un coquillage je souhaiterais déterminer le maximum de rayon de courbure de ce dernier.
    J'ai implémenté un algo mais mon souci c'est qu'il ne détecte pas le max de rayon de courbure et il me donne des valeurs aberrantes.
    Par exemple pour mon graphique ci dessous man algo m'indique que le max de rayon de courbure est 1254067.537095
    J'ai utilisé la formule suivante pour calculer le rayon de courbure :
    RayonCourbure = ((x'*x' + y'*y')^3/2) / (x'y'' - y'x'')
    Quelqu'un pourrais me dire ce qui ne vas pas dans mon algo ?

    voici 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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
     
     
    typedef struct m_Pixel
    {
     
    		double x;
    		double y;
     
    } Pixel;
     
    void RayonCourbureFind( Pixel *contour, int n, double pas)
    {
     
      int i,k;
      double dx,dxx,dy,dyy;
      double rayonCourbure;
      double temp;
                                   /* approximation de la derivee par différence finie au point initial de la courbe */
                                    dx = (contour[2].x - contour[0].x)/(pas*2.);
      				dy = (contour[2].y - contour[0].y)/(pas*2.);
     
      				dxx = (contour[2].x - 2.*contour[1].x + contour[0].x)/(pas*pas);
      				dyy = (contour[2].y - 2.*contour[1].y + contour[0].y)/(pas*pas);
     
      				/* calcul de la courbure au point initial*/
                                    temp = fabs(pow(dx*dx + dy*dy, 3./2.)/(dyy*dx - dxx*dy)) ;
     
     
      for(i=1; i<n-2; ++i){
     
                                    /* approximation de la derivee par différence finie  */
     
    				dx = (contour[i+1].x - contour[i-1].x)/(pas*2.);
      				dy = (contour[i+1].y - contour[i-1].y)/(pas*2.);
     
      				dxx = (contour[i+1].x - 2.*contour[i].x + contour[i-1].x)/(pas*pas);
      				dyy = (contour[i+1].y - 2.*contour[i].y + contour[i-1].y)/(pas*pas);
     
    				/* calcul de la courbure */
      				rayonCourbure = fabs(pow(dx*dx + dy*dy, 3./2.)/(dyy*dx - dxx*dy));                                
     
        				if(rayonCourbure > temp){
        				                     temp = rayonCourbure;
        				                     k = i;
        				                       } 	                       							    	                        
                                } 
     
       return; 
    }

  2. #2
    Membre confirmé

    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 170
    Par défaut
    Il faudrait que tu nous montres ton contour. Peut-être que cette valeur max correspond à du bruit?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 421
    Par défaut
    euh oui j'avais oublié dsl.
    J'ai appliqué un filtre gaussien pour lisser le contour pour palier ce problème.

  4. #4
    Membre émérite
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Par défaut
    Il est normal d'avoir des rayons de courbure infinis aux points d'inflexion, je pense qu'en fait tu cherches plutôt le points de courbure minimum dont la courbure se trouve vers l'extérieur de la courbe

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 421
    Par défaut
    Si j'ai bien compris je détermine le minimum des rayons de courbures négatifs. Cela m'indiquera le point d'inflexion se situant au niveau de la tête du coquillage (si on peut appeler ceci comme cela ) c'est bien ça ?

    Je vous remercie !
    Pour le moment j'ai testé ce point sur quatre contours ça l'air de fonctionner mais cette méthode dépend beaucoup de mon lissage sur le contour, Arf !

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    et pourquoi ne pas simplement calculer l'angle entre chaque point de ton contour et ses 2 vosiins et prendre le plus petit (ou le plus grand suivant l'usage) ??

  7. #7
    Membre émérite
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Par défaut
    Juste un petit point de vocabulaire: le point d'inflexion est le point de changement (de signe) de courbure, ce sont grosso modo les points ou ta
    courbe est localement plate et ou le rayon de courbure ne peut être défini.

    Sinon pour un calcul plus robuste peut-être faut-il envisager de calculer la courbure en moyennant sur un plus grand voisinage (ce qui doit être équivalent à lisser la courbe)

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 421
    Par défaut
    et pourquoi ne pas simplement calculer l'angle entre chaque point de ton contour et ses 2 vosiins et prendre le plus petit (ou le plus grand suivant l'usage) ??
    Je pense que cela revient au même, j'y ai pensé mais j'avoue que j'ai préféré l'autre méthode.

    Juste un petit point de vocabulaire: le point d'inflexion est le point de changement (de signe) de courbure.
    Je suis d'accord avec cette définition !
    mais dis moi au niveau de la tête du coquillage c'est bien un point d'inflexion, il me semble qu'on constate bien un changement de signe du rayon de courbure ?
    Si c'est pas un point d'inflexion quel est le nom de ce point ?
    Quelle est la différence entre un point d'inflexion géométrique et analytique ?

    Sinon pour un calcul plus robuste peut-être faut-il envisager de calculer la courbure en moyennant sur un plus grand voisinage (ce qui doit être équivalent à lisser la courbe)
    Comme j'approxime les dérivées par différences finis je pense que cela revient à prendre un pas plus grand.

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/09/2013, 11h41
  2. Problème rayon sur l'API IGN
    Par julien.vassal dans le forum IGN API Géoportail
    Réponses: 4
    Dernier message: 21/09/2012, 21h35
  3. Calculer le rayon de courbure
    Par drfell dans le forum MATLAB
    Réponses: 2
    Dernier message: 03/06/2009, 10h33
  4. Réponses: 4
    Dernier message: 26/06/2008, 18h28
  5. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18

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