Tale operazione, pur essendo semplicissima per l'occhio umano, è estremamente difficile per un computer. Sono quindi state elaborate delle tecniche che, con velocità accettabili, riescano a svolgere questo compito con una buona precisione.
In genere si tratta di metodi computazionali per la risoluzione di problemi di minimi quadrati. Tali problemi si prestano a moltissime altre applicazioni, ad esempio la previsione di eventi basandosi su dati statistici, che esulano un po' dalle funzionalità che Google ci offre, ma che possono interessare a molti.
Google quindi ha deciso di rilasciare con licenza Open Source il proprio sistema di risoluzione di questo genere di problemi: Ceres Solver. Si tratta di una libreria scritta in C++, molto ben documentata e portabile (Linux e Mac, presto Windows, poi Android), che offre agli sviluppatori un'API molto ricca di funzioni e facilmente utilizzabile.
In particolare, offre:
- Differenziazione algoritmica
- Funzioni di perdita robuste
- Parametrizzazioni locali
- Valutatori e risolutori lineari di Jacobiani
- Decomposizione QR densa per problemi piccoli
- Decomposizione sparsa di Cholesky per problemi grandi
- Risolutori specifici di problemi di determinazione dei parametri (bundle adjustment) per la visione digitale.
Il tutto, grazie alla portabilità, è scalabile dai sistemi server di calcolo numerico, ai telefoni cellulari.
Per avere un'idea della potenza di Ceres Solver, basti dire che è alla base di tutte le funzioni avanzate di Google Maps: Google ne fa uso per allineare i dati provenienti dalle Google Cars, dagli aerei e dai satelliti, per costruire i modelli 3D degli edifici fotografati e per stimare le caratteristiche delle fotocamere dei satelliti.
Come esempio ci propone questo video, che mostra tre esecuzioni del programma, mentre viene utilizzato per stimare la corretta posizione e l'orientamento delle foto provenienti da una Google Car, basandosi sui dati provenienti dai sensori della macchina stessa e sulla mappa delle strade:
Via | Google Open Source Blog
Nessun commento:
Posta un commento