statisticalTest.tex 5.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. \subsection{Tools > Statistics > Statistical test}
  2. \label{subsection:statisticalTest}
  3. \begin{figure}[!htb]
  4. \begin{center}
  5. \includegraphics[width=0.4\textwidth]{Partie3_Fonctions/statisticalTestDlg.png}
  6. \caption{\label{fig:statisticalTestDlg}Exemple d'estimation automatique des paramètres d'une loi normale pour un champ scalaire}
  7. \end{center}
  8. \end{figure}
  9. \index{champ scalaire}
  10. \index{statistiques!test}
  11. \index{statistiques!paramètres}
  12. \index{Gauss|see{loi normale}}
  13. Cette fonction, centrale dans \emph{CloudCompare}, permet d'appliquer un test du $\chi^{2}$ local sur un nuage de point muni d'un champ scalaire.
  14. Le test du $\chi^{2}$ est appliqué à chaque point à partir de l'histogramme des valeurs scalaires de ses $n$ voisins ($n$ étant
  15. un des paramètres de l'algorithme). Le test confronte cet histogramme\index{histogramme} avec une distribution théorique à deux paramètres ($\mu$
  16. et $\sigma$ dans le cas d'une loi normale par exemple).
  17. \\
  18. \par
  19. Avant de spécifier les paramètres, l'utilisateur doit choisir le type de distribution théorique (il a le choix actuellement entre
  20. \emph{Gauss} et \emph{Weibull}). Le résultat est un nouveau champ scalaire (une valeur pour chaque point - la métrique du $\chi^{2}$ -
  21. qui donne une information sur la concordance locale entre la valeur scalaire et la distribution testée). La théorie du test du
  22. $\chi^{2}$ nous fournit un seuil (calculé à partir de la marge d'erreur $p(\chi^{2})$, dernier paramètre de l'algorithme) qui permet
  23. de classer les points en fonction de leur non-appartenance à la loi testée. Cette loi représentera typiquement le bruit de mesure,
  24. et on obtiendra ainsi l'ensemble des points dont la distance (à l'autre nuage/maillage) ne fait pas partie du bruit de mesure (par exemple).
  25. Ainsi, on aura les points qui ont effectivement subi une modification, un changement, et on évitera de prendre en compte des points
  26. en réalité immobiles mais dont la distance n'est pas nulle car elle est bruitée. Une fois le nuage séparé en deux classes,
  27. on peut garder le groupe des points \emph{hors distribution} (voir figure~\ref{fig:statisticalTestExample}, en rouge) et les
  28. segmenter\index{segmentation} par exemple en fonction de la proximité relative des points (par une extraction des composantes connexes - Cf.
  29. section~\ref{subsection:labelConnectedComponents}).\index{composantes connexes}
  30. \begin{figure}[!htb]
  31. \begin{center}
  32. \includegraphics[width=0.8\textwidth]{Partie3_Fonctions/statisticalTestExample.jpg}
  33. \caption{\label{fig:statisticalTestExample}Champ des écarts initial (en haut à gauche), filtrage statistique (en haut à droite),
  34. puis extraction des points \emph{hors distribution théorique} (en bas à gauche) et enfin extraction des composantes connexes
  35. (en bas à droite).}
  36. \end{center}
  37. \end{figure}
  38. Remarques :
  39. \begin{itemize}
  40. \item Pour appeler cette fonction, il faut sélectionner une seule entité 3D, munie d'un champ scalaire actif.
  41. \item Pour régler le paramètre $p(\chi^{2})$, il est important de comprendre que le test du $\chi^{2}$ permet uniquement de rejeter
  42. l'hypothèse selon laquelle \emph{les valeurs du champ scalaire prises sur le voisinage de chaque point suivent la loi testée}, mais
  43. pas l'inverse. Ainsi, plus la marge d'erreur est faible, et plus le seuil du $\chi^{2}$ sera grand (on rejette moins souvent
  44. l'hypothèse citée précédemment, et on classe donc moins de points comme \emph{ne suivant pas la loi testée}).
  45. \item \textcolor[rgb]{1.00,0.00,0.00}{Inversement, plus $p(\chi^{2})$ est grand, plus on aura de points "hors la loi", colorés en rouge.}
  46. Notez que ce paramètre sert uniquement à pré-positionner les potentiomètres de réglage des couleurs (seuils de coupure et de saturation
  47. des valeurs du champ scalaire) pour l'affichage du résultat à l'écran (Cf. section~\ref{Champs-scalaires}). Ces potentiomètres peuvent
  48. être ensuite déplacés par l'utilisateur avant extraction effective des points (par appel de la fonction \emph{Scalar Fields > Filter
  49. by Value}, qui va créer un nouveau nuage de points ne comportant que les points présentement affichés à l'écran, c.à.d. les points ne
  50. suivant pas la distribution théorique). De plus, la distance du $\chi^{2}$ est extrêmement divergente et ceci donne une grande marge
  51. de manoeuvre à l'algorithme. Ainsi, une modification relativement grande du seuil de coupure n'aura que peut d'effet sur la
  52. classification. Au pire, on risque de rater un tout petit nombre de points (au niveau des bordures des zones limites).
  53. \item Pour obtenir des résultats précis, il faut par contre connaître ou mesurer la distribution du bruit de mesure
  54. (une sorte de bruit moyen, en première approximation, comprenant l'erreur de mesure dûe au capteur, à la surface scannée, à la lumière,
  55. à la température ambiante lors de la mesure, à la création du maillage dans le cas d'une comparaison nuage/maillage, etc.).
  56. Les paramètres de la distribution statistique correspondante peuvent donc être définis à partir de connaissances a priori
  57. mais peuvent aussi être déterminés à partir d'un champ scalaire (une portion du nuage typiquement) avec la fonction de calcul de paramètres statistiques
  58. à partir d'un champ scalaire (Cf. section~\ref{subsection:computeStatParams}).
  59. \item L'algorithme crée un nouveau champ scalaire nomme (\emph{Chi2 Distances}). Ce champ est ajouté au nuage de points courant.
  60. \end{itemize}