Przetwarzanie i Rozpoznawanie Obrazów (2015)


Zarys planu

  1. Ćwiczenia z przetwarzania [~marzec]
  2. Projekt 1 [~kwiecień]
  3. Projekt 2 [do końca semestru]

Uwagi

  • Projekty w grupach 2 osobowych.
  • Znaczenie ma systematyczna praca i pokazywanie postępów na zajęciach.
  • Ważne ustalone terminy oddania projektów.
  • W uzasadnionych przypadkach potencjalna możliwość indywidualnego przesunięcia terminu oddania – trzeba przekonać prowadzącego, że warto dłużej czekać.

Dokumentacja

Ćwiczenia

  1. Wczytaj dowolny obrazek i go wyświetl.

  2. Przekształć kolorowy obrazek (3 kanały) na odcienie szarości (1 kanał).

    • Wczytując obrazek (funkcja imread w OpenCV/skimage) można od razu kazać przekonwertować obrazek do odcieni szarości.

  3. Napisz funkcje używane do porównywania dwóch obrazków (obrazka wzorcowego i wyniku przekształceń):

    • Pierwsza ma zwracać liczbę różniących się pikseli.
    • Druga dla obrazków binarnych ma dodatkowo liczyć liczbę pomyłek z rozbiciem na:

      1. false positive – powinno być zero a nie jest,
      2. false negative – jest zero a nie powinno być.

  4. Wczytaj specjalne obrazki zawierające przykładowe obiekty oraz pewne “zniekształcenia”.
    Nałóż na obrazek z obiektami różne szumy i gradienty.
    Przykładowe złożenia:

    • gradient nałożony na obrazek: abc + horizontal
    • (abc * 0.2 + 100) + (uniform * 0.2)

    Składając różne obrazki zwróć uwagę czy wyniki pośrednie mieszczą się w typie używanym do reprezentacji obrazka w pamięci. W zależności od sposoby składania (używanych bibliotek i/lub funkcji) wartości ostateczne i pośrednie:

    • mogą się “przekręcać” (np. 255 + 1 -> 0; 3 – 5 -> 254)
    • mogą być “nasycane” (np. 200 + 123 -> 255; 3 – 45 -> 0)

    Wiedząc, że średnia w szumie “uniform” to 127 nałóż poprawnie szum na obrazek “abc” tak aby średnia szumu dodawana do obrazka była równa zeru. W OpenCV porównaj wyniki:

    1
    2
    3
    
    Mat out1 = abc;
    out2 += uniform;
    out2 -= 127;
    1
    
    Mat out2 = abc + uniform - 127
    1
    
    Mat out3 = abc + uniform - 127 + abc - abc; // czy out2 == out3 ?
    1
    2
    3
    4
    5
    6
    7
    
    Mat abc32, uniform32; // zmienne pomocnicze o typie int
    abc.convertTo(abc32, CV_32SC1);
    uniform.convertTo(uniform32, CV_32SC1);
                    
    Mat out3 = abc32 + uniform32 - 127 + abc32 - abc32;
     
    out3.convertTo(out3, CV_8UC1); // można też przekonwertować z powrotem do typu uchar (uint8)
  5. Postaraj się wykryć obiekt(y) w obrazkach:

    • abc + (uniform - 127)
    • abc + 1.1*(uniform - 127)
    • abc + 1.5*(uniform - 127)

    Przez wykrycie należy rozumieć wygenerowanie obrazka-maski w której w miejscach gdzie jest obiekt mamy wartość większą od 0, a zera w miejscach gdzie nie ma obiektu. Do porównywania swoich wyników można wykorzystać funkcje z ćwiczenia 3.
    Potencjalnie przydatne funkcje: blur, GaussianBlur, medianBlur

  6. Wykryj obiekty w obrazku: 0.2*abc + 0.8*circular. Podobne obrazki: PiRO oraz zaszumione PiRO.
    Potencjalnie przydatne funkcje: adaptiveThreshold

  7. Dla każdego odseparowanego obiektu (np. w obrazku “abc”) oblicz jego powierzchnię. W obrazie wejściowym piksele niezerowe uznajemy za należące do obiektu.
    Potencjalnie przydatne funkcje: findContours, contourArea

  8. W obrazie binarnym występują trzy rodzaje obiektów: koła, prostokąty, trójkąty. Dla obrazu wejściowego (np. fig, fig2) opisz każdy z nich odpowiednio literą “k”, “p” i “t”.
    Potencjalnie przydatne funkcje: approxPolyDP, putText

