---
title: "VPOA: Analyse de l'environnement 3D"
date: 2021-11-04 09:00
categories: [Image S9, VPOA]
tags: [Image, S9, VPOA]
math: true
---
Lien de la [note Hackmd](https://hackmd.io/@lemasymasa/rkmnVzWvt)
# Introduction
On sait obtenir de l'info en 3D sous la forme d'un nuage de points (sous forme de nuage de points, carte de disparite).
*Comment valoriser cette donnee ?*
> On peut se localiser
> Detection d'objets
- Visualisation 3D
- Reconstruction de modele 3D
- Building Information Modeling
- Clustering 3D
- Dimensionnement 3D
- Detection d'objets 3D
- Modele numerique de terrain
- Navigation autonome
- etc
*Comment passer d'un nuage de points a une donnee a valeur ajoutee ?*
- Analyse 3D
- Segementation
- Recalage
# Analyse de Surface et Reconstruction 3D
## Segmentation semantique
![](https://i.imgur.com/J6bqpe0.jpg)
:::info
But:
1. segmenter en temps reel tous les points
2. segmenter toutes les donnees accumulees
:::
:::success
Utile pour les vehicules autonomes
:::
## Reconstruction 2D
Exemple de problematique en 2D:
![](https://i.imgur.com/4yN6gc5.png)
:::warning
Dans la realite, le probleme n'est pas si simple
![](https://i.imgur.com/oRTrKoM.png)
:::
### Extraction de la surface
- Discretisation Octree (1 point par cellule)
![](https://i.imgur.com/8uYVrOa.png)
- Calcul d'un champ de vecteurs
![](https://i.imgur.com/6jWNHUN.png)
- Calcul de la fonction indicatrice
![](https://i.imgur.com/R2VgmMb.png)
- Extraction de l'isosurface
![](https://i.imgur.com/g0T9prk.png)
## Reconstruction 3D
:::success
En 3D, ca donne:
![](https://i.imgur.com/EKBavSc.png)
:::
### Voxelisation
Differentes methodes de voxelisation
![](https://i.imgur.com/jkwk163.png)
### Maillage
Ensemble de sommets connectes
![](https://i.imgur.com/QGpjqMc.png)
## Analyse de surface
![](https://i.imgur.com/l4raMJT.png)
Calculs de normales par ACP:
- On cherche le meilleur plan approche dans le voisinage d'un point $X_{i0}$
- Les points du voisinage sont notes $X_i$
- Equation d'un plan $n^tX=d, \Vert n\Vert =1$
- Distance signee d'un point au plan: $d(X_i, P) = n^tX_i-d$
![](https://i.imgur.com/1Ahgpob.png)
### Resolution
- Methode des moindres carres
- Resolution de l'equation de minimisation pour le plan
Fonction a minimiser: $f(n,d)=\sum_{i=1}^m(n^tX_i-d)^2
- 4 parametres: $(n,d)$, 1 contrainte: $\Vert n\Vert =1$
On pose:
- Barycentre des points $G=\frac{1}{m}\sum_{i=1}^mX_i$
- Matrice de covariance des points
$$
M_{cov} = \frac{1}{m}\sum_{i=1}^m(X_i-G)(X_i-G')
$$
Le meilleur plan approche est defini par:
- Normale $n_{min}$
- Vecteur propre norme associe a la plus petite valeur propre de $M_{cov}$
- NB: indetermine a un changement de sens pres
- Distance $d_{min}$
- $d_{min}=n^tG$
:::success
La solution fait appel a l'analyse des directions principales de la matrice de covariance: **Analyse en Composantes Principales (ACP)**
:::
# Segmentation 3D
:::info
**Definition**
*Subdiviser (partitionner)* le nuage de points 3D en sous-ensembles connexes correspondants a des modeles simples
![](https://i.imgur.com/UNzJxk1.png)
:::
## Methodes de segmentation
![](https://i.imgur.com/jiDVe8U.png)
## Croissance de surface
:::info
**Principe**
- A partir de "surfaces germes" ou "graines" (seed surfaces) dans le nuage de point
- Agregation progressive des points voisins appartenant a la meme surface
:::
> **Remarque**: extension de l'algorithme "croissance de regions" pour les images
Pour chaque point, un calcul de la normale du plan dans un voisinage:
![](https://i.imgur.com/NbR8Oaq.png)
Critere d'agregation:
- Co-normalite: $\alpha = \arccos(n_1, n_2)\le \alpha_{seuil}$
- Normales dans le meme sens
- Coplanarite: $d=\max(\vert r_{12}\cdot n_1\vert, \vert r_{12}\cdot n_2\vert) \le d_{seuil}$
- Points sur le meme plan
![](https://i.imgur.com/MkGWlA1.png)
## Clustering
:::info
**Definition**
Regroupement de donnees en paquets homogenes selon des caracteristiques commnunes
![](https://i.imgur.com/jZoiXFX.png)
:::
### DBSCAN
:::info
C'est l'un des algorithme de clustering les plus repandus
:::
Principe:
- Choix d'un point graine pour la region
- Identification des voisins du point
- Pour chaque point voisin
- Si la densite locale de points est suffisante, ajout a la region
- Sinon, labellisation en tant que bruit
- On continue jusqu'a ne plus pouvoir etendre la region
On peut jouer sur 2 parametres:
- Le rayon de recherche des voisins
- La quantite minimale de voisin ou densite
## RANSAC
:::info
**RANdom SAmple Consensus**
:::
Methode de vote sur des echantillons aleatoires de surfaces
- Echantillons calcules a partir du nombre minimal de points necessaires pour definir la surface(quorum)
- Vote: un nombre de points du nuage englobes dans un espace entourant chaque surface
- Le nombre de votes est decide en fonction d'un calcul de probabilites
:::success
Tres efficace pour les grandes surfaces en nombre inconnu dans un grand nuage de points
:::
> Les surfaces extraites ne sont pas connectees entre elles
Primitives geometriques et quorum de points:
- Droite:
- Quorum = 2 points non alignes
- Plan:
- Quorum = 3 points $x_i$ non alignes
- Le plan est defini par:
- L'un des points, par exemple $x_1$
- Une normale unitaire $n$, par exemple definie par:
$$
n=\frac{(x_2-x_1)(x_3-x_1)}{\Vert (x_2-x_1)(x_3-x_1)\Vert}
$$
Vote:
- Nombre de points compris dans un espace a une certaine distance $\delta$ de la surface calculee
![](https://i.imgur.com/B0rYPno.png)
Probabilites:
- Hypotheses
- Plusieurs surfaces possibles, points non bruites
- $N$ points dans le nuage de points
- $n$ points appartiennet a la surface recherchee
- $q$ points pour definir la surface (quorum)
- Probabilites de trouver la surface recherchee:
- Avec $1$ tirage aleatoire: $p=(\frac{n}{N})^q$
- Avec $T$ tirages aleatoires $p=1-(1-(\frac{n}{N})^q)^T$
Nombre de tirages necessaires:
- Nombre de tirage aleatoires $T_{min}$ necessaires pour avoir une probabilite $p_t$ de trouver une surface d'au moins $n_{min}$ points
$$
T_{min} = \frac{\log(1-p_t)}{\log(1-(\frac{n_{min}}{N})^q)}
$$
- En supposant $n_{min}\lt\lt N:T_{min}\simeq \log(\frac{1}{1-p_t})(\frac{N}{n_{min}})^q$
Exemple:
![](https://i.imgur.com/ALzkJ5X.png)
## Hough 3D
Principe:
- Methode de vote dans l'espace dicretise des parametres
- Chaque point du nuage genere des votes de surfaces possibles dans l'espace des parametres
- La cellule qui remporte le plus de votes est retenue comme surface
- Generalisation de la transformee de Hough 2D (image)
Detection de droites
![](https://i.imgur.com/DdaIdw7.png)
TODO
Probleme
## Deep learning
![](https://i.imgur.com/qkNT4H6.png)
# Recalage 3D
Point Set Registration, Point Matching:
- Processus d'alignement de jeux de points TODO
## Iterative Closest Point
:::info
**ICP**
Determination de la transformation rigide $(R,t)$ entre les deux nuages de points
:::
Principe
- Appariement des points du nuage a recaler au point le plus proche dans l'autre nuage (approche de "nearest neighbor")
- Calcul de la transformation $(R,t)$ qui minimise la distance entre ces points
![](https://i.imgur.com/1QuMGjy.png)
### Calcul de la transformation $(R,t)$
Resolution par la methode des moindres carres:
On calcule:
$$
f(R,t) = \sum_{i=1}^n\Vert p_i-(R\cdot p_i'+t)\Vert^2\\
f:\begin{cases}
SE^3&\to \mathbb R^+\\
(R,t)&\mapsto f(R,t)
\end{cases}
$$
On cherche: $(R,t)$ tel que $(R, t)=\text{arg}\min_{R,t}f(R,t)$
Solution par decomposition
TODO
Resolution par Singular Value Decomposition (SVD)
- Entree: jeux de points $(P,P')$
- sortie: Matrice de rotation $R$, vecteur translation $t$
- Algorithme
- Determiner les barycentres $p_m=\frac{1}{n}\sum_{i=1}^n$ et $p_m'$
- Calculer la matrice $H$
- Decomposer $H$ en valeurs singulieres $\exists(U, V, \Sigma)$ TODO
- Calculer $R=VU^T$ et $t=p_m-p_m'$
Pseudo code ICP:
```
Recalage approximatif P'->P
Repeter:
- Association de donnees P' -> P
- Calcul de la transformation (R, t)
- Application de la transformation au nuage de point P'
- Calcul de la distance entre les nuages
Tant que:
- Distance normalisee > seuil
- Et nombre d'iterations < maximum d'iterations
```
Temps de calcul:
- Appariement en $O(n_1, n_2)$, le reste en $O(n_1 + n_2)$
- Acceptable pour les petits nuages de points, trop lent pour de gros nuages de points
- Necessite de sous-enchatilloner
- Possibilite d'acceleration avec ANN (Approximate Nearest Neighbor): $O(n_1\log(n_2))$
Approximate Nearest Neighbor (ANN)
- Principe
- Pre-calcul d'un kd-tree pour partitionner l'espace
- Recherche dichotomique avec distance seuil
![](https://i.imgur.com/dxLcs9v.png)
Variante ICP:
- Metrique point a plan (point to plane)
- Echantillonage: regulier, aleatoire, base sur les normales
- Rejection des outliers
- ...
![](https://i.imgur.com/HEr3LzD.png)