Computer Vision-projecten
Over
Deze repo toont alle coderingsprojecten (labs) die Mehmet en Jean hebben gewerkt aan tijdens hun inschrijving voor CSCI437 tijdens het herfstsemester van 2020 aan de Colorado School of Mines, en beslaat de periode van 28 augustus 2020 tot 14 december 2020. Deze labs boden een uitgebreid platform om Python, OpenCV en basisconcepten van computer vision te leren.
Over de les
Ik volgde Inleiding tot Computer Vision (CSCI437) tijdens het herfstsemester van 2020. In die tijd gaven Dr. William Hoff en Dr. Tom Williams les aan de klas. CSCI437. Hier is de officiële cursusbeschrijving voor CSCI437:
(I) Computer vision is het proces waarbij computers worden gebruikt om beelden vast te leggen, beelden te transformeren en symbolische beschrijvingen uit beelden te extraheren. Deze cursus biedt een inleiding tot dit vakgebied en behandelt onderwerpen als beeldvorming, feature-extractie, lokalisatieschatting en objectherkenning. Ontwerpvermogen en praktijkprojecten krijgen de nadruk, met gebruik van populaire softwaretools. De cursus zal interessant zijn voor zowel degenen die meer over het onderwerp willen leren als voor degenen die gewoon computerafbeeldingstechnieken willen gebruiken. Moet van senior-niveau zijn. 3 uur hoorcollege; 3 semesteruren. Vereiste voorkennis: (MATH201 of MATH334 of EENG311), en, MATH332, en, (CSCI200 of CSCI261).
Dankbetuigingen
Er zijn Python-scripts en/of codefragmenten die door de CSCI437-klasse tijdens de les, in slides of via Canvas zijn verstrekt. De CSCI437-klasse wordt gegeven aan de Colorado School of Mines. Deze labs zijn gedaan met de volgende partners:
- Jean Duong
- Mehmet Yilmaz
Labbeschrijvingen
Lab 1
Lab 1 richt zich op de basis van het gebruik van OpenCV met Python. Deelnemers moeten een Python-programma schrijven dat een videobestand inleest, vier punten die een vierkant vormen op elk frame van de video projecteert, en het vierkant simuleert dat in de verte wegzakt door de Z-coördinaat van elk punt stapsgewijs aan te passen. Daarnaast moet het framenummer op elk frame worden weergegeven, en moet de uiteindelijke video met grafische overlays worden geüpload ter beoordeling.
Lab 2
Lab 2 behandelt beeldtransformaties, met name rotaties rond de X-, Y- en Z-as met gebruik van de conventie van de “XYZ vaste hoeken”. Studenten krijgen de opdracht rotatiematrices te berekenen, homogene transformatie-matrices voor cameraposes te berekenen, een kalibratiematrix te maken en punten op een beeld te projecteren om een bekend object te vormen met behulp van OpenCV’s lijnfunctie. Het lab benadrukt het begrip van camerageometrie en transformatie-matrices in computer vision.
Lab 3
Lab 3 gaat over templates matching, waarbij studenten de opdracht krijgen een template-subafbeelding door elk frame van een videobestand te volgen met behulp van genormaliseerde kruiscorrelatie. De opdracht houdt in dat de gebruiker een template uit de eerste afbeelding van de video kan kiezen, deze template door opeenvolgende afbeeldingen kan volgen, rechthoeken kan tekenen om de locatie van de template op elke afbeelding aan te geven, en een uitvoervideobestand kan maken om deze locaties te tonen. Studenten worden aangemoedigd te experimenteren met verschillende templates om te begrijpen welke de beste tracking mogelijk maakt en waarom, en om de waargenomen correlatiescores te bespreken wanneer matches correct worden geïdentificeerd.
Lab 4
Lab 4 richt zich op kleursegmentatie met behulp van de HSV-kleurruimte, een techniek die in de colleges werd besproken vanwege de effectiviteit bij het verwerken van kleurenbeelden. Studenten krijgen de opdracht drempeloperaties toe te passen om stoplichtsignaalpixels uit aangeboden afbeeldingen te segmenteren, met behulp van een Python/OpenCV-programma. De opdracht vereist het vinden van drempelwaarden die stoplichtsignaalpixels het beste detecteren, morfologische operaties uit te voeren om het resultaat op te schonen, en de gesegmenteerde afbeeldingen samen met het Python-programma en de gebruikte parameters voor drempel- en morfologische operaties in te leveren.
Lab 5
Lab 5 omvat de taak om een nieuwe beeldtextuur in een specifiek gebied van een bestaand beeld in te voegen op een manier dat de projectie correct lijkt. Dit proces, bekend als vlakvervanging, vereist dat studenten technieken voor projectieve transformatie (homografie) gebruiken om een nieuw beeld op een vlak gebied van een bestaand beeld te mappen. Het lab benadrukt de praktische toepassing van homografie om beeldinhoud te wijzigen terwijl de perspectiefcorrectheid behouden blijft. Studenten moeten het originele beeld, het beeld met de vervangende textuur, het gecombineerde beeld en hun Python-programma indienen als onderdeel van hun labinlevering.
Lab 6
Lab 6 instrueert studenten een doelwit te detecteren en de pose ervan te berekenen, bestaande uit vijf contrasterende concentrische cirkels (CCC’s) in een afbeelding. De taak omvat het gebruik van OpenCV om CCC-doelwitten te detecteren, ze correct te ordenen, de pose te berekenen met OpenCV’s solvePnP()-functie, en de assen van het coördinatenstelsel en de pose op de afbeelding te tekenen. Het lab benadrukt de toepassing van concepten zoals doelwitdetectie, poseschatting en visuele uitvoeropmaak in computer vision.
Lab 7
Lab 7 is gericht op de detectie en matching van SIFT-features tussen afbeeldingen. Het doel is om correcte matches van SIFT-features van de ene afbeelding naar de andere te identificeren en de nauwkeurigheid van deze matches te analyseren. Het lab omvat het gebruik van gegeven Python-code en afbeeldingen uit een dataset, het aanpassen van algoritmeparameters om de matchdetectie te optimaliseren, en het berekenen van precisie- en recall-metrieken om de prestaties van het feature-matchingproces te evalueren. Studenten moeten hun Python-programma en de berekende precisie- en recall-waarden voor verschillende parameterinstellingen inleveren.
Lab 8
Lab 8 richt zich op objectdetectie met behulp van feature matching en het fitten van een affiene transformatie om objecten uit een trainingafbeelding te detecteren en over te leggen op een queryafbeelding. Het lab omvat het detecteren van het object in verschillende scenario’s, het aanpassen van de drempel voor het aantal inlier-matches om valse positieven te verminderen, en het berekenen van precisie-, recall- en nauwkeurigheidsmetriek om de prestaties van het objectdetectiesysteem te evalueren. Studenten moeten de aangeboden Python-code wijzigen en uitvoeren, de prestaties van het systeem onder verschillende omstandigheden analyseren, en hun bevindingen en aangepaste code inleveren.
Lab 9
Lab 9 omvat het plaatsen van annotatiepunten op een object binnen een trainingafbeelding en het automatisch correct weergeven van die punten op het object in daaropvolgende queryafbeeldingen. Dit lab benadrukt feature-extractie, matching met behulp van de ratio-test om dubbelzinnige matches te elimineren, het fitten van een 2D-affiene transformatie met behulp van RANSAC om uitschieters te elimineren, en het toepassen van de transformatie om annotatiepunten van de training- naar de queryafbeeldingen te mappen. De kritieke taak is het aanpassen van de drempel voor het aantal inlier-matches om een evenwicht te vinden tussen valse positieven en negatieven, met als doel de hoogste nauwkeurigheid bij het correct classificeren van afbeeldingen.
Lab 10
Lab 10 is gewijd aan het gebruik van de Hough-transformatie om lijnsegmenten te vinden en sets van parallelle lijnen binnen een afbeelding te identificeren. Het maakt gebruik van de probabilistische Hough-transformatie via OpenCV’s cv2.HoughLinesP()-functie om lijnsegmenten te detecteren die worden weergegeven door hun eindpunten. Het lab omvat ook het identificeren van verdwijnpunten door de richtingsvectoren van deze lijnsegmenten te analyseren, met als doel de oriëntatie van parallelle lijnen in 3D-ruimte te begrijpen terwijl ze verschijnen in het 2D-beeldvlak. Studenten krijgen de opdracht testafbeeldingen te verwerken om parallelle lijnsegmenten te vinden, te experimenteren met parameters om de detectie te optimaliseren, en hun resultaten samen met een Python-programma in te leveren.
Opmerkingen
- Je hebt de volgende externe Python-pakketten nodig om deze scripts/labs uit te voeren: cv2 en numpy.
- Voor sommige van deze labs moet je mogelijk een specifieke versie van cv2 gebruiken. Helaas waren de vereisten niet gedocumenteerd, dus je zult dit zelf moeten uitzoeken. Als je het uitzoekt of vastloopt, meld het dan alstublieft via het issues-formulier.