Facendo clic su "Accetta tutti i cookie", l'utente accetta la memorizzazione dei cookie sul proprio dispositivo per migliorare la navigazione del sito, analizzarne l'utilizzo e contribuire alle nostre iniziative di marketing. Per saperne di più
Impostazioni dei cookie
Facendo clic su "Accetta tutti i cookie", l'utente accetta la memorizzazione dei cookie sul proprio dispositivo per migliorare la navigazione del sito, analizzarne l'utilizzo e contribuire alle nostre iniziative di marketing. Per saperne di più
Esplorate l'algoritmo SIFT. Scoprite cos'è SIFT e le sue potenti caratteristiche per la visione computerizzata in scala invariante. Migliorate l'elaborazione delle immagini.
Al giorno d'oggi, molti dei dispositivi intelligenti che utilizziamo, dai telefoni alle fotocamere, fino ai sistemi domestici intelligenti, sono dotati di soluzioni di intelligenza artificiale in grado di riconoscere volti, oggetti e persino intere scene visive. Questa capacità deriva dalla computer vision, un campo dell'intelligenza artificiale che consente alle macchine di comprendere e interpretare immagini e video.
Ad esempio, se si scatta una foto della Torre Eiffel da qualsiasi angolazione o distanza, il dispositivo è in grado di riconoscerla grazie alla computer vision e di organizzarla nella cartella corretta della galleria. Sebbene questo sembri semplice, il riconoscimento degli oggetti non è sempre facile. Le immagini possono apparire molto diverse a seconda delle dimensioni, dell'angolazione, della scala o dell'illuminazione, il che rende difficile per le macchine identificarle in modo coerente.
Per risolvere questo problema, i ricercatori hanno sviluppato un algoritmo di visione artificiale chiamato Scale Invariant Feature Transform, o SIFT. Questo algoritmo consente di rilevare gli oggetti in diverse condizioni di visione. Creato da David Lowe nel 1999, SIFT è stato progettato per trovare e descrivere punti chiave unici in un'immagine, come angoli, bordi o motivi che rimangono riconoscibili anche quando l'immagine viene ridimensionata, ruotata o illuminata in modo diverso.
Prima che si diffondessero modelli di visione computerizzata basati sull'apprendimento profondo come Ultralytics YOLO11, SIFT era una tecnica ampiamente utilizzata nella visione computerizzata. Si trattava di un approccio standard per compiti quali il riconoscimento di oggetti, in cui l'obiettivo è identificare un elemento specifico in una foto, e la corrispondenza di immagini, in cui le foto vengono allineate trovando le caratteristiche dell'immagine che si sovrappongono.
In questo articolo esploreremo SIFT con una rapida panoramica su cos'è, come funziona ad alto livello e perché è importante nell'evoluzione della computer vision. Iniziamo!
Perché l'algoritmo SIFT è essenziale per la computer vision
In un'immagine, un oggetto può apparire in molti modi diversi. Ad esempio, una tazza di caffè può essere fotografata dall'alto, di lato, in piena luce solare o sotto una lampada calda. La stessa tazza può anche apparire più grande quando è vicina alla fotocamera e più piccola quando è più lontana.
Tutte queste differenze rendono complicato insegnare a un computer a riconoscere un oggetto. Questa attività di computer vision, nota come rilevamento degli oggetti, richiede che i modelli di intelligenza artificiale di Vision identifichino e localizzino gli oggetti con precisione, anche quando le loro dimensioni, l'angolo o le condizioni di illuminazione cambiano.
Per rendere possibile tutto ciò, la computer vision si basa su un processo chiamato estrazione o rilevamento di caratteristiche. Invece di cercare di comprendere l'intera immagine in una sola volta, un modello cerca caratteristiche distintive dell'immagine, come angoli acuti, motivi unici o texture che rimangono riconoscibili attraverso angoli, scale e condizioni di illuminazione.
In particolare, questo è l'obiettivo della Scale Invariant Feature Transform, o SIFT. SIFT è un algoritmo di rilevamento e descrizione delle caratteristiche in grado di identificare in modo affidabile gli oggetti nelle immagini, indipendentemente dal modo in cui sono state acquisite.
Ottenere l'invarianza di scala
L'algoritmo SIFT possiede alcune importanti proprietà che lo rendono utile per il riconoscimento degli oggetti. Una delle proprietà chiave è la cosiddetta invarianza di scala. Ciò significa che SIFT è in grado di riconoscere varie parti di un oggetto, sia che appaia grande e vicino alla telecamera, sia che sia piccolo e lontano. Anche se l'oggetto non è completamente visibile, l'algoritmo può comunque individuare gli stessi punti chiave.
Per farlo utilizza un concetto chiamato teoria dello spazio di scala. In poche parole, l'immagine viene sfocata a diversi livelli per creare più versioni. SIFT esamina poi queste versioni per trovare schemi e dettagli che rimangono invariati, indipendentemente dalla variazione delle dimensioni o della nitidezza dell'immagine.
Ad esempio, un cartello stradale fotografato a pochi metri di distanza apparirà molto più grande dello stesso cartello ripreso a distanza, ma SIFT è comunque in grado di rilevare le stesse caratteristiche distintive. In questo modo è possibile abbinare correttamente le due immagini, anche se il cartello appare in scale molto diverse.
Garantire l'invarianza di rotazione
Gli oggetti nelle immagini possono anche apparire ruotati, a volte persino capovolti. SIFT gestisce questo problema grazie a una proprietà chiamata invarianza di rotazione. Per ogni punto chiave rilevato, l'algoritmo assegna un orientamento coerente basato sui gradienti locali dell'immagine. In questo modo, lo stesso oggetto può essere riconosciuto indipendentemente dalla sua rotazione.
Si può pensare che ogni punto chiave sia contrassegnato da una piccola freccia che indica la direzione verso cui è rivolto. Allineando le caratteristiche a questi orientamenti, SIFT assicura che i punti chiave corrispondano correttamente anche quando l'oggetto viene ruotato. Ad esempio, un punto di riferimento catturato in una foto di un paesaggio può essere identificato correttamente anche se un'altra foto viene scattata con la fotocamera inclinata.
Resilienza ad altre variazioni dell'immagine
Oltre alle dimensioni e alla rotazione, le immagini possono cambiare anche in altri modi, come ad esempio l'illuminazione. L'illuminazione di un oggetto può passare da luminosa a fioca, l'angolo di ripresa può spostarsi leggermente o l'immagine può essere sfocata o rumorosa.
SIFT è stato creato per gestire questo tipo di variazioni. Per farlo, si concentra sui punti chiave che sono distintivi e ad alto contrasto, in quanto queste caratteristiche sono meno influenzate dai cambiamenti di illuminazione o da piccoli spostamenti del punto di vista. Di conseguenza, SIFT tende a essere più affidabile dei semplici metodi di rilevamento dei bordi o degli angoli, che spesso falliscono quando le condizioni cambiano.
Figura 1. Punti chiave SIFT estratti da (a) un'immagine di pioggia e (b) dalla corrispondente immagine di input pulita.(Fonte)
Consideriamo un dipinto in una galleria. È ancora riconoscibile sia che venga fotografato in condizioni di luce diurna tenue, sia che venga fotografato con riflettori artificiali luminosi o persino con una leggera sfocatura da movimento di una fotocamera portatile. I punti chiave rimangono sufficientemente stabili per una corrispondenza accurata nonostante queste differenze.
Come funziona l'algoritmo Scale-Invariant Feature Transform (SIFT)
Vediamo quindi come funziona l'algoritmo SIFT. Questo processo può essere suddiviso in quattro fasi principali: rilevamento dei punti chiave, localizzazione dei punti chiave, assegnazione dell'orientamento e descrizione dei punti chiave.
Fase 1: rilevamento degli estremi dello spazio scala
Il primo passo consiste nel trovare e rilevare i punti chiave, ossia punti distintivi nell'immagine, come angoli o cambiamenti netti nella texture, che aiutano a tracciare o riconoscere un oggetto.
Per assicurarsi che questi potenziali punti chiave possano essere riconosciuti a qualsiasi dimensione, SIFT costruisce il cosiddetto spazio di scala. Si tratta di una raccolta di immagini create sfocando gradualmente l'immagine originale con un filtro gaussiano, una tecnica di levigatura, e raggruppando i risultati in livelli chiamati ottave. Ogni ottava contiene la stessa immagine con livelli di sfocatura crescenti, mentre l'ottava successiva è una versione più piccola dell'immagine.
Sottraendo un'immagine sfocata da un'altra, SIFT calcola la differenza delle gaussiane (DoG), che evidenzia le aree in cui la luminosità cambia bruscamente. Queste aree vengono scelte come punti chiave candidati perché rimangono coerenti quando l'immagine viene ingrandita o ridotta.
Figura 2. Il DoG evidenzia le strutture chiave sottraendo le immagini sfocate a diversi livelli.(Fonte)
Fase 2: localizzazione dei punti chiave
Non tutti i punti chiave candidati sono utili perché alcuni possono essere deboli o instabili. Per perfezionarli, SIFT utilizza un metodo matematico chiamato espansione della serie di Taylor, che aiuta a stimare la posizione esatta di un punto chiave con maggiore precisione.
In questa fase vengono rimossi i punti non affidabili. I punti chiave a basso contrasto, che si confondono con l'ambiente circostante, vengono scartati, così come quelli che si trovano direttamente sui bordi, poiché possono spostarsi troppo facilmente. Questa fase di filtraggio lascia solo i punti chiave più stabili e caratteristici.
Fase 3: assegnazione dell'orientamento
Una volta identificati i punti chiave stabili, SIFT li rende invarianti alla rotazione, il che significa che possono essere abbinati anche se l'immagine viene girata di lato o capovolta. Per fare ciò, SIFT analizza la variazione di luminosità intorno a ciascun punto chiave, nota come gradiente. I gradienti indicano sia la direzione che la forza della variazione dell'intensità dei pixel e insieme catturano la struttura locale intorno al punto.
Per ogni punto chiave, SIFT considera i gradienti all'interno di una regione circostante e li raggruppa in un istogramma di orientamenti. Il picco più alto di questo istogramma indica la direzione dominante della variazione di intensità, che viene quindi assegnata come orientamento del punto chiave. Per costruire l'istogramma si utilizzano sia le direzioni del gradiente, che mostrano dove l'intensità sta cambiando, sia le grandezze del gradiente, che indicano quanto è forte il cambiamento.
Se ci sono altri picchi quasi altrettanto forti, SIFT assegna più orientamenti allo stesso punto chiave. In questo modo si evita di perdere caratteristiche importanti quando gli oggetti appaiono con angolazioni insolite. Allineando ogni punto chiave con il suo orientamento, SIFT assicura che i descrittori generati nella fase successiva rimangano coerenti.
In altre parole, anche se due immagini dello stesso oggetto vengono ruotate in modo diverso, i punti chiave allineati all'orientamento continueranno a corrispondere correttamente. Questo passaggio conferisce a SIFT la sua forte capacità di gestire la rotazione e lo rende molto più robusto dei precedenti metodi di rilevamento delle caratteristiche.
Figura 3. Uno sguardo ravvicinato alla fase 3 dell'algoritmo SIFT(Fonte)
Fase 4: descrittore del punto chiave
L'ultimo passo di SIFT consiste nel creare una descrizione di ciascun punto chiave in modo che possa essere riconosciuto in altre immagini.
SIFT ottiene questo risultato esaminando un piccolo patch quadrato intorno a ciascun punto chiave, di dimensioni pari a circa 16 per 16 pixel. Questa zona viene prima allineata all'orientamento del punto chiave, in modo che la rotazione non la influenzi. L'area viene quindi suddivisa in una griglia di quadrati più piccoli di 4 x 4.
In ogni quadratino, SIFT misura come la luminosità cambia in diverse direzioni. Questi cambiamenti vengono memorizzati in una cosa chiamata istogramma, che è come un grafico che mostra quali sono le direzioni più comuni. Ogni quadrato riceve il proprio istogramma e insieme i 16 quadrati producono 16 istogrammi.
Infine, questi istogrammi vengono combinati in un unico elenco di numeri, 128 in totale. Questo elenco è chiamato vettore di caratteristiche e agisce come un'impronta digitale per il punto chiave. Poiché cattura la texture e la struttura unica intorno al punto, questa impronta digitale consente di abbinare lo stesso punto chiave a immagini diverse, anche se ridimensionate, ruotate o illuminate in modo diverso.
Figura 4. Una panoramica del funzionamento di SIFT(Fonte)
Applicazioni chiave di SIFT nella computer vision
Ora che abbiamo capito meglio cos'è e come funziona SIFT, esploriamo alcune delle sue applicazioni reali nella computer vision.
Riconoscimento e rilevamento degli oggetti
Uno dei principali utilizzi di SIFT è il riconoscimento e il rilevamento degli oggetti. Si tratta di insegnare a un computer a riconoscere e localizzare gli oggetti nelle immagini, anche quando questi non hanno sempre lo stesso aspetto. Ad esempio, SIFT è in grado di rilevare un libro indipendentemente dal fatto che sia vicino alla telecamera, lontano o ruotato ad angolo.
Il motivo per cui questo funziona è che SIFT estrae punti chiave altamente distintivi e stabili. Quando questi punti chiave vengono abbinati ai descrittori SIFT, formano le caratteristiche SIFT, che forniscono un modo affidabile per abbinare lo stesso oggetto a immagini diverse. Queste caratteristiche catturano dettagli unici dell'oggetto che rimangono costanti, consentendo una corrispondenza affidabile tra le immagini anche quando le dimensioni, la posizione o l'orientamento dell'oggetto cambiano.
Figura 5. Uso di SIFT per riconoscere la copertina di un libro in una nuova immagine scattata con un orientamento diverso dall'originale. Immagine dell'autore.
Prima che il deep learning diventasse popolare, SIFT era uno dei metodi più affidabili per costruire sistemi di riconoscimento degli oggetti. È stato ampiamente utilizzato nella ricerca e nelle applicazioni che richiedevano la corrispondenza di oggetti in grandi insiemi di immagini, anche se spesso richiedeva notevoli risorse computazionali.
Stitching di immagini e creazione di panorami
SIFT può essere utilizzato anche per creare immagini panoramiche, ovvero foto ampie realizzate cucendo insieme diverse immagini. Utilizzando SIFT, i punti chiave distintivi vengono individuati nelle parti sovrapposte di diverse immagini e poi abbinati tra loro. Queste corrispondenze agiscono come ancore, guidando il processo di cucitura su come le foto devono essere allineate.
Una volta completata la corrispondenza, è possibile utilizzare algoritmi di cucitura per calcolare l'allineamento corretto, spesso utilizzando trasformazioni geometriche che mappano un'immagine sull'altra. Le immagini vengono quindi miscelate in modo da far scomparire le giunture. Il risultato finale è un panorama senza soluzione di continuità che sembra un'unica foto ampia, anche se è stata creata da più scatti.
Ricostruzione 3D e robotica
Un'altra interessante applicazione di SIFT è la ricostruzione 3D, in cui più foto 2D scattate da angolazioni diverse vengono combinate per costruire un modello tridimensionale. SIFT funziona trovando e facendo corrispondere gli stessi punti in tutte le immagini.
Una volta effettuate le corrispondenze, è possibile stimare le posizioni 3D di tali punti utilizzando la triangolazione, un metodo che calcola la profondità da diversi punti di vista. Questo processo fa parte della structure from motion (SfM), una tecnica che utilizza più immagini sovrapposte per stimare la forma 3D di una scena insieme alle posizioni delle telecamere che hanno scattato le foto.
Il risultato è solitamente una nuvola di punti 3D, un insieme di punti nello spazio che delinea l'oggetto o l'ambiente. SIFT è stato uno dei primi strumenti a rendere pratica la struttura dal movimento. Anche se oggi le nuove tecniche sono più veloci e più comuni, SIFT continua a essere applicato quando la precisione è più importante della velocità.
SIFT è stato utilizzato anche nella robotica, in particolare nello SLAM (Simultaneous Localization and Mapping) visivo. Lo SLAM consente a un robot di capire dove si trova e di costruire allo stesso tempo una mappa dell'ambiente circostante.
I punti chiave SIFT fungono da punti di riferimento affidabili che il robot può riconoscere in tutti i fotogrammi, anche quando l'illuminazione o gli angoli cambiano. Tracciando questi punti di riferimento, il robot può stimare la propria posizione e aggiornare la mappa al volo. Anche se oggi nella robotica si usano più spesso rilevatori di caratteristiche più veloci, SIFT ha svolto un ruolo importante nei primi sistemi SLAM ed è ancora fondamentale nei casi in cui la robustezza è più importante della velocità.
Vantaggi e considerazioni di SIFT
Sebbene l'algoritmo SIFT sia stato ampiamente utilizzato nella computer vision e sia noto per essere un metodo affidabile, presenta anche alcuni svantaggi. Per questo è importante valutarne i pro e i contro prima di decidere se è adatto a un progetto. Vediamo quindi i suoi punti di forza e le sue limitazioni.
I principali vantaggi di SIFT
Ecco alcuni dei vantaggi dell'utilizzo dell'algoritmo SIFT:
Invarianza di scala e rotazione: SIFT fornisce punti chiave invarianti rispetto alla scala che rimangono relativamente stabili quando gli oggetti appaiono in dimensioni o orientamenti diversi, il che rappresenta un significativo passo avanti rispetto ai precedenti rilevatori di caratteristiche.
Moderata robustezza ai cambiamenti di luce e di punto di vista: SIFT è in grado di gestire variazioni di luminosità, contrasto o piccoli spostamenti del punto di vista, anche se è meno affidabile in condizioni più estreme.
Capacità di lavorare in scene ingombre o parzialmente nascoste: Poiché SIFT rileva molti punti chiave locali, spesso è in grado di identificare un oggetto anche se una parte di esso è coperta o lo sfondo è complesso.
Considerazioni sulle prestazioni e alternative
Ecco alcuni dei contro dell'utilizzo dell'algoritmo SIFT:
Costoso dal punto di vista computazionale: Il processo in più fasi e i descrittori dettagliati di SIFT lo rendono più lento e più oneroso in termini di risorse rispetto ai moderni rilevatori di caratteristiche. Per migliorare questo aspetto, i ricercatori hanno sviluppato l'algoritmo SURF (Speeded-Up Robust Features), che utilizza calcoli più veloci per trovare e descrivere le caratteristiche. SURF è meno preciso di SIFT in alcuni casi, ma funziona molto più velocemente, rendendolo più pratico per le attività sensibili al tempo.
Non è ideale per l'uso in tempo reale: A causa del suo costo computazionale, SIFT ha difficoltà quando si tratta di applicazioni in cui la velocità è fondamentale, come il tracciamento in tempo reale o la robotica mobile.
Versatilità limitata: Pur essendo robusto in molti casi, SIFT è meno efficace in caso di cambiamenti di luce estremi, grandi spostamenti del punto di vista o scene altamente dinamiche, dove algoritmi più recenti o metodi di apprendimento automatico hanno prestazioni migliori.
Esplorando i pro e i contro di SIFT, si può notare che molti dei suoi limiti hanno aperto la strada a tecniche più avanzate. In particolare, le reti neurali convoluzionali (CNN) sono emerse come una potente alternativa.
Una CNN è un tipo di modello di apprendimento profondo ispirato al funzionamento del sistema visivo umano. Elabora un'immagine a strati, partendo da modelli semplici come bordi e texture e arrivando gradualmente a forme e oggetti più complessi. A differenza delle regole di SIFT, le CNN apprendono le rappresentazioni delle caratteristiche direttamente dai dati.
Grazie a questo apprendimento guidato dai dati, le CNN sono in grado di superare le prestazioni di SIFT nei compiti di corrispondenza dei descrittori e di classificazione. Le CNN sono anche più espressive e robuste, adattandosi meglio alla variabilità e alla complessità dei dati visivi.
Ad esempio, i modelli basati su CNN hanno ottenuto risultati rivoluzionari su ImageNet, un enorme set di dati di riferimento contenente milioni di immagini etichettate in migliaia di categorie. Progettato per testare la capacità degli algoritmi di riconoscere e classificare gli oggetti, ImageNet è in grado di evidenziare il divario tra i vecchi metodi basati sulle caratteristiche e il deep learning.
Le CNN hanno rapidamente superato SIFT apprendendo rappresentazioni molto più ricche e flessibili, che consentono loro di riconoscere gli oggetti in condizioni di illuminazione variabile, da diversi punti di vista e anche quando sono parzialmente nascosti, scenari in cui SIFT spesso ha difficoltà.
Punti di forza
L'algoritmo Scale Invariant Feature Transform occupa un posto importante nella storia della computer vision. Ha fornito un metodo affidabile per rilevare le caratteristiche anche in ambienti mutevoli e ha influenzato molti dei metodi utilizzati oggi.
Anche se le nuove tecniche sono più veloci ed efficienti, SIFT ne ha gettato le basi. SIFT mostra dove sono iniziati i progressi odierni nella computer vision e mette in evidenza i progressi compiuti dai sistemi di intelligenza artificiale all'avanguardia.