Feature Matching mit OpenCV 3 und Python 3 (A-KAZE, KNN)

Feature-Matching mit OpenCV

Feature Matching ist das Matching von Features, die aus verschiedenen Bildern extrahiert wurden.

Es ist eine Technologie, die in erscheint.

Die folgenden Bibliotheken werden in OpenCV bereitgestellt.

Dieses Mal werde ich mit OpenCV 3 + Python 3 versuchen, die Funktionen des gedrehten und gezoomten Bildes wie unten gezeigt anzupassen.

match_thumbnail.jpg ** Passendes Ergebnis zeichnen **

Was ist OpenCV?

OpenCV (Open Source Computer Vision Library) ist eine Sammlung von BSD-lizenzierten Video- / Bildverarbeitungsbibliotheken. Es gibt viele Algorithmen wie Bildfilterung, Vorlagenabgleich, Objekterkennung, Videoanalyse und maschinelles Lernen.

■ Beispiel für Bewegungsverfolgung mit OpenCV (OpenCV Google Summer of Code 2015) https://www.youtube.com/watch?v=OUbUFn71S4s

■ Klicken Sie hier für die Installation und einfache Verwendung Installieren Sie OpenCV 3 (Core + Contrib) in der Python 3-Umgebung und unterscheiden Sie zwischen OpenCV 2 und OpenCV 3 und überprüfen Sie die einfache Bedienung

■ Klicken Sie hier für die Standbildverarbeitung Versuchen Sie die Kantenerkennung mit OpenCV Führen Sie verschiedene Filter mit OpenCV durch (Gradient, Highpass, Laplacian, Gaussian) Extrahieren Sie Feature-Punkte mit OpenCV (AgastFeature, FAST, GFTT, MSER, AKAZE, BRISK, KAZE, ORB, SimpleBlob) Gesichtserkennung mit OpenCV (Haar-like Feature Classifier) Schätzen Sie mit OpenCV (Eigenface, Fisherface, LBPH), wer das Gesicht hat Erkennen Sie die Kontur und Richtung eines geformten Objekts mit OpenCV (Hauptkomponentenanalyse: PCA, Eigenvektor)

