Esplora l'algoritmo SIFT. Scopri cos'è SIFT e le sue potenti funzionalità per la computer vision indipendente dalla scala. Migliora l'elaborazione delle immagini.
Esplora l'algoritmo SIFT. Scopri cos'è SIFT e le sue potenti funzionalità per la computer vision indipendente dalla scala. Migliora l'elaborazione delle immagini.
Oggigiorno, molti dei dispositivi intelligenti che utilizziamo, dai telefoni e dalle fotocamere ai sistemi domotici intelligenti, sono dotati di soluzioni di IA 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 genere è in grado di riconoscerla utilizzando la computer vision e di organizzarla nella cartella corretta nella galleria. Anche se sembra semplice, riconoscere gli 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 aiutare a risolvere questo problema, i ricercatori hanno sviluppato un algoritmo di computer vision chiamato Scale Invariant Feature Transform, o SIFT. Questo algoritmo consente di rilevare oggetti in diverse condizioni di visualizzazione. Creato da David Lowe nel 1999, SIFT è stato progettato per trovare e descrivere punti chiave unici in un'immagine, come angoli, bordi o modelli che rimangono riconoscibili anche quando l'immagine viene ridimensionata, ruotata o illuminata in modo diverso.
Prima che i modelli di computer vision basati sul deep learning come Ultralytics YOLO11 diventassero popolari, SIFT era una tecnica ampiamente utilizzata nella computer vision. Era un approccio standard per attività come il riconoscimento degli oggetti, dove l'obiettivo è identificare un elemento specifico in una foto, e il matching delle immagini, dove le foto vengono allineate trovando caratteristiche sovrapposte dell'immagine.
In questo articolo esploreremo SIFT con una rapida panoramica di cosa è, come funziona ad alto livello e perché è importante nell'evoluzione della computer vision. Iniziamo!
In un'immagine, un oggetto può apparire in molti modi diversi. Ad esempio, una tazza di caffè potrebbe essere fotografata dall'alto, di lato, alla luce del sole 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. Questo compito di computer vision, noto come object detection, richiede che i modelli di Vision AI identifichino e localizzino gli oggetti in modo accurato, anche quando le loro dimensioni, l'angolazione o le condizioni di illuminazione cambiano.
Per rendere ciò possibile, la computer vision si basa su un processo chiamato estrazione di caratteristiche o rilevamento. Invece di cercare di comprendere l'intera immagine contemporaneamente, un modello cerca caratteristiche distintive dell'immagine come angoli acuti, modelli unici o texture che rimangono riconoscibili attraverso angolazioni, scale e condizioni di illuminazione.
Nello specifico, questo è ciò per cui è stato progettato il Scale Invariant Feature Transform, o SIFT. SIFT è un algoritmo di rilevamento e descrizione delle caratteristiche che può identificare in modo affidabile gli oggetti nelle immagini, indipendentemente da come vengono acquisite.
L'algoritmo SIFT ha alcune proprietà importanti che lo rendono utile per il riconoscimento degli oggetti. Una delle proprietà chiave è chiamata invarianza di scala. Ciò significa che SIFT può riconoscere varie parti di un oggetto, sia che appaia grande e vicino alla fotocamera, sia che appaia piccolo e lontano. Anche se l'oggetto non è completamente visibile, l'algoritmo può comunque individuare gli stessi punti chiave.
Lo fa usando un concetto chiamato teoria dello spazio di scala. In parole semplici, l'immagine viene sfocata a diversi livelli per creare più versioni. SIFT esamina quindi queste versioni per trovare modelli e dettagli che rimangono gli stessi, indipendentemente da come l'immagine cambia in dimensioni o nitidezza.
Ad esempio, un segnale stradale fotografato da pochi metri di distanza apparirà molto più grande dello stesso segnale catturato a distanza, ma SIFT può comunque rilevare le stesse caratteristiche distintive. Ciò rende possibile abbinare correttamente le due immagini, anche se il segnale appare a scale molto diverse.
Gli oggetti nelle immagini possono anche apparire ruotati, a volte anche capovolti. SIFT gestisce questo aspetto attraverso una proprietà chiamata invarianza alla rotazione. Per ogni punto chiave che rileva, l'algoritmo assegna un orientamento coerente basato sui gradienti dell'immagine locale. In questo modo, lo stesso oggetto può essere riconosciuto indipendentemente da come è ruotato.
Puoi immaginarlo come contrassegnare ogni keypoint con una piccola freccia che mostra la direzione verso cui è rivolto. Allineando le caratteristiche a questi orientamenti, SIFT assicura che i keypoint corrispondano correttamente anche quando l'oggetto viene ruotato. Ad esempio, un punto di riferimento catturato in una foto di un paesaggio può comunque essere identificato correttamente anche se un'altra foto viene scattata con la fotocamera inclinata.
Oltre alle dimensioni e alla rotazione, le immagini possono anche cambiare in altri modi, come le variazioni di illuminazione. L'illuminazione di un oggetto potrebbe passare da luminosa a fioca, l'angolazione della telecamera potrebbe spostarsi leggermente oppure l'immagine potrebbe essere sfocata o rumorosa.
SIFT è progettato per gestire questi tipi di variazioni. Lo fa concentrandosi su punti chiave distintivi e ad alto contrasto, poiché queste caratteristiche sono meno influenzate dai cambiamenti di illuminazione o da piccoli spostamenti del punto di vista. Di conseguenza, SIFT tende ad essere più affidabile dei semplici metodi di rilevamento di bordi o angoli, che spesso falliscono quando le condizioni cambiano.

