Progetti di Visione Artificiale

Repository GitHub del progetto

Informazioni

Questo repository mostra tutti i progetti di programmazione (laboratori) su cui hanno lavorato Mehmet e Jean mentre erano iscritti al corso CSCI437 durante il semestre autunnale 2020 presso la Colorado School of Mines, coprendo il periodo dal 28 agosto 2020 al 14 dicembre 2020. Questi laboratori hanno fornito una piattaforma completa per l’apprendimento di Python, OpenCV e dei concetti di base della visione artificiale.

Informazioni sul corso

Ho seguito Introduction To Computer Vision (CSCI437) durante il semestre autunnale 2020. Durante questo periodo, il Dr. William Hoff e il Dr. Tom Williams hanno tenuto il corso. CSCI437. Ecco la descrizione ufficiale del corso 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).

Crediti

Ci sono script Python e/o segmenti di codice che sono stati forniti dal corso CSCI437 durante le lezioni, nelle slide o tramite Canvas. Il corso CSCI437 è erogato alla Colorado School of Mines. Questi laboratori sono stati svolti con i seguenti partner:

  • Jean Duong
  • Mehmet Yilmaz

Descrizioni dei laboratori

Laboratorio 1

Il Laboratorio 1 si concentra sulle basi dell’utilizzo di OpenCV con Python. I partecipanti devono scrivere un programma Python che legga un file video, proietti quattro punti che formano un quadrato su ogni fotogramma del video e simuli l’allontanamento del quadrato nello spazio regolando progressivamente la coordinata Z di ciascun punto. Inoltre, il numero del fotogramma deve essere visualizzato su ciascun fotogramma e il video finale con le sovrapposizioni grafiche deve essere caricato per la valutazione.

Laboratorio 2

Il Laboratorio 2 tratta le trasformazioni delle immagini, concentrandosi specificamente sulle rotazioni attorno agli assi X, Y e Z usando la convenzione degli “angoli fissi XYZ”. Agli studenti è richiesto di calcolare matrici di rotazione, computare matrici di trasformazione omogenea per pose della camera, creare una matrice di calibrazione e proiettare punti su un’immagine per formare un oggetto noto utilizzando la funzione line di OpenCV. Il laboratorio enfatizza la comprensione della geometria della camera e delle matrici di trasformazione nella visione artificiale.

Laboratorio 3

Il Laboratorio 3 riguarda il matching di template, dove agli studenti è richiesto di tracciare un sotto-immagine template attraverso ogni fotogramma di un file video usando la correlazione incrociata normalizzata. L’assegnazione prevede di permettere all’utente di scegliere un template dalla prima immagine del filmato, tracciare questo template nelle immagini successive, disegnare rettangoli per indicare la posizione del template su ogni immagine e creare un file video di output per mostrare queste posizioni. Gli studenti sono incoraggiati a sperimentare con diversi template per capire quale consente il miglior tracciamento e perché, e a discutere i punteggi di correlazione osservati quando le corrispondenze sono correttamente identificate.

Laboratorio 4

Il Laboratorio 4 si concentra sulla segmentazione del colore usando lo spazio colore HSV, una tecnica discussa nelle lezioni per la sua efficacia nel trattamento di immagini a colori. Agli studenti è richiesto di applicare operazioni di soglia per segmentare i pixel del segnale di stop dalle immagini fornite, usando un programma Python/OpenCV. L’assegnazione richiede di trovare valori di soglia che rilevino al meglio i pixel del segnale di stop, eseguire operazioni morfologiche per pulire il risultato e inviare le immagini segmentate insieme al programma Python e ai parametri di soglia e delle operazioni morfologiche utilizzati.

Laboratorio 5

Il Laboratorio 5 prevede l’inserimento di una nuova texture immagine in una specifica area di un’immagine esistente in modo che la proiezione appaia corretta. Questo processo, noto come sostituzione del piano, richiede agli studenti di utilizzare tecniche di trasformazione proiettiva (omografia) per mappare una nuova immagine su un’area planare di un’immagine esistente. Il laboratorio enfatizza l’applicazione pratica dell’omografia per modificare il contenuto dell’immagine mantenendo la correttezza della prospettiva. Gli studenti devono presentare l’immagine originale, l’immagine con la texture sostituita, l’immagine combinata e il loro programma Python come parte della consegna del laboratorio.