■ Klicken Sie hier für die Videoverarbeitung Versuchen Sie, Videos in Echtzeit mit OpenCV zu konvertieren Versuchen Sie, Webkamera- / Videokamera-Videos in Echtzeit mit OpenCV zu konvertieren Zeichnen Sie den optischen Fluss in Echtzeit mit OpenCV (Shi-Tomasi-Methode, Lucas-Kanade-Methode) Objektverfolgung mit OpenCV (Verfolgen von Funktionspunkten, die von der Maus mit der Lucas-Kanade-Methode festgelegt wurden Bewegungsvorlagenanalyse mit OpenCV (Erkennen von Objekten und deren Bewegungsrichtungen in Echtzeit)

A-KAZE

KNN、Brute-Force、FLANN KNN (K-Nearest Neighbor-Algorithmus) ist ein Algorithmus, der K Labels für den nächsten Nachbarn aus dem Suchraum auswählt und Klassenbezeichnungen mehrheitlich zuweist. Beim Lernen werden die Trainingsdaten einfach so gespeichert, wie sie sind. Es arbeitet mit hoher Geschwindigkeit, da die Lernkosten Null sind. Es ist ein repräsentativer Spieler des Lazy-Learning-Algorithmus. OpenCV unterstützt die Round-Robin-Methode (Brute-Force) und die schnelle ungefähre Nachbarschaftssuchmethode (FLANN) als Methode zum Suchen von K-Labels für nächste Nachbarn aus dem Suchraum.

● Anmerkungen (Python3 und FLANN)

Zuvor habe ich geschrieben, dass es ein Tutorial gibt, das nicht mit OpenCV 3 funktioniert (link), aber FLANNs Feature-Point-Matching ist meine Umgebung (OpenCV). Unter 3.1.0 + Python 3.5.2 + Windows 10 hat es nicht funktioniert.

    > matches = flann.knnMatch(des1,des2,k=2)
    > 

\ # Der folgende Fehler tritt auf # error: C:\dev\opencv-3.1.0\modules\python\src2\cv2.cpp:163: error: (-215) The data should normally be NULL! in function NumpyAllocator::allocate

FLANN funktioniert gut mit C ++ und OpenCV2. Wenn Sie FLANN verwenden möchten, führen Sie es in einer C ++ - oder OpenCV2-Umgebung aus. Bei der Ausführung mit einer Kombination aus OpenCV 3 und Python 3 wird derzeit "Brute-Force" verwendet.

Programm

knn.py


# -*- coding: utf-8 -*-
import cv2

#Bild 1
img1 = cv2.imread("img1.jpg ")
#Bild 2
img2 = cv2.imread("img2.jpg ")

# A-Erzeugung eines KAZE-Detektors
akaze = cv2.AKAZE_create()                                

#Merkmalserkennung und Merkmalsvektorberechnung
kp1, des1 = akaze.detectAndCompute(img1, None)
kp2, des2 = akaze.detectAndCompute(img2, None)

# Brute-Force Matcher-Generierung
bf = cv2.BFMatcher()

#Brute-Feature-Mengenvektoren-Matching mit Force & KNN
matches = bf.knnMatch(des1, des2, k=2)

#Daten ausdünnen
ratio = 0.5
good = []
for m, n in matches:
    if m.distance < ratio * n.distance:
        good.append([m])

#Zeichnen Sie entsprechende Feature-Punkte
img3 = cv2.drawMatchesKnn(img1, kp1, img2, kp2, good[], None, flags=2)

#Bildschirm
cv2.imshow('img', img3)

#Drücken Sie die Taste, um den Vorgang abzuschließen
cv2.waitKey(0)
cv2.destroyAllWindows()

Übereinstimmendes Ergebnis

In dem von D. Lowe vorgeschlagenen Verhältnis-Test werden die Übereinstimmungsergebnisse ausgedünnt und angezeigt.

lowe.py


#Daten ausdünnen
ratio = 0.5
lowe = []
for m, n in matches:
    if m.distance < ratio * n.distance:
        lowe.append([m])

#Zeichnen Sie entsprechende Feature-Punkte
img3 = cv2.drawMatchesKnn(img1, kp1, img2, kp2, lowe[], None, flags=2)

Diese Methode gibt Ihnen eine visuelle Vorstellung vom Übereinstimmungsstatus des gesamten Bildes. In diesem Test scheint es keine falsch positiven Ergebnisse zu geben.

match_result.png

Lassen Sie uns einen Teil des Codes so ändern, dass nur diejenigen mit einem guten Übereinstimmungsstatus zwischen den Feature-Mengen angezeigt werden.

knn_good.py


#Sortieren Sie Features nach Übereinstimmungsstatus
good = sorted(matches, key = lambda x : x[1].distance)

#Zeichnen Sie entsprechende Feature-Punkte
img3 = cv2.drawMatchesKnn(img1, kp1, img2, kp2, good[:30], None, flags=2)

match_good.png

Eine andere Merkmalsmenge wurde gezeichnet. Dieses Mal stimmt die Merkmalsmenge, da sie verteilt ist, als Ganzes überein. Bei einem Bild, bei dem die Merkmalspunkte teilweise verzerrt sind, werden diejenigen mit einem guten Übereinstimmungsstatus dort konzentriert. ..

KeyPoint (Feature-Point-Objekt)

Attribut Inhalt
pt Punkt (x, y)
size Merkmalspunktdurchmesser
angle [0, 360)Winkelbereich. Die y-Achse ist nach unten und im Uhrzeigersinn. Wenn es nicht berechnet werden kann-1。
response Merkmalspunktstärke
octave Pyramidenebene, die Merkmalspunkte erkannt hat
class_id ID der Klasse, zu der der Feature-Point gehört

DMatch (übereinstimmendes Ergebnisobjekt)

Die folgenden Elemente werden in DMatch gespeichert, da die Merkmalsmengen übereinstimmen.

Attribut Inhalt
distance Abstand zwischen Merkmalsmengen. Je näher die Entfernung, desto besser das Spiel.
trainIdx Index der Trainingsfunktionen
queryIdx Abfragefeature-Index
imgIdx Trainingsbildindex

Recommended Posts

Feature Matching mit OpenCV 3 und Python 3 (A-KAZE, KNN)
Leuchtendes Leben mit Python und OpenCV
Neuronales Netzwerk mit OpenCV 3 und Python 3
Binarisierung mit OpenCV / Python
Installieren Sie OpenCV 4.0 und Python 3.7 unter Windows 10 mit Anaconda
Extrahieren Sie Feature-Punkte mit OpenCV3 und Python3 (AgastFeature, FAST, GFTT, MSER, AKAZE, BRISK, KAZE, ORB, SimpleBlob, SIFT).
[Python] Webkamera-Rahmengröße und FPS-Einstellungen mit OpenCV
Laden / Anzeigen und Beschleunigen von GIF mit Python [OpenCV]
Programmieren mit Python und Tkinter
Ver- und Entschlüsselung mit Python
"Apple-Verarbeitung" mit OpenCV3 + Python3
Python und Hardware-Verwenden von RS232C mit Python-
Bildbearbeitung mit Python OpenCV
Kameraerfassung mit Python + OpenCV
[Python] Verwenden von OpenCV mit Python (Basic)
Gesichtserkennung mit Python + OpenCV
Python mit Pyenv und Venv
Verwenden von OpenCV mit Python @Mac
Funktioniert mit Python und R.
Konvertieren Sie Videos mit ffmpeg + python + opencv in Schwarzweiß
Kommunizieren Sie mit FX-5204PS mit Python und PyUSB
Umgebungskonstruktion von Python und OpenCV
Roboter läuft mit Arduino und Python
Installieren Sie Python 2.7.9 und Python 3.4.x mit pip.
AM-Modulation und Demodulation mit Python
Scraping mit Node, Ruby und Python
[Python] Verwenden von OpenCV mit Python (Bildtransformation)
Scraping mit Python, Selen und Chromedriver
[Python] Verwenden von OpenCV mit Python (Kantenerkennung)
Kratzen mit Python und schöner Suppe
JSON-Codierung und -Decodierung mit Python
Hadoop-Einführung und MapReduce mit Python
Lesen und Schreiben von NetCDF mit Python
Versuchen Sie die Gesichtserkennung mit Python + OpenCV
Schneiden Sie das Gesicht mit Python + OpenCV aus
Gesichtserkennung mit Kamera mit opencv3 + python2.7
OpenCV-Funktionserkennung mit Google Colaboratory
Laden Sie das GIF-Bild mit Python + OpenCV
Lesen und Schreiben von CSV mit Python
Finden Sie Bildähnlichkeit mit Python + OpenCV
Verwenden Sie OpenCV mit Python 3 in Window
Mehrfachintegration mit Python und Sympy
Zeichnen Sie eine Illustration mit Python + OpenCV
Koexistenz von Python2 und 3 mit CircleCI (1.0)
Verfolgen Sie Baseballbälle mit Python + OpenCV
Graphbasierte Segmentierung mit Python + OpenCV
Zeichnen Sie Figuren mit OpenCV und PIL
Sugoroku-Spiel und Zusatzspiel mit Python
FM-Modulation und Demodulation mit Python
Zeichnen Sie einen Pfeil (Vektor) mit opencv / python
Grundlegendes Studium von OpenCV mit Python
Automatische Bildinterpolation mit OpenCV und Python (Fast Marching Method, Navier-Stokes)
Erstellen Sie eine gestreifte Illusion mit Gammakorrektur für Python3 und openCV3
So erstellen Sie eine Überwachungskamera (Überwachungskamera) mit Opencv und Python
Erstellen Sie mit Python und OpenCV ein einfaches OMR (Mark Sheet Reader)
Zeichnen Sie eine Aquarellillusion mit Kantenerkennung in Python3 und openCV3
Objektextraktion im Bild durch Mustervergleich mit OpenCV mit Python
Mit Python und OpenCV lassen Sie Unschärfevideos wie Festkommakameras aussehen
[Python] Versuchen Sie, Zeichen aus Bildern mit OpenCV und pyocr zu erkennen