Vai al contenuto
Similarità tra immagini

Hash percettivo e confronto immagini con distanza di Hamming

Calcolo dell'hash percettivo di un'immagine con i tre algoritmi classici, aHash (media), dHash (gradiente) e pHash (trasformata coseno discreta), e confronto di due immagini tramite la distanza di Hamming tra i loro hash. A differenza di MD5 o SHA, che cambiano del tutto al minimo ritocco, l'hash percettivo resta simile quando l'immagine è simile: utile per trovare duplicati, varianti ridimensionate o ricompresse. Le immagini vengono elaborate nel browser e non lasciano il dispositivo.

Immagine A: trascina o clicca
JPG, PNG, WebP, GIF. L'immagine resta nel browser.

Come calcolare e confrontare gli hash percettivi

  1. 1

    Scegli la modalità

    Hash di un'immagine restituisce aHash, dHash e pHash di un singolo file. Confronta due immagini calcola gli hash di entrambe e la distanza tra loro.

  2. 2

    Carica le immagini

    Trascina i file nelle aree di rilascio o clicca per selezionarli. Funzionano JPG, PNG, WebP e GIF. Le immagini vengono ridotte e convertite in scala di grigi solo in memoria, nel browser.

  3. 3

    Calcola

    Ottieni gli hash come stringhe esadecimali a 16 caratteri (64 bit ciascuno). In modalità confronto vedi anche la distanza di Hamming, cioè quanti bit differiscono, e un verdetto leggibile.

  4. 4

    Interpreta

    Distanza 0 significa percettivamente identiche; valori bassi indicano la stessa immagine ridimensionata, ricompressa o leggermente ritoccata; valori alti indicano immagini diverse. Copia gli hash per usarli altrove.

Come funzionano i tre algoritmi

Tutti e tre riducono l'immagine a una piccola griglia in scala di grigi e ne ricavano 64 bit, ma con criteri diversi. L'aHash (average hash) ridimensiona a 8x8 pixel, calcola la luminosità media e pone a 1 ogni pixel sopra la media. È velocissimo ma poco robusto ai cambi di luminosità. Il dHash (difference hash) lavora su una griglia 9x8 e confronta ogni pixel col vicino di destra: il bit dice se sta diventando più chiaro o più scuro. Cattura la struttura dei gradienti ed è molto stabile rispetto a ridimensionamenti e compressione.

Il pHash (perceptual hash) è il più robusto. Ridimensiona a 32x32, applica la trasformata coseno discreta (DCT) bidimensionale e tiene solo il blocco 8x8 in alto a sinistra, dove si concentrano le frequenze basse, cioè la struttura percepibile dell'immagine. Esclude il coefficiente continuo (DC), calcola la mediana dei restanti e pone a 1 i coefficienti sopra di essa. Poiché usa le basse frequenze, ignora dettagli fini e rumore: due versioni della stessa foto a qualità diverse producono pHash quasi identici.

Il confronto tra due hash usa la distanza di Hamming: il numero di bit in posizioni diverse. Zero significa hash identici; pochi bit di differenza indicano immagini molto simili. Per il verdetto questo strumento usa il pHash, il più affidabile, con soglie pratiche: sotto 5 quasi sempre la stessa immagine, sopra 10 immagini diverse. Tutto il calcolo, ridimensionamento incluso, avviene nel browser tramite canvas.

Glossario

Termini tecnici usati in questa pagina, spiegati in due righe.

Hash percettivo #
Impronta digitale che riflette il contenuto visivo di un'immagine, non i suoi byte. Immagini simili producono hash simili, al contrario degli hash crittografici (MD5, SHA) dove un bit di differenza cambia tutto.
aHash #
Average hash. Ridimensiona a 8x8, calcola la media e segna 1 i pixel sopra la media. Semplice e veloce, ma sensibile ai cambi di luminosità globale.
dHash #
Difference hash. Su una griglia 9x8 confronta ogni pixel con il vicino: il bit indica se la luminosità cresce o cala. Robusto a ridimensionamento e compressione.
pHash #
Perceptual hash basato sulla DCT. Tiene le basse frequenze (struttura percepibile) e ignora i dettagli fini. È il più robusto a ricompressione e ritocchi leggeri.
DCT #
Discrete Cosine Transform: scompone un'immagine nelle sue frequenze spaziali. Le basse frequenze (angolo in alto a sinistra) descrivono la forma generale, le alte i dettagli. È la stessa trasformata alla base del JPEG.
Distanza di Hamming #
Numero di posizioni in cui due stringhe di bit della stessa lunghezza differiscono. Qui misura quanto due hash percettivi (64 bit) sono diversi: 0 = identici.

Domande frequenti sull'hashing percettivo

A cosa serve un hash percettivo rispetto a MD5 o SHA?
Gli hash crittografici come MD5 e SHA cambiano completamente se anche un solo byte differisce: utili per verificare integrità, inutili per trovare immagini simili. L'hash percettivo invece resta simile quando l'immagine è simile, quindi serve a trovare duplicati, varianti ridimensionate, ricompresse o con piccoli ritocchi.
Quale dei tre algoritmi è il migliore?
Dipende dall'uso. dHash e pHash sono più robusti di aHash. Il pHash, basato sulla DCT, è generalmente il più affidabile contro ricompressione e variazioni di qualità, motivo per cui questo strumento lo usa per il verdetto. Il dHash è un ottimo compromesso tra robustezza e velocità. aHash è il più semplice e veloce ma il meno stabile.
Che soglia di distanza indica due immagini uguali?
Con hash a 64 bit, una distanza di Hamming pari a 0 significa percettivamente identiche; valori fino a 4-5 indicano quasi sempre la stessa immagine ritoccata, ridimensionata o ricompressa; oltre 10 di solito immagini diverse. Le soglie non sono assolute: dipendono dal tipo di immagini e vanno tarate sul tuo caso.
Rileva immagini ruotate o specchiate?
No, non in modo nativo. Gli hash percettivi classici non sono invarianti alla rotazione o al ribaltamento: una stessa foto ruotata di 90 gradi produce hash molto diversi. Per gestire rotazioni servono tecniche aggiuntive (calcolare gli hash di tutte le rotazioni, o feature invarianti). Questo strumento confronta le immagini così come sono.
Le immagini vengono caricate da qualche parte?
No. Vengono lette e ridimensionate solo in memoria nel browser tramite canvas. Nessun file viene inviato a un server. Puoi verificarlo nella scheda Rete degli strumenti per sviluppatori, oppure usare il tool offline dopo aver caricato la pagina.
Posso confrontare un'immagine con un hash già calcolato altrove?
Se l'hash è stato calcolato con lo stesso algoritmo e gli stessi parametri (per il pHash: 32x32, blocco 8x8, esclusione del DC, soglia sulla mediana), la distanza di Hamming è confrontabile. Implementazioni diverse possono usare convenzioni leggermente diverse, quindi confronta sempre hash prodotti dallo stesso metodo.
Funziona con immagini molto grandi?
Sì. La prima cosa che fa lo strumento è ridurre l'immagine a una piccola griglia, quindi la dimensione originale incide poco sul risultato e sul tempo di calcolo. File molto pesanti richiedono solo qualche istante in più per essere decodificati dal browser.

Chi sviluppa questi strumenti?

Maurizio Fonte, consulente IT senior con oltre 20 anni di esperienza in PHP, Laravel, infrastrutture Linux, cybersecurity e integrazione AI/LLM in azienda. Backend di produzione, modernizzazione di codice legacy, audit di sicurezza, agenti AI e MCP server custom: il lavoro che sta dietro a questi strumenti.

Conosci Maurizio Fonte