[PYTHON] Ich verglich die Identität der Bilder nach Hu Moment

Überblick

"Ich habe die Bilder des Schiffes mit dem Index des Hu-Moments verglichen."

Über Hu Moment

Die Hu-Moment-Invariante wurde als Index zum Vergleichen der Bilder verwendet. Image moment - Wikipedia(en)

Der Hu-Moment nimmt in Bezug auf Bilddrehung und Skalierung einen unveränderlichen Wert an. Die Implementierung ist in OpenCV enthalten, sodass Sie sie unverändert verwenden können.

Die Python-Implementierung basiert auf Folgendem. Das Lesen von Bildern ist cv2.IMREAD_GRAYSCALE. Referenz: Suche nach ähnlichen Bildern nach Hu moment invariant

Beispiel

Der Bildersatz wurde von @kiguchiyuras Kankore Icon Summary [Free Icon] ausgeliehen.

matome.png

Schneesturm Kumano Donner Den Shigure Shigure改二 Oi Kai Oi Kai二 Z1 Z3
Schneesturm 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
Donner 5.78 8.08 0.00 9.32 8.14 8.08 4.82 4.76 9.67 9.66
Den 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 und Oi sehen vor und nach dem Umbau ähnlich aus, daher ist dies sinnvoll. Auf der anderen Seite ist der Grund, warum Donner und Elektrizität sehr ähnlich aussehen, aber es gibt einen großen Unterschied, dass ich denke, dass der Unterschied in der Haarfarbe aufgegriffen wird. Der Grund, warum der größte Unterschied zwischen Shigure Kaiji und Snowstorm der gleiche sein kann. Dieses Mal lese ich das Bild in Graustufen, daher kann es etwas näher sein, wenn RGB usw. berücksichtigt werden.

Vergleichen Sie verschiedene Bilder

ikaduti.pngikaduti_r.pngikaduti_s.pngikaduti_sc.pngikaduti_sc2.png

Donner(Original) Donner(Drehung) Donner(Dialogwechsel) Donner(Reduzierung / Randtransparenz) Donner(Reduktion / Randfüllung)
Donner(Original) 0.00 0.16 0.29 0.03 5.88
Donner(Drehung) 0.16 0.00 0.39 0.13 5.96
Donner(Dialogwechsel) 0.29 0.39 0.00 0.31 5.71
Donner(Reduzierung / Randtransparenz) 0.03 0.13 0.31 0.00 5.90
Donner(Reduktion / Randfüllung) 5.88 5.96 5.71 5.90 0.00

Nur die Probe mit den mit Weiß gefüllten reduzierten Rändern wird als ein anderes Bild beurteilt. Ich wundere mich warum.

AHDu0cq.pngWJqqUHV.png Bildquelle: Verwenden von Waifu2x zum Hochskalieren japanischer Drucke

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

