Guida utente

Capitolo 9 — Backend SfM

Modalità esperto con picker Camera Alignment nell'Inspector (Apple Photogrammetry / Native (Beta))
Modalità esperto con picker Camera Alignment nell'Inspector (Apple Photogrammetry / Native (Beta))
Inspector con Native (Beta) attivo — picker Camera Alignment seconda opzione selezionata, tutti gli altri parametri di configurazione del training invariati
Inspector con Native (Beta) attivo — picker Camera Alignment seconda opzione selezionata, tutti gli altri parametri di configurazione del training invariati

Il picker Camera Alignment nell'Inspector è un segmented control con due opzioni — Apple Photogrammetry (predefinito per le build dell'App Store, pienamente conforme al sandbox) e Native (Beta) (il backend pipeline FAST+BRIEF+GLOMAP proprio di RadianceKit, sviluppato durante la Fase 3.8/3.9, allo stato 2026-05). Native (Beta) è validato solo su orbite ed è più veloce di Apple Photogrammetry con ≥1 000 frame, ma non soddisfa ancora il gate di qualità Phase-3 §5 (finalLoss ≤ 0.0115) — da cui il tag Beta. I risultati SfM esterni provenienti da Metashape, COLMAP o altro software di fotogrammetria possono inoltre essere importati tramite il menu File (Q3 formato testo COLMAP, Q6 importazione Workspace) — il picker non cambia, ma le pose importate sostituiscono il risultato SfM.

SfM sta per Structure from Motion. Da un insieme di foto sovrapposte, il software ricostruisce per ogni immagine la posizione e la direzione di vista della fotocamera in un sistema di coordinate 3D condiviso. In questo processo viene generata una nuvola di punti 3D grossolana, che inizializza il training con Gaussian Splatting. Il risultato SfM è l'input per il training vero e proprio e determina in modo decisivo la qualità finale dell'immagine.

RadianceKit offre cinque percorsi SfM: due backend integrati nell'app (Q1 Apple Photogrammetry, Q4/Q5 Native), due percorsi di importazione da strumenti esterni (Q3 formato testo COLMAP, Q6 importazione binaria Workspace) oltre a Q2 COLMAP binario, che è disponibile solo nelle build per sviluppatori al di fuori dell'App Store. Quale sia quello giusto dipende dal tipo di scena (orbita attorno a un oggetto, spazio interno, volo di drone) e dal fatto che un software esterno fornisca già una ricostruzione.

Q1 — Apple Photogrammetry

DOVE

Vista Esperto → Inspector → Configurazione del training → picker Camera Alignment, voce "Apple Photogrammetry".

TECNICO

Avvolge il framework di fotogrammetria integrato di Apple, sviluppato originariamente per Object Capture. Apple estrae internamente le feature con una pipeline proprietaria (i passaggi non sono documentati pubblicamente), le verifica tramite matching multi-vista e risolve il bundle adjustment sulla Neural Engine + GPU Apple Silicon. Il backend è pienamente conforme all'App Store (nessun binario esterno, Sandbox=true, on-device), ma fornisce solo le pose delle fotocamere più una nuvola di punti grossolana — nessuna metrica diagnostica come lunghezza dei track o errore di riproiezione. Scala secondo la raccomandazione di Apple fino a qualche centinaio di immagini. Con più di ~500 frame in voli di drone lineari o grandi scene outdoor sono stati osservati crash riproducibili o lo scarto silenzioso di singole fotocamere.

Q3 — Formato testo COLMAP (Metashape / ETH3D)

DOVE

Menu "File → Import COLMAP / Metashape Workspace…" (Cmd+⇧+I) OPPURE trascina una cartella contenente sparse/0/cameras.txt.

TECNICO

Legge l'esportazione testo COLMAP standardizzata — tre file di testo cameras.txt, images.txt, points3D.txt nella sottocartella sparse/0/ — e converte nel modello interno del risultato SfM. Stessa definizione di formato dell'esportazione binaria COLMAP, solo in ASCII anziché in binario. Viene esportato in questo preciso layout da Agisoft Metashape, RealityCapture, PolyCam e dal benchmark ETH3D. Il parser condivide il riconoscimento del modello di fotocamera con il parser binario (tutti i modelli comuni: SIMPLE_PINHOLE, PINHOLE, OPENCV, OPENCV_FISHEYE, FULL_OPENCV). Robusto rispetto a righe di commento e righe vuote. Scala nei test fino a ~1 400 fotocamere (ETH3D Tunnel) senza problemi.

Q4 — SfM Native (incrementale)

DOVE

Vista Esperto → Inspector → Configurazione del training → picker Camera Alignment, voce "Native (Beta)". Incrementale è la modalità predefinita di questo backend — nell'Inspector non c'è un picker separato per il mapper. Tramite CLI la modalità può essere impostata esplicitamente con –native-sfm o –sfm-mapper incremental.

