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.
** Passendes Ergebnis zeichnen **
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.
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.
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()
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.
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)
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. ..
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 |
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