web-dev-qa-db-fra.com

À quoi sert le hachage d'image?

J'entends ce terme parfois et je me demande à quoi il sert?

37
seanbrant

Hashing est une fonction qui s'applique à des données arbitraires et produit les données d'une taille fixe (généralement une très petite taille). Il existe de nombreux types de hachage différents, mais si nous parlons de hachage d'image, il est utilisé pour:

  • trouver des doublons très rapidement. Presque toutes les fonctions de hachage fonctionneront. Au lieu de rechercher l'image entière, vous chercherez le hachage de l'image.
  • trouver des images similaires, que j'expliquerai plus tard

Les images qui nous semblent identiques peuvent être très différentes si vous comparez simplement les octets bruts. Cela peut être dû à:

  • redimensionnement
  • rotation
  • gamma de couleur légèrement différente
  • format différent
  • quelques bruits mineurs, filigranes et artefacts

Même si vous trouverez une image qui sera différente d'un seul octet, si vous lui appliquez une fonction de hachage, le résultat peut être très différent (pour des hachages comme MD5, SHA il le sera très probablement être complètement différent).

Vous avez donc besoin d'une fonction de hachage qui créera un hachage similaire (ou même identique) pour des images similaires. L'un des génériques est hachage sensible à la localité . Mais nous savons quels types de problèmes peuvent être liés aux images, nous pouvons donc trouver un type de hachage plus spécialisé .

Les algorithmes les plus connus sont:

  • n hachage . Le hachage moyen est l'algorithme le plus simple qui n'utilise que quelques transformations. Mettez l'image à l'échelle, convertissez-la en niveaux de gris, calculez la moyenne et binarisez l'échelle de gris en fonction de la moyenne. Convertissez maintenant l'image binaire en entier. L'algorithme est si simple que vous pouvez l'implémenter en une heure.
  • hachage p . Le hachage perceptuel utilise une approche similaire, mais au lieu de la moyenne, il s'appuie sur transformation cosinus discrète (transformation populaire dans le traitement du signal).
  • d-hachage . Le hachage par différence utilise la même approche que le hachage, mais au lieu d'utiliser des informations sur les valeurs moyennes, il utilise des gradients (différence entre les pixels adjacents).
  • hachage . Très similaire à p-hash, mais au lieu de DCT, il utilise transformation en ondelettes .

Par ailleurs, si vous utilisez python, tous ces hachages sont déjà implémentés dans cette bibliothèque .

41
Salvador Dali

Bien que le hachage normal d'un fichier hache les bits de données individuels du fichier, le hachage d'image fonctionne à un niveau légèrement supérieur. La différence est qu'avec le hachage d'image, si deux images semblent pratiquement identiques mais sont dans un format ou une résolution différents (ou s'il y a une corruption mineure, peut-être en raison de la compression), elles doivent hacher au même nombre. Bien que les bits réels de leurs données soient totalement différents, s'ils semblent identiques à un humain, ils hachent la même chose.

Une application de ceci est la recherche. TinEye.com vous permet de télécharger une image et de trouver bon nombre de ses occurrences sur Internet. comme google, il possède un robot d'exploration qui parcourt les pages Web et recherche des images. Il hache ensuite ces images et stocke le hachage et l'URL dans une base de données. Lorsque vous téléchargez une image, il calcule simplement le hachage et récupère toutes les URL liées à ce hachage dans la base de données. Les exemples d'utilisation de TinEye incluent la recherche de versions d'images à plus haute résolution ou la recherche du facebook/myspace/etc public de quelqu'un. profil de leur image (en supposant que ces profils utilisent la même photo.

Le hachage d'image peut également être utilisé avec la mise en cache ou le stockage local pour empêcher la retransmission d'une photo ou le stockage de doublons, respectivement.

Il existe de nombreuses autres possibilités, notamment l'authentification d'image et la recherche d'images similaires dans une vidéo (comme cela a été mentionné par quelqu'un d'autre).

37
Matt Boehm

le hachage en général est un moyen utile de réduire une énorme quantité de données en un nombre court (ish) qui peut être utilisé pour identifier cette image.

Ils sont parfois destinés simplement à fournir un moyen pratique d'identifier un fichier sans l'intervention d'un humain, en particulier en présence de plusieurs auteurs parallèles qui ne peuvent pas être invoqués pour incrémenter un compteur maître (JPG001 JPG002) sans se chevaucher.

Parfois, les hachages sont destinés à être infalsifiables, de sorte que je peux dire - si le hachage d'image que VOUS générez est le même que celui que j'ai fait lorsque je vous ai envoyé l'image, alors vous pouvez être sûr qu'il provient de moi (et n'est pas ajusté par un malfaiteur ). Cependant, tous les hachages ne peuvent pas faire cette garantie, un hachage "cryptographique" populaire a montré toutes les quelques années des défauts fatals.

3
Alex Brown

Dans la pratique, le hachage d'image est populaire pour trouver des images similaires dans une séquence d'images ou de vidéo, ou pour incorporer un filigrane avec diverses images comme le font de nombreux studios de cinéma (presque à l'écoute de Fight Club dans un sens effrayant!).

1
mduvall