Algorytm detekcji ruchuPrzedstawiony na rysunku 5 diagram z fragmentem programu przedstawia algorytm akwizycji i przetwarzania obrazu. Sygnały wizyjne z trzech kamer uzyskiwane są z wyjścia bloku Channel 2. Blok ten odwołuje się bezpośrednio do karty NI PCI-1411. Odpowiada za rozpoczynanie i kończenie sesji urządzeń, zagospodarowanie pamięci oraz obsługę błędów. Danymi wyjściowymi są bieżące obrazy. Po starcie programu rezerwowane są obszary pamięci dla kopii bieżących obrazów (na rysunku widoczny jest bufor dla kopii drugiego kanału), które w kolejnej iteracji poddawane są porównaniu z nowymi obrazami w celu wykrycia ruchu. Dodatkowo tworzony jest obszar pamięci typu „blank” przeznaczony dla rejestrów przesuwnych. Zapobiega to sytuacji, w której podczas pierwszej iteracji nie istnieje w pamięci obraz wzorcowy.
fot. Rys. 5 Akwizycja obrazu
Rejestry przesuwne (po jednym na każdy kanał wizyjny) zapewniają przeniesienie kopii bieżącego obrazu do kolejnego kroku w celu wykorzystania go przy detekcji ruchu. Użytkownik jest w stanie zatrzymać wykonywanie programu przyciskiem STOP. Proces akwizycji obrazu zrealizowany jest analogicznie dla pozostałych dwóch kanałów wizyjnych.
Detekcja ruchuW algorytmie detekcji ruchu zastosowano porównywanie parametrów dwóch obrazów (rys. 6) – aktualnego oraz poprzedniego lub wzorcowego.
fot. Rys. 6 Akwizycja obrazu, tworzenie bufora dla obrazu oraz algorytm detekcji
Obraz poprzedni uzyskiwany jest z wyjścia rejestru przesuwnego. Jest klatka obrazu pozyskanego w poprzednim kroku. W ramach algorytmu przeprowadzone zostaje obliczenie średnich wartości intensywności pikseli dla każdej kolumny obu obrazów. Następnie obliczana jest średnia arytmetyczna we wszystkich kolumnach (liczba kolumn w tym przypadku wynosi 768). Po odjęciu obliczonych dla obu obrazów wartości uzyskiwana jest wartość liczbowa zależna od stopnia, w jakim różnią się obrazy. W rozpatrywanym przypadku doświadczalnie stwierdzono, że różnice, jakie wnoszą niedokładności przetwornika obrazu oraz szumy zawierają się w przedziale wartości od -0,5 do 0,5. Dlatego wartość bezwzględna różnicy większa od 0,5 świadczy o zaobserwowaniu ruchu. Wynikiem porównania obrazów jest binarna wartość „0” lub „1”. Algorytm porównywania wykonywany jest dla każdego toru wizyjnego oddzielnie. W ten sposób możliwe jest określenie kamery, która zaobserwowała poruszający się obiekt.
Wyświetlanie obrazu na ekranie głównymNa ekranie głównym programu wyświetlany jest obraz z jednej wybranej przez użytkownika kamery. W przypadku wystąpienia alarmu automatycznie zostaje wyświetlony obraz z kamery, która zaobserwowała poruszający się obiekt. Wybór, z którego źródła obraz ma być przekazywany do okna głównego dokonywany jest przez użytkownika w dowolnej chwili. Część algorytmu związaną wyświetlaniem obrazu pokazano na rysunku 7.
fot. Rys. 7 Selekcja sygnału wizyjnego oraz wpływ detekcji ruchu na wyświetlanie
Struktura Case przekazuje obraz z odpowiedniego toru na ekran główny. Operuje ona zmienną lokalną odnoszącą się do okna głównego o nazwie Full screen view. To, który z przypadków będzie wykonany uzależnione jest od zmiennej y. Wartość y zależna jest od zmiennych wejściowych x1, x2, x3 oraz z. Pierwsze trzy zmienne związane są z każdym z torów wizyjnych. Zmienna z zależna jest od użytkownika. Przyjmuje ona wartości indeksów kamer. Wartości x określają czy wystąpiła detekcja ruchu w odpowiadającym torze. W przypadku niewykrycia ruchu przyjmują wartość 0. Wystąpienie alarmu powoduje ustawienie wartości x na równą indeksowi kamery, która wykryła ruch. Jeśli alarm pochodzi z więcej niż jednej kamery wyświetlany jest obraz z tej o wyższym indeksie. Przy braku alarmu zmienna y przyjmuje wartość określoną przez użytkownika równą z.
fot. Rys. 8 Wyświetlanie obrazu z trzech kamer
Interfejs użytkownikaRysunek 8 przedstawia widok okna aplikacji wyświetlającej obrazy z trzech kamer jednocześnie. Przedstawiona jest sytuacja, w której nastąpiła detekcja ruchu w trzecim kanale. Detekcja ruchu sygnalizowana jest „zapaleniem” wskaźnika ALARM. Na ekranie głównym znajdują się również robocze pola wyświetlające wartości poszczególnych zmiennych oraz różnicę między średnimi intensywnościami porównywanych obrazów (x-y). Dodatkowo użytkownik ma możliwość określenia progu wykrycia oraz ustawienia jasności obrazu.
PodsumowanieW artykule przedstawiono system monitoringu wizyjnego opracowany w środowisku LabView. Wykonano aplikację, która może współpracować z wieloma typami kamer analogowych działających w standardowych formatach video. Dodatkowym atutem jest skalowalność systemu – wymiana kart NI PCI-1411 na karty 4-kanałowe zwiększa liczbę dostępnych torów wizyjnych. Wymaga to jedynie zmian konfiguracyjnych w blokach funkcyjnych odpowiedzialnych za obsługę sprzętu. Oprogramowanie może też być rozbudowane o dodatkowe elementy pozwalające użytkownikowi na dokonywanie operacji na obrazach. Przykładowo można zaimplementować algorytmy deformacji obrazu, zmiany intensywności czy też rozdzielczości. Dzięki temu istnieje możliwość przystosowania systemu do celów identyfikacji osób albo określania liczby i wymiarów obserwowanych obiektów.
Literatura[1] www.elektroda.pl
[2] Ćwirko R., Lisowski J., Mierzejewski Z.: Vademecum techniki
audio-video, WNT, Warszawa 1991
[3] www.zabezpieczenia.com.pl
[4] www.ni.com.pl
[5] Smith Steven W.: Cyfrowe przetwarzanie sygnałów, BTC
2007
[6] Bielecki Z., Rogalski A.: Detekcja sygnałów optycznych, WNT,
Warszawa 2001
Autor: Paweł Janda, Wojskowa Akademia Techniczna, Wydział Elektroniki