Aller au contenu

LE HACHAGE D'IMAGE

L'article que vous vous apprêtez à lire explique le hachage, plutôt orienté sur le hachage d'image.

Introduction

Le hachage est largement utilisé en informatique, particulièrement sur des aspects de sécurité. Son but est de transformer un jeu de données, que ce soit une phrase, un texte ou une image, en une suite d'octets appelée "empreinte" ou "hash". Cette empreinte ne permet jamais de deviner la donnée source ayant permis de l'obtenir. Cette méthode en fait un très bon candidat pour le stockage de mots de passe : seul l'utilisateur connaît le mot de passe, le système ne contient que l'empreinte ; lorsque l'utilisateur saisit un mot de passe, on recalcule l'empreinte et nous pouvons les comparer pour vérifier la validité.

L'autre usage important de ces empreintes est de vérifier l'intégrité des données : en cas de manipulation d'un fichier, les empreintes seront totalement différentes.
Les fonctions de hachage sont couramment utilisées aujourd'hui pour permettre le calcul de l'empreinte rapidement et facilement, mais il est possible de retrouver la donnée source par des techniques de "brute-force", qui implique un grand temps de calcul en fonction de la donnée source. C'est d'ailleurs pour cette raison qu'il vous est toujours recommandé d'utiliser des mots de passe longs et complexes, mais ce n'est pas le sujet (mais pour plus d'informations: https://www.hivesystems.io/blog/are-your-passwords-in-the-green).

A travers cette article nous allons nous pencher sur une autre utilisation du Hachage en parlant du Hachage d'image pour retrouver des similitudes ou des différences entre deux images.

Le hachage pour la reconnaissance d’image

Le hachage est une technique couramment utilisée pour la reconnaissance d’images. Elle consiste à prendre une image en entrée, à la transformer en une empreinte unique à l’aide d’une fonction de hachage et à stocker cette empreinte dans une base de données. Lorsque l’on souhaite identifier une image, on utilise la même fonction de hachage pour créer une empreinte à partir de l’image à identifier, puis on compare cette empreinte à celles stockées dans la base de données. Si une empreinte correspond, cela signifie que l’image a été identifiée avec succès.

Le hachage pour la reconnaissance d’images présente de nombreux avantages. Tout d’abord, il permet de comparer rapidement et efficacement une image à une grande base de données, ce qui est particulièrement utile pour des applications telles que la recherche d’images ou la reconnaissance faciale. En outre, il est difficile pour un utilisateur malveillant de trouver une image qui produira la même empreinte qu’une image donnée, ce qui rend cette technique très sécurisée. Cependant, il est important de noter que le hachage pour la reconnaissance d’images peut présenter des limitations en termes de précision, car deux images différentes peuvent produire des empreintes similaires, ce qui peut conduire à des erreurs d’identification.

illustration hachage

Pour la reconnaissance d’image, on utilise la plupart du temps des algorithmes de hachage d’image tels que le Perceptual Hash (pHash), le Difference Hash (dHash) ou le Average Hash (aHash). Ces algorithmes de hachage sont conçus pour générer une signature unique pour chaque image qui est résiliante aux changements mineurs tels que les transformations géométriques, les changements d’échelle, les altérations de la couleur et les ajouts de bruit. Cela permet ensuite à un utilisateur de pouvoir comparé son image avec une base de donnée d’image ou encore deux images entre elles, pour identifier des différences.

L’algorithme Perceptual Hash (pHash)

Le Perceptual Hash est un algorithme de hachage d’image qui génère une signature unique pour chaque image en utilisant une transformation de Fourier discrète et une quantification des coefficients de fréquence. Voici comment on utilise le pHash :

On convertit l’image en niveau de gris

Le Phash utilise une version en niveaux de gris de l’image pour réduire la complexité et améliorer l’analyse et le cryptage de l’image.

On redimensionne l’image

Le pHash est sensible à la taille de l’image. Pour que l’analyse fonctionne, il faut redimensionner l’image pour qu’elle soit de taille fixe. Quand l’on compare deux images, il est nécessaire que les deux images soient de même taille et de même dimension.

On calcul la transformation de Fourier discrète

Le pHash utilise la transformation de Fourier discrète (DFT) pour convertir l’image en domaine fréquentiel. Cela permet de capturer les caractéristiques globales de l’image telles que les textures, les motifs et les formes.

On quantifie les coefficients de fréquence

Les coefficients de fréquence sont quantifiés en fonction de leur amplitude et de leur phase pour réduire la complexité de la signature de hachage. Les coefficients de fréquence quantifiés sont ensuite ordonnés en fonction de leur énergie, en utilisant une transformation en zigzag.

On génère la signature de hachage

La signature de hachage est générée en utilisant les coefficients de fréquence quantifiés ordonnés. La signature de hachage résultante est une représentation unique de l’image qui peut être utilisée pour la comparaison avec une base de données d’images

Le pHash est un algorithme de hachage avancé pour la reconnaissance d’images qui est plus robuste que le dHash pour les images avec des structures complexes et des textures fines.

vous pourrez trouver plus d’information sur le Perceptual Hash dans cette article qui le détail :

