# Perceptuální hash: jak algoritmy nacházejí podobné obrázky
Perceptuální hash umožňuje určovat vizuální podobnost obrázků, i když se liší velikostí, barvou nebo stupněm komprese. Na rozdíl od kryptografických hashů, jako je SHA1, perceptuální hashe zachovávají informace o struktuře obrázku a jsou odolné vůči drobným modifikacím. To je činí nezbytnými v systémech pro hledání duplicit, rozpoznávání obsahu a digitální expertizu.
Základy perceptuálního hašování
Kryptografické hash-funkce jsou určeny pro kontrolu přesné shody dat: i minimální změna zdrojového souboru vede k úplně jinému hash. Perceptuální hashe řeší jinou úlohu – musí zůstat blízké při vizuálně zanedbatelných změnách obrázku. Tento přístup vychází z toho, že lidské vnímání ignoruje drobné detaily a soustředí se na celkovou strukturu.
Algoritmy perceptuálního hašování obvykle:
- Odolné vůči změně velikosti a poměru stran;
- Invariantní vůči transformacím jasu a kontrastu;
- Zachovávají podobnost při mírné kompresi nebo šumu;
- Pracují rychle a škálovatelně.
Pro porovnání dvou obrázků se počítají jejich hashe, poté se měří Hammingovo vzdálenost – počet odlišných bitů. Čím menší je tato vzdálenost, tím vyšší je vizuální podobnost.
Nejjednodušší metoda: hash podle průměrné hodnoty
Jeden z nejpřístupnějších algoritmů perceptuálního hašování vychází z průměrování pixelů. Skládá se z těchto kroků:
- Zmenšení na 8×8 pixelů – to výrazně snižuje vliv vysokofrekvenčních detailů.
- Převod do odstínů šedi – eliminuje závislost na barevném kanálu.
- Výpočet průměrné hodnoty jasu všech 64 pixelů.
- Binarizace: každý pixel se nahradí 1, pokud je jeho jas vyšší než průměr, a 0 – pokud nižší.
- Vytvoření 64bitového hash spojením bitů v řadě (obvykle zleva doprava, shora dolů).
Tato metoda je extrémně rychlá a efektivní pro hledání přesných nebo téměř přesných duplicit. Nicméně je citlivá na nelineární transformace, jako je gama-korekce nebo změna histogramu, protože průměrná hodnota se posune a mnoho bitů se invertuje.
Vylepšený přístup: pHash na bázi DCT
Algoritmus pHash (perceptual hash) využívá diskrétní kosinové transformace (DCT), aby se soustředil na nízkofrekvenční složky obrázku – právě ty určují celkovou strukturu. Kroky pHash:
- Škálování na 32×32 pixelů – dostatečné pro správné použití DCT.
- Převod do odstínů šedi.
- Aplikace DCT na celý obrázek (na rozdíl od JPEG, kde se DCT aplikuje na bloky 8×8).
- Extrakce horního levého bloku 8×8 z výsledné frekvenční matice – obsahuje nejnižší frekvence.
- Výpočet průměrné hodnoty těchto 64 koeficientů, s výjimkou prvního (DC složky), aby se vyhnuli závislosti na celkovém jasu.
- Binarizace koeficientů vzhledem k tomuto průměru.
- Vytvoření 64bitového hash.
Tento přístup je výrazně odolnější vůči barevným a jasovým zkreslením. I po gama-korekci nebo lokálních změnách (např. přidání vodoznaku na malou část obrázku) zůstává hash blízko originálu.
Praktické použití a omezení
V reálných systémech, jako je TinEye nebo interní nástroje digitální expertizy, se často kombinují více metod:
- Používají předem vypočítané hashe pro celý archiv;
- Aplikují rychlý hash podle průměru pro primární filtrování;
- Spouštějí pHash nebo jiné pokročilé algoritmy pro upřesnění výsledků;
- Integrují další znaky: rozložení barev, polohu objektů, přítomnost tváří.
Například při systému rozpoznávání tváří lze počítat samostatné hashe jen pro oblasti s tvářemi, což zvyšuje přesnost hledání v kolekcích portrétů.
Nicméně žádný perceptuální hash negarantuje 100% přesnost. Podstatné změny – jako výměna pozadí, otočení o velký úhel nebo výměna klíčových objektů – mohou obrázky vizuálně odlišit, ale hashe zůstanou blízké, nebo naopak.
Co je důležité
- Perceptuální hash měří vizuální, ne bitovou podobnost.
- Hammingovo vzdálenost mezi hashi je hlavní způsob hodnocení podobnosti.
- Nejjednodušší hash podle průměru je rychlý, ale zranitelný vůči nelineárním transformacím.
- pHash na bázi DCT zajišťuje lepší odolnost vůči modifikacím.
- V průmyslových systémech se používá kombinace metod a předchozí indexace.
Srovnání metod
| Kritérium | Hash podle průměru | pHash (DCT) |
|------------------------|---------------------|------------------|
| Rychlost | Velmi vysoká | Střední |
| Odolnost vůči šumu | Střední | Vysoká |
| Odolnost vůči gamě | Nízká | Vysoká |
| Požadovaná paměť | Minimální | Střední |
| Vhodné pro hromadné hledání | Ano | Ano (s indexací) |
Výběr metody závisí na úloze: pro hledání přesných kopií stačí jednoduchý hash, pro analýzu modifikovaných obrázků je ideální pHash.
— Editorial Team
Zatím žádné komentáře.