Calculer un plan moyen

Bonjour
je travaille sur des nuages de points 3D issus de balayage laser, et je souhaiterais déterminer, a partir d'un ensemble de coordonnées x,x,z le plan moyen passant au plus près de chacun de mes points.
En gros, je dispose d'un fichier texte qui ressemble à ça :
              X           Y             Z
ligne1       x1          y1           z1                <----- point 1
ligne2       x2          y2           z2                <----- point 2
ligne3                       etc
ligne4                      etc
...
J'ai vu quelques posts sur des forum, mais rien de clair et de compréhensible. J'aimerais, si c'est possible (je suis exigeant), la démarche pas à pas, et pas simplement son nom (du style "bah utilise la méthode des moindres carrés").
Merci beaucoup !!

Réponses

  • Bonjour.

    Il existe de nombreuses méthodes permettant d'obtenir un "plan moyen", mais comme cette notion est assez floue, les résultats dépendent des méthodes. En particulier le conseil "moindre carrés" est l'utilisation d'une méthode, parmi d'autres. Car la difficulté est dans le "passant au plus pres de chacun de mes points" : Comment juger qu'un plan passe plus près qu'un autre ?
    Dans la méthode des moindres carrés de principe, on impose que le plan rende minimale la somme des carrés des distances de tes points (*). Ce qui donne un calcul assez lourd, que d'autres te détailleront peut-être.
    Cette méthode est très souvent utilisée différemment (en donnant un plan légèrement différent) : Si par exemple ton plan est de façon sûre assez proche de l'horizontale, on écrit son équation $z=ax+by+c$ et on cherche les coefficients a, b et c de façon que les distances verticales entre tes points et le plan ($\vert z_i-(ax_i+by_i+c)\vert$) aient une somme de carrés minimale. Le calcul revient alors à un calcul matriciel, qu'on fait exécuter par des programmes (statistiques généralement). En effet, dès qu'il y a plus de 7 ou 8 points, le travail est infaisable à la main.
    Sinon, pour programmer soi même facilement, et si les données s'y prêtent, on peut utiliser la méthode de Mayer : On partage l'ensemble des points en trois parties (si possible nettement séparées), on détermine les centre de gravités des trois ensembles, puis le plan passant par ces trois points. On obtient généralement un plan encore différent des précédents, et qui dépend aussi un peu de la façon de choisir les trois sous-ensembles, les trois parties. Mais ça se programme assez facilement. Ce qui permet de vérifier que le résultat est assez fiable, en découpant de façon différente en trois parties, et vérifiant que les coefficients de l'équation du plan ne sont pas trop modifiés.

    Cordialement.

    (*) Si l'équation du plan est $ax+by+cz+d=0$, il faut déterminer $a, b,c$ et $d$ pour qu'ils minimisent :
    $\displaystyle \sum\limits_i \frac{(ax_i+by_i+cz_i+d)^2}{a^2+b^2+c^2}$
  • Bonjour,

    Le plan moyen a pour équation $a x + b y + c z + d = 0$ avec:
    $a = \sum\limits_{k=1}^n (y_k-y_{k+1})(z_k+z_{k+1})$
    $b = \sum\limits_{k=1}^n (z_k-z_{k+1})(x_k+x_{k+1})$
    $c = \sum\limits_{k=1}^n (x_k-x_{k+1})(y_k+y_{k+1})$
    $d = - a x_G - b y_G - c z_G$, où on suppose qu'on a rajouté un point numéro $n+1$ égal au point numéro $1$ et où $G$ est le centre de gravité:
    $x_G=\dfrac{1}{n} \sum\limits_{k=1}^n x_k$ , $y_G=\dfrac{1}{n} \sum\limits_{k=1}^n y_k$ et $z_G=\dfrac{1}{n} \sum\limits_{k=1}^n z_k$

    Prêt à être consommé :)-D

    Cordialement,

    Rescassol
  • merci bcp
    j'ai fait un petit script qui calcule automatiquement cette equation, puis je la teste avec :
    x = 0 et y = 0
    x = 0 et z = 0
    y = 0 et z = 0
    ca semble fonctionner, mais j'aimerais en etre sûr.
    en fait, je voudrais pouvoir vérifier en générant un grand nombre de points aléatoirement, appartenant à ce plan moyen, mais je ne sais pas comment faire. a part en prenant deux valeurs nulles comme je l'ai fait pour trouver mes trois points, je me retrouve systématiquement avec un système d'équation a trois inconnues a résoudre, et je ne sais pas comment coder ca...
    Aussi, je voulais savoir comment calculer l'équation d'une droite dans l'espace appartenant à ce plan, a partir des coordonnées de deux points.
    en tout cas merci
  • je rectifie, ca ne marche pas, ou plutot ca ne marche que lorsque mon nuage est orienté parrallèlement a mon repère...
    je vais essayer de trouver pourquoi ...
  • Si tu testes avec des points situés dans un même plan, tu ne trouveras pas un point moyen. Il faudrait tester avec des points situés aux alentours d'un plan. Pour cela, tu détermines n points dans un plan (à partir de l'équation, c'est assez facile), puis tu fais fluctuer légèrement les coordonnées en ajoutant une petite valeur aléatoire : Soit normale de moyenne 0 et d'écart type faible, soit simplement une variable uniforme sur [0;1] (genre ALEA() des tableurs) moins 0,5, le tout multiplié par un nombre faible. Le plan moyen doit être proche du plan choisi au départ.

    Cordialement.

    NB : Je ne connais pas la méthode de Rescassol, je ne vois pas d'où elle procède.
  • si tu as une autre méthode (simple de préférence) je suis preneur, car je n'y arrive pas avec celle la
  • Quelle méthode as-tu testée ?
  • celle de rescassol
  • Bonjour.

    J'ai aussi testé la méthode de Rescassol. Elle ne marche pas, et pour un plan non "vertical", il est possible de choisir des points de façon que c soit nul (je l'ai fait par hasard en prenant a entier de 1 à 3 et b entier de 1 à 3 : les 9 possibilités donnent c=0 quelle que soit l'équation du plan de départ.

    Cordialement.
  • Message devenu inutile.
  • du coup, quelqu'un a une autre méthode ?
  • Je viens de regarder la méthode de Mayer, avec peu de points. On ne peut pas dire que ce soit très satisfaisant non plus. En gros, le calcul n'est pas très stable. Sauf si on choisit les sous-nuages de façon que les trois centres de gravité partiels soient éloignés les uns des autres et pas trop alignés. J'ai obtenu un bon résultat avec le partage par les abscisses (faibles, moyennes, fortes), mais avec le même partage et des ordonnées trop régulières, j'ai obtenu un résultat catastrophique.

    J'ai peur qu'il n'existe pas de méthode à la fois très simple à expliquer, efficace et générale. Si tu as un cas particulier à traiter, on pourra le regarder.

    Cordialement.
  • On se ramène par translation au cas où le centre de gravité est $O$
    On voit en différenciant par rapport à $d$ qu'un plan "moyen" doit satisfaire $d=0$.
    Soient $(x_i,y_i,z_i)$ ($1\le i\le n$) les points.
    Soient $x=(x_1,\ldots,x_n)$, $y=(y_1,\ldots,y_n)$ et $z=(z_1,\ldots,z_n)$.
    Soit $A$ la matrice de Gram $$A=\left(\begin{array}{ccc}
    ||x||^2 & \langle x,y\rangle & \langle x,z\rangle \\
    \langle x,y\rangle & ||y||^2 & \langle y,z\rangle \\
    \langle x,z\rangle & \langle y,z\rangle & ||z||^2
    \end{array}\right).
    $$ Soit $ V = \left( \begin{array}{c} a\\b\\c\end{array}\right)$. Il faut minimiser ${}^tVAV/||V||^2$. Ce minimum est atteint lorsque $V$ est un vecteur propre pour la plus petite valeur propre de $A$.
  • Merci JLT.

    Si j'ai bien compris, tu prends un plan moyen au sens des moindres carrés.

    Cordialement.
  • Oui c'est ça, je minimise la fonction que tu as donnée :
    $\displaystyle \sum\limits_i \frac{(ax_i+by_i+cz_i+d)^2}{a^2+b^2+c^2}$.
  • nicocorico écrivait : http://www.les-mathematiques.net/phorum/read.php?8,728203,728203#msg-728203
    Bon on admettra que vous ayez votre système de points $(x_i,y_i,z_i)$

    On recherche les trois composantes de deux vecteurs non colinéaires donc formant un plan nommons les $\vec A$ et $\vec B$ tels que selon leurs composantes respectives $a_i$ et $b_i$ vous obteniez la plus petite valeur possible en valeur absolue de:
    $(a_3b_2-a_2b_3)x_i+ (a_1b_3-a_3b_1)y_i+(a_2b_1-a_1b_2)z_i$
    pour cela en premier lieu considérez trois points quelconques que vous disposez déjà et appliquez avec tous les autres $(x_i,y_i,z_i)$ tels qu'avec ces trois points de base vous ayez obtenu la plus petite valeur possible
    Je me rends compte à présent que vous avez dit "de chacun de vos points" donc il faut calculer le centre de gravité de votre système de points alors vous en obtenez déjà un premier point appartenant à ce plan puis de réitérer en comptant ce nouveau point pour obtenir le deuxième point appartenant à ce plan puis de réitérer pour obtenir le dernier appartenant à ce plan

    Pour le calcul d'un centre de gravité d'un système de points effectuez la moyenne arithmétique (en fait ce qu'on appelle une moyenne) des valeurs selon chacun des axes.

    [Inutile de répéter le message initial. Un lien suffit. AD]
  • Bel exposé, Pierre.

    malheureusement, j'ai bien peur qu'il ne soit pas plus compréhensible par Nicocorico que la bouillie de mots de Sphinx. Car bien que structuré, il ne répond pas à sa question initiale : dites moi le calcul à faire.
    Pour ma part, j'ai essayé de répondre en tenant compte du niveau mathématique apparent de Nicocorico. D'où certaines approximations, dont celle que tu as relevée, en interprétant probablement à tort : je ne parlais pas d'implémentation, mais de simplicité pour Nicocorico. Depuis, je me suis demandé si je n'avais pas eu tort : Il semble vouloir programmer lui-même les outils correspondants.

    A noter : Il veut des méthodes, mais ne nous a jamais dit ce qu'il voulait faire vraiment. peut-être que ta réponse l'incitera à le dire.

    Cordialement.
  • De toute façon, Pierre ne dit rien de plus exploitable pour Nicocorico que gerard0 :

    1) On utilise une méthode de type "moindres carrés" car on sait faire les calculs dans ce contexte.

    2) Si on ne sait rien a priori de la direction du plan, on fait comme j'ai expliqué dans mon avant-dernier message.

    3) La méthode doit être modifiée si on cherche a priori un plan horizontal, ou si on veut incorporer certaines informations a priori.
  • Pierre : tu n'as pas justifié pourquoi la méthode des moindres carrés est la méthode qu'il faut absolument appliquer lorsque les données sont additives. Par exemple, dans le cas d'une variable aléatoire elle correspond à trouver la constante $m$ telle que la variance de $X-m$ est minimale. On a l'habitude d'employer cette méthode parce que les calculs sont commodes, mais a priori pourquoi ne pas minimiser $E[|X-m|]$, ou bien $\sup |X-m|$, ou d'autres quantités. Dans un espace vectoriel donné, il n'y a pas de norme qui soit plus jolie qu'une autre.
  • Pour compléter ce que dit JLT :

    En statistiques descriptives, on ajuste une droite à un nuage de points avec la méthode des moindres carrés, mais maintenant qu'on a des moyens automatiques de calcul, on obtient des résultats plus satisfaisants (car moins sensibles aux valeurs aberrantes) en prenant la somme des écarts absolus à la place de la somme de leurs carrés.
    L'origine de la méthode des moindres carrés est probablement dans les habitudes de calcul (axe d'inertie) des mathématiciens-mécaniciens qui ont proposé ces méthodes.

    Cordialement.
  • salut tout le monde
    alors déjà merci à tous pour votre participation a ce qui semble se transformer en véritable débat!
    Par contre j'avoue je n'y comprends pas grand chose, il me semblait que cette question pouvait se résoudre assez facilement (et unanimement), comme on trouverait l'équation d'une droite passant au plus pres d'un nuage de points (avec les moindres carrés)
    Ensuite je ne sais plus qui faisait allusion a mon niveau en maths, mais effectivement cela fait un bout de temps que je n'ai pas pratiqué (j'en ai fait pendant un an apres le bac, ca remonte à 7 ans maintenant...), j'ai gardé une certaine logique et quelques notions, mais pas plus.
    Je suis obligé de m'y remettre depuis peu car je bosse dans un labo qui fait de la recherche sur la 3D appliquée au patrimoine.
    L'avantage est que je sais un peu programmer (mais je crois que je l'ai déjà dit), donc je peux automatiser assez facilement les calculs, dans la mesure ou je les comprends bien sur...
    Il existe dans certains logiciels un peu obscurs qu'on utilise ici des fonctions qui permettent, a partir d'un ensemble de points dans l'espace disposés de n'importe quelle maniere, de calculer le plan qui passe au plus pres de tous ces points. Le probleme étant que l'utilisation de cette fonction ne peut se faire que par le biais du logiciel ou elle se trouve, et dans mon cas ça ne m'intéresse pas.
    Je sais plus pourquoi je raconte tout ca.

    pldx1: tu dis que la méthode de rescassol fonctionne ? tu peux l'expliquer et la détailler un peu stp (en essayant de te mettre au niveau d'un élève de lycée).
    encore merci a tous
  • Bonjour :

    "comme on trouverait l'équation d'une droite passant au plus pres d'un nuage de points (avec les moindres carrés) " 2 remarques :
    * Si c'est ça que tu voulais, tu as eu la réponse.
    * Ce n'est en rien une "droite moyenne", c'est une des droites d'ajustement linéaire parmi tant d'autres; son intérêt est qu'elle correspond aussi à un modèle de statistique (régression linéaire) et à un modèle mécanique (axe principal d'inertie). Mais tant de gens croient qu'il est prouvé que c'est "la meilleure" que des idées fausses trainent de partout.

    Pour la méthode de Rescassol, elle ne fonctionne pas en général. Elle ne fonctionne que si les points sont bien plus éloignés les uns des autres que d'un plan donné. Donc elle est utilisable en métrologie (mesures de planéité) car les écarts de hauteur sont en centièmes de mm et les prises de mesures se font à quelques cm, voire quelques dm les uns des autres.

    Cordialement.
  • Bonjour nicocorico,

    Il y a des exemples numériques dans l'article :
    "Régressions et trajectoires 3D" par le lien :
    http://www.scribd.com/JJacquelin/documents
    dans la secode partie "Regression plane en 3D."
    Tu trouveras plusieurs méthodes aisées à programmer. Ainsi que la méthode dite "analyse en composantes principales", dont le calcul matriciel est très simple, pour obtenir l'équation du plan.
    Pour tous ces exemples théoriques, avec applications numériques, il s'agit de trouver le plan tel que soit minimum la somme des carrés des distances orthogonales entre le plan et les points.

    J'ajoute que, si ce que tu cherches n'est pas un plan "moyen", mais s'il s'agit d'une droite dans l'espace, passant au plus près de points connus avec une certaine dispersion, la première partie "3d. Linear Regression" (dans le même article) donne également des méthodes de calcul avec exemples numériques.
  • Bonjour à tous,

    Il y a de nombreux critères d'ajustement,

    j'en ai étudié 6 dans le document joint.

    Cordialement.
  • Pierre,

    rassure-toi, je ne "préfère" pas utiliser l'écart absolu moyen. Je dis qu'il est effectivement utilisé par des statisticiens pour éviter une trop grande influence des valeurs aberrantes éventuelles (souvent présentes dans des grandes masses de données). De même que la médiane est parfois choisie pour calculer la moyenne (eh oui !) lorsqu'on a des doutes sur la fiabilité des données recueillies.
    Dans ces deux cas, il est assez évident que la distribution des valeurs doit être symétrique, pour éviter un biais. C'est le cas dans pas mal de modèles, et bien plus facile à penser que la Normalité, tant prisée des mathématiciens.

    Ton analyse purement mathématique est intéressante, mais ne règle pas les problèmes du praticien (voir la dernière intervention de Nicocorico). Qui, s'il est sérieux, utilise un modèle adapté à sa situation, pas défini par des calculs (comme tu le signales à propos du choix du type de moyenne). Donc s'il y a une liaison linéaire utile, le fait d'avoir un modèle plus fiable sera préférable à avoir un modèle plus étudié par les mathématiciens. Tant pis si tes analyses de qualité sont plus complexes à faire (qu'attends-tu pour les traiter ?).

    Une petite remarque : Déceler mathématiquement les valeurs aberrantes n'a aucun sens. Mais je parlais de vraies valeurs aberrantes, comme on en obtient dans les recueils de données statistiques (date de naissance 1903 au lieu de 2003; note sur 20 à 22 au lieu de 2, 19 ans pour 91 ans, etc.). Elles sont assez rares, mais peuvent influencer sérieusement une moyenne.

    Cordialement.

    NB : Tes explications sont parfois difficiles à suivre, car tu utilises des notations non définies (un peu comme si tout le monde avait travaillé sur le même ouvrage).
  • Bonjour à tous

    J'ai un problème un peu similaire à nicocorico mais je pense plus simple.

    Pour dégauchir une pièce de fonderie avant de l'usiner je viens palper 4 points supposés appartenir au plan médian de la pièce.
    La fonderie étant légèrement déformée, les 4 points ne sont pas coplanaires.
    Contrairement aux machines de contrôle 3D, la commande numérique du centre d'usinage n'accepte de ne palper que 3 points pour définir un plan de référence.
    Je suis donc obligé de calculer moi-même l'équation du plan à partir des coordonnées des 4 points palpés.
    En théorie les 4 points forment un rectangle d'environ 5 mm x 50 mm. Les défauts de planéité constaté sur les fonderies sont de l'ordre de 0,5 mm à 0,2 mm (mesures en tridim).
    Est-ce que je peux utiliser la méthode très simple et très claire de Rescassol ?
    J'ai besoin d'une méthode avec des formules très simples (pas de matrice par exemple) pour pouvoir les rentrer dans la commande numérique (bien plus basique que des logiciels type Excel ou Matlab)

    Merci d'avance pour une réponse "prêt à l'emploi" car mes derniers cours de math datent de plus de 20 ans ...
  • Bonjour Lancey,

    J'ai également un problème pour un usinage de fonderie sur centre 5 axes, vous pouvez sans doute me débloquer.

    Comme ma fonderie est relativement élancée, elle a tendance à se vriller et se gauchir lors du refroidissement et du vieillissement.
    Pour balancer la pièce sur le centre d'usinage j'ai ajouté quatre languettes dans la fonderie, appartenant théoriquement au plan médian, de façon à venir les palper et créer le plan "moyen" passant au plus près de ces 4 points.
    Malheureusement la CN (Heidenhain) n'a pas de macro prédéfinie pour déterminer ce plan, il ne lui faut que trois points pour créer un plan.
    Par contre il y a un mode analytique dans lequel on peut récupérer les coordonnées des 4 points palpés et rentrer soi-même ses propres formules.
    Est-ce que vous pouvez me dire comment calculer l'équation du plan (ax + by + cz + d = 0) à partir des coordonnées des points P1, P2, P3 et P4 ?

    Merci de faire simple et clair car mon dernier cours de math remonte à presque 30 ans ...

    Merci d'avance pour votre aide
Connectez-vous ou Inscrivez-vous pour répondre.