TECNICO

Implementazione propria GPU-accelerata dell'intera pipeline SfM: feature FAST+BRIEF OPPURE SuperPoint+LightGlue tramite CoreML (con –coreml-features), seguito da matching Hamming-KNN, matrice fondamentale RANSAC, costruzione dei track, selezione della coppia iniziale, bootstrap a due viste (F→E più DLT), mapper incrementale greedy con registrazione PnP e triangolazione multi-vista, e bundle adjustment finale tramite Levenberg-Marquardt ridotto secondo Schur con loss di Huber e Jacobiani analitici tramite risoluzione Cholesky. Pienamente conforme all'App Store: nessun binario esterno, Sandbox=true. Con il rilevatore di collasso R2 distribuito nella Fase 3.10: se l'app registra meno del 60 % dei frame di input o se il tasso di punti per fotocamera scende sotto 13, ricade automaticamente sul mapper globale (Q5). Empiricamente pulito su scene orbita/turntable; su movimenti più generali (volo di drone, ambienti interni con geometria complessa) il tasso di successo è più basso — il rilevatore intercetta tuttavia questi casi. Scala in modo affidabile fino a ~200 fotocamere, oltre con tempi di esecuzione decisamente più lunghi.

Q5 — SfM Native (globale)

DOVE

Viene chiamato automaticamente quando il mapper incrementale (Q4) fa scattare il rilevatore di collasso (meno del 60 % dei frame di input registrati o tasso di punti per fotocamera sotto 13). Forzabile manualmente solo tramite CLI –sfm-mapper global. Nell'Inspector il metodo globale non è raggiungibile tramite un picker separato — l'app decide da sola quando passare.

TECNICO

Variante globale della pipeline nativa. Prima estrazione delle feature + matching come in Q4, poi stima della posa relativa per tutte le coppie verificate, seguita da rotation averaging (sincronizza tutte le rotazioni delle fotocamere nel sistema di coordinate mondo) e translation averaging (basato su LSQR su una formulazione sparsa matrix-free per evitare overflow di interi con grandi numeri di fotocamere). Scala in linea di principio a ~5 000 fotocamere, in pratica con qualità degradata sopra alcune centinaia di fotocamere — la misurazione del gate di accettazione Fase 3.8 §5 su K-1351 ha dato finalLoss 0.07 invece dei 0.0115 mirati. Trattato come "fallback tier": entra in gioco quando il mapper incrementale degenera, ma non viene esso stesso ricontrollato per la qualità.

Q6 — Importazione Workspace Metashape / COLMAP testo (Fase Q7)

DOVE

Menu File → "Import COLMAP / Metashape Workspace…" (Cmd+⇧+I). Trascinamento di una cartella contenente sparse/0/cameras.{bin,txt} e images/.

TECNICO

Rileva automaticamente se una cartella selezionata tramite trascinamento o pannello di apertura corrisponde a uno dei tre layout di workspace COLMAP (sparse/0/, sparse/ o root) e se la ricostruzione è binaria (cameras.bin) o testo (cameras.txt). Il percorso binario utilizza il parser binario COLMAP, il percorso testo il loader ETH3D — entrambi producono lo stesso modello di risultato SfM e il resto della pipeline (importare le immagini, avviare il training MCMC) è agnostico rispetto alla sorgente. Le immagini vengono aperte tramite il sistema di bookmark sandbox dell'app in modo security-scoped, così l'importazione funziona anche nella versione App Store. Pensato specificamente per il caso "esportazione Metashape senza ricalcolare la ricostruzione". Il riconoscimento menzionato nella voce di menu File avverte nel log dell'app se la cartella scelta non è un workspace riconoscibile.

Quale backend quando?

ScenarioBackend consigliato
Scansione oggetto, 50–200 fotoQ1 Apple Photogrammetry
Grandi outdoor / drone / >500 immaginiQ6 Importazione Workspace (calcolare in Metashape o COLMAP, poi caricare)
Disponibile esportazione Metashape/RealityCaptureQ6 Importazione (nessun SfM necessario)
Set ETH3D / COLMAP testo accademicoQ3 Importazione testo COLMAP
Strettamente conforme App Store + scena orbitaQ4 Native incrementale
Q4 fallisceQ5 Native globale (automatico)
Dati benchmark ETH3DQ3 (autotest precomputato)

Confronto rapido

BackendApp StoreSandboxBinario esternoUso miglioreCam max ~
Q1 Apple PGOggetto-orbita~300
Q2 COLMAP binario❌ (solo build sviluppatore)colmap/glomapOutdoor grande~5 000
Q3 Importazione testo COLMAPBench rig~1 500
Q4 Native incrementaleOggetto-orbita~200
Q5 Native globaleFallback Q4~1 351
Q6 Importazione WorkspaceRiuso Metashapeper sorgente