Computer-Vision-Projekte
Über
Dieses Repo zeigt alle Programmierprojekte (Labs), an denen Mehmet und Jean gearbeitet haben, während sie im Herbstsemester 2020 in CSCI437 an der Colorado School of Mines eingeschrieben waren. Es deckt den Zeitraum von 28. August 2020 bis 14. Dezember 2020 ab. Diese Labs boten eine umfassende Plattform zum Erlernen von Python, OpenCV und grundlegenden Konzepten der Computer Vision.
Über den Kurs
Ich belegte Introduction To Computer Vision (CSCI437) im Herbstsemester 2020. Während dieser Zeit unterrichteten Dr. William Hoff und Dr. Tom Williams den Kurs CSCI437. Hier ist die offizielle Kursbeschreibung für CSCI437:
(I) Computer vision is the process of using computers to acquire images, transform images, and extract symbolic descriptions from images. This course provides an introduction to this field, covering topics in image formation, feature extraction, location estimation, and object recognition. Design ability and hands-on projects will be emphasized, using popular software tools. The course will be of interest both to those who want to learn more about the subject and to those who just want to use computer imaging techniques. Must be Senior level standing. 3 hours lecture; 3 semester hours. Prerequisite: (MATH201 or MATH334 or EENG311),and,MATH332,and,(CSCI200 or CSCI261).
Credits
Es gibt Python-Skripte und/oder Codeabschnitte, die während der Vorlesungen, in Folien oder über Canvas vom CSCI437-Kurs bereitgestellt wurden. Der CSCI437-Kurs wird an der Colorado School of Mines angeboten. Diese Labs wurden mit den folgenden Partnern durchgeführt:
- Jean Duong
- Mehmet Yilmaz
Lab-Beschreibungen
Labor 1
Labor 1 konzentriert sich auf die Grundlagen der Verwendung von OpenCV mit Python. Die Teilnehmenden 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 in die Ferne zurückweicht, indem die Z-Koordinate jedes Punktes schrittweise angepasst wird. Zusätzlich soll die Frame-Nummer auf jedem Frame angezeigt werden, und das fertige Video mit grafischen Überlagerungen soll zur Bewertung hochgeladen werden.
Labor 2
Labor 2 beschäftigt sich mit Bildtransformationen, insbesondere mit Rotationen um die X-, Y- und Z-Achsen unter Verwendung der “XYZ-Festwinkel”-Konvention. Die Studierenden sollen Rotationsmatrizen berechnen, homogene Transformationsmatrizen für Kameraposen bestimmen, eine Kalibrierungsmatrix erstellen und Punkte auf ein Bild projizieren, um mit OpenCVs line-Funktion ein bekanntes Objekt zu formen. Das Labor legt Wert auf das Verständnis der Kamerageometrie und von Transformationsmatrizen in der Computer-Vision.
Labor 3
Labor 3 behandelt Template Matching, wobei die Studierenden eine Vorlage (Teilbild) durch jeden Frame einer Filmdatei mit normalisierter Kreuzkorrelation verfolgen sollen. Die Aufgabe beinhaltet, dem Benutzer zu erlauben, eine Vorlage aus dem ersten Bild des Films auszuwählen, diese Vorlage in den folgenden Bildern zu verfolgen, Rechtecke zu zeichnen, die die Position der Vorlage in jedem Bild anzeigen, und eine Ausgabefilmdatei zu erstellen, um diese Positionen zu zeigen. Die Studierenden werden ermutigt, mit verschiedenen Vorlagen zu experimentieren, um zu verstehen, welche das beste Tracking ermöglicht und warum, und die beobachteten Korrelationswerte zu diskutieren, wenn Übereinstimmungen korrekt identifiziert werden.
Labor 4
Labor 4 konzentriert sich auf Farbsegmentierung unter Verwendung des HSV-Farbraums, eine in den Vorlesungen diskutierte Technik, die sich gut für die Verarbeitung von Farbbildern eignet. Die Studierenden sollen Schwellwertoperationen anwenden, um Stoppschild-Pixel aus bereitgestellten Bildern zu segmentieren, mithilfe eines Python/OpenCV-Programms. Die Aufgabe erfordert das Finden von Schwellwerten, die Stoppschild-Pixel am besten erkennen, das Durchführen morphologischer Operationen zur Bereinigung des Ergebnisses und das Einreichen der segmentierten Bilder zusammen mit dem Python-Programm sowie den verwendeten Schwellwert- und Morphologie-Parametern.
Labor 5
Labor 5 beinhaltet die Aufgabe, eine neue Bildtextur in einen bestimmten Bereich eines vorhandenen Bildes einzufügen, sodass die Projektion korrekt aussieht. Dieser Prozess, bekannt als Ebenenersatz, erfordert, dass die Studierenden projektive Transformationen (Homographie) verwenden, um ein neues Bild auf eine planare Fläche eines vorhandenen Bildes abzubilden. Das Labor betont die praktische Anwendung von Homographien, um Bildinhalt zu verändern und dabei die perspektivische Korrektheit beizubehalten. Die Studierenden sollen das Originalbild, das Bild mit der ersetzten Textur, das kombinierte Bild und ihr Python-Programm als Teil ihrer Abgabe einreichen.
Labor 6
Labor 6 weist die Studierenden an, ein Ziel zu erkennen und seine Pose zu berechnen, das aus fünf kontrastreichen konzentrischen Kreisen (CCCs) besteht. Die Aufgabe besteht darin, OpenCV zu verwenden, um CCC-Ziele zu erkennen, sie korrekt zu ordnen, die Pose mit der OpenCV-Funktion solvePnP() zu berechnen und die Koordinatenachsen sowie die Pose in das Bild zu zeichnen. Das Labor betont die Anwendung von Konzepten wie Zielerkennung, Pose-Schätzung und visueller Ausgabeformatierung in der Computer-Vision.
Labor 7
Labor 7 dreht sich um die Erkennung und das Matching von SIFT-Merkmalen zwischen Bildern. Ziel ist es, korrekte Übereinstimmungen von SIFT-Merkmalen von einem Bild zu einem anderen zu identifizieren und die Genauigkeit dieser Übereinstimmungen zu analysieren. Das Labor beinhaltet die Verwendung des bereitgestellten Python-Codes und von Bildern aus einem Datensatz, das Anpassen von Algorithmusparametern zur Optimierung der Übereinstimmungserkennung und das Berechnen der Metriken Präzision und Recall zur Bewertung der Leistung des Merkmalsabgleichs. Die Studierenden müssen ihr Python-Programm und die berechneten Präzisions- und Recall-Werte für verschiedene Parameterkonfigurationen einreichen.
Labor 8
Labor 8 konzentriert sich auf Objekterkennung mittels Merkmalabgleich und Anpassen einer affinen Transformation, um Objekte aus einem Trainingsbild in einem Abfragebild zu erkennen und zu überlagern. Das Labor beinhaltet das Erkennen des Objekts in verschiedenen Szenarien, das Anpassen der Schwelle für die Anzahl der Inlier-Übereinstimmungen, um False Positives zu reduzieren, und das Berechnen der Metriken Präzision, Recall und Genauigkeit zur Bewertung der Leistung des Objekterkennungssystems. Die Studierenden sollen den bereitgestellten Python-Code modifizieren und ausführen, die Systemleistung unter verschiedenen Bedingungen analysieren und ihre Ergebnisse sowie 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 am Objekt in nachfolgenden Abfragebildern. Dieses Labor betont Merkmalsextraktion, Matching unter Verwendung des Ratio-Tests zur Eliminierung ambiger Übereinstimmungen, das Anpassen einer 2D-affinen Transformation mit RANSAC zur Eliminierung von Ausreißern und das Anwenden der Transformation, um Annotationspunkte vom Trainings- auf das Abfragebild abzubilden. Die kritische Aufgabe besteht darin, die Schwelle für die Anzahl der Inlier-Übereinstimmungen anzupassen, um ein Gleichgewicht zwischen False Positives und False Negatives zu finden und die höchste Genauigkeit bei der korrekten Klassifizierung von Bildern zu erreichen.
Labor 10
Labor 10 widmet sich der Verwendung der Hough-Transformation zur Findung von Liniensegmenten und zur Identifikation von Sätzen paralleler Linien innerhalb eines Bildes. Es wird die probabilistische Hough-Transformation über OpenCVs cv2.HoughLinesP()-Funktion verwendet, um Liniensegmente zu erkennen, die durch ihre Endpunkte dargestellt werden. Das Labor umfasst auch die Identifikation von Fluchtpunkten durch Analyse der Richtungsvektoren dieser Liniensegmente, mit dem Ziel, die Orientierung paralleler Linien im 3D-Raum zu verstehen, wie sie in der 2D-Bildebene erscheinen. Die Studierenden sollen Testbilder verarbeiten, um parallele Liniensegmente zu finden, mit Parametern experimentieren, um die Erkennung zu optimieren, und ihre Ergebnisse zusammen mit einem Python-Programm einreichen.
Hinweise
- Sie benötigen die folgenden 3rd-Party-Python-Pakete, um diese Skripte/Labs auszuführen: cv2 & numpy.
- Einige dieser Labs könnten erfordern, dass Sie eine bestimmte Version von cv2 verwenden. Leider wurden die Anforderungen nicht dokumentiert, daher müssen Sie das selbst herausfinden. Wenn Sie es herausfinden oder feststecken, melden Sie es bitte im Issue-Formular.