[PYTHON] J'ai comparé l'identité des images par moment Hu

Aperçu

"J'ai comparé les images du navire avec l'indice du moment Hu."

À propos de Hu Moment

L'invariant de moment Hu a été utilisé comme indice pour comparer les images. Image moment - Wikipedia(en)

Le moment Hu prend une valeur invariante par rapport à la rotation et à la mise à l'échelle de l'image. L'implémentation est incluse dans OpenCV, vous pouvez donc l'utiliser telle quelle.

L'implémentation Python est basée sur ce qui suit. La lecture de l'image est cv2.IMREAD_GRAYSCALE. Référence: Recherche d'images similaires par Hu moment invariant

Exemple

L'ensemble d'images a été emprunté à @kiguchiyura's Kankore Icon Summary [Free Icon].

matome.png

Tempête de neige Kumano Tonnerre Tanière Shigure Shigure改二 Oi Kai Oi Kai二 Z1 Z3
Tempête de neige 0.00 12.45 5.78 5.02 12.63 12.94 9.07 9.02 3.94 4.04
Kumano 12.45 0.00 8.08 9.76 0.73 0.94 3.71 3.72 9.02 9.29
Tonnerre 5.78 8.08 0.00 9.32 8.14 8.08 4.82 4.76 9.67 9.66
Tanière 5.02 9.76 9.32 0.00 10.03 10.07 6.40 6.33 1.73 8.47
Shigure 12.63 0.73 8.14 10.03 0.00 0.46 4.15 4.16 9.13 9.13
Shigure Kaiji 12.94 0.94 8.08 10.07 0.46 0.00 4.54 4.55 9.53 9.53
Oi Kai 9.07 3.71 4.82 6.40 4.15 4.54 0.00 0.08 5.53 12.41
Kaiji Oi 9.02 3.72 4.76 6.33 4.16 4.55 0.08 0.00 5.46 12.40
Z1 3.94 9.02 9.67 1.73 9.13 9.53 5.53 5.46 0.00 7.23
Z3 4.04 9.29 9.66 8.47 9.13 9.53 12.41 12.40 7.23 0.00

Shigure et Oi sont similaires en apparence avant et après le remodelage, donc je suis convaincu. D'un autre côté, la raison pour laquelle le tonnerre et l'électricité se ressemblent beaucoup, mais il y a une grande différence, c'est que je pense que la différence de couleur des cheveux est détectée. La raison pour laquelle la plus grande différence entre Shigure Kaiji et Snowstorm est peut-être la même. Puisque je lis l'image en échelle de gris cette fois, cela peut être un peu plus proche si RVB etc. est pris en compte.

Comparez différentes images

ikaduti.pngikaduti_r.pngikaduti_s.pngikaduti_sc.pngikaduti_sc2.png

Tonnerre(original) Tonnerre(rotation) Tonnerre(Changement de dialogue) Tonnerre(Réduction / marge transparente) Tonnerre(Réduction / remplissage des marges)
Tonnerre(original) 0.00 0.16 0.29 0.03 5.88
Tonnerre(rotation) 0.16 0.00 0.39 0.13 5.96
Tonnerre(Changement de dialogue) 0.29 0.39 0.00 0.31 5.71
Tonnerre(Réduction / marge transparente) 0.03 0.13 0.31 0.00 5.90
Tonnerre(Réduction / remplissage des marges) 5.88 5.96 5.71 5.90 0.00

Seul l'échantillon avec les marges réduites remplies de blanc est considéré comme une image différente. Je me demande pourquoi.

AHDu0cq.pngWJqqUHV.png Source de l'image: Utilisation de Waifu2x pour améliorer les impressions japonaises

img1.png img2.png
img1.png 0.00 0.05
img2.png 0.05 0.00

Une comparaison des images converties par waifu2x. Puisque l'image d'origine est la même, c'est presque la même valeur. En passant, c'est John Resig (le développeur de jQuery) qui rapporte cette transformation d'Ukiyoe. ([Wikipédia](http://ja.wikipedia.org/wiki/%E3%82%B8%E3%83%A7%E3%83%B3%E3%83%BB%E3%83%AC%E3% 82% B7% E3% 82% B0)))

Construire un environnement pour comparer les moments de Hu à portée de main

Je pense que des résultats plus intéressants seront obtenus en fonction de l'échantillon, je vais donc résumer la procédure d'exécution pour Windows. La même comparaison peut être faite en introduisant Python2, numpy et OpenCV.

Préparation à l'installation

J'ai utilisé Chocolatey comme outil de gestion de paquets. C'est comme la version Windows d'apt-get ou de yum. Les logiciels pour lesquels le package Nuget est enregistré peuvent être saisis avec une seule commande chocolatée et peuvent être gérés collectivement.

Installation d'OpenCV

Téléchargez et décompressez simplement le programme d'installation depuis la page de distribution officielle (http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.9/). C'est très facile. Cette fois, j'ai installé 3.0.0-rc1.

