lardon3d/docs/concepts/matching_and_tracks.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

7.4 KiB
Raw Permalink Blame History

Matching & Tracks

Document historique. Ce document décrit la vision conceptuelle initiale du matching et des tracks. Le contrat persistant réel du Track Model v1 (schéma, invariants, API) est documenté dans tracks.md. Les différences notables : le Track Model v1 ne contient aucune coordonnée 3D, aucun statut (ACTIVE/OPTIMIZED/REJECTED), aucune matrice de co-visibilité et aucun plafond de longueur arbitraire. Le Matcher, le Geometric Verifier et le Track Builder réels sont désormais implémentés et documentés par leurs contrats d'architecture ; triangulation, Sparse SfM et Bundle Adjustment demeurent des étapes séparées de ce concept historique.

Frontière v1A : les groupes de support ORB/SIFT sont uniquement des preuves locales intra-image. Ils ne comparent pas les espaces Hamming et L2, ne sont pas des matches multivues et ne créent aucun track. Le Matcher production choisit explicitement le Feature kind retenu après génération des paires.

Définition

Le matching est le processus d'appariement de descripteurs visuels entre paires d'images pour identifier les correspondances géométriques. Un track (ou piste) est la séquence de correspondances cohérentes d'un même point 3D à travers plusieurs images.

Le matching transforme les features individuelles en relations inter-images. Les tracks connectent ces relations en structures cohérentes qui traversent le scan set, formant le squelette de la reconstruction 3D.

Statut

ARCHIVE HISTORIQUE — SUPERSEDED. Candidate Pair, Matching v1, Geometric Verification v3 et Track Model/Builder v1 sont implémentés et gelés dans leurs documents d'architecture. Les structures et politiques conceptuelles ci-dessous ne redéfinissent pas ces contrats courants.

Place dans le pipeline

Visual Index (candidats)
    ↓
Feature Matching (appariement brut)
    ↓
Geometric Verification (filtrage par géométrie)
    ↓
Track Construction (assemblage en pistes)
    ↓
Track Optimization (raffinement)
    ↓
Reconstruction Layers (triangulation)

Le matching est le pont entre les caractéristiques 2D des images et la structure 3D de la scène.

Le score Visual Index est un signal de retrieval. Il ne constitue ni un match descriptor-descriptor final, ni une preuve épipolaire. La chaîne courante reste : candidate Visual Index → matching → vérification géométrique → tracks.

La génération production de paires candidates combine image_id, appartenance au ScanSet, résultats du Visual Index et provenance. Une proximité temporelle pourra servir de signal secondaire ; la proximité dans un dossier et le nom de fichier ne constituent jamais l'identité principale.

Une observation de feature utilisera la référence durable feature_set_id + feature_index. Une fois le Feature Set READY, feature_index désigne immuablement la paire keypoint/descripteur de même indice ; aucun chemin source n'entre dans cette identité.

Concepts clés

Étapes du matching

1. Feature Matching (appariement brut)

Pour chaque paire d'images candidates :

  • Recherche des descripteurs les plus proches (ratio test de Lowe)
  • Filtrage par distance seuil
  • Résultat : liste de correspondances brutes
// Ratio test de Lowe
if (dist_best / dist_second_best < RATIO_THRESHOLD) {
    // Correspondance acceptée
}

2. Geometric Verification (filtrage géométrique)

  • Estimation de la matrice fondamentale F (cas général) ou matrice essentielle E (caméra calibrée)
  • Filtrage par RANSAC : rejet des outliers
  • Validation de la parallaxe minimale pour éviter les dégénérescences

3. Track Construction (assemblage)

  • Union-find sur les correspondances cohérentes
  • Chaînage transitoire : si A↔B et B↔C, alors A↔C potentiellement
  • Filtration des tracks trop courts (< 3 images) et trop longs (erreurs de chaînage)

Structures de données

Correspondance (Match)

Champ Type Description
image_a uint64_t Identifiant de la première image
image_b uint64_t Identifiant de la seconde image
keypoint_a Keypoint Position (x,y) dans l'image A
keypoint_b Keypoint Position (x,y) dans l'image B
descriptor_a Descriptor Descripteur dans l'image A
descriptor_b Descriptor Descripteur dans l'image B
confidence float Score de confiance de l'appariement

Track (Piste)

Champ Type Description
id uint64_t Identifiant unique du track
observations Observation[] Liste des observations (image, keypoint)
point_3d Vec3d Position 3D estimée (après triangulation)
status enum ACTIVE, OPTIMIZED, REJECTED

Observation

Champ Type Description
image_id uint64_t Image où le point est observé
keypoint Keypoint Position (x,y) dans l'image
track_id uint64_t Track auquel appartient l'observation

Matrice de co-visibilité

La co-visibilité mesure le nombre de tracks partagés entre deux images. Elle forme une matrice symétrique qui influence :

  • Le choix des paires à traiter en priorité
  • La robustesse de la reconstruction (images bien connectées = meilleur ancrage)
  • La détection des clusters disconnected
CoVis(A,B) = |Tracks(A) ∩ Tracks(B)|

Relations avec les autres modules

Module Relation
Visual Index Fournit les candidats initiaux pour le matching.
Scan Sets Le matching s'effectue au sein d'un scan set ou entre scan sets connectés.
Geometric Constraints Les essentiels, fondamentales et homographies sont appliqués pendant la vérification géométrique.
Reconstruction Layers Les tracks sont l'entrée du processus de triangulation.
Resource Governor Le matching est mémoire-intensive : le gouverneur contrôle la taille des lots de paires traitées.
Task Le matching est décomposé en tâches par paire d'images, parallélisables.
Hardware Profile Le matching peut être accéléré par GPU pour les calculs de distance entre descripteurs.

Contraintes de conception

  • Le matching ne doit jamais produire de tracks incohérents (un track = un point 3D unique).
  • Les tracks de moins de 3 observations sont rejetés comme non reconstructibles.
  • Le filtre de ratio de Lowe (typiquement 0.7-0.8) est immuable après calibration.
  • Le RANSAC utilise un nombre d'itérations borné et un seuil de consensus configurable.
  • Les tracks rejetés sont conservés pour audit mais exclus de la reconstruction.
  • La matrice de co-visibilité ne doit pas dépasser N×N pour N images (bornée par la RAM).

Terminologie

Terme Définition
Match Correspondance entre deux keypoints de deux images différentes
Track Série de matches cohérents d'un même point 3D à travers N images
Observation Apparition d'un track dans une image spécifique
Outlier Match incorrect rejeté par vérification géométrique
Inlier Match correct accepté après vérification
Co-visibilité Nombre de tracks partagés entre deux images
Baseline angulaire Angle entre les directions de vues de deux images pour un point donné
Parallaxe Décalage apparent d'un point entre deux images