web-dev-qa-db-fra.com

Comparaison de similarité d'image

J'ai initialement posé cette question sur cstheory.stackexchange.com mais il a été suggéré de la déplacer vers stats.stackexchange.com

Existe-t-il un algorithme existant qui me renvoie une métrique de similarité entre deux images bitmap? Par "similaire", je veux dire un humain dirait que ces deux images ont été modifiées à partir de la même photo. Par exemple, l'algorithme doit indiquer que les 3 images suivantes sont identiques (originale, position décalée, rétrécie).

Même

enter image description hereenter image description hereenter image description here

Je n'ai pas besoin de détecter les images déformées ou retournées. Je n'ai pas non plus besoin de détecter s'il s'agit du même objet dans différentes orientations. 

Différent

enter image description hereenter image description here

J'aimerais utiliser cet algorithme pour empêcher le spam sur mon site Web. J'ai remarqué que les spammeurs sont trop paresseux pour modifier leurs images de spam. Ce n'est pas limité aux visages. Je sais déjà qu'il existe déjà de très bons algorithmes de reconnaissance faciale. L'image de spam peut être n'importe quoi, d'une URL à un corps nu, d'un terrain de football.

24
JoJo

Il existe une discussion sur les algorithmes de similarité d’images au débordement de pile. Étant donné que vous n'avez pas besoin de détecter les images déformées ou retournées, l'approche par histogramme peut être suffisante, à condition que le recadrage des images ne soit pas trop grave. 

14
Jim M.

Vous pouvez utiliser des architectures d'apprentissage en profondeur telles que VGG pour générer des fonctions à partir d'images, puis utiliser une métrique de similarité telle que la similarité cosinus pour déterminer si deux images sont essentiellement identiques. 

L'ensemble du pipeline est assez facile à configurer et vous n'avez pas besoin de comprendre l'architecture du réseau de neurones (vous pouvez simplement le traiter comme une boîte noire). En outre, ces fonctionnalités sont assez génériques et peuvent être appliquées pour rechercher des similitudes entre tous les types d'objets, pas seulement les visages.

Voici quelques blogs qui vous guident tout au long du processus . http://blog.ethanrosenthal.com/2016/12/05/recasketch-keras/https: // erikbern .com/2015/09/24/méthodes du plus proche voisin-vecteurs-modèles-part-1.html

6
Anvesh K

Amazon a une nouvelle API appelée Rekognition qui vous permet de comparer deux images pour la similarité faciale. L'API renvoie un pourcentage de similarité pour chaque face l'une avec l'autre et les cadres de sélection pour chaque face.

La reconnaissance comprend également une api pour l'analyse faciale (restitution du sexe, l'âge approximatif et d'autres détails faciaux pertinents) et la détection de scène d'objet (restitution des étiquettes d'objets se trouvant dans l'image).

4
Aaron Landy

Si vous voulez simplement la similarité d’images, c’est une chose, mais la similarité faciale en est une autre. Deux personnes très différentes peuvent apparaître dans le même arrière-plan et une analyse de la similarité d'image montre qu'elles sont identiques, alors qu'une même personne peut être photographiée dans deux contextes différents et que l'analyse de similarité montre qu'elles sont différentes.

Si vous devez effectuer une analyse faciale, vous devez rechercher des algorithmes spécifiques. Ce type d'analyse permet souvent de calculer la taille et la position relatives des yeux, du nez et de la bouche.

2
John

Fonctions de hachage robustes do that. Mais il y a encore beaucoup de recherches en cours dans ce domaine. Je ne suis pas sûr s'il existe déjà des prototypes utilisables.

J'espère que cela pourra aider.

2
philipp

Utilisez https://github.com/Netflix/vmaf pour comparer les deux ensembles d’images.

Commencez par convertir les images en yuv422p à l’aide de ffmpeg, puis lancez le test. Notez la différence de score. Ceci peut être utilisé pour dire si l'image est similaire ou différente. Pour cet échantillon, ils se ressemblent tous les deux ...

ffmpeg -i .\different-pose-1.jpg  -s 1920x1080 -pix_fmt yuv422p different-pose-1.yuv
ffmpeg -i .\different-pose-2.jpg  -s 1920x1080 -pix_fmt yuv422p different-pose-2.yuv
.\vmafossexec.exe yuv422p 1920 1080 different-pose-1.yuv different-pose-2.yuv vmaf_v0.6.1.pkl --ssim --ms-ssim --log-fmt json --log different.json
Start calculating VMAF score...
Exec FPS: 0.772885
VMAF score = 2.124272
SSIM score = 0.424488
MS-SSIM score = 0.415149

ffmpeg.exe -i .\same-pose-1.jpg  -s 1920x1080 -pix_fmt yuv422p same-pose-1.yuv
ffmpeg.exe -i .\same-pose-2.jpg  -s 1920x1080 -pix_fmt yuv422p same-pose-2.yuv
.\vmafossexec.exe yuv422p 1920 1080 same-pose-1.yuv same-pose-2.yuv vmaf_v0.6.1.pkl --ssim --ms-ssim --log-fmt json --log same.json
Start calculating VMAF score...
Exec FPS: 0.773098
VMAF score = 5.421821
SSIM score = 0.285583
MS-SSIM score = 0.400130

Références Comment créer un cadre YUV422 à partir d'une image JPEG ou d'une autre image sous Ubuntu

0
Fire