Hachages perceptuels ou comment rechercher dans les images (Partie 1: Définitions)
Empreintes digitales, reconnaissance faciale, scanner rétinien. Ces dernières années ont vu l’émergence de technologies…

L’algorithme Difference Hash (dHash)

Le Difference Hash est aussi un algorithme de hachage d’image qui génère une signature unique pour chaque image en calculant la différence entre les pixels de l’image voisins dans une direction donnée. Voici comment on utilise le dHash :

On convertit l’image en niveaux de gris

Le dHash utilise une version en niveaux de gris de l’image pour réduire la complexité et améliorer l’analyse et le cryptage de l’image.

On Redimensionne l’image

Le dHash est sensible à la taille de l’image. Pour que l’analyse fonctionne, il faut redimensionner l’image pour qu’elle soit de taille fixe. Quand l’on compare deux images, il est nécessaire que les deux images soient de même taille et de même dimension.

On Calcul la différence entre les pixels voisins

Pour chaque ligne de pixels de l’image, le dHash calcule la différence entre les pixels voisins dans une direction donnée, généralement de gauche à droite.

On Génère la signature de hachage

La signature de hachage est générée en concaténant  les résultats des étapes précédentes en une seule chaîne de bits.

résultat de l’exécution de l’algorithme dHash en python

L’algorithme Average Hash (aHash)

Le Average Hash est un algorithme de hachage d’image qui génère une signature unique pour chaque image en calculant la moyenne des valeurs de pixels de l’image et en comparant chaque pixel de l’image avec cette moyenne. Voici comment on utilise le aHash :

On Convertit l’image en niveaux de gris

Le aHash utilise une version en niveaux de gris de l’image pour réduire la complexité et améliorer l’analyse et le cryptage de l’image.

On Redimensionne l’image

Le aHash est sensible à la taille de l’image. Pour que l’analyse fonctionne, il faut redimensionner l’image pour qu’elle soit de taille fixe. Quand l’on compare deux images, il est nécessaire que les deux images soient de même taille et de même dimension.

On Calcul la moyenne des valeurs de pixels

La moyenne des valeurs de pixels est calculée en additionnant toutes les valeurs de pixels de l’image et en divisant le résultat par le nombre total de pixels.

On Compare chaque pixel de l’image avec la moyenne

Chaque pixel de l’image est comparé avec la moyenne des valeurs de pixels calculée à l’étape précédente. Si la valeur du pixel est supérieure à la moyenne, il est considéré comme “1”, sinon il est considéré comme “0”.

On Génère  la signature de hachage

La signature de hachage est générée en concaténant les résultats des étapes précédentes en une seule chaîne de bits.

Cette algorithme peut avoir des limites en termes de précision pour les images avec des structures complexes et des textures fines, comme pour le dHash. Dans ce cas, l’ algorithmes plus avancés qu’est le Perceptual Hash peut être utilisés pour une meilleure précision.

En somme, il possible d’utiliser le Hachage pour de la reconnaissance d’image, mais des limites sont tout de même identifiable. Pour palier à certaines, il est possible d’associer un algorithme de hachage avec d’autres algorithme pour améliorer la précision d’analyse.

Amélioration d’un algorithme de hachage

Comme vu précédent, les algorithmes de hachage sont très efficace, rapide et simple à utiliser pour de la reconnaissance d’image. Il est quand même possible d’améliorer leur précision en les associant à d’autres techniques :

La comparaison de couleur

Avec cette techniques, on compare les histogrammes de couleur* des images pour détecter des différences de couleurs entre-elles.

La comparaison de texture

Avec cette technique, on compare les caractéristiques de texture des images pour détecter des textures changeantes d’une images à une autre

La comparaison de forme

Avec cette technique, et comme son nom l’indique, on analyse et on détecte des formes différentes au sein des images que l’on analyse.

La comparaison de contenu sémantique

Pour cette technique, On utilise des algorithmes de traitement du langage naturel pour analyser le contenu sémantique des images* et détecter les différences de contenu.

En combinant ces différentes techniques avec le hachage d’image, on peut améliorer la précision de la comparaison d’images et détecter plus de différences entre les images.

histogrammes de couleur* = représentation graphique de la distribution des couleurs dans une image. Il permet de visualiser les différentes nuances de couleurs présentes dans l’image et de quantifier leur présence.

Contenu sémantique des images* = se réfère à la signification et au contexte des objets et des scènes représentés dans une image. Cela inclut la compréhension des objets, des personnes, des actions, des contextes, des émotions et des relations entre eux.

Conclusion

le hachage d’image est une technique efficace pour la reconnaissance d’image et la comparaison d’images. Elle permet de calculer une empreinte numérique unique pour chaque image . Cette technique est utile pour trouver des images similaires ou identiques dans une grande base de données d’images, pour la recherche d’images en ligne, ou pour la détection de duplicatas d’images. Cependant, le hachage d’image a ses limites et ne peut pas détecter les changements subtils de couleur ou de texture dans les images. Pour cela il faut l’associer à d’autres techniques et algorithme. Il peut également être trompé par les images qui ont été modifiées intentionnellement pour tromper la reconnaissance.

Dernier