Computer Vision Projekte

GitHub-Repo des Projekts

Über

Dieses Repo zeigt alle Programmierprojekte (Labore), an denen Mehmet und Jean während ihrer Einschreibung in CSCI437 im Herbstsemester 2020 an der Colorado School of Mines gearbeitet haben, und deckt den Zeitraum vom 28. August 2020 bis zum 14. Dezember 2020 ab. Diese Labore boten eine umfassende Plattform zum Lernen von Python, OpenCV und grundlegenden Konzepten der Computer Vision.

Über den Kurs

Ich habe Einführung in die Computer Vision (CSCI437) während des Herbstsemesters 2020 belegt. In dieser Zeit unterrichteten Dr. William Hoff und Dr. Tom Williams den Kurs CSCI437. Hier ist die offizielle Kursbeschreibung für CSCI437:

(I) Computer Vision ist der Prozess, Computer zu verwenden, um Bilder zu erfassen, Bilder zu transformieren und symbolische Beschreibungen aus Bildern zu extrahieren. Dieser Kurs bietet eine Einführung in dieses Gebiet und behandelt Themen wie Bildbildung, Merkmalsextraktion, Standortschätzung und Objekterkennung. Die Entwurfsfähigkeit und praktische Projekte werden betont, unter Verwendung beliebter Software-Tools. Der Kurs wird sowohl für diejenigen von Interesse sein, die mehr über das Thema erfahren möchten, als auch für diejenigen, die einfach Computerbildtechniken nutzen möchten. Muss im Senior-Level stehen. 3 Stunden Vorlesung; 3 Semesterstunden. Voraussetzung: (MATH201 oder MATH334 oder EENG311), und, MATH332, und, (CSCI200 oder CSCI261).

Credits

Es gibt Python-Skripte und/oder Codeabschnitte, die von der CSCI437-Klasse während der Vorlesung, in Folien oder über Canvas bereitgestellt wurden. Die CSCI437-Klasse wird an der Colorado School of Mines angeboten. Diese Labore wurden mit den folgenden Partnern durchgeführt:

  • Jean Duong
  • Mehmet Yilmaz

Laborbeschreibungen

Labor 1

Labor 1 konzentriert sich auf die Grundlagen der Verwendung von OpenCV mit Python. Die Teilnehmer sollen ein Python-Programm schreiben, das eine Videodatei liest, vier Punkte, die ein Quadrat bilden, auf jeden Frame des Videos projiziert und das Quadrat simuliert, das sich in die Ferne zurückzieht, indem die Z-Koordinate jedes Punktes schrittweise angepasst wird. Darüber hinaus soll die Frame-Nummer auf jedem Frame angezeigt werden, und das endgültige Video mit grafischen Überlagerungen soll zur Bewertung hochgeladen werden.

Labor 2

Labor 2 befasst sich mit Bildtransformationen, insbesondere mit Drehungen um die X-, Y- und Z-Achsen unter Verwendung der Konvention “XYZ feste Winkel”. Die Studierenden sind damit beauftragt, Rotationsmatrizen zu berechnen, homogene Transformationsmatrizen für Kamerapositionen zu berechnen, eine Kalibrierungsmatrix zu erstellen und Punkte auf ein Bild zu projizieren, um ein bekanntes Objekt unter Verwendung der Linienfunktion von OpenCV zu bilden. Das Labor betont das Verständnis der Kamerageometrie und der Transformationsmatrizen in der Computer Vision.

Labor 3

Labor 3 handelt von der Template-Matching, bei der die Studierenden beauftragt sind, ein Template-Teilbild durch jeden Frame einer Videodatei mithilfe der normalisierten Kreuzkorrelation zu verfolgen. Die Aufgabe besteht darin, dem Benutzer zu ermöglichen, ein Template aus dem ersten Bild des Films auszuwählen, dieses Template über nachfolgende Bilder zu verfolgen, Rechtecke zu zeichnen, um den Standort des Templates auf jedem Bild anzuzeigen, und eine Ausgabedatei zu erstellen, um diese Standorte zu zeigen. Die Studierenden werden ermutigt, mit verschiedenen Templates zu experimentieren, um zu verstehen, welches die beste Verfolgung ermöglicht und warum, und die beobachteten Korrelationswerte zu diskutieren, wenn Übereinstimmungen korrekt identifiziert werden.

Labor 4

Labor 4 konzentriert sich auf die Farbssegmentierung unter Verwendung des HSV-Farbraums, einer Technik, die in den Vorlesungen aufgrund ihrer Effektivität bei der Verarbeitung von Farbbildern diskutiert wurde. Die Studierenden sind damit beauftragt, Schwellenwertoperationen anzuwenden, um Stoppschild-Pixel aus bereitgestellten Bildern zu segmentieren, unter Verwendung eines Python/OpenCV-Programms. Die Aufgabe erfordert das Finden von Schwellenwerten, die Stoppschild-Pixel am besten erkennen, morphologische Operationen durchzuführen, um das Ergebnis zu bereinigen, und die segmentierten Bilder zusammen mit dem Python-Programm und den verwendeten Schwellenwert- und morphologischen Operationsparametern einzureichen.

Labor 5

