152 lines
6.4 KiB
Markdown
152 lines
6.4 KiB
Markdown
# Reconstruction Layers
|
||
|
||
## Définition
|
||
|
||
Les **reconstruction layers** (couches de reconstruction) organisent le processus de reconstruction 3D en étapes séquentielles et indépendantes. Chaque couche traite un sous-ensemble du problème, produit un résultat validé, et passe le relais à la couche suivante. Cette approche séquentielle garantit la stabilité, l'observabilité et la reprise après interruption.
|
||
|
||
L'idée centrale est de décomposer la reconstruction en couches de complexité croissante, chaque couche étant atomique : elle lit un état d'entrée validé, calcule, et écrit un nouvel état validé.
|
||
|
||
## Statut
|
||
|
||
**PLANNED** — Concept architectural pour la décomposition du pipeline de reconstruction. Pas encore implémenté.
|
||
|
||
## Place dans le pipeline
|
||
|
||
```
|
||
Tracks ( entrée )
|
||
↓
|
||
Layer 0: Initial Reconstruction (triangulation basique)
|
||
↓
|
||
Layer 1: Bundle Adjustment (optimisation locale)
|
||
↓
|
||
Layer 2: Dense Reconstruction (dense matching)
|
||
↓
|
||
Layer 3: Mesh Generation (mailllage)
|
||
↓
|
||
Layer 4: Texturing (texture mapping)
|
||
↓
|
||
Résultat final validé
|
||
```
|
||
|
||
Chaque couche constitue une **frontière de séquence** : en cas d'interruption, la reprise se fait à la dernière frontière validée.
|
||
|
||
## Concepts clés
|
||
|
||
### Principes fondamentaux
|
||
|
||
1. **Atomicité** : chaque couche produit un résultat entièrement validé ou entièrement rejeté.
|
||
2. **Immutabilité** : une couche ne modifie jamais les résultats des couches précédentes.
|
||
3. **Idempotence** : relancer une couche avec les mêmes entrées produit le même résultat.
|
||
4. **Bornage** : chaque couche a un budget mémoire et temporel maximum.
|
||
|
||
### Couche 0 — Initial Reconstruction
|
||
|
||
| Aspect | Description |
|
||
|--------|-------------|
|
||
| **Entrée** | Tracks, caméras intrinsèques, co-visibilité |
|
||
| **Traitement** | Triangulation SVD, initialisation P3P, sélection du paire initial |
|
||
| **Sortie** | Nuage de points sparse, poses de caméras initiales |
|
||
| **Budget** | O(N²) dans le pire cas, typiquement O(N·K) où K = nombre moyen de tracks |
|
||
|
||
Étapes :
|
||
1. Sélection du **paire initial** (meilleure baseline angulaire + co-visibilité)
|
||
2. **Triangulation** des tracks du paire initial
|
||
3. **Rétro-projection** progressive des caméras adjacentes (grow)
|
||
4. Filtrage des points rejetés (erreur de reprojection > seuil)
|
||
|
||
### Couche 1 — Bundle Adjustment
|
||
|
||
| Aspect | Description |
|
||
|--------|-------------|
|
||
| **Entrée** | Nuage sparse, poses caméras, tracks |
|
||
| **Traitement** | Optimisation non-linéaire (LM ou Ceres-like), minimisation de l'erreur de reprojection |
|
||
| **Sortie** | Poses optimisées, points 3D affinés, historique de convergence |
|
||
| **Budget** | O(N·M) où N = points, M = observations |
|
||
|
||
Variantes :
|
||
- **Local BA** : optimisation d'un sous-ensemble de caméras voisines
|
||
- **Global BA** : optimisation simultanée de toutes les caméras et points
|
||
- **Incremental BA** : ajout progressif de caméras avec optimisation partielle
|
||
|
||
### Couche 2 — Dense Reconstruction
|
||
|
||
| Aspect | Description |
|
||
|--------|-------------|
|
||
| **Entrée** | Poses optimisées, images originales |
|
||
| **Traitement** | Semi-Global Matching (SGM), stereo matching, depth maps |
|
||
| **Sortie** | Depth maps par image, nuage de points dense |
|
||
| **Budget** | Très élevé en RAM : images × profondeur de recherche |
|
||
|
||
Approches :
|
||
- **Multi-View Stereo (MVS)** : matching dense entre paires de views
|
||
- **Patch-Based MVS** : regroupement de patches pour robustesse
|
||
- **Depth Map Fusion** : fusion des depth maps en nuage unifié
|
||
|
||
### Couche 3 — Mesh Generation
|
||
|
||
| Aspect | Description |
|
||
|--------|-------------|
|
||
| **Entrée** | Nuage de points dense |
|
||
| **Traitement** | Poisson reconstruction, Delaunay, ball pivoting |
|
||
| **Sortie** | Maillage triangulaire orienté |
|
||
| **Budget** | CPU intensif, mémoire proportionnelle au nombre de points |
|
||
|
||
### Couche 4 — Texturing
|
||
|
||
| Aspect | Description |
|
||
|--------|-------------|
|
||
| **Entrée** | Maillage, images originales, poses caméras |
|
||
| **Traitement** | Projection UV, visibilité caméra par face, blending |
|
||
| **Sortie** | Maillage texturé, atlas de texture |
|
||
| **Budget** | GPU intensif pour le rendu, RAM pour les textures |
|
||
|
||
### Frontières de séquence
|
||
|
||
Chaque couche produit un **snapshot** atomique :
|
||
|
||
```c
|
||
typedef struct {
|
||
uint64_t layer_id;
|
||
uint64_t sequence_id;
|
||
int64_t timestamp;
|
||
uint32_t status; // VALIDATED | REJECTED | PARTIAL
|
||
size_t data_size;
|
||
void* data; // Pointeur vers le résultat sérialisé
|
||
} LayerSnapshot;
|
||
```
|
||
|
||
Les snapshots sont persistés sur disque et consultables par le viewer.
|
||
|
||
## Relations avec les autres modules
|
||
|
||
| Module | Relation |
|
||
|--------|----------|
|
||
| **Matching & Tracks** | Fournissent l'entrée de la couche 0. |
|
||
| **Geometric Constraints** | Utilisées dans toutes les couches pour filtrer et valider. |
|
||
| **Resource Governor** | Le gouverneur alloue les budgets pour chaque couche et contrôle la taille des lots. |
|
||
| **Task** | Chaque couche est une tâche candidate. Les couches sont séquencées par le scheduler. |
|
||
| **Hardware Profile** | Les couches 2-4 peuvent exploiter le GPU si disponible. |
|
||
| **Image Catalog** | Les couches 2-4 lisent les images originales pour le dense matching et texturing. |
|
||
| **Viewer** | Le viewer affiche les snapshots des couches validées. |
|
||
|
||
## Contraintes de conception
|
||
|
||
- Une couche ne démarre que si la couche précédente a produit un snapshot VALIDATED.
|
||
- Les snapshots intermédiaires sont persistés permettant la reprise après crash.
|
||
- Chaque couche a un budget mémoire maximum imposé par le Resource Governor.
|
||
- La couche 1 (BA) est la plus critique : elle doit converger de manière déterministe.
|
||
- Les couches 2-4 peuvent être exécutées par lots (tiles) pour limiter la RAM.
|
||
- Le pipeline complet doit pouvoir être interrompu à n'importe quelle frontière.
|
||
|
||
## Terminologie
|
||
|
||
| Terme | Définition |
|
||
|-------|------------|
|
||
| **Layer** | Étape séquentielle et atomique de la reconstruction |
|
||
| **Frontière de séquence** | Point de reprise garanti entre deux couches |
|
||
| **Snapshot** | État persisté du résultat d'une couche |
|
||
| **Sparse reconstruction** | Nuage de points issu du matching (peu de points) |
|
||
| **Dense reconstruction** | Nuage de points issu du stereo matching (beaucoup de points) |
|
||
| **Bundle Adjustment** | Optimisation jointe des poses caméras et des points 3D |
|
||
| **Reprojection error** | Distance entre un point 3D projeté et son observation 2D |
|
||
| **Grow** | Ajout progressif de caméras à la reconstruction |
|