Ein Vergleich der von [waifu2x] konvertierten Bilder (http://ultraist.hatenablog.com/entry/2015/05/17/183436). Da das Originalbild das gleiche ist, ist es fast der gleiche Wert. Nebenbei bemerkt ist es John Resig (der Entwickler von jQuery), der über diese Transformation von Ukiyoe berichtet. ([Wikipedia](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)))

Aufbau einer Umgebung, um Hu-Momente zu vergleichen

Ich denke, dass je nach Beispiel interessantere Ergebnisse erzielt werden, daher werde ich das Ausführungsverfahren für Windows zusammenfassen. Der gleiche Vergleich kann durch Einführung von Python2, Numpy und OpenCV durchgeführt werden.

Vorbereitung für die Installation

Ich habe Chocolatey als Paketverwaltungstool verwendet. Es ist wie die Windows-Version von apt-get oder yum. Software, für die das Nuget-Paket registriert ist, kann mit einem einzigen Schokoladenbefehl eingegeben und gemeinsam verwaltet werden.

OpenCV-Installation

Laden Sie das Installationsprogramm einfach von der offiziellen Distributionsseite (http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.9/) herunter und entpacken Sie es. Es ist sehr leicht. Diesmal habe ich 3.0.0-rc1 installiert.

Python-Installation

Verwenden Sie schokoladig. Es gibt zwei Python2-Pakete (python2 und python2-x86_32), aber Python, das automatisch mit numpy arbeitet, das vonocolatey verteilt wird, kann mit dem folgenden Befehl installiert werden.

$ chocolatey install python2-x86_32
$ chocolatey install numpy

OpenCV-Import

Cv2.pyd befindet sich in OPENCV_FILE_PATH \ opencv \ build \ python \ 2.7 \ x64 Kopieren Sie nach C: \ Python27 \ Lib \ site-packages.

sample.py


import cv2
#code
print "hoge"

Sie sollten jetzt in der Lage sein, cv2 unter Python zu verwenden. Einfach. Bitte probieren Sie verschiedene Dinge aus.

Nachtrag

Je nach Installationsverfahren und Umgebung ist PATH möglicherweise nicht richtig eingestellt. In diesem Fall, C:\OPENCV_FILE_PATH\opencv-3.0.0\build\x64\vc11\bin C:\python2-x86_32 Versuchen Sie es auf dem Weg nach.

Recommended Posts

Ich verglich die Identität der Bilder nach Hu Moment
Optischer Fluss, das von OpenCV aufgenommene dynamische Bild
Was ich bei der Analyse der Daten des Ingenieurmarktes gesehen habe
Ich habe die Berechnungszeit des in Python geschriebenen gleitenden Durchschnitts verglichen
Ich habe den Mechanismus der Flaschenanmeldung untersucht!
[Einführung in Python] Ich habe die Namenskonventionen von C # und Python verglichen.
Ich habe es herausgefunden, indem ich die Bewertungen der Website für Jobwechsel analysiert habe! ??
Ich habe den Nutzungsstatus des Parkplatzes anhand von Satellitenbildern überprüft.
Ich habe die numerische Berechnung von Python durch Rust ersetzt und die Geschwindigkeit verglichen
Ich habe versucht, die optimale Route des Traumlandes durch (Quanten-) Tempern zu finden
Ich habe versucht, die Beschleunigung von Python durch Cython zu verifizieren und zu analysieren
Ich habe die Anzahl der bundesweit geschlossenen und eröffneten Geschäfte von Corona überprüft
Ich habe versucht, das Ergebnis des A / B-Tests mit dem Chi-Quadrat-Test zu überprüfen
Schritt-für-Schritt-Approximation von Bildern mit niedrigem Rang durch HOSVD
Niedrigrangige Approximation des Bildes durch Tucker-Zerlegung
Ich habe den Inhalt des Docker-Volumes überprüft
Ich habe den asynchronen Server von Django 3.0 ausprobiert
Ich habe die Optionen von copyMakeBorder von OpenCV überprüft
Die Ordnerstruktur von Flask ist zusammengefasst
Gesichtserkennung durch Sammeln von Bildern von Angers.
Ich kannte die Grundlagen von Python nicht
Pandas des Anfängers, vom Anfänger, für den Anfänger [Python]
Die Python-Projektvorlage, an die ich denke.
Ich verglich die Geschwindigkeit von Go Language Web Framework Echo und Python Web Framework Flask
Ich habe die Geschwindigkeit regulärer Ausdrücke in Ruby, Python und Perl (Version 2013) verglichen.
Ich habe den gleitenden Durchschnitt des IIR-Filtertyps mit Pandas und Scipy verglichen
Ich habe versucht, das Vorhandensein oder Nichtvorhandensein von Schnee durch maschinelles Lernen vorherzusagen.
Ich habe versucht, die Daten des Laptops durch Booten unter Ubuntu zu retten
Rekonstruktion von bewegten Bildern mit dem Autoencoder unter Verwendung von 3D-CNN
Ich habe die Pivot-Table-Funktion von Pandas ausprobiert
Klassifizierung von Gitarrenbildern durch maschinelles Lernen Teil 1
Überprüfen Sie den Betrieb von OpenCV3, das von Anaconda installiert wurde
Ich habe versucht, die Wetterkarte einer Clusteranalyse zu unterziehen
Ich habe die Implementierung von range gelesen (Objects / rangeobject.c)
Ich habe das tiefste Problem von Hiroshi Yuki gelöst.
Niedrigrangige Approximation von Bildern durch Singularitätszerlegung
Sortieren Sie die Elemente eines Arrays, indem Sie Bedingungen angeben
Ich habe die Liste der Tastenkombinationen von Jupyter überprüft
Niedrigrangige Approximation von Bildern durch HOSVD und HOOI
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Probieren Sie Progate Free Edition [Python I]
Ich habe die Sitzungsaufbewahrungsdauer von Django überprüft
Ich habe versucht, das Datetime-Modul von Python zu verwenden
Ich habe die Verarbeitungsgeschwindigkeit der numpy eindimensionalisierung überprüft
Minimieren Sie die Anzahl der Polierungen, indem Sie die Kombination optimieren
Beurteilung des Endes von Mahjong durch Kombinationsoptimierung
Ich habe einige der neuen Funktionen von Python 3.8 touched angesprochen
Klassifizierung von Gitarrenbildern durch maschinelles Lernen Teil 2
Suchen Sie nach dem Wert der Instanz in der Liste
Ich habe die Varianten von UKR gelesen und implementiert
Ich möchte das Erscheinungsbild von zabbix anpassen
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!
Das Konzept der Referenz in Python brach für einen Moment zusammen, also experimentierte ich ein bisschen.
Ich habe die Geschwindigkeit der Referenz des Pythons in der Liste und die Referenz der Wörterbucheinbeziehung aus der In-Liste verglichen.
Echtzeit-Persönliche Schätzung (Was muss ich tun, um die Schätzung von Bildern außerhalb der Kategorie zu verhindern?) * Fehler.