Installation de Python

Utilisez du chocolat. Il existe deux packages Python2 (python2 et python2-x86_32), mais Python qui fonctionne automatiquement avec numpy distribué par chocolatey peut être installé à partir de la commande suivante.

$ chocolatey install python2-x86_32
$ chocolatey install numpy

Importation OpenCV

Cv2.pyd situé dans OPENCV_FILE_PATH \ opencv \ build \ python \ 2.7 \ x64 Copiez dans C: \ Python27 \ Lib \ site-packages.

sample.py


import cv2
#code
print "hoge"

Vous devriez maintenant pouvoir utiliser cv2 sur Python. Facile. Veuillez essayer différentes choses.

Postscript

Selon la procédure d'installation et l'environnement, PATH peut ne pas être défini correctement. Dans ce cas, C:\OPENCV_FILE_PATH\opencv-3.0.0\build\x64\vc11\bin C:\python2-x86_32 Essayez à travers le chemin vers.

Recommended Posts

J'ai comparé l'identité des images par moment Hu
Optical Flow, l'image dynamique capturée par OpenCV
Ce que j'ai vu en analysant les données du marché des ingénieurs
J'ai comparé le temps de calcul de la moyenne mobile écrite en Python
J'ai étudié le mécanisme de connexion flask!
[Introduction à Python] J'ai comparé les conventions de nommage de C # et Python.
Je l'ai découvert en analysant les avis du site de changement d'emploi! ??
J'ai vérifié l'état d'utilisation du parking à partir d'images satellite.
J'ai remplacé le calcul numérique de Python par Rust et comparé la vitesse
J'ai essayé de trouver l'itinéraire optimal du pays des rêves par recuit (quantique)
J'ai essayé de vérifier et d'analyser l'accélération de Python par Cython
J'ai vérifié le nombre de magasins fermés et ouverts dans tout le pays par Corona
J'ai essayé de vérifier le résultat du test A / B avec le test du chi carré
Approximation de bas rang des images par HOSVD étape par étape
Approximation de bas rang de l'image par décomposition de Tucker
J'ai vérifié le contenu du volume du docker
J'ai essayé le serveur asynchrone de Django 3.0
J'ai vérifié les options de copyMakeBorder d'OpenCV
La structure des dossiers de Flask est résumée
Détection de visage en collectant des images d'Angers.
Je ne connaissais pas les bases de Python
Pandas du débutant, par le débutant, pour le débutant [Python]
Le modèle de projet Python auquel je pense.
J'ai comparé la vitesse de l'écho du framework web en langage go et du flask du framework web python
J'ai comparé la vitesse des expressions régulières en Ruby, Python et Perl (version 2013)
J'ai comparé la moyenne mobile du type de filtre IIR avec les pandas et scipy
J'ai essayé de prédire la présence ou l'absence de neige par apprentissage automatique.
J'ai essayé de récupérer les données de l'ordinateur portable en le démarrant sur Ubuntu
Reconstruction d'images animées par Autoencoder en utilisant 3D-CNN
J'ai essayé la fonction de tableau croisé dynamique des pandas
Classification des images de guitare par apprentissage automatique Partie 1
Vérifiez le fonctionnement d'OpenCV3 installé par Anaconda
J'ai essayé l'analyse par grappes de la carte météo
J'ai lu l'implémentation de range (Objects / rangeobject.c)
J'ai résolu le problème le plus profond d'Hiroshi Yuki.
Approximation de bas rang des images par décomposition de singularité
Trier les éléments d'un tableau en spécifiant des conditions
J'ai vérifié la liste des touches de raccourci de Jupyter
Approximation de bas rang des images par HOSVD et HOOI
J'ai essayé de corriger la forme trapézoïdale de l'image
Essayez Progate Free Edition [Python I]
J'ai vérifié la période de rétention de session de django
J'ai essayé d'utiliser le module Datetime de Python
J'ai vérifié la vitesse de traitement de la numpy unidimensionnelle
Minimisez le nombre de polissages en optimisant la combinaison
Juger la finition du mahjong par l'optimisation des combinaisons
J'ai touché certaines des nouvelles fonctionnalités de Python 3.8 ①
Classification des images de guitare par apprentissage automatique, partie 2
Rechercher par la valeur de l'instance dans la liste
J'ai lu et implémenté les variantes de UKR
Je souhaite personnaliser l'apparence de zabbix
J'ai essayé d'utiliser le filtre d'image d'OpenCV
J'ai essayé de vectoriser les paroles de Hinatazaka 46!
Le concept de référence en Python s'est effondré un instant, j'ai donc expérimenté un peu.
J'ai comparé la vitesse de la référence du python dans la liste et la référence de l'inclusion du dictionnaire faite à partir de la liste dans.
estimation personnelle en temps réel (que dois-je faire pour éviter l'estimation d'images en dehors de la catégorie) * Échec.