Extrahieren Sie Feature-Punkte mit OpenCV3 und Python3 (AgastFeature, FAST, GFTT, MSER, AKAZE, BRISK, KAZE, ORB, SimpleBlob, SIFT).

Einführung

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, um Standbilder zu filtern Versuchen Sie die Kantenerkennung mit OpenCV Führen Sie verschiedene Filter mit OpenCV durch (Gradient, Highpass, Laplacian, Gaussian)

● Klicken Sie hier, um Videodateien zu verarbeiten Versuchen Sie, Videos in Echtzeit mit OpenCV zu konvertieren Versuchen Sie, Webkamera- / Videokamera-Videos in Echtzeit mit OpenCV zu konvertieren

Dieses Mal werde ich versuchen, Feature-Punkte mit OpenCV zu extrahieren. Feature-Punkte werden als Basisdaten verwendet, wenn ein Panoramabild erstellt wird, indem mehrere Bilder verbunden werden oder ein optischer Fluss eines sich bewegenden Objekts mit einem Video erstellt wird.

ORB (Oriented FAST and Rotated BRIEF)、AKAZE (Accelerated KAZE)

ORB ist ein Algorithmus, der Merkmalspunkte und Merkmalsgrößen extrahiert und in Bezug auf Bewegung, Drehung und Zoom robust ist. Ursprünglich war ein Algorithmus namens SIFT neben Bewegung und Rotation auch gegenüber Zoom robust. SIFT erfordert jedoch viel Berechnung und ist langsam, sodass ein Algorithmus namens SURF mit verbesserter Geschwindigkeit herauskam. Sowohl SIFT als auch SURF sind jedoch patentiert, sodass Sie eine Patentgebühr zahlen müssen, um sie zu verwenden. Aus diesem Grund wurde 2011 ein Algorithmus namens ORB entwickelt, der robust gegenüber Bewegung, Drehung und Zoom ist, eine hohe Berechnungsgeschwindigkeit aufweist und frei verwendet werden kann.

Ab OpenCV 3.0 wird auch ein 2013 entwickelter Algorithmus namens AKAZE unterstützt. Obwohl AKAZE etwas mehr Berechnung erfordert als ORB, soll es bei der Verfolgung von Hochgeschwindigkeitskameras effektiver sein, da es in Niederfrequenz- und Hochfrequenzbereichen eine bessere Extraktionsgenauigkeit aufweist als ORB. Klicken Sie hier für ein Vergleichsvideo von AKAZE und ORB (youtube).

Die geeigneten Algorithmen variieren je nach Objekt und Aufgabe. Daher müssen sie tatsächlich angewendet und verglichen werden, welcher am besten geeignet ist. Eine Vielzahl von Studien ist erforderlich, z. B. ob die Merkmalspunkte und Merkmalsmengen erkannt werden können, ob sie innerhalb der erforderlichen Abtastzeit liegen und ob die Hardwareleistung angemessen ist.

Programm

Lassen Sie uns nun die Merkmalspunkte mit dem ORB-Algorithmus extrahieren und die extrahierten Merkmalspunkte auf dem Bild anzeigen. Der Fluss ist wie folgt.

  1. Laden Sie die Bilddatei
  2. Extrahieren Sie Feature-Punkte und Feature-Mengen mit ORB
  3. Schreiben Sie Feature-Punkte auf das Bild
  4. Zeigen Sie das Ergebnisbild an

FeatureDetection.py


import cv2

#Laden von Bilddateien
img = cv2.imread('img.jpg')

# ORB (Oriented FAST and Rotated BRIEF)
detector = cv2.ORB_create()

#Funktionserkennung
keypoints = detector.detect(img)

#Schreiben von Feature-Punkten auf das Bild
out = cv2.drawKeypoints(img, keypoints, None)

#Anzeige
cv2.imshow("keypoints", out)

Ausführungsergebnis

Wenn die Merkmalspunkte durch ORB extrahiert werden und die Merkmalspunkte dem Bild überlagert werden, ist das Ergebnis wie folgt. Für das menschliche Auge scheint die Person, die im Vordergrund auf der Straße steht, ein charakteristischer Punkt zu sein, für den Computer scheint die Person, die auf der Straße steht, nicht so charakteristisch zu sein.

orb.png                   ORB

Wenn die Merkmalspunkte mit AKAZE extrahiert und die Merkmalspunkte dem Bild überlagert wurden, wurde es wie folgt. Dies erkennt die Person, die vorne auf der Straße steht, als Merkmalspunkt.

akaze.png                   AKAZE

Übrigens war es wie folgt, wenn es in absteigender Reihenfolge der Anzahl der Merkmalspunkte angeordnet war. Die verschiedenen Optionen werden jedoch mit den Standardeinstellungen ausgeführt, und als Folge davon gibt es in diesem Bild keine tiefe Bedeutung in der Zahl.

SimpleBlobDetector < ORB < MSER < GFTT < AKAZE < KAZE < BRISK < FAST < AgastFeature

Von OpenCV 3 unterstützter Feature-Extraktionsalgorithmus

OpenCV unterstützt auch andere Algorithmen als ORB. Sie können den Algorithmus einfach durch Umschalten des Detektors des Programms ändern.

# AgastFeatureDetector detector = cv2.AgastFeatureDetector_create()

# FAST detector = cv2.FastFeatureDetector_create()

# MSER detector = cv2.MSER_create()

# AKAZE detector = cv2.AKAZE_create()

# BRISK detector = cv2.BRISK_create()

# KAZE detector = cv2.KAZE_create()

# ORB (Oriented FAST and Rotated BRIEF) detector = cv2.ORB_create()

# SimpleBlobDetector detector = cv2.SimpleBlobDetector_create()

# SIFT detector = cv2.xfeatures2d.SIFT_create()

GFTT (vereinfachte Version der Harris-Methode) verfügt über eine eigene Wrapper-Methode.

corners = cv2.goodFeaturesToTrack(image, maxCorners, qualityLevel, minDistance[, corners[, mask[, blockSize[, useHarrisDetector[, k]]]]])

Wenn Sie die Anzahl der Feature-Punkte zählen möchten, können Sie anhand der Schlüsselpunkte len () zählen.

print(len(keypoints))

ORB, GFTT, AKAZE, KAZE, BRISK, SIFT berechnen nicht nur Merkmalspunkte, sondern auch Merkmalsmengen.

Feature Point KeyPoint-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

Dies ist der Code, auf den zugegriffen werden soll.

\ # Geben Sie die Position des Arrays an i = 5 \ # Nehmen Sie eine Feature-Menge heraus keypoint = keypoints[i] \ # Greifen Sie auf jedes Attribut zu keypoint.pt keypoint.size keypoint.angle keypoint.response keypoint.octave keypoint.class_id

Einige Algorithmen scheinen nur einen Teil von KeyPoint zu verwenden. Als ich beispielsweise das Beispielbild lena.jpg mit AKAZE analysierte, wurden die Werte in pt festgelegt, Größe, Antwort, Oktave, Klassen-ID und Winkel wurden nicht verwendet.

Recommended Posts

Extrahieren Sie Feature-Punkte mit OpenCV3 und Python3 (AgastFeature, FAST, GFTT, MSER, AKAZE, BRISK, KAZE, ORB, SimpleBlob, SIFT).
Feature Matching mit OpenCV 3 und Python 3 (A-KAZE, KNN)
Automatische Bildinterpolation mit OpenCV und Python (Fast Marching Method, Navier-Stokes)
Leuchtendes Leben mit Python und OpenCV
Neuronales Netzwerk mit OpenCV 3 und Python 3