Considera un dipinto in una galleria. Può essere riconosciuto sia se fotografato alla luce del giorno soffusa, sotto luci artificiali intense o anche con una leggera sfocatura dovuta al movimento di una fotocamera a mano. I keypoint rimangono sufficientemente stabili per un matching accurato nonostante queste differenze.
Successivamente, diamo un'occhiata a 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.
Il primo passo è trovare e rilevare i keypoint, che sono punti distintivi nell'immagine, come angoli o bruschi cambiamenti nella texture, che aiutano a tracciare o riconoscere un oggetto.
Per garantire che questi potenziali punti chiave siano riconoscibili a qualsiasi dimensione, SIFT crea quello che viene chiamato uno spazio di scala. Si tratta di una raccolta di immagini create sfocando gradualmente l'immagine originale con un filtro gaussiano, una tecnica di smoothing, e raggruppando i risultati in livelli chiamati ottave. Ogni ottava contiene la stessa immagine a livelli crescenti di sfocatura, mentre l'ottava successiva è una versione più piccola dell'immagine.
Sottraendo un'immagine sfocata da un'altra, SIFT calcola la Differenza di Gaussiane (DoG), che evidenzia le aree in cui la luminosità cambia bruscamente. Queste aree vengono scelte come potenziali punti chiave perché rimangono coerenti quando l'immagine viene ingrandita o rimpicciolita.

Non tutti i keypoint candidati sono utili perché alcuni possono essere deboli o instabili. Per perfezionarli, SIFT utilizza un metodo matematico chiamato Taylor Series Expansion, che aiuta a stimare la posizione esatta di un keypoint con maggiore accuratezza.
Durante questa fase, i punti inaffidabili vengono rimossi. I keypoint con basso contrasto, che si fondono 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 dietro di sé solo i keypoint più stabili e distintivi.
Una volta identificati i keypoint stabili, SIFT li rende invarianti alla rotazione, il che significa che possono ancora essere abbinati anche se l'immagine viene ruotata lateralmente o capovolta. Per fare ciò, SIFT analizza come cambia la luminosità attorno a ciascun keypoint, che è noto come gradiente. I gradienti mostrano sia la direzione che la forza del cambiamento nell'intensità dei pixel e insieme catturano la struttura locale attorno al punto.
Per ogni keypoint, SIFT considera i gradienti all'interno di una regione circostante e li raggruppa in un istogramma di orientamenti. Il picco più alto in questo istogramma indica la direzione dominante del cambiamento di intensità, che viene quindi assegnata come orientamento del keypoint. Sia le direzioni del gradiente, che mostrano dove l'intensità sta cambiando, sia le magnitudini del gradiente, che indicano quanto è forte quel cambiamento, vengono utilizzate per costruire questo istogramma.
Se ci sono altri picchi quasi altrettanto forti, SIFT assegna più orientamenti allo stesso punto chiave. Ciò impedisce la perdita di caratteristiche importanti quando gli oggetti appaiono ad angolazioni insolite. Allineando ogni punto chiave con il suo orientamento, SIFT garantisce 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 keypoint allineati all'orientamento corrisponderanno comunque correttamente. Questo passaggio è ciò che conferisce a SIFT la sua forte capacità di gestire la rotazione e lo rende molto più robusto rispetto ai precedenti metodi di rilevamento delle caratteristiche.