Propozycje/sugestie projektów

Uwagi:

  • Tematy należy traktować jako pewne możliwe kierunki a nie konkretną specyfikację zadania.
  • Część tematów może być realizowany przez dwa zespoły jeśli będą one implementowały inną metodę/algorytm przetwarzania.
  • Do wielu propozycji tematu (np. wykrywanie pewnych elementów) można dodatkowo dołączyć jakieś praktyczne zastosowanie zaimplementowanej metody (np. na podstawie wykrytych elementów twarzy można spróbować klasyfikować wyrażane emocje, lub identyfikować osoby).
  • Różne artykuły i inne materiały o podobnej tematyce (np. z podanych linków) mają być głównie inspiracją do samodzielnego opracowania metody przetwarzania obrazów, ale można też bazować na zaproponowanych w nich algorytmach.
  • W każdym projekcie wskazane jest aby poszukać i odnieść się do jakiś artykułów związanych z danym tematem.

Uwagi do realizacji projektów:

  • W każdym projekcie trzeba opracować zbiór testowy i powtarzalną metodę pomiaru jakość otrzymywanych wyników.
  • W pierwszym punkcie kontrolnym (pierwsza połowa maja) oczekuję:

    • opisu problemu i proponowanego sposobu rozwiązania,
    • wyników(!) działania wstępnie zaimplementowanej metody (która zapewne będzie jeszcze dość mocno rozwijana).
  • Termin oddania całego projektu (raport + kod) to ostatnie zajęcia.
  • W ostatecznym raporcie z realizacji projektu należy umieścić m.in.:

    • dokładny opis działania metody,
    • dokładne wyniki, w szczególności wpływu istotnych parametrów opracowanej metody na otrzymywane rezultaty,
    • opis nieudanych prób wraz z opisem zauważonej przyczyny problemów (aby był ślad o wykonanej pracy; ale też często z nieudanych prób można wysunąć ciekawe wnioski).

Proponowane tematy/zagadnienia:

  • Detekcja i rozpoznawanie znaków drogowych, np. The German Traffic Sign Detection Benchmark.
    Eichner, M. L., & Breckon, T. P. (2007). Integrated Speed Limit Detection and Recognition from Real-Time Video.
  • Wykrywanie charakterystycznych elementów jakiś obiektów (gdzie można uwzględniać np. wzajemne położenie):

    • części twarzy (nos, usta, oczy, itd.)
    • reflektory samochodów,
    • okna w budynkach, itp.
  • Rozpoznawanie marki/modelu samochodu (np. na podstawie wykrytych charakterystycznych elementów).
  • Detekcja i odczytanie tablic rejestracyjnych.
  • Wykrywanie obiektów o zmiennych kształtach, np. wykrywanie pieszych.
  • Wykrywanie obiektów w zdjęciach lotniczych (domy, samochody, drogi, itp.)
  • Estymacja modelu 3D twarzy z pojedynczego zdjęcia lub sekwencji zdjęć zrobionych pod różnymi kątami.
    Kemelmacher-Shlizerman, I., & Basri, R. (2011). 3D face reconstruction from a single image using a single reference face shape. IEEE Transactions on Pattern Analysis and Machine Intelligence, 33(2), 394–405. doi:10.1109/TPAMI.2010.63
    Vetter, T., & Blanz, V. (1998). Estimating coloured 3D face models from single images: An example based approach. Computer Vision—ECCV’98, II, 499–513.
  • Estymacja modelu 3D budynków (lub innego rodzaju obiektu) na podstawie zbioru zdjęć zrobionych z różnych stron.
  • Śledzenie dowolnego obiektu wskazanego przez użytkownika w sekwencji wideo, np. TLD, Structure Preserving Object Tracker.
    Przykładowe linki do zbiorów danych: BoBoT, TLD dataset, VIVID
  • Rozpoznawanie i śledzenie obiektów z góry określonej klasy (np. samochody, osoby) w sekwencji wideo (i np. ich zliczanie).
  • Wykrywanie i śledzenie wielu obiektów, np. przykładowy filmik

  • Analiza/klasyfikowanie obrazów medycznych, np. mammogramów (próba klasyfikacji na podstawie cech teksturalnych)

Inne propozycje tematów z poprzednich lat można znaleźć tutaj.