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.
Lassen Sie uns nun die Merkmalspunkte mit dem ORB-Algorithmus extrahieren und die extrahierten Merkmalspunkte auf dem Bild anzeigen. Der Fluss ist wie folgt.
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)
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
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
Ü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
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.
Zwei-Schritt-Methode
keypoints = detector.detect(image) descriptors = detector.compute(image, keypoints)
Ein-Schritt-Methode
keypoints, descriptors = detector.detectAndCompute(image)
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