
Structure from motion o SfM (in italiano: Struttura dal movimento) è una tecnica di range imaging della computer vision e della percezione visiva, con cui il processo di stima di strutture tridimensionali da sequenze di immagini bidimensionali che può essere accoppiato con segnali di movimento locali. Nella visione biologica la SfM fa riferimento al fenomeno per cui gli esseri umani (e altre creature viventi) posso ricostruire strutture 3D da un campo in movimento in proiezione 2D (retinale) di un oggetto o una scena in movimento.
Gli esseri umani ricevono molte informazioni sulla struttura tridimensionale nel loro ambiente muovendosi attraverso. Quando l'osservatore si muove e gli oggetti intorno a lui si muovono, l'informazione è ottenuta da immagini nel tempo. Trovare strutture dal movimento presenti problemi simili a trovare strutture dalla visione stereoscopica. In entrambi i casi, la corrispondenza tra immagini e la ricostruzione di oggetti 3D ha bisogno di essere trovata.
Per trovare corrispondenza tra immagini, le caratteristiche (feature) come i punti d'angolo (lati con gradienti in direzioni multiple) sono tracciate da un'immagine alla prossima. Uno dei rilevatori di caratteristiche più usati è il SIFT (Scale-invariant feature transform). Usa come caratteristiche il massimo di una piramide di Differenze di Gaussiane (DOG) Il primo passo nella SIFT è di trovare una direzione di gradiente dominante. Per renderla invariante alla rotazione, il descrittore è ruotato per adattarne l'orientamento. Un altro rilevatore di caratteristiche molto comune è il SURF (Speeded Up Robust Features). Nel SURF, la DOG è sostituita da un rilevatore hessiano di blob basato su matrici. Inoltre, invece di valutare il gradiente degli istogrammi, SURF calcola le somme dei componenti del gradiente e le somme dei loro valori assoluti. Le caratteristiche rilevate da tutte le immagini saranno poi incrociate. Uno degli algoritmi di matching (per incrociare i dati) che traccia le caratteristiche da un'immagine all'altra è il tracciatore Lukas-Kanade.
| Nome | Licenza | GUI | Linguaggio | Descrizione |
|---|---|---|---|---|
| Bundler | GNU GPL v2 | no | C++ | Structure from Motion for Unordered Photo Collections by Noah Snavely |
| openMVG | MPL v2 | no | C++ | An Open Multiple View Geometry library + Structure from Motion demonstrators |
| LibMV | MIT | no | C++ | Library for Multiview Reconstruction (LMV), libreria alla base degli algoritmi di SfM di Blender |
| Theia | BSD | no | C++ | A Fast and scalable structure-from-motion library |
| MicMac | CeCILL-B | si | C++ | Programma di fotogrammetria de l'Institut national de l'information géographique et forestière |
| MVE | GNU GPL v3 | si | C++ | The Multi-View Environment |
| Colmap | BSD | si | C++ | Pipeline Structure-from-Motion (SfM) e Multi-View Stereo (MVS) a linea di comando e con interfaccia grafica. |
| AliceVision | MPL v2 | no | C++ | Libreria software per la fotogrammetria |
| Structure from Motion toolbox for Matlab Archiviato il 24 maggio 2008 in Internet Archive. | GNU GPL v3 | si | Matlab | Toolbox creato da Vincent Rabaud |
| Matlab Functions for Multiple View Geometry | MIT | si | Matlab | Toolbox creato da Andrew Zissermann |
| Structure and Motion Toolkit | MSR-EULA | si | Matlab | Toolbox creato da Phil Torr |
| Matlab Code for Non-Rigid Structure from Motion | n.a. | si | Matlab | Toolbox creato da Lorenzo Torresani |
| AliceVision Meshroom | MPL v2 | si | Python | Applicazione GUI (Qt/PySide) basata sulla libreria AliceVision |