Kapitel 9 — SfM-backends


Camera Alignment-vælgeren i Inspector är 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 snabbare vid ≥1 000 frames end Apple Photogrammetry, men opfylder endnu inte fase-3-§5-kvalitetsgaten (finalLoss ≤ 0.0115) — deraf Beta-mærket. Eksterne SfM-resultater fra Metashape, COLMAP eller anden fotogrammetri-software kan dessutom importeres via File-menuen (Q3 COLMAP-tekstformat, Q6 Workspace-import) — vælgeren skifter inte, 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 bild kameraets position og kiggeretning i et fælles 3D-koordinatsystem. Undervejs genereres en grov 3D-punktmoln, 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 är den rette, afhænger av scenetypen (orbit omkring et objekt, indendørs rum, droneflyvning), og av om en ekstern software allerede leverer en rekonstruktion.
Q1 — Apple Photogrammetry
VAR
Expert View → Inspector → Træningskonfiguration → Camera Alignment-vælger, posten „Apple Photogrammetry".
TEKNISKT
Indkapsler Apples indbyggede fotogrammetri-framework, som oprindeligt blev udviklet til Object Capture. Apple udtrækker internt features med en proprietær pipeline (trin er inte 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 punktmoln — ingen diagnose-metrikker som spor-længde eller reprojektionsfejl. Skalerer ifølge Apples anbefaling op til et par hundrede bilder. Vid mere end ~500 frames i lineære droneflyvninger eller store outdoor-scener er der reproducerbart observeret crashes eller stilstoppende frasortering av enkelte kameraer.
Q3 — COLMAP-tekstformat (Metashape / ETH3D)
VAR
Menuen „File → Import COLMAP / Metashape Workspace…" (Cmd+⇧+I) ELLER træk-og-slip av en mappe med sparse/0/cameras.txt.
TEKNISKT
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 av Agisoft Metashape, RealityCapture, PolyCam og ETH3D-benchmark'en i præcis detta 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)
VAR
Expert View → Inspector → Træningskonfiguration → Camera Alignment-vælger, posten „Native (Beta)". Inkrementel er standardtilstanden for denna backend — der finns ingen separat mapper-vælger i Inspector. Via CLI kan tilstanden sættes eksplicit med –native-sfm eller –sfm-mapper incremental.
TEKNISKT
Egen GPU-accelereret implementering av hele SfM-pipelinen: FAST+BRIEF-features ELLER SuperPoint+LightGlue via CoreML (med –coreml-features), efterfulgt av 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 % av input-frames eller falder points-per-camera-raten under 13, skiftes der automatisk til den globale mapper (Q5). Empirisk ren på orbit-/turntable-scener; vid mere generelle bevægelser (droneflyvning, indendørs rum med kompleks geometri) er successraten lavere — detektoren fanger dock dessa tilfælde. Skalerer pålideligt op til ~200 kameraer, højere med markant længere kørselstid.
Q5 — Native SfM (global)
VAR
Kaldes automatisk, när den inkrementelle mapper (Q4) udløser collapse-detektoren (mindre end 60 % av 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 inte tilgængelig via en separat vælger — appen beslutter selv, hvornår den skifter.
TEKNISKT
Global variant av den native pipeline. Først feature-ekstraktion + matching som i Q4, därefter relativ pose-estimering for alle verificerede par, efterfulgt av rotation-averaging (synkroniserer alle kamerarotationer i verdens-koordinatsystemet) og translation-averaging (LSQR-baserat på en matrix-fri sparse-formulering for at undvika integer-overflow vid store kamera-mængder). Skalerer i princippet til ~5 000 kameraer, i praksis kvalitetsforringet over några 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 inte selv på ny for kvalitet.
Q6 — Metashape / COLMAP-tekst-workspace-import (fase Q7)
VAR
File-menuen → „Import COLMAP / Metashape Workspace…" (Cmd+⇧+I). Træk-og-slip av en mappe med sparse/0/cameras.{bin,txt} og images/.
TEKNISKT
Genkender automatisk, om en mappe valgt via træk-og-slip eller åbn-panelet svarer til et av de tre COLMAP-workspace-layouts (sparse/0/, sparse/ eller roden), og om rekonstruktionen finns 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 av pipelinen (importér bilder, start MCMC-träning) er agnostisk over for kilden. Billederne åbnes via app-sandbox-bookmark-systemet security-scoped, så importen också 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, om den valgte mappe inte er et genkendeligt workspace.
Hvilken backend hvornår?
| Scenarie | Anbefalet backend |
|---|---|
| Objekt-scan, 50–200 fotos | Q1 Apple Photogrammetry |
| Stor outdoor / drone / >500 bilder | 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-scen | 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 |