lardon3d/docs/concepts/reconstruction_layers.md
fy59 b84f860d86 refactor(core): freeze global maintenance baseline
Complete the A-to-Z Lardon3D maintenance and coherence pass.

Generalize host resource policy, remove the global CPU12 ceiling, preserve
host CPU/RAM reserves, scale Task capabilities through the Resource Governor,
and validate deterministic parallel GV execution.

Migrate Project DB to v23 with data-driven camera, lens, optical configuration
and calibration profiles, including manual lenses without EXIF.

Integrate safe optional LARDON SSD swap/scratch control with Governor and F10
drain/safe-to-unplug semantics.

Refactor the ncurses TUI into a runtime observatory with durable progress,
elapsed time, smoothed ETA, throughput, resource telemetry, Governor state,
optics workflow, colors and compact/no-color fallbacks.

Reconcile Queue lifetime, persistence, concurrency, comments, tests,
README, AGENTS and canonical documentation.

GLOBAL_MAINTENANCE_AUDIT=PASS/FROZEN
2026-09-01 08:00:47 +02:00

156 lines
6.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
**ARCHIVE / PLANNED POUR CETTE ABSTRACTION GÉNÉRIQUE.** Le type de snapshot et
les cinq layers proposés ci-dessous ne sont pas une API implémentée. Les jalons
réels Track, Sparse SfM, BA, Phase H et MVS-M1 ont depuis été acquis par leurs
contrats canoniques distincts ; ils ne valident ni ce modèle générique de
layers, ni Dense complet, mesh, texturing ou viewer.
## 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 runtime/Queue. |
| **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 |