L'ultimo passaggio in SIFT consiste nel creare una descrizione di ogni keypoint in modo che possa essere riconosciuto in altre immagini.
SIFT raggiunge questo risultato esaminando una piccola porzione quadrata attorno a ciascun punto chiave, di circa 16 x 16 pixel. Questa porzione viene prima allineata all'orientamento del punto chiave in modo che la rotazione non lo influenzi. La porzione viene quindi divisa in una griglia di 4 x 4 quadrati più piccoli.
In ogni piccolo quadrato, SIFT misura come cambia la luminosità in diverse direzioni. Questi cambiamenti vengono memorizzati in qualcosa chiamato istogramma, che è come un grafico che mostra quali direzioni sono più comuni. Ogni quadrato ha il suo 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 funge da impronta digitale per il punto chiave. Poiché cattura la texture e la struttura uniche attorno al punto, questa impronta digitale consente di abbinare lo stesso punto chiave in immagini diverse, anche se ridimensionate, ruotate o illuminate in modo diverso.

Ora che abbiamo una migliore comprensione di cosa sia SIFT e di come funziona, esploriamo alcune delle sue applicazioni reali nella computer vision.
Uno degli usi principali di SIFT è nel riconoscimento e nel rilevamento di oggetti. Ciò comporta l'insegnamento a un computer a riconoscere e localizzare oggetti nelle immagini, anche quando gli oggetti non hanno sempre lo stesso aspetto. Ad esempio, SIFT può rilevare un libro indipendentemente dal fatto che sia vicino alla telecamera, più lontano o ruotato di un angolo.
Il motivo per cui questo funziona è che SIFT estrae keypoint altamente distintivi e stabili. Quando questi keypoint sono abbinati ai descrittori SIFT, formano le feature SIFT, che forniscono un modo affidabile per abbinare lo stesso oggetto in immagini diverse. Queste feature catturano dettagli unici dell'oggetto che rimangono coerenti, consentendo un abbinamento affidabile delle feature tra le immagini anche quando le dimensioni, la posizione o l'orientamento dell'oggetto cambiano.