Laboratorio 6

Il Laboratorio 6 istruisce gli studenti a rilevare e calcolare la posa di un bersaglio composto da cinque cerchi concentrici contrastati (CCC) in un’immagine. Il compito prevede l’uso di OpenCV per rilevare bersagli CCC, ordinarli correttamente, calcolare la posa con la funzione solvePnP() di OpenCV e disegnare gli assi delle coordinate e la posa sull’immagine. Il laboratorio enfatizza l’applicazione di concetti come il rilevamento del bersaglio, la stima della posa e la formattazione dell’output visivo nella visione artificiale.

Laboratorio 7

Il Laboratorio 7 è incentrato sul rilevamento e la corrispondenza delle caratteristiche SIFT tra immagini. L’obiettivo è identificare corrispondenze corrette di caratteristiche SIFT da un’immagine all’altra e analizzare l’accuratezza di queste corrispondenze. Il laboratorio prevede l’uso di codice Python e immagini fornite da un dataset, l’aggiustamento dei parametri dell’algoritmo per ottimizzare il rilevamento delle corrispondenze e il calcolo delle metriche di precisione e richiamo per valutare le prestazioni del processo di matching delle feature. Gli studenti devono consegnare il loro programma Python e i valori calcolati di precisione e richiamo per diverse impostazioni dei parametri.

Laboratorio 8

Il Laboratorio 8 si concentra sul rilevamento di oggetti usando il matching delle feature e l’adattamento di trasformazioni affini per rilevare e sovrapporre oggetti da un’immagine di addestramento su un’immagine di query. Il laboratorio prevede il rilevamento dell’oggetto in diversi scenari, la regolazione della soglia del numero di corrispondenze inlier per ridurre i falsi positivi e il calcolo delle metriche di precisione, richiamo e accuratezza per valutare le prestazioni del sistema di rilevamento oggetti. Agli studenti è richiesto di modificare ed eseguire il codice Python fornito, analizzare le prestazioni del sistema in diverse condizioni e presentare i loro risultati e il codice modificato.

Laboratorio 9

Il Laboratorio 9 prevede il posizionamento di punti di annotazione su un oggetto all’interno di un’immagine di addestramento e la visualizzazione automatica corretta di tali punti sull’oggetto nelle successive immagini di query. Questo laboratorio enfatizza l’estrazione delle feature, la corrispondenza usando il test del rapporto per eliminare corrispondenze ambigue, l’adattamento di una trasformazione affine 2D usando RANSAC per eliminare gli outlier e l’applicazione della trasformazione per mappare i punti di annotazione dalle immagini di addestramento a quelle di query. Il compito critico è regolare il numero soglia di corrispondenze inlier per bilanciare falsi positivi e negativi, mirando alla massima accuratezza nella classificazione corretta delle immagini.

Laboratorio 10

Il Laboratorio 10 è dedicato all’uso della trasformata di Hough per trovare segmenti di linea e identificare insiemi di linee parallele all’interno di un’immagine. Utilizza la Trasformata di Hough probabilistica tramite la funzione cv2.HoughLinesP() di OpenCV per rilevare segmenti di linea rappresentati dai loro endpoint. Il laboratorio prevede inoltre l’identificazione dei punti di fuga analizzando i vettori direzione di questi segmenti di linea, con l’obiettivo di comprendere l’orientamento delle linee parallele nello spazio 3D come appaiono nel piano immagine 2D. Agli studenti viene richiesto di processare immagini di test per trovare segmenti di linee parallele, sperimentare con i parametri per ottimizzare il rilevamento e presentare i loro risultati insieme a un programma Python.

Note

  • Avrai bisogno dei seguenti pacchetti Python di terze parti per eseguire questi script/lab: cv2 & numpy.
  • Alcuni di questi laboratori potrebbero richiedere l’uso di una specifica versione di cv2. Purtroppo, i requisiti non sono stati documentati, quindi dovrai scoprirlo da solo. Se lo scopri o sei bloccato, per favore segnalalo al modulo delle issue.