Kapitel 9 — SfM-backends


Camera Alignment-vælgeren i Inspector er en segmenteret kontrol med to muligheder — Apple Photogrammetry (standard for App Store-builds, fuldt sandbox-konform) og Native (Beta) (RadianceKits eget FAST+BRIEF+GLOMAP-pipeline-backend, udviklet i fase 3.8/3.9, pr. 2026-05). Native (Beta) er orbit-only valideret og hurtigere ved ≥1 000 frames end Apple Photogrammetry, men opfylder endnu ikke fase-3-§5-kvalitetsgaten (finalLoss ≤ 0.0115) — deraf Beta-mærket. Eksterne SfM-resultater fra Metashape, COLMAP eller anden fotogrammetri-software kan desuden importeres via File-menuen (Q3 COLMAP-tekstformat, Q6 Workspace-import) — vælgeren skifter ikke, men de importerede positioner erstatter SfM-resultatet.
SfM står for Structure from Motion. Ud fra en mængde overlappende fotos rekonstruerer softwaren for hvert billede kameraets position og kiggeretning i et fælles 3D-koordinatsystem. Undervejs genereres en grov 3D-punktsky, der initialiserer træningen med Gaussian Splatting. SfM-resultatet er input til selve træningen og er afgørende for den senere billedkvalitet.
RadianceKit tilbyder fem SfM-veje: to backends indbygget i appen (Q1 Apple Photogrammetry, Q4/Q5 Native), to import-stier fra eksterne værktøjer (Q3 COLMAP-tekstformat, Q6 binær Workspace-import) samt Q2 COLMAP-binary, der kun er tilgængelig i developer-builds uden for App Store. Hvilken der er den rette, afhænger af scenetypen (orbit omkring et objekt, indendørs rum, droneflyvning), og af om en ekstern software allerede leverer en rekonstruktion.
Q1 — Apple Photogrammetry
HVOR
Expert View → Inspector → Træningskonfiguration → Camera Alignment-vælger, posten „Apple Photogrammetry".
TEKNISK
Indkapsler Apples indbyggede fotogrammetri-framework, som oprindeligt blev udviklet til Object Capture. Apple udtrækker internt features med en proprietær pipeline (trin er ikke offentligt dokumenteret), verificerer dem via multi-view-matching og løser bundle-adjustment på Apple Silicon Neural Engine + GPU. Backend'en er fuldt App Store-konform (ingen ekstern binary, Sandbox=true, on-device), men leverer kun kamerapositioner plus en grov punktsky — ingen diagnose-metrikker som spor-længde eller reprojektionsfejl. Skalerer ifølge Apples anbefaling op til et par hundrede billeder. Ved mere end ~500 frames i lineære droneflyvninger eller store outdoor-scener er der reproducerbart observeret crashes eller stilstoppende frasortering af enkelte kameraer.
Q3 — COLMAP-tekstformat (Metashape / ETH3D)
HVOR
Menuen „File → Import COLMAP / Metashape Workspace…" (Cmd+⇧+I) ELLER træk-og-slip af en mappe med sparse/0/cameras.txt.
TEKNISK
Læser den standardiserede COLMAP-teksteksport — tre tekstfiler cameras.txt, images.txt, points3D.txt i undermappen sparse/0/ — og konverterer til den interne SfM-resultat-model. Samme formatdefinition som COLMAP-binær-eksporten, bare som ASCII i stedet for binær. Udskrives af Agisoft Metashape, RealityCapture, PolyCam og ETH3D-benchmark'en i præcis dette layout. Parseren deler kamera-model-detektion med binary-parseren (alle gængse modeller: SIMPLE_PINHOLE, PINHOLE, OPENCV, OPENCV_FISHEYE, FULL_OPENCV). Robust over for kommentarlinjer og tomme linjer. Skalerer i tests op til ~1 400 kameraer (ETH3D Tunnel) uden problemer.
Q4 — Native SfM (inkrementel)
HVOR
Expert View → Inspector → Træningskonfiguration → Camera Alignment-vælger, posten „Native (Beta)". Inkrementel er standardtilstanden for denne backend — der findes ingen separat mapper-vælger i Inspector. Via CLI kan tilstanden sættes eksplicit med –native-sfm eller –sfm-mapper incremental.
TEKNISK
Egen GPU-accelereret implementering af hele SfM-pipelinen: FAST+BRIEF-features ELLER SuperPoint+LightGlue via CoreML (med –coreml-features), efterfulgt af Hamming-KNN-matching, RANSAC-fundamentalmatrix, track-building, initial-par-udvælgelse, two-view-bootstrap (F→E plus DLT), grådig inkrementel mapper med PnP-registrering og multi-view-triangulering og endelig bundle-adjustment via Schur-reduceret Levenberg-Marquardt med Huber-loss og analytiske jacobianer over Cholesky-løsning. Fuldt App Store-konform: ingen ekstern binary, Sandbox=true. Med R2-collapse-detektoren, der blev leveret i fase 3.10: registrerer appen mindre end 60 % af input-frames eller falder points-per-camera-raten under 13, skiftes der automatisk til den globale mapper (Q5). Empirisk ren på orbit-/turntable-scener; ved mere generelle bevægelser (droneflyvning, indendørs rum med kompleks geometri) er successraten lavere — detektoren fanger dog disse tilfælde. Skalerer pålideligt op til ~200 kameraer, højere med markant længere kørselstid.
Q5 — Native SfM (global)
HVOR
Kaldes automatisk, når den inkrementelle mapper (Q4) udløser collapse-detektoren (mindre end 60 % af input-frames registreret eller points-per-camera-rate under 13). Manuelt tvangs-aktiverbar kun via CLI –sfm-mapper global. I Inspector er den globale metode ikke tilgængelig via en separat vælger — appen beslutter selv, hvornår den skifter.
TEKNISK
Global variant af den native pipeline. Først feature-ekstraktion + matching som i Q4, derefter relativ pose-estimering for alle verificerede par, efterfulgt af rotation-averaging (synkroniserer alle kamerarotationer i verdens-koordinatsystemet) og translation-averaging (LSQR-baseret på en matrix-fri sparse-formulering for at undgå integer-overflow ved store kamera-mængder). Skalerer i princippet til ~5 000 kameraer, i praksis kvalitetsforringet over nogle hundrede kameraer — fase-3.8-§5-akzeptanz-gate-målingen på K-1351 gav finalLoss 0.07 i stedet for de tilstræbte 0.0115. Håndteres som „fallback-tier": kommer i spil, når den inkrementelle mapper degenererer, men kontrolleres ikke selv på ny for kvalitet.
Q6 — Metashape / COLMAP-tekst-workspace-import (fase Q7)
HVOR
File-menuen → „Import COLMAP / Metashape Workspace…" (Cmd+⇧+I). Træk-og-slip af en mappe med sparse/0/cameras.{bin,txt} og images/.
TEKNISK
Genkender automatisk, om en mappe valgt via træk-og-slip eller åbn-panelet svarer til et af de tre COLMAP-workspace-layouts (sparse/0/, sparse/ eller roden), og om rekonstruktionen findes som binær (cameras.bin) eller tekst (cameras.txt). Den binære sti bruger COLMAP-binær-parseren, tekst-stien ETH3D-loaderen — begge producerer samme SfM-resultat-model, og resten af pipelinen (importér billeder, start MCMC-træning) er agnostisk over for kilden. Billederne åbnes via app-sandbox-bookmark-systemet security-scoped, så importen også virker i App Store-versionen. Specifikt tænkt til situationen „Metashape-eksport uden at regne rekonstruktionen om". Detektionen, der nævnes i File-menu-posten, advarer i app-loggen, hvis den valgte mappe ikke er et genkendeligt workspace.
Hvilken backend hvornår?
| Scenarie | Anbefalet backend |
|---|---|
| Objekt-scan, 50–200 fotos | Q1 Apple Photogrammetry |
| Stor outdoor / drone / >500 billeder | Q6 Workspace-import (regn i Metashape eller COLMAP, indlæs så) |
| Metashape/RealityCapture-eksport foreligger | Q6 Import (ingen SfM nødvendig) |
| ETH3D / akademisk COLMAP-tekstsæt | Q3 COLMAP-tekst-import |
| Strengt App Store-konform + orbit-scene | Q4 Native inkrementel |
| Q4 fejler | Q5 Native global (automatisk) |
| ETH3D-benchmark-data | Q3 (autotest precomputed) |
Hurtig sammenligning
| Backend | App Store | Sandbox | Ekstern binary | Bedst til | Max ~kameraer |
|---|---|---|---|---|---|
| Q1 Apple PG | ✅ | ✅ | — | Orbit-objekt | ~300 |
| Q2 COLMAP Binary | ❌ (kun developer-build) | — | colmap/glomap | Outdoor stor | ~5 000 |
| Q3 COLMAP-tekst-import | ✅ | ✅ | — | Bench-rigs | ~1 500 |
| Q4 Native inkrementel | ✅ | ✅ | — | Orbit-objekt | ~200 |
| Q5 Native global | ✅ | ✅ | — | Q4-fallback | ~1 351 |
| Q6 Workspace-import | ✅ | ✅ | — | Metashape-genbrug | pr. kilde |