Prima che il deep learning diventasse popolare, SIFT era uno dei metodi più affidabili per la creazione di sistemi di riconoscimento degli oggetti. Era ampiamente utilizzato nella ricerca e nelle applicazioni che richiedevano la corrispondenza di oggetti in grandi set di dati di immagini, anche se spesso richiedeva notevoli risorse computazionali.
SIFT può essere utilizzato anche per creare immagini panoramiche, ovvero foto ampie realizzate unendo diverse immagini. Utilizzando SIFT, i punti chiave distintivi vengono individuati nelle parti sovrapposte di immagini diverse e quindi abbinati tra loro. Queste corrispondenze fungono da ancore, guidando il processo di unione su come le foto devono essere allineate.
Una volta completato l'abbinamento, è possibile utilizzare algoritmi di stitching per calcolare l'allineamento corretto, spesso utilizzando trasformazioni geometriche che mappano un'immagine sull'altra. Le immagini vengono quindi sfumate in modo che le cuciture scompaiano. Il risultato finale è un panorama senza soluzione di continuità che sembra un'unica foto ampia, anche se è stato creato da più scatti.
Un'altra interessante applicazione di SIFT è nella ricostruzione 3D, dove più foto 2D scattate da diverse angolazioni vengono combinate per costruire un modello tridimensionale. SIFT funziona trovando e abbinando gli stessi punti in queste immagini.
Una volta effettuati gli abbinamenti, le posizioni 3D di tali punti possono essere stimate utilizzando la triangolazione, un metodo che calcola la profondità da diversi punti di vista. Questo processo fa parte della struttura dal movimento (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, una raccolta di punti nello spazio che delinea l'oggetto o l'ambiente. SIFT è stato uno dei primi strumenti che ha reso pratico lo structure-from-motion. Sebbene le tecniche più recenti siano più veloci e più comuni oggi, SIFT continua ad essere applicato quando la precisione è più importante della velocità.
SIFT è stato utilizzato anche nella robotica, in particolare nel visual SLAM (Simultaneous Localization and Mapping). Lo SLAM consente a un robot di capire dove si trova mentre costruisce contemporaneamente una mappa dell'ambiente circostante.
I punti chiave SIFT fungono da punti di riferimento affidabili che un robot può riconoscere attraverso i fotogrammi, anche quando l'illuminazione o gli angoli cambiano. Tracciando questi punti di riferimento, il robot può stimare la sua posizione e aggiornare la sua mappa al volo. Sebbene oggi vengano utilizzati più spesso rilevatori di caratteristiche più veloci nella robotica, SIFT ha svolto un ruolo importante nei primi sistemi SLAM ed è ancora fondamentale nei casi in cui la robustezza è più critica della velocità.
Sebbene l'algoritmo SIFT sia stato ampiamente utilizzato nella computer vision ed è noto per essere un metodo affidabile, presenta anche alcuni compromessi. Ecco perché è importante soppesare i suoi pro e i suoi contro prima di decidere se è la soluzione giusta per un progetto. Successivamente, esaminiamo i suoi principali punti di forza e limiti.
Ecco alcuni dei vantaggi dell'utilizzo dell'algoritmo SIFT:
Ecco alcuni degli svantaggi derivanti dall'utilizzo dell'algoritmo SIFT:
Mentre esplori i pro e i contro di SIFT, potresti notare che molte delle sue limitazioni 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 deep learning ispirato al funzionamento del sistema visivo umano. Elabora un'immagine a strati, partendo da schemi semplici come bordi e texture, e costruendo gradualmente forme e oggetti più complessi. A differenza delle regole di feature create manualmente di SIFT, le CNN apprendono le rappresentazioni delle feature direttamente dai dati.
Questo apprendimento basato sui dati significa che le CNN possono superare SIFT nell'abbinamento di descrittori e nelle attività 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 dataset di riferimento contenente milioni di immagini etichettate in migliaia di categorie. Progettato per testare quanto bene gli algoritmi possono riconoscere e classificare gli oggetti, ImageNet è in grado di evidenziare il divario tra i vecchi metodi basati sulle feature e il deep learning.
Le CNN hanno rapidamente superato SIFT imparando rappresentazioni molto più ricche e flessibili, consentendo loro di riconoscere oggetti in condizioni di illuminazione variabili, da diversi punti di vista e anche quando parzialmente nascosti, scenari in cui SIFT spesso fatica.
L'algoritmo Scale Invariant Feature Transform occupa un posto importante nella storia della computer vision. Ha fornito un modo affidabile per rilevare le caratteristiche anche in ambienti mutevoli e ha influenzato molti dei metodi utilizzati oggi.
Sebbene le tecniche più recenti siano più veloci ed efficienti, SIFT ha gettato le basi per esse. SIFT mostra dove è iniziato il progresso odierno nella computer vision ed evidenzia i progressi compiuti dai sistemi di intelligenza artificiale all'avanguardia.
Unisciti alla nostra community globale e consulta il nostro repository GitHub per saperne di più sulla computer vision. Esplora le nostre pagine delle soluzioni per scoprire innovazioni come l'AI in agricoltura e la computer vision nel retail. Scopri le nostre opzioni di licenza e inizia a costruire il tuo modello di computer vision.