Labor 5 beinhaltet die Aufgabe, eine neue Bildtextur in einem bestimmten Bereich eines bestehenden Bildes so einzufügen, dass die Projektion korrekt aussieht. Dieser Prozess, bekannt als Flächenersetzung, erfordert von den Studierenden, projektive Transformations (Homographie)-Techniken zu verwenden, um ein neues Bild auf einen planaren Bereich eines bestehenden Bildes zu kartieren. Das Labor betont die praktische Anwendung von Homographie zur Modifikation des Bildinhalts bei gleichzeitiger Wahrung der perspektivischen Korrektheit. Die Studierenden sollen das Originalbild, das Bild mit der ersetzten Textur, das kombinierte Bild und ihr Python-Programm als Teil ihrer Laborabgabe einreichen.

Labor 6

Labor 6 weist die Studierenden an, die Pose eines Ziels zu erkennen und zu berechnen, das aus fünf kontrastierenden konzentrischen Kreisen (CCCs) in einem Bild besteht. Die Aufgabe besteht darin, OpenCV zu verwenden, um CCC-Ziele zu erkennen, sie korrekt anzuordnen, die Pose mit der Funktion solvePnP() von OpenCV zu berechnen und die Koordinatenachsen und die Pose auf das Bild zu zeichnen. Das Labor betont die Anwendung von Konzepten wie Zielerkennung, Posenabschätzung und visueller Ausgabeformatierung in der Computer Vision.

Labor 7

Labor 7 konzentriert sich auf die Erkennung und das Matching von SIFT-Features zwischen Bildern. Das Ziel ist es, korrekte Übereinstimmungen von SIFT-Features von einem Bild zu einem anderen zu identifizieren und die Genauigkeit dieser Übereinstimmungen zu analysieren. Das Labor beinhaltet die Verwendung von gegebenem Python-Code und Bildern aus einem Datensatz, das Anpassen von Algorithmusparametern zur Optimierung der Übereinstimmungsdetektion und das Berechnen von Präzisions- und Rückrufmetriken zur Bewertung der Leistung des Feature-Matching-Prozesses. Die Studierenden sind verpflichtet, ihr Python-Programm und die berechneten Präzisions- und Rückrufwerte für verschiedene Parameter-Einstellungen einzureichen.

Labor 8

Labor 8 konzentriert sich auf die Objekterkennung unter Verwendung von Feature-Matching und der Anpassung von affinen Transformationen, um Objekte aus einem Trainingsbild auf ein Abfragebild zu erkennen und zu überlagern. Das Labor beinhaltet die Erkennung des Objekts in verschiedenen Szenarien, das Anpassen des Schwellenwerts für die Anzahl der Inlier-Matches, um falsch-positive Ergebnisse zu reduzieren, und das Berechnen von Präzisions-, Rückruf- und Genauigkeitsmetriken zur Bewertung der Leistung des Objekterkennungssystems. Die Studierenden sollen den bereitgestellten Python-Code modifizieren und ausführen, die Leistung des Systems unter verschiedenen Bedingungen analysieren und ihre Ergebnisse und den modifizierten Code einreichen.

Labor 9

Labor 9 beinhaltet das Platzieren von Annotationspunkten auf einem Objekt innerhalb eines Trainingsbildes und das automatische korrekte Anzeigen dieser Punkte auf dem Objekt in nachfolgenden Abfragebildern. Dieses Labor betont die Merkmalsextraktion, das Matching unter Verwendung des Verhältnis-Tests zur Eliminierung mehrdeutiger Übereinstimmungen, das Anpassen einer 2D-affinen Transformation unter Verwendung von RANSAC zur Eliminierung von Ausreißern und das Anwenden der Transformation, um Annotationspunkte von den Trainings- zu den Abfragebildern zu kartieren. Die kritische Aufgabe besteht darin, die Schwellenzahl der Inlier-Matches anzupassen, um ein Gleichgewicht zwischen falsch-positiven und falsch-negativen Ergebnissen zu erreichen, mit dem Ziel, die höchste Genauigkeit bei der korrekten Klassifizierung von Bildern zu erzielen.

Labor 10

Labor 10 ist der Verwendung der Hough-Transformation gewidmet, um Liniensegmente zu finden und Sätze paralleler Linien innerhalb eines Bildes zu identifizieren. Es nutzt die probabilistische Hough-Transformation über die Funktion cv2.HoughLinesP() von OpenCV, um Liniensegmente zu erkennen, die durch ihre Endpunkte dargestellt werden. Das Labor beinhaltet auch die Identifizierung von Fluchtpunkten durch die Analyse der Richtungsvektoren dieser Liniensegmente, mit dem Ziel, die Orientierung paralleler Linien im 3D-Raum zu verstehen, wie sie im 2D-Bildraum erscheinen. Die Studierenden sind damit beauftragt, Testbilder zu verarbeiten, um parallele Liniensegmente zu finden, mit Parametern zu experimentieren, um die Erkennung zu optimieren, und ihre Ergebnisse zusammen mit einem Python-Programm einzureichen.

Hinweise

  • Sie benötigen die folgenden 3rd-Party-Python-Pakete, um diese Skripte/Labore auszuführen: cv2 & numpy.
  • Einige dieser Labore könnten erfordern, dass Sie eine spezifische Version von cv2 verwenden. Leider wurden die Anforderungen nicht dokumentiert, sodass Sie dies selbst herausfinden müssen. Wenn Sie es herausfinden oder feststecken, melden Sie es bitte im Issues-Formular.