Projekty z Wizji Komputerowej

Repozytorium GitHub projektu

O projekcie

To repozytorium prezentuje wszystkie projekty programistyczne (laboratoria), nad którymi pracowali Mehmet i Jean podczas zapisania się na CSCI437 w semestrze jesiennym 2020 na Colorado School of Mines, obejmując okres od 28 sierpnia 2020 r. do 14 grudnia 2020 r. Te laboratoria zapewniały wszechstronną platformę do nauki Pythona, OpenCV oraz podstawowych pojęć wizji komputerowej.

O przedmiocie

Brałem udział w Wprowadzeniu do Wizji Komputerowej (CSCI437) podczas semestru jesiennego 2020. W tym czasie zajęcia prowadzili dr William Hoff i dr Tom Williams. CSCI437. Oto oficjalny opis kursu 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).

Podziękowania

Istnieją skrypty Pythona i/lub fragmenty kodu, które zostały udostępnione przez zajęcia CSCI437 podczas wykładów, na slajdach lub przez Canvas. Zajęcia CSCI437 są prowadzone w Colorado School of Mines. Te laboratoria zostały wykonane z następującymi partnerami:

  • Jean Duong
  • Mehmet Yilmaz

Opisy laboratoriów

Laboratorium 1

Laboratorium 1 koncentruje się na podstawach korzystania z OpenCV w Pythonie. Oczekuje się, że uczestnicy napiszą program w Pythonie, który odczytuje plik wideo, projekuje cztery punkty tworzące kwadrat na każdą klatkę wideo i symuluje oddalanie się kwadratu w głąb poprzez stopniowe dostosowywanie współrzędnej Z każdego punktu. Dodatkowo numer klatki ma być wyświetlany na każdej klatce, a końcowy film z nałożoną grafiką ma zostać przesłany do oceny.

Laboratorium 2

Laboratorium 2 dotyczy transformacji obrazów, a konkretnie obrotów wokół osi X, Y i Z z użyciem konwencji „XYZ fixed angles”. Zadaniem studentów jest obliczenie macierzy obrotu, wyznaczenie jednorodnych macierzy transformacji dla pozycji kamery, stworzenie macierzy kalibracyjnej oraz rzutowanie punktów na obraz w celu utworzenia znanego obiektu z użyciem funkcji line w OpenCV. Laboratorium podkreśla zrozumienie geometrii kamery i macierzy transformacji w wizji komputerowej.

Laboratorium 3

Laboratorium 3 dotyczy dopasowywania szablonu, gdzie zadaniem studentów jest śledzenie podobrazu szablonu przez każdą klatkę pliku filmowego z użyciem znormalizowanej korelacji krzyżowej. Zadanie polega na umożliwieniu użytkownikowi wybrania szablonu z pierwszego obrazu filmu, śledzeniu tego szablonu w kolejnych obrazach, rysowaniu prostokątów wskazujących położenie szablonu na każdym obrazie oraz utworzeniu pliku filmu wyjściowego pokazującego te lokalizacje. Zachęca się studentów do eksperymentowania z różnymi szablonami, aby zrozumieć, który z nich umożliwia najlepsze śledzenie i dlaczego, a także do omówienia obserwowanych wyników korelacji, gdy dopasowania są poprawnie identyfikowane.

Laboratorium 4

Laboratorium 4 koncentruje się na segmentacji kolorów z użyciem przestrzeni barw HSV, techniki omawianej na wykładach ze względu na jej skuteczność w obsłudze obrazów kolorowych. Zadaniem studentów jest zastosowanie operacji progowania w celu wyodrębnienia pikseli znaku stop z dostarczonych obrazów, przy użyciu programu Python/OpenCV. Zadanie wymaga znalezienia wartości progowych najlepiej wykrywających piksele znaku stop, wykonania operacji morfologicznych w celu oczyszczenia wyniku oraz przesłania obrazów po segmentacji wraz z programem w Pythonie i użytymi parametrami progowania oraz operacji morfologicznych.

Laboratorium 5

Laboratorium 5 polega na wstawieniu nowej tekstury obrazu do określonego obszaru istniejącego obrazu w taki sposób, aby projekcja wyglądała poprawnie. Proces ten, znany jako zastępowanie płaszczyzny, wymaga od studentów użycia technik transformacji projekcyjnej (homografii) do odwzorowania nowego obrazu na płaski obszar istniejącego obrazu. Laboratorium podkreśla praktyczne zastosowanie homografii do modyfikowania zawartości obrazu przy zachowaniu poprawności perspektywy. Oczekuje się, że studenci oddadzą oryginalny obraz, obraz z zastąpioną teksturą, obraz połączony oraz swój program w Pythonie jako część oddania laboratorium.

