Są one stosowane również w systemach kontroli procesów produkcji i jakości wytwarzanych wyrobów, w systemach wykrywających dysfunkcyjność podzespołów, np.: obserwacja rozkładu temperatury obiektów, pomiar gabarytów obserwowanego obiektu [1,2].
O ile w przypadku prostych systemów realizacja monitoringu może ograniczyć się jedynie do warstwy sprzętowej (współczesne rejestratory mogą realizować takie funkcje, jak sterowanie kamerami, rejestracja w dowolnym trybie), o tyle w przypadku systemów bardziej złożonych konieczna jest implementacja oprogramowania odpowiedzialnego za akwizycję i przetwarzanie obrazu. Takie rozwiązanie daje możliwość rekonfiguracji i optymalizacji pracy systemu monitoringu [3].
Jednym z najpopularniejszych środowisk programistycznych dedykowanych systemom automatyki jest pakiet LabView firmy National Instruments. Jest to graficzne środowisko programistyczne dające szerokie możliwości syntezy złożonych aplikacji do sterowania urządzeniami i przetwarzania danych.
Środowisko to pozwala na obróbkę sygnałów zarówno cyfrowych jak i analogowych, pozwala przetwarzać sygnały wizyjne jak również współpracuje ze sprzętem pomiarowym.
Analiza budowy opracowanego systemu CCTV W artykule przedstawiono opracowany system monitoringu wizyjnego. Zastosowano w nim monochromatyczne kamery analogowe oraz jednokanałowe karty akwizycji obrazu firmy National Instruments. Do obsługi kart oraz przetwarzania sygnału wizyjnego opracowano specjalistyczne oprogramowanie w środowisku LabView.
Schemat blokowy systemu monitoringu przedstawiony został na rysunku 1. W skład systemu wchodzą trzy monochromatyczne kamery analogowe o podwyższonej rozdzielczości (570 linii TV) zasilane napięciem stałym 12 V. Sygnały wizyjne przesyłane są do kart akwizycji obrazu przewodem koncentrycznym 75 Ω. Opcjonalnie, sygnał z jednej kamery może być transmitowany za pomocą modułu bezprzewodowego firmy TAYAMA. Moduł ten może odbierać sygnały wizyjne z dwóch przełączanych kamer analogowych na różnych częstotliwościach.
fot. Rys. 2 Karta akwizycji NI-PCI 1411
Karta akwizycji NI-PCI 1411 Każda z kamer podłączona jest do niezależnej karty wizyjnej. Do przetwarzania sygnałów wizyjnych z kamer zastosowano analogowe karty NI-PCI 1411 (rys. 2). Zainstalowane są one w jednostce centralnej i współpracują ze środowiskiem LabView poprzez dołączony sterownik NI-IMAQ. Komunikacja odbywa się za pomocą interfejsu PCI. Każda karta wyposażona jest w jedno wejście na przewód koncentryczny BNC (75 Ω, ang. composite video) oraz jedno wejście w standardzie S-Video. Karta posiada tylko jeden kanał transmisji danych wejściowych. Oznacza to, że sygnał przekazywany może być tylko z jednego wejścia: BNC lub S-Video. Dodatkowo karta posiada wejście wyzwalania TRIG sygnałem TTL, które może być skonfigurowane również jako programowe wyjście cyfrowe.
NI-PCI 1411 obsługuje standardowe formaty obrazu zarówno kolorowego jak również monochromatycznego:
• NTSC – 30 kl/s,
• RS-170 – 30 kl/s,
• PAL – 25 kl/s,
• CCIR – 25 kl/s.
Akceptowalne poziomy sygnałów wejściowych mogą zawierać się w granicach 0 mV – 700 mV (kalibrowane) lub też 400 mV – 800 mV (zmienne wzmocnienie). Przetwarzanie wizyjnego sygnału wejściowego opiera się na trzech tablicach LUT (dla standardu RGB) oraz procesorze obrazu przetwarzającym zdekodowany sygnał. Pozwala to uzyskać informacje o obrazie w formacie RGB (32 bit), HSL (32 bit), R/G/B/H/S lub L (8 bit) [4].
Opis opracowanego oprogramowania do przetwarzania sygnałów wizyjnych Do opracowania programu do przetwarzania sygnałów wizyjnych z kamer użyto środowiska National Instruments LabView w wersji 8.5 oraz pakietu do obróbki obrazu NI Vision Development Module. Rysunek 3 przedstawia algorytm działania aplikacji rejestrującej obraz i wykrywającej ruch [4].
fot. Rys. 3 Algorytm opracowanego programu
Sygnały wizyjne z kamer są zapisywane do bufora pamięci. Parametry akwizycji, takie jak rozmiar i rozdzielczość obrazu określane są programowo. Bieżący obraz jest wyświetlany na ekranie monitora. Jest on jednocześnie porównywany z obrazem wzorcowym zapisanym w pamięci. Porównanie to ma na celu detekcję ruchu. Obrazem wzorcowym jest poprzednia klatka. Analiza tych obrazów polega na porównaniu wektorów ich cech. Do opracowania poprawnego algorytmu detekcji ruchu niezbędne było określenie wymagań dopuszczalnych różnic porównywanych obrazów. Konieczne było także wyznaczenie procentowej ilości pikseli o różnych wartościach, określenie dopuszczalnych zmian jasności obrazu, opisanie wielkości analizowanego obrazu. Odpowiedni wybór analizowanych obszarów zminimalizował wpływ szumów oraz zmian natężenia światła na wynik porównania. Otrzymywane z trzech
kart obrazy aplikacja równolegle zapisuje na dysk komputera. Użytkownik może określić lokalizacje zapisywanych plików. W sytuacji, gdy nie wykryto ruchu, plik, do którego zapisywane są obrazy zostaje nadpisywany cyklicznie co określoną przez użytkownika liczbę obrazów. Przykładowo, zapisywanych jest pierwszych 3000 klatek. Po przekroczeniu tej liczby kolejne 3000 zapisywane są w tym samym pliku. W momencie wystąpienia alarmu spowodowanego wykryciem ruchu zmieniane są parametry zapisu (zmiana nazwy pliku). Następnie, kolejne 3000 klatek zapisywane jest w oddzielnym pliku. Dzięki temu na dysku znajdują się jedynie zapisy zawierające ruch,
a ponadto zapis zawiera nie tylko klatki, na których występuje ruch, ale i wcześniejsze, przez co możliwa jest analiza sytuacji bezpośrednio przed wystąpieniem alarmu. Takie rozwiązanie minimalizuje zużycie przestrzeni dyskowej. Na rysunku 4 przedstawiono różne tryby wyświetlania obrazu z poszczególnych kanałów. Wyboru sposobu wyświetlanie dokonuje użytkownik [5,6].
Dostępne sposoby prezentacji obrazu pozwalają na równoległe przedstawianie obrazu ze wszystkich dostępnych kanałów (w pomniejszeniu), prezentację pełnoekranową (z dostępnym trybem „switch” – przełączanie kanałów) czy też PIP (ang. picture in picture). W sytuacji wystąpienia alarmu, spowodowanej wykryciem ruchu, zaznaczony zostaje ekran wyświetlający obraz z kamery, która wykryła intruza. Wówczas może też być wyświetlony obraz w trybie pełnoekranowym lub PIP. Wykrycie ruchu w kilku kamerach powoduje, że w trybie pełnoekranowym wyświetlany jest obraz z kamery o najwyższym indeksie.
fot. Rys. 4 Sposoby wyświetlania obrazu
Algorytm detekcji ruchu Przedstawiony 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 ruchu W 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łównym Na 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żytkownika Rysunek 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.
Podsumowanie W 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