Photogrammétrie Python : L'Art de la Reconstruction 3D

Transformer de simples images 2D en modèles 3D denses via Structure-from-Motion (SfM) et Multi-View Stereo (MVS).
Intermédiaire
60 min
COLMAP, Python, Meshroom
"La photogrammétrie n'est pas magique, c'est de la géométrie projective pure. Si vous comprenez la triangulation, vous pouvez reconstruire le monde avec un smartphone."

1. Le Pipeline SfM (Structure-from-Motion)

Le SfM est le cœur du réacteur. Il retrouve simultanément la position des caméras (Motion) et la géométrie de la scène (Structure). Cela se fait en détectant des points distinctifs (Features type SIFT) et en les faisant correspondre entre les images.

Deux appareils photo vus de côté, chacun envoyant un rayon vers un même point situé au-dessus d'eux : leur intersection donne sa position prise de vue 1 prise de vue 2 point de liaison le même détail, reconnu sur les deux images Deux rayons suffisent à fixer une position ; au-delà, chaque vue supplémentaire réduit l'incertitude.
La triangulation, qui est tout le principe de la photogrammétrie. Un même détail est reconnu sur deux images ; comme la position et l'orientation de chaque prise de vue sont connues, les deux rayons se croisent en un seul point de l'espace. Répétée sur des centaines de milliers de détails, l'opération produit le nuage.

2. Automatisation avec COLMAP et Python

COLMAP est l'état de l'art open-source. Bien qu'il ait une GUI, nous voulons l'utiliser en ligne de commande (CLI) pilotée par Python pour traiter des datasets en masse.

sfm_batch.py
import subprocess

def run_colmap(project_path):
    database = project_path + "/database.db"
    images = project_path + "/images"
    
    # 1. Feature Extraction
    subprocess.run([
        "colmap", "feature_extractor",
        "--database_path", database,
        "--image_path", images
    ])
    
    # 2. Exhaustive Matching
    subprocess.run([
        "colmap", "exhaustive_matcher",
        "--database_path", database
    ])
    
    # 3. Mapper (Reconstruction)
    subprocess.run([
        "colmap", "mapper",
        "--database_path", database,
        "--image_path", images,
        "--output_path", project_path + "/sparse"
    ])

Ce script simple remplace des heures de clics manuels. Pour les grands datasets (>50 images), remplacez exhaustive_matcher par vocab_tree_matcher pour passer d'une complexité O(N²) à O(N).

3. Multi-View Stereo (MVS) : Vers la Densité

Le SfM ne produit qu'un nuage épars (Sparse Cloud). Le MVS prend le relais pour calculer la profondeur de chaque pixel pour chaque image, générant des cartes de profondeur (Depth Maps) fusionnées ensuite en un nuage dense.

Le point technique : Le MVS est extrêmement gourmand en VRAM GPU. Assurez-vous d'avoir une carte NVIDIA CUDA-compatible avec au moins 8 Go de VRAM pour traiter du 4K.

4. Post-Traitement et Maillage

Une fois le nuage dense obtenu, nous utilisons Poisson Surface Reconstruction pour créer un maillage (Mesh) étanche.

mesh_gen.py
import open3d as o3d

def poisson_mesh(pcd_path, depth=9):
    pcd = o3d.io.read_point_cloud(pcd_path)
    
    # Estimation normales requise
    pcd.estimate_normals()
    
    # Poisson Reconstruction
    mesh, densities = o3d.geometry.TriangleMesh.create_from_point_cloud_poisson(
        pcd, depth=depth
    )
    
    # Nettoyage des bulles (densités faibles)
    vertices_to_remove = densities < np.quantile(densities, 0.1)
    mesh.remove_vertices_by_mask(vertices_to_remove)
    
    return mesh

Le paramètre depth de l'Octree définit la résolution du mesh. Depth 8 est rapide, Depth 12 capture les détails fins (fissures) mais augmente exponentiellement le temps de calcul.

Synthèse : Quand utiliser la Photogrammétrie ?

Technologie Coût Matériel Précision Cas d'Usage
LiDAR Terrestre $$$$ (20k€+) Millimétrique Industrie, Métrologie
Photogrammétrie $ (Smartphone) Centimétrique Patrimoine, Visite Virtuelle, Asset 3D
LiDAR iPhone $$ (1k€) Décimétrique Scan rapide, Intérieur AR

Sur ce sujet : Ce que la formation couvre en acquisition et reconstruction.

Devenez Expert en Reality Capture

Maîtrisez toute la chaîne, de la prise de vue par drone jusqu'au jumeau numérique, dans notre cursus "Reality Capture Specialist".

Recevoir le guide gratuit Passer le test (10 min)

Le programme et les tarifs →