Bonjour,
Est-ce qu'il y a un moyen qui permet de calculer le diamètre d'un cercle sur un plot3 (comme dans la figure jointe)
merci d'avance
Bonjour,
Est-ce qu'il y a un moyen qui permet de calculer le diamètre d'un cercle sur un plot3 (comme dans la figure jointe)
merci d'avance
Bonjour,
Une manière serait d'utiliser l'équation d'un cercle:
On obtient dans un premier temps le centre du cercle en calculant le centre de gravité des points:(x-xo)² + (y-yo)² + (z-zo)² = R²
Puis il suffit d'appliquer l'équation:
Code : Sélectionner tout - Visualiser dans une fenêtre à part Centre = sum([x(:) y(:) z(:)])/NbPoints
Code : Sélectionner tout - Visualiser dans une fenêtre à part Diametre = 2*sqrt(mean((x-Centre(1)).^2 + (y-Centre(2)).^2 + (z-Centre(3)).^2))
Bonsoir et merci pour votre réponse,
Comme vous pouvez le constater sur la figure il y a des points qui sont loin du cercle, c'est des faux positifs si on veut, alors je me demande s'il y a une fonction telle que regioprops(avec option equivdiameter) qui détecte automatiquement le cercle ?
J'ai pensé à calculer la distance entre le centre du cercle et les autres points, et mettre un seuil mais je pense que c'est une mauvaise idée alors je cherche mieux.
Merci encore d'avoir pris la peine de me répondre c'est gentil de votre part
Tu peux peut-être regarder la fonction kmeans...
Bonjour,
Le problème de kmeans est qu'elle risque d'exploser ton cercle selon la répartition des tes points. Autant le cluster correspondant au cercle est homogène, autant pénaliser par l'inertie intra-classe des outlyers (ton second cluster, i.e les points hors du cercle) n'est pas pertinent.
j'imagine plusieurs solutions théoriques (isodensité ou quantile en dimension 2) qui nécessitent l'estimation non paramétrique de la densité et qui seront donc longues et fastidieuses.
Note que si tu connaissais le centre du cercle, ca serait du gateau. On peut donc imaginer une méthode de détection intuitive qui essaye de le placer au mieux. Je note M le maximum des distances entre 2 points quelconques:
1/ Tu pars d'un point au hasard C (disons le barycentre de 2 points tirés au hasard dans l'échantillion)
2/ Tu prend une grille (0:dr:M) et tu calcules le nombre de points situés à une distance au plus r du point C. Le rayon le plus vraisemblable est celui présentant le saut le plus fort entre 2 valeurs consécutives. Cela te donne une valeur R
3/ Tu restreins l'échantillon aux points R-dr< D(x,C) < R. Tu prends C= leur barycentre et tu recommence l'étape 2.
4/ Tu itères 1-3 pour plusieurs points initiaux C, et au final tu retiens le couple (C,R) qui place le plus de points dans un plus petit dr.
C'est clairement pas optimal (entre O(N^2) et O(N^3)), mais si ton échantillon est assez petit, ca devrait te donner une première solution pas trop dure à coder.
Si ca ne tourne pas assez vite, il faut que tu optimises directement un critère équivalent via une descente de gradient, ou que tu ailles voir du coté de l'apprentissage statistique (classif. évoluée, Support Vecteur Machine, réseau de Neurone etc), il doit bien exister une solution théorique à ton problème.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager