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
182 lines
6.9 KiB
Markdown
182 lines
6.9 KiB
Markdown
# Geometric Constraints
|
||
|
||
## Définition
|
||
|
||
Les **geometric constraints** (contraintes géométriques) sont des règles mathématiques qui encadrent la relation entre les images 2D et la scène 3D. Elles servent à valider, filtrer et optimiser les correspondances et la reconstruction en éliminant les solutions physiquement impossibles ou improbables.
|
||
|
||
Ces contraintes exploitent la géométrie projective des caméras, la structure de la scène et les propriétés des capteurs pour garantir la cohérence géométrique du pipeline.
|
||
|
||
## Statut
|
||
|
||
**MIXED / EXPLICIT BOUNDARIES.** Il n'existe pas de module générique unique
|
||
« Geometric Constraints ». La matrice fondamentale et son support sont
|
||
implémentés/PASS-FROZEN dans Geometric Verifier v3. Essential, pose relative,
|
||
cheirality, parallaxe, triangulation et reprojection calibrées sont
|
||
implémentées/PASS-FROZEN dans Sparse SfM Gates C–G. La compétition explicite
|
||
Fundamental/Essential/Homography, les contraintes d'occlusion complètes et les
|
||
relations entre ScanSets restent futures. Ces distinctions remplacent
|
||
l'ancienne formule où tout le matching et la reconstruction étaient futurs.
|
||
|
||
## Place dans le pipeline
|
||
|
||
```
|
||
Matching & Tracks
|
||
↓
|
||
Geometric Constraints (filtrage)
|
||
├── Fundamental Matrix Filter
|
||
├── Essential Matrix Filter
|
||
├── Homography Filter
|
||
├── Parallax Filter
|
||
└── Visibility Constraints
|
||
↓
|
||
Reconstruction Layers (entrée validée)
|
||
```
|
||
|
||
Les contraintes géométriques agissent comme des filtres entre le matching brut et la reconstruction.
|
||
|
||
## Concepts clés
|
||
|
||
### 1. Fundamental Matrix (Matrice fondamentale)
|
||
|
||
La **matrice fondamentale** F encode la relation projective entre deux images pour une scène statique :
|
||
|
||
```
|
||
x'ᵀ F x = 0
|
||
```
|
||
|
||
où `x` et `x'` sont les coordonnées homogènes d'un point dans les deux images.
|
||
|
||
| Propriété | Valeur |
|
||
|-----------|--------|
|
||
| Dimensions | 3×3 |
|
||
| Rang | 2 |
|
||
| Degrés de liberté | 7 |
|
||
| Nombre minimum de points | 8 (ou 7 avec DLT) |
|
||
|
||
Usage :
|
||
- Vérification géométrique après matching brut
|
||
- Filtrage des outliers (points ne satisfaisant pas l'équation)
|
||
- Estimation de la configuration relative des caméras
|
||
|
||
### 2. Essential Matrix (Matrice essentielle)
|
||
|
||
La **matrice essentielle** E est la version calibrée de F, exprimée dans le repère caméra :
|
||
|
||
```
|
||
E = K'ᵀ F K
|
||
```
|
||
|
||
où `K` est la matrice intrinsèque de calibration.
|
||
|
||
| Propriété | Valeur |
|
||
|-----------|--------|
|
||
| Dimensions | 3×3 |
|
||
| Rang | 2 |
|
||
| Degrés de liberté | 5 (3 rotation + 2 translation) |
|
||
| Décomposition | E = t̂ R (rotation + translation) |
|
||
|
||
Usage :
|
||
- Extraction de la pose relative (R, t) entre deux caméras
|
||
- Triangulation des points 3D
|
||
- Estimation du baseline
|
||
|
||
### 3. Homography
|
||
|
||
L'**homographie** H encode la relation projective entre deux images d'un plan :
|
||
|
||
```
|
||
x' = H x
|
||
```
|
||
|
||
| Propriété | Valeur |
|
||
|-----------|--------|
|
||
| Dimensions | 3×3 |
|
||
| Degrés de liberté | 8 |
|
||
| Cas particulier | Scène plane ou rotation pure |
|
||
|
||
Usage :
|
||
- Détection de scènes planes (sols, murs, tableaux)
|
||
- Filtrage des matches sur plans dominants
|
||
- Warping et stitching d'images
|
||
|
||
### 4. Parallax Constraints (Contraintes de parallaxe)
|
||
|
||
La **parallaxe** est le décalage apparent d'un point entre deux images. Elle est liée à la distance focale, à la baseline et à la profondeur du point :
|
||
|
||
```
|
||
parallaxe = (f × baseline) / depth
|
||
```
|
||
|
||
| Type | Condition | Usage |
|
||
|------|-----------|-------|
|
||
| **Parallaxe minimale** | > seuil (ex: 0.5 pixel) | Éviter les dégénérescences (points à l'infini) |
|
||
| **Parallaxe maximale** | < seuil (ex: 100 pixels) | Éviter les erreurs de matching (trop de distortion) |
|
||
| **Parallaxe relative** | > baseline × sin(angle) | Garantir la qualité de triangulation |
|
||
|
||
### 5. Visibility Constraints (Contraintes de visibilité)
|
||
|
||
La **visibilité** encode quels points sont visibles depuis quelles caméras :
|
||
|
||
- **Culling** : un point derrière une caméra n'est pas visible
|
||
- **Occlusion** : un point peut être caché par un obstacle
|
||
- **Frustum** : un point hors du champ de vision n'est pas observable
|
||
|
||
```c
|
||
typedef struct {
|
||
Vec3d point_3d;
|
||
Vec3d camera_center;
|
||
Vec3d camera_direction;
|
||
float fov_horizontal;
|
||
float fov_vertical;
|
||
float near_plane;
|
||
float far_plane;
|
||
} VisibilityConstraint;
|
||
```
|
||
|
||
### 6. Triangle Quality Constraints
|
||
|
||
La qualité des triangles de triangulation influence la précision de la reconstruction :
|
||
|
||
| Métrique | Seuil recommandé | Description |
|
||
|----------|------------------|-------------|
|
||
| **Baseline angulaire** | > 5° | Angle entre les directions de vues |
|
||
| **Aspect ratio** | < 3.0 | Rapport longueur/largeur du triangle |
|
||
| **Epipolar distance** | < seuil pixel | Distance du point à la ligne épipolaire |
|
||
| **Reprojection error** | < 1-2 pixels | Erreur de reprojection après triangulation |
|
||
|
||
## Relations avec les autres modules
|
||
|
||
| Module | Relation |
|
||
|--------|----------|
|
||
| **Matching & Tracks** | Les contraintes filtrent les matches bruts pour ne garder que les géométries cohérentes. |
|
||
| **Visual Index** | Les candidats du Visual Index sont les entrées des contraintes géométriques. |
|
||
| **Reconstruction Layers** | Chaque couche applique les contraintes appropriées pour valider ses résultats. |
|
||
| **Resource Governor** | Admission et lots neutres uniquement ; aucun paramètre scientifique modifié. |
|
||
| **Hardware Profile** | Le calcul des matrices fondamentales/essentielles est CPU-bound. |
|
||
|
||
## Contraintes de conception
|
||
|
||
- Les seuils géométriques courants sont explicites, fingerprintés lorsqu'ils
|
||
appartiennent à l'identité, et immuables pendant un traitement ; les valeurs
|
||
FROZEN ne sont pas « calibrables » implicitement.
|
||
- L'estimation de F ou E utilise RANSAC avec un nombre d'itérations borné.
|
||
- La compétition/détection Homography explicite reste future et ne doit pas
|
||
être attribuée au Geometric Verifier v3 actuel.
|
||
- Les contraintes de visibilité sont recalculées à chaque ajout de caméra.
|
||
- Les résultats de filtrage géométrique sont auditables (log des rejets avec raison).
|
||
- En cas d'incertitude, les contraintes sont conservatistes (rejeter plutôt qu'accepter).
|
||
|
||
## Terminologie
|
||
|
||
| Terme | Définition |
|
||
|-------|------------|
|
||
| **Fundamental Matrix** | Matrice 3×3 encodant la relation projective entre deux images |
|
||
| **Essential Matrix** | Version calibrée de F, dans le repère caméra |
|
||
| **Homographie** | Transformation projective entre deux vues d'un plan |
|
||
| **Epipolar geometry** | Géométrie des lignes épipolaires reliant deux vues |
|
||
| **Parallaxe** | Décalage apparent d'un point entre deux images |
|
||
| **RANSAC** | Random Sample Consensus, algorithme robuste d'estimation de modèles |
|
||
| **Inlier** | Point satisfaisant la contrainte géométrique |
|
||
| **Outlier** | Point ne satisfaisant pas la contrainte, rejeté |
|
||
| **DLT** | Direct Linear Transform, méthode d'estimation linéaire |
|
||
| **Bundle adjustment** | Optimisation globale minimisant l'erreur de reprojection |
|