Laboratorium 6

Laboratorium 6 instruuje studentów, aby wykryli i obliczyli pozę celu składającego się z pięciu kontrastowych współśrodkowych okręgów (CCC) na obrazie. Zadanie obejmuje użycie OpenCV do wykrywania celów CCC, odpowiedniego ich uporządkowania, obliczenia pozy za pomocą funkcji solvePnP() OpenCV oraz narysowania osi układu współrzędnych i pozy na obrazie. Laboratorium podkreśla zastosowanie takich pojęć jak wykrywanie celu, estymacja pozy i formatowanie wyników wizualnych w wizji komputerowej.

Laboratorium 7

Laboratorium 7 koncentruje się na wykrywaniu i dopasowywaniu cech SIFT między obrazami. Celem jest zidentyfikowanie poprawnych dopasowań cech SIFT z jednego obrazu do drugiego oraz analiza dokładności tych dopasowań. Laboratorium obejmuje użycie dostarczonego kodu w Pythonie i obrazów z zestawu danych, dostosowanie parametrów algorytmu w celu optymalizacji wykrywania dopasowań oraz obliczenie metryk precyzji i czułości w celu oceny wydajności procesu dopasowywania cech. Od studentów wymaga się przesłania programu w Pythonie oraz obliczonych wartości precyzji i czułości dla różnych ustawień parametrów.

Laboratorium 8

Laboratorium 8 koncentruje się na wykrywaniu obiektów z użyciem dopasowywania cech i dopasowania transformacji afinicznej w celu wykrycia i nałożenia obiektów z obrazu treningowego na obraz zapytania. Laboratorium obejmuje wykrywanie obiektu w różnych scenariuszach, dostosowanie progu liczby dopasowań inlierów w celu ograniczenia fałszywych trafień oraz obliczenie metryk precyzji, czułości i dokładności w celu oceny wydajności systemu wykrywania obiektów. Oczekuje się, że studenci zmodyfikują i uruchomią dostarczony kod w Pythonie, przeanalizują wydajność systemu w różnych warunkach oraz oddadzą swoje wnioski i zmodyfikowany kod.

Laboratorium 9

Laboratorium 9 polega na umieszczaniu punktów adnotacji na obiekcie w obrazie treningowym i automatycznym pokazywaniu tych punktów poprawnie na obiekcie w kolejnych obrazach zapytania. To laboratorium podkreśla ekstrakcję cech, dopasowywanie z użyciem testu ilorazowego w celu eliminacji niejednoznacznych dopasowań, dopasowanie dwuwymiarowej transformacji afinicznej z użyciem RANSAC w celu eliminacji odstających wartości oraz zastosowanie transformacji do odwzorowania punktów adnotacji z obrazu treningowego na obrazy zapytania. Kluczowym zadaniem jest dostosowanie progowej liczby dopasowań inlierów tak, aby zachować równowagę między fałszywymi trafieniami a fałszywymi negatywami, dążąc do najwyższej dokładności w poprawnym klasyfikowaniu obrazów.

Laboratorium 10

Laboratorium 10 poświęcone jest użyciu transformacji Hougha do znajdowania odcinków linii i identyfikowania zbiorów linii równoległych w obrazie. Wykorzystuje probabilistyczną transformację Hougha poprzez funkcję cv2.HoughLinesP() OpenCV do wykrywania odcinków linii reprezentowanych przez ich punkty końcowe. Laboratorium obejmuje również identyfikowanie punktów zbiegu poprzez analizę wektorów kierunkowych tych odcinków linii, dążąc do zrozumienia orientacji linii równoległych w przestrzeni 3D tak, jak pojawiają się one w dwuwymiarowej płaszczyźnie obrazu. Zadaniem studentów jest przetworzenie obrazów testowych w celu znalezienia równoległych odcinków linii, eksperymentowanie z parametrami w celu optymalizacji wykrywania oraz przesłanie wyników wraz z programem w Pythonie.

Uwagi

  • Do uruchomienia tych skryptów/laboratoriów będziesz potrzebować następujących pakietów Pythona firm trzecich: cv2 i numpy.
  • Niektóre z tych laboratoriów mogą wymagać użycia określonej wersji cv2. Niestety wymagania nie zostały udokumentowane, więc będziesz musiał sam to ustalić. Jeśli uda Ci się to ustalić albo utkniesz, zgłoś to w formularzu zgłoszeń.