Skip to content
Snippets Groups Projects
Commit aabc5041 authored by Pierre EVEN's avatar Pierre EVEN
Browse files

updated report

parent e76a5405
Branches
No related merge requests found
......@@ -14,6 +14,8 @@
% Inclure la bibliographie dans la table des matières comme une section
\usepackage [numbib] {tocbibind} % numbib : section numérotée
\usepackage{algpseudocode}
% Fonte élégante
\usepackage{mathpazo}
\usepackage [scaled] {helvet}
......@@ -84,7 +86,7 @@
\textsc{
Segmentation d'arbre \\
~ \\
dans un nuage de points ?
dans un nuage de points.
}
}
......@@ -186,7 +188,7 @@
\section{Etat de l'art}
En matière de segmentation d'arbres, 3 grandes approches ressortent, celles basées sur la hauteur,
celles du "bassin versant, et celles.. j'ai plus le nom ?
celles du "bassin versant, et DBScan
\subsection {Methode 1}
......@@ -198,9 +200,99 @@
% Chapitre 3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{Travail réalisé}
\chapter{Implémentation}
\label{chap:work}
\section{Détection de l'arbre}
La détection de l'arbre et de la position de son tronc est grandement simplifiée par la manière dont sont
générés les nuages de points : l'utilisateur tournant autour de l'arbre, la densité de points au niveau du
tronc est très largement superieur à tout le reste du nuage de point.
Cette position est déduite de la manière suivante sur une carte de densité generée à partir du nuage de point :
\begin{center}
\[ \mathcal T = Median_{(x, y)} [Density_{(x, y)} > {\alpha}] \]
\end{center}
\section{Extraction des coupes verticales}
Le nuage est segmenté en N tranches en "parts de gateau" centrées sur le tronc. La suite du traitement se ferra sur
les cartes de densité des tranches ainsi générées.
\begin{algorithmic}
\State \(\mathcal S \leftarrow \) DensityMap[N]
\For{P in PointCloud}
\State \(\alpha \leftarrow \lfloor \) Angle(\(P_{(x, y)}, \mathcal T) / N \rfloor\)
\State \(\Delta \leftarrow\) Distance(\(\mathcal T, P_{(x, y)}\))
\State \(\mathcal S[\alpha]_{(\Delta, P_z)} \) += 1
\EndFor
\end{algorithmic}
\subsection{Génération d'un profile globale}
On part du principe que l'arbre a généralement au plus un arbre voisin dans 2 directions différentes.
De là on peut déduire une façon d'extraire un profile global de l'arbre :
Une tranche globale est obtenue en faisant une ouverture sur la somme des tranches préalablement binarisées.
La binarisation de chaque tranche permettant de réduire la sensibilité aux fluctuations de densité.
\begin{center}
\[ \mathcal G_{x, y} = \gamma_B \left (\sum_{i=0}^N \lfloor \mathcal S_{(x, y)}(i)\rfloor \right )\]
Avec pour élément structurant B un carré de coté 3, et N nombre de tranches
\end{center}
L'ouverture fonctionne car la densité des points décroit graduellement avec la distance du tronc et permet
d'éliminer les points n'apparaissant que dans peu de directions.
De cette coupe globale, on déduit un chemin en plaquant une courbe de la droite vers la gauche
(la gauche correspondant au tronc)
\begin{algorithmic}
\State \(\mathcal P \leftarrow \) Path[ \(\mathcal G_y \) ]
\For{Y in \(\mathcal G_y \)}
\State X \(\leftarrow G_x\)
\While {\(\mathcal G_{X, Y}\) = 0 and X > 0}
\State X -= 1
\EndWhile
\State \(\mathcal P \)[Y] = X
\EndFor
\end{algorithmic}
Cette approche n'est cependant pas idéale même si elle a montré des résultats encourageants.
L'ouverture est en effet sensible à la densité et à la résolution des images des coupes.
Cette partie serra à améliorer ulterieurement.
\subsection{Optimisation des coupes individuelles}
On affine ensuite cette coupe globale sur chaque coupe individuelle.
Cette coupe globale sert de guide lorsqu'il s'agit de trancher entre 2 arbres proches.
(Elle évite par ailleurs de couper au niveau du tronc).
Cette optimisation est calculée par un algorithme de Dijkstra appliquée sur chaque tranche.
Les poids de l'algorithme sont définis de la façon suivante pour un noeud correspondant à un
pixel \(\mathcal U\) de l'image à un autre pixel \(\mathcal V\) :
\begin{center}
On utilisera une version \(\mathcal B\) de la carte de densité de la tranche\\
sur laquelle on a appliquée un flou Gaussien de rayon élevé.
\[\mathcal W_{(x, y)} = \Delta(\mathcal U, \mathcal V) + abs(\mathcal V_{(y)} - \mathcal P[_y]) + \mathcal B_{(x, y)}\]
Avec \(\Delta(u, v)\) la distance euclidienne entre 2 pixels u et v.
\end{center}
\begin{quote}
Note : Dans l'implémentation, l'algorithme est simplifié pour s'arrêter au premier chemin de poids minimal trouvé.
Ce raccourci a un impact minimal sur le résultat final car les excroissances se
trouvent rarement au début ou à la fin du graph minimisant le risque de raccourcis, et permet un gain considérable en temps de calcul.
\end{quote}
\section{Génération du maillage}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Chapitre 4
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment