Kapitel 9 — SfM-Backends


Camera-Alignment-väljaren sitter i Inspector-avsnittet „Cameras & Capture" och är en utfällbar meny, ingen segmenterad kontroll (backend-namnen är för långa för segment och skulle spränga den smala Inspector-kolumnen). Hur många poster den har beror på build: App-Store-versionen visar exakt två — Apple Photogrammetry (standard) och Native. COLMAP saknas där helt som backend och visas endast i utvecklar-/DMG-byggen som en tredje post (se Q2). Den native posten heter helt enkelt „Native"; det tidigare tillägget „(experimental)" respektive „(Beta)" är borttaget — Native är inte längre en testväg, utan kvalitetsvägen. Den är stark på markbaserade orbit- och foto-scener, men för närvarande svag vid luft-/dronemappning (för gles punktmoln); Apple Photogrammetry förblir det säkra standardvalet. Om en oordnad fotouppsättning är vald som upptagningstyp riktar appen alltid upp med Native, oavsett vad väljaren visar — en hänvisningsrad under väljaren säger det uttryckligen, och väljaren förblir användbar eftersom dess värde inte är otillgängligt, bara överstyrt. Externa SfM-resultat från Metashape, COLMAP eller annan fotogrammetriprogramvara kan dessutom importeras via File-menyn (Q3 COLMAP-textformat, Q6 workspace-import) — väljaren byter inte, men de importerade poserna ersätter SfM-resultatet. Denna import har inget med COLMAP-backend-frågan att göra och fungerar i alla byggen.
SfM står för Structure from Motion. Från en mängd överlappande foton rekonstruerar programvaran för varje bild kamerans position och riktning i ett gemensamt 3D-koordinatsystem. Därtill skapas ett grovt 3D-punktmoln som initierar träningen med Gaussian Splatting. SfM-resultatet är indata för den egentliga träningen och avgör i hög grad den senare bildkvaliteten.
RadianceKit erbjuder fem SfM-vägar: två inbyggda backends i appen (Q1 Apple Photogrammetry, Q4/Q5 Native), två importvägar från externa verktyg (Q3 COLMAP-textformat, Q6 binär workspace-import) samt Q2 COLMAP-binär, som endast är tillgänglig i utvecklarbyggen utanför App Store. Vilket som är rätt beror på scentypen (orbit runt ett objekt, inomhusmiljö, dronflygning) och på om en extern programvara redan levererar en rekonstruktion.
Q1 — Apple Photogrammetry
VAR
Expert View → Inspector → avsnitt „Cameras & Capture" → Camera-Alignment-väljaren, posten „Apple Photogrammetry". Standardval i varje bygge.
TEKNISKT
Omsluter Apples inbyggda Photogrammetry-ramverk, som ursprungligen utvecklades för Object Capture. Apple extraherar internt features med en proprietär pipeline (stegen är inte offentligt dokumenterade), verifierar dem via multi-view-matchning och löser bundle adjustment på Apple Silicon Neural Engine + GPU. Backenden är helt App-Store-konform (ingen extern binärfil, Sandbox=true, on-device), men levererar endast kameraposer plus ett grovt punktmoln — inga diagnostikmått som spårlängd eller reprojektionsfel. Skalar enligt Apples rekommendation upp till några hundra bilder. Vid fler än ~500 bildrutor i linjära dronflygningar eller stora utomhusscener har reproducerbara krascher eller tyst bortkastande av enskilda kameror observerats.
Q3 — COLMAP-textformat (Metashape / ETH3D)
VAR
Menyn „File → Import COLMAP / Metashape Workspace…" (Cmd+⇧+I) ELLER dra-och-släpp av en mapp med sparse/0/cameras.txt.
TEKNISKT
Läser den standardiserade COLMAP-textexporten — tre textfiler cameras.txt, images.txt, points3D.txt i underkatalogen sparse/0/ — och konverterar till den interna SfM-resultatmodellen. Samma formatdefinition som COLMAPs binära export, bara som ASCII istället för binärt. Exporteras av Agisoft Metashape, RealityCapture, PolyCam och ETH3D-benchmarken i exakt denna layout. Parsern delar kameramodellsigenkänningen med binärparsern och känner till alla elva standardkameramodeller från COLMAP — från SIMPLE_PINHOLE och PINHOLE över SIMPLE_RADIAL (COLMAPs egen standard) och OPENCV fram till fisheye-varianterna. Robust mot kommentarrader och tomma rader. Skalar i tester upp till ~1 400 kameror (ETH3D Tunnel) utan problem.
Q4 — Native SfM (inkrementell)
VAR
Expert View → Inspector → avsnitt „Cameras & Capture" → Camera-Alignment-väljaren, posten „Native" (utan det tidigare tillägget „(experimental)"). Inkrementell är standardläget för denna backend; för Native finns det inget mapper-val. Raden „Mapper" därunder tillhör uteslutande COLMAP: i utvecklarbyggen visas den synlig men nedgråad så länge Native är valt, i App-Store-versionen saknas den helt. De verkligt native raderna — „FOV Override", „High-Quality" och „Native SfM Recipe" — försvinner inte längre vid andra backends, utan förblir nedgråade och anger på en rad därunder vad du måste ändra för att låsa upp dem igen. Mellan den inkrementella och den globala metoden kan du inte själv växla: Inkrementell är fast förinställd, och till den globala metoden byter appen bara av sig själv (se Q5).
TEKNISKT
Egen GPU-accelererad implementation av hela SfM-pipelinen: FAST+BRIEF-features ELLER SuperPoint+LightGlue via CoreML (aktiveras via reglaget „High-Quality"; vid oordnade fotouppsättningar ändå aktivt), följt av Hamming-KNN-matchning, RANSAC-fundamentalmatris, spårbyggnad, val av initialt par, two-view-bootstrap (F→E plus DLT), girig inkrementell mapper med PnP-registrering och multi-view-triangulering samt slutlig bundle adjustment via Schur-reducerad Levenberg-Marquardt med Huber-loss och analytiska Jacobianer via Cholesky-lösning. Helt App-Store-konform: ingen extern binärfil, Sandbox=true. Med den inbyggda kollaps-detektorn: Den klassar ett resultat som degenererat om mindre än 60 % av inmatningsbilderna registrerades, om Points-per-Camera-frekvensen faller under 13 eller om punktmolnet är nästan platt. Därefter sker inte omedelbart ett byte av metod — appen upprepar först den inkrementella körningen (den tar det första resultatet utan anmärkning, annars det bästa av försöken) och avviker först då till den globala mappern (Q5) om även det bästa försöket förblir degenererat. Empiriskt ren på orbit-/turntable-scener; vid mer allmänna rörelser (dronflygning, inomhusmiljöer med komplex geometri) är framgångsfrekvensen lägre — detektorn fångar dock dessa fall. Skalar tillförlitligt upp till ~200 kameror, högre med betydligt längre körtid.
Q5 — Native SfM (global)
VAR
Anropas automatiskt när den inkrementella mappern (Q4) utlöser kollaps-detektorn (mindre än 60 % av inmatningsbilderna registrerade, Points-per-Camera-frekvens under 13 eller nästan platt punktmoln) — och det först efter att den inkrementella körningen har upprepats och även det bästa försöket förblivit degenererat. Manuellt kan den inte begäras: I Inspector finns det ingen väljare för detta och inget annat reglage heller — appen bestämmer själv när den byter.
TEKNISKT
Global variant av den native pipelinen. Först feature-extraktion + matchning som i Q4, sedan relativ-pose-skattning för alla verifierade par, därefter rotation-averaging (synkroniserar alla kamerarotationer i världskoordinatsystemet) och translation-averaging (LSQR-baserad på en matrisfri sparse-formulering, för att undvika heltalsöverflöde vid stora kameramängder). Skalar i princip till ~5 000 kameror, i praktiken sjunker kvaliteten märkbart över några hundra kameror. Hanteras som en „fallback-nivå": används när den inkrementella mappern även efter upprepning är degenererad, och prövas inte själv mot kollaps-detektorn igen — förblir dess resultat glest, meddelar sig istället pipelinens allmänna kvalitetsvarning.
Q6 — Metashape / COLMAP-textworkspace-import
VAR
File-menyn → „Import COLMAP / Metashape Workspace…" (Cmd+⇧+I). Dra-och-släpp av en mapp med sparse/0/cameras.{bin,txt} och images/.
TEKNISKT
Känner automatiskt av om en mapp vald via dra-och-släpp eller öppna-panelen motsvarar en av de tre COLMAP-workspace-layouterna (sparse/0/, sparse/, eller root) och om rekonstruktionen föreligger binärt (cameras.bin) eller som text (cameras.txt). Den binära vägen använder COLMAP-binärparsern, textvägen ETH3D-läsaren — båda producerar samma SfM-resultatmodell och resten av pipelinen (importera bilder, starta MCMC-träning) är agnostisk mot källan. Bilderna öppnas via App-sandlådans bokmärkessystem security-scoped, så att importen fungerar även i App-Store-versionen. Speciellt avsedd för fallet „Metashape-export utan att räkna om rekonstruktionen". Igenkänningen som nämns i File-menyposten varnar i App-loggen om den valda mappen inte är ett igenkänningsbart workspace.
Q7 — Native-recept (Standard / Professional / E3 High-Accuracy)
VAR
Expert View → Inspector → avsnitt „Cameras & Capture" → raden „Native SfM Recipe". Raden är endast användbar om Camera Alignment är satt till „Native" och upptagningstypen är inställd på en oordnad fotouppsättning — annars visas den nedgråad och anger därunder vad som behöver ändras (tillgänglighetsreglerna finns i kapitel 2).
TEKNISKT
Tre nivåer av samma native backend. De ändrar inte algoritmen, utan hur grundligt den arbetar:
Standard — basreceptet utan extra steg.
Professional — sätter dessutom två saker: identifierade AprilTag-markörer ingår som stela kroppar i mapping och bundle adjustment, och de färdiga poserna omtriangulerar tätt efteråt (tätare startpunktmoln). Innehåller upptagningen inga markörer hittar detektorn ingenting, och endast den täta omtrianguleringen förblir verksam.
E3 High-Accuracy — bygger på Professional och kopplar dessutom in HQ-frontenden (3×3-SuperPoint-uppdelning, LightGlue med 4096 keypoints, covisibility-par) samt den gemensamma fokal-förfiningen över alla kameror. Det ger de skarpaste kameraposerna och den längsta matchningstiden.
Vilken backend när?
| Scenario | Rekommenderad backend |
|---|---|
| Första resultatet, utan att fundera för mycket | Q1 Apple Photogrammetry (förvalt) |
| Objektskanning, 50–200 foton | Q1 Apple Photogrammetry |
| Maximal kvalitet på samma scen | Preset „Maximum Quality (Native)" — Q4 Native + Q7-recept E3 |
| Inspelning med utskrivna AprilTag-markörer | Q4 Native + Q7-recept Professional |
| Stor utomhusmiljö / drönare / >500 bilder | Q6 Workspace-import (räkna i Metashape eller COLMAP, importera sedan) |
| Metashape/RealityCapture-export finns | Q6 import (ingen SfM behövs) |
| ETH3D / akademiskt COLMAP-textset | Q3 COLMAP-textimport |
| Q4 kollapsar | Q5 Native global (växlar automatiskt) |
Snabbjämförelse
| Backend | App Store | Sandbox | Extern binärfil | Bäst för | Max ~kameror |
|---|---|---|---|---|---|
| Q1 Apple PG | ✅ | ✅ | — | Orbit-objekt | ~300 |
| Q2 COLMAP-binärfil | ❌ (endast utvecklarbygge) | — | colmap/glomap | Utomhus, storskaligt | ~5 000 |
| Q3 COLMAP-textimport | ✅ | ✅ | — | Bänkriggar | ~1 500 |
| Q4 Native, inkrementell | ✅ | ✅ | — | Orbit-objekt | ~200 |
| Q5 Native, global | ✅ | ✅ | — | Q4-reserv | ~5 000 |
| Q6 Arbetsyteimport | ✅ | ✅ | — | Metashape-återanvändning | per källa |