System analizy zachowania zwierząt doświadczalnych w badaniach neurologicznych promotor: prof. dr hab. inż. A. Nowakowski konsultant: dr M. Kaczmarek, dr J. Rumiński Magdalena Mazur
Schemat systemu System będzie składał się z następujących elementów: - tor przeszkód, - kamera internetowa na statywie dająca obraz z góry, - kamera cyfrowa skierowana na moduły toru z przeszkodami wysokościowymi, - komputer z oprogramowaniem.
Budowa Systemu System będzie utworzony przy pomocy następujących platform: Builder C++ - oprogramowanie programu głównego pobierającego strumień danych z kamer, wykrywającego i analizującego ruch na obrazach oraz wysyłającego dane do bazy danych. Builder C++ jest dobrym narzędziem do pracy z grafiką, pozwala także na proste zaprojektowanie przyjaznego i łatwego w obsłudze interfejsu, MySql – baza danych, Krasnal – serwer bazy danych i PHP, HTML, PHP – interfejs bazy danych. Umożliwi to przeglądanie wyników doświadczeń z różnych miejsc, Matlab (opcjonalnie) – dokładna analiza wyników doświadczeń. Matalb jest dobrym narzędziem matematycznym, dzięki niemu możliwa będzie dokładna, statystyczna analiza doświadczeń oraz zależności niewidocznych dla obserwatora.
Schemat systemu
Schemat oprogramowania
Rozwiązania programistyczne Aplikacja stworzona jest w Borland C++ Builder 6. Można podzielić ją na kilka etapów: - przechwytywanie obrazu z urządzeń, - wczytywanie danych z bazy danych, - dzielenie filmu na obrazy bmp, - wczytywanie kolejnych obrazów, - progowanie każdego wczytanego obrazu, - znajdowanie obiektu w obrazie, - zapisywanie położenia obiektu, - pokazanie wyników doświadczenia, - zapisanie danych do bazy. Aplikacja
Rozwiązania programistyczne Progowanie obrazu: Progowanie jest to przypisanie pewnemu przedziałowi określającemu kolory poszczególnych pikseli innej wartości koloru. W programie wykorzystano próg progrowania 100, czyli 0x w skali RGB (0x – czarny, 0xFFFFFF – biały). Wszystkie piksele Posiadające wartość większą niż 100 są zamieniane na piksele białe, pozostałe są czarne. if((byte)Image1->Canvas->Pixels[a][b]>100) { Image1->Canvas->Pixels[a][b] = ; //bialy 0x00FFFFF } else { Image1->Canvas->Pixels[a][b] = 0; //czarny 0x }
Rozwiązania programistyczne Znajdowanie obiektu w obrazie Znajdowanie obiektu na obrazie może odbywać się dwoma sposobami: - wykrywanie sekwencji ciemnych pikseli w każdej klatce nagrania - wykrywanie różnicy danej klatki i klatki początkowej Wykrywanie sekwencji ciemnych pikseli w każdej klatce nagrania. Sposób ten polega na przeskanowaniu całego obrazu w celu znalezienia ciemnych pikseli. Kiedy program wykryje ciemny piksel, sprawdza, czy tworzy on większą grupę, czyli czy w jego odpowiednim sąsiedztwie znajdują się inne ciemne piksele. Jeśli zostaną spełnione te warunki, piksel ten jest rozpoznany jako część obiektu. Metoda ta wykrywa ciemne obiekty o odpowiednich wymiarach, jest odporna na błędne sklasyfikowanie np. odchodów zwierzęcia. Spowoduje poważne błędy w przypadku nieodpowiedniego wykalibrowania systemu, gdy w obszarze analizy znajdzie się np. tło lub stół.
Rozwiązania programistyczne Znajdowanie obiektu w obrazie
Rozwiązania programistyczne Zapisywanie położenia obiektu Współrzędne wszystkich pikseli sklasyfikowanych jako punkty obiektu przechowywane są w tablicy dwuwymiarowej, tablica[z][0]=a; tablica[z][1]=b; co pozwala na obliczenie środka ciężkości obiektu. sumaa+=tablica[z][0]; sumab+=tablica[z][1]; srodeka=sumaa/z; srodekb=sumab/z; Dzięki analizie położenia środka ciężkości myszy wiemy gdzie się ona znajduje, w którym module i czy nie wykazuje preferencji którejś ze stron (nie chodzi np. wciąż przy prawej ściance). Do przechowywania położenia myszy z każdej klatki używane są tzw. liczniki. Jeśli mysz znajduje się w drugim module blisko prawej ścianki, dodajemy do odpowiednich liczników wartość. Końcowe wartości liczników dają nam ogólny obraz zachowania się zwierzęcia podczas doświadczenia.