# Hash percettivo e confronto immagini con distanza di Hamming

> Calcola l'hash percettivo (aHash, dHash, pHash) di un'immagine e confronta due immagini con la distanza di Hamming. Tutto nel browser, nessun upload.

Strumento gratuito nel browser (nessun upload): https://www.mauriziofonte.it/strumenti/confronto-immagini-hash-percettivo

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.

## Come calcolare e confrontare gli hash percettivi

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. **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. **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. **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

- **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.

---
Uno strumento di Maurizio Fonte, senior backend engineer. Tutti gli strumenti: https://www.mauriziofonte.it/strumenti/
