Maciej Nalewaj,
Dariusz Janny,

laboratorium

Laboratorium: Rozpoznawanie obrazów

Raport zadania

Temat projektu: Śledzenie ruchu pojazdów na skrzyżowaniach.




    Spis treści dokumentu:

    1. Cel projektu
    2. Osadzenie projektu w dziedzinie rozpoznawania obrazów
    3. Proponowane podejście
    4. Przewidywane trudności, problemy
    5. Proponowane środki zaradcze
    6. Przewidywane środowisko realizacji projektu
    7. Parametry programu
    8. Analiza i wyniki
    9. Strona projektu



  1. Cel projektu
    1. Ogólny cel

      Głównym celem projektu jest śledzenie, identyfikacja i wizualizacja ruchu pojazdów na skrzyżowaniach dróg miejskich.
      Analizując ruch pojazdów na skrzyżowaniu można dokładnie przebadać ich zachowanie, jak i wykroczenia, których mogą się oni dopuścić. Z analizowanej sekwencji video interesują nas tylko te pojazdy, które się poruszają. Nie będziemy więc brali po uwagę inne poruszające sie obiekty do których możemy zaliczyć: rowerzystów, pieszych.

    2. Słowa kluczowe

      wykryanie ruchu(ang. motion detection), lokalizacja obiektów(ang. localisation of objects), inicjalizacja śledzenia(ang. initialisation for tracking), śledzenie obiektów(ang. tracking of vehicles).

    3. Kryterium oceny skuteczności systemu

      • I kryterium

        W projekcie tym pierwszym kryterium, które będziemy brali pod uwagę, to ocena prawidłowości śledzenia obiektów. Wyznaczymy je, jako stosunek liczby dobrze śledzonych pojazdów do liczby rzeczywiście poruszających się pojazdów. Kryterium to może zostać rozstrzygnięte tylko w sposób obiektywny.

      • II kryterium

        Drugim kryterium jest trafność rozróżnienia pojazdów od pieszych i innych poruszających się obiektów. Wskaźnik ten wyznaczymy jako stosunek źle zidentyfikowanych obiektów do liczby wszystkich ruchomych obiektów. Kryterium to, podobnie jak poprzednie może zostać rozstrzygnięte w sposób obiektywny.

    4. Dane wejściowe

      Dane wejściowe zaczerpnęliśmy ze strony: http://i21www.ira.uka.de/image_sequences/ (dane z 'Institut für Algorithmen und Kognitive Systeme').
      Są to kilkusekundowe sekwencje video w formacie AVI, lub MPEG zarejestrowane przez kamery zainstalowane na różnych skrzyżowaniach. Przeważnie sekwencje te są czarno-białe(obrazy w skali szarości), dlatego najprawdopodobniej będziemy operować tylko na sekwencjach czarno-białych(w skali szarości). Uważamy, że algorytm wykrywający, śledzący poruszające się obiekty będzie działał poprawnie dla obrazów w skali szarości, jak i kolorowych (sekwencje te będziemy analizować po transformacji z obrazu kolorowego do czarno-białego).

      Dodatkowo korzystaliśmy z sekwencji nagranych w ramach zajęć Przetwarzanie Obrazów.

      Wszystkie sekwencje wideo zostaną umieszczone na płycie CD. Dodatkowo można je znaleźć pod adresem

      Dodatkowo korzystaliśmy z sekwencji nagranych w ramach zajęć Przetwarzanie Obrazów.

      Wszystkie sekwencje zostały odpowiednio przygotowane. Polegało to na ich kompresji standardowym kodekiem DivX 5.11. Krok ten poczyniliśmy w celu ujednolicenia danych wejściowych i konieczności instalowania dodaktowych kodeków.

      http://fanthom.math.put.poznan.pl/~janny/download/ro/
      Login oraz hasło do wiadomości prowadzącego oraz autorów.

      Poniżej zamieszczamy kilka przykładów obrazów z sekwencji video:





  2. Osadzenie projektu w dziedzinie rozpoznawania obrazów

  3. Proponowane podejście
    1. Pierwotnie planowane

      Początkowo planowaliśmy następujące podejście:

      • ekstrakcja tła,

      • lokalizacja poruszających się obiektów (różnica między analizowanym obrazem a tłem),

      • ekstrakcja cech poruszających się obiektów (wielkość, kolor),

      • detekcja trasy pokonanej przez obiekty (odczyt współrzędnych obiektów w poszczególnych klatkach),

      • wizualizacja trasy pokonanej przez obiekty (na wcześniej dowolnej klatce, lub tle);

      Jednak biorąc pod uwagę słabą jakość filmów i inne problemy wynikające np. z drgania kamery postanowiliśmy, że nasz system oprzemy o algorytm wyznaczania wektorów ruchu.

    2. Aktualnie zatwierdzone

      • wyznaczenie wektorów ruchu,

      • ustalenie lokalizacji poruszających się pojazdów na podstawie analizy skupiska wektorów o podobnych wartościach w pierwszych 2, albo 3 klatkach(dobór liczby klatek w wyniku uzyskanych pomiarów optymalizacyjnych),

      • ekstrakcja cech znalezionych obiektów (kształt, kolor(y)),

      • filtracja obiektów, które nie są pojazdami (np. małe obiekty - to najprawdopodobniej będą piesi lub rowerzyści),

      • śledzenie obiektów (pojazdów) na podstawie wektorów ruchu i uprzednio wyekstrachowanych cech oraz zapamiętywanie trasy,

      • wizualizacja trasy pokonanej przez obiekty (na dowolnej klatce wejściowej sekwencji);


  4. Przewidywane trudności, problemy

  5. Proponowane środki zaradcze

  6. Przewidywane środowisko realizacji projektu:
    1. Środowisko:

      Projekt będziemy realizowali w środowisku Visual C++ 6.0 ponieważ, trochę znamy je z doświadczenia, jest to bardzo dobre narzędzie deweloperskie, a poza tym jest ono dostępne na naszej uczelni - licencja na oprogramowanie.

    2. Biblioteka:

      Zrezygnowaliśmy z wykorzystania biblioteki DirectX 9.0b do obsługi sekwencji multimedialnych ze względu na jej stopień skomplikowania.
      Zamiast tego postanowiliśmy wykorzystać dostępną dla wszystkich bibliotekę OpenCV, czyli Intel® Open Source Computer Vision Library. Jest to zbiór  funkcji w C, kilka  klas napisanych w C++, które implementują kilka popularnych algorytmów z dziedziny Image Processing and Computer Vision.
      Adres strony projektu: http://cimg.sourceforge.net/
    3. Interfejs graficzny:

      Możliwość oglądania poszczególnych klatek i wizualizacja wyznaczonych trajektorii pojazdów. Znalezione obiekty będą zaznaczane.


  7. Parametry programu
  8. Parametry, które zmieniamy (modyfikujemy) w celu dobrania jak najlepszej jakości działania programu:

    Poniżej zamieszczamy zrzut ekranu dla aplikacji:


    Aplikacja składa się z dwóch okien. Okno dolne służy do wykonywania standardowych operacji na pliku video. Są to mianowicie:



    W oknie górnym widzimy zidentyfikowane i zaznaczone poruszające się obiekty dla odtwarzanej sekwencji video.

  9. Analiza i wyniki
  10. Początkowe podejście do rozwiązania danego problemu bazujące na wykorzystaniu tylko wektorów ruchu nie jest w pełni zadowalające. Obliczenie wektorów dla oryginalnego obrazu i danej sekwencji video, mimo iż wykrywa poruszające się obiekty, wykrywa również szumy, które pojawiły się w wyniku kompresji. Dlatego też w niespodziewanym miejscu obrazu pojawiał się obiekt, który się porusza pewien krótki okres czasu.

    Wektory ruchu nie pomagają również w przypadku, gdy sekwencja wideo nagrywana jest z ruchomej kamery, czy też gdy natrafimy na nagranie z częstymi drganiami kamery.

    Zauważyliśmy, że nie jest możliwe proste rozwiązanie problemu obiektów poruszających się cały czas. Mamy tu na myśli szczególnie dynamikę drzew. Ruch gałęzi, liści jest cały czas wykrywany przez wektory ruchu. Nie jest proste rozwiązanie tego problemu. Można byłoby zamiast całego obrazu, analizować tylko regiony wybrane przez decydenta. Wadą tego rozwiązania jest zaznaczenie przez użytkownika wspomninych wyżej obszarów dla każdej sekwencji z osobna.

    W związku ze wspomnianymi wyżej problemami postanowiliśmy jednak wykorzystać w naszym programie ekstrakcję tła, aby wspomóc wektory ruchu (pierwsze podejście do problemu - pierwotnie planowane). Początkowo analizujemy całą sekwencję wideo, tak aby uzyskać tylko jedną klatkę, na której znajduje się wyznaczone tło. Cały proces można obserować na ekranie monitora.

    Algorytm polegający na wyznaczaniu tła:
    Ciekawym efektem, który zauważyliśmy w tym etapie, to całkowite pozbycie się wszelkich szumów. Bardzo dobrze można to zauważyć dla sekwencji, w której zakłóceniem jest padający śnieg. Zastosowanie samych wektorów ruchu w tym przypadku nie wnosi za wiele dla anlizowania sekwencji. Wszystkie płatki śniegu utrudniają dokładne śledzenie poruszających się obiektów.

    Poniżej przedstawiamy, choć jeszcze nie w pełni zadowalające, efekty działania programu. Aplikację można porównać do istniejącego, dołączonego do biblioteki 'OpenCV ($OPENCV_INSTALL_DIR/samples/cmotempl.c)' programu. Mimo doboru szeregu parametrów nie udało się nam tak je dobrać, aby uzyskać 100% dokładność śledzenia lub wykrywania pojazdów. Ogólnie stwierdzamy, że śledzenie i wykrywanie obiektów ma bardzo niską skuteczność.

    Porównując wspomnianą wyżej aplikację z naszą stwierdzamy, że wykrywanych obiektów, które się poruszają jest znacznie więcej. Jedynym mankamentem jest to iż, wykrywamy obiekty, które są zakłóceniem w obrazie.

    Dlatego postanowiliśmy wykorzystać znajomość tła. Obliczając różnicę między tłem a aktualnym obrazem jesteśmy w stanie określić, gdzie znajdują się obiekty ruchome. Robimy to w nastepujący sposób:
    Dzielimy obraz na małe kwadraty (8x8 pixeli). Następnie obliczamy dla każdego takiego kwadratu, ile jest punktów znacznie różniących się od tła. Jeśli ich ilość jest większa od ustalonego progu, to można stwierdzić, że znajduje się tam obiekt.
    Następnie te kwadraty grupujemy i wyznaczamy centroid każdej z grup. Analizując centra wyznaczonych obiektów wyznaczamy trajketorię obiektów. Stosujemy także inercję.
    Szczegółowy opis algorytmu zamieścimy w ostatecznym sprawozdaniu.

    W aplikacji zaznaczone są trasy zidentyfikowanych obiektów. Cały czas trasa zaznaczona jest jednym kolorem, który został zaincjalizowany, gdy obiekt pojawił się w analizowanej sekwencji.

    Kilka klatek z zaznaczonymi obiektami (widoczne wykrywanie zakłóceń):


    Kilka klatek z zaznaczonymi obiektami (po progowaniu dla algorytmu z biblioteki OpenCV):


    Kilka klatek z zaznaczonymi obiektami (po progowaniu):


    Kilka klatek z zaznaczonymi obiektami (po progowaniu i erozji+dylatacji):




    Klatki będące wynikiem działania aplikacji (wersja prawie końcowa):

    Dla przedstawionych wyżej sekwencji ważne są zaznaczone trasy obiektów.


  11. Strona projektu:
  12. Strona naszego projektu: rozpoznawanie obrazów
    download: tajny download


GG #: 3516448 Gadu-Gadu
Ostatnia modyfikacja: piątek, 4 czerwiec 2004