rozdział 99 - Politechnika Gdańska
Transkrypt
rozdział 99 - Politechnika Gdańska
ROZDZIAŁ 99 WYDAJNOŚĆ ŚRODOWISK J2SE I C++ / OPENCV W ZAGADNIENIU STEROWANIA KOMPUTEREM ZA POMOCĄ GESTÓW1 Michał LECH2 Bożena KOSTEK W rozdziale przedstawiono interfejs sterowania komputerem za pomocą gestów rąk, należący do grupy systemów czasu rzeczywistego o łagodnych granicach (ang. soft real-time). Komponentami systemu są: komputer klasy PC, kamera internetowa, rzutnik multimedialny i ekran dla rzutnika. Oprogramowanie interfejsu opracowano w oparciu o środowiska J2SE i Visual Studio C++ z użyciem biblioteki OpenCV. Moduł systemu realizujący interpretację rozpoznanych pozycji rąk w postaci gestów zrealizowano w środowisku J2SE wykorzystując pakiet JFuzzyLogic, udostępniający metody logiki rozmytej. Część odpowiedzialną za przetwarzanie obrazu i detekcję pozycji rąk stworzono zarówno w środowisku J2SE jak i C++ / OpenCV. Dokonano analizy systemu pod kątem jego odpowiedzi w warunkach zmiennego środowiska i ograniczeń czasowych. Porównano wydajność obu środowisk, a wyniki przedstawiono w postaci tabeli. 1. WPROWADZENIE Interakcja człowieka z komputerem (ang. Human Computer Interaction) za pomocą nowych rodzajów interfejsów, dostarczających użytkownikowi większych możliwości niż klawiatura i mysz, jest obecnie zagadnieniem, któremu poświęca się wiele uwagi. Znane są interfejsy umożliwiające sterowanie aplikacjami komputerowymi za pomocą gestów rąk [5-8], ust [2], czy głowy [3]. W zależności od specyfiki tego typu interfejsu i jego zastosowania, w niektórych przypadkach istotne jest, aby dany gest rozpoznany był przed upływem określonego czasu. Odpowiedź systemu po ______________ 1 2 Praca wykonana w ramach projektu POIG.01.03.01-22-017/08 pt.: "Opracowanie typoszeregu komputerowych interfejsów multimodalnych oraz ich wdrożenie w zastosowaniach edukacyjnych, medycznych, w obronności i w przemyśle". Projekt jest współfinansowany ze środków Europejskiego Funduszu Rozwoju Regionalnego i budżetu państwa. Politechnika Gdańska, Katedra Systemów Multimedialnych; Narutowicza 11/12, 80-233 Gdańsk; [email protected] M. Lech, B. Kostek tym czasie, niezależnie od jej trafności, prowadzi do uzyskania błędnego wyniku w ujęciu globalnym. Przykładem interfejsu sterowania komputerem za pomocą gestów rąk, rozpatrywanym jako system czasu rzeczywistego, może być aplikacja autorstwa Lovella i Heckenberga [6]. Autorzy zaproponowali sposób efektywnego kodowania w języku C z wykorzystaniem instrukcji MMX. Pozwoliło to na opracowanie interfejsu spełniającego wymogi czasu rzeczywistego, działającego na platformie sprzętowej o niewygórowanych parametrach (procesor Pentium III 450 MHz) i przetwarzającego obraz ruchomy o rozdzielczości 160 x 120 pikseli. Innym przykładem może być system rozpoznawania zestawu 46 gestów, zawierającego między innymi alfabet i cyfry amerykańskiego języka migowego [5]. Autorzy spełnili wymagania przetwarzania w czasie rzeczywistym stosując kombinację klasyfikatora opartego na wzorcach i algorytmu deterministycznego wzmacniania, co pozwoliło uzyskać efektywne ponowne trenowanie klasyfikatora w trakcie działania programu. Dzięki zastosowaniu takiej metody zredukowano koszt obliczeniowy, będący w standardowym podejściu rzędu O(108) do O(105). Rozpoznawanie gestów można również realizować w oparciu o dedykowane układy. Autorzy publikacji [1] zaimplementowali algorytmy detekcji gestów na układach FPGA, co pozwoliło na efektywne sterowanie robotem mobilnym. W kontekście sterowania komputerem za pomocą ruchów rąk, wyróżnić można dwa podstawowe typy gestów, tj. statyczne i dynamiczne [7, 8]. Gesty statyczne polegają na uformowaniu dłoni i palców w określony kształt [7, 8]. Utrzymanie kształtu przez pewien czas powoduje wykrycie gestu. W przypadku gestów dynamicznych, kształt dłoni bądź innego obiektu sterującego nie jest istotny, znaczenie ma natomiast trajektoria ruchu [7, 8]. Powszechne są systemy, które w ramach jednej aplikacji umożliwiają interakcję użytkownika z komputerem w oparciu o oba typy gestów [7, 8]. Przedstawiony w rozdziale system realizuje detekcję prostych gestów dynamicznych, jak na przykład ruch ręką w lewo lub przybliżanie rąk, jedna do drugiej. Gesty rozpoznawane są w oparciu o sekwencję obrazów pobranych z kamery internetowej. Zmiana warunków oświetleniowych, jak i sam sposób wykonywania gestu wpływa na czas wykonywania algorytmów, a w konsekwencji na czas uzyskania odpowiedzi i jej poprawność. System rozpatrywać można jako system czasu rzeczywistego o łagodnych granicach. 2. INTERFEJS STEROWANIA KOMPUTEREM ZA POMOCĄ GESTÓW Aplikacja interfejsu została początkowo zaimplementowana w całości w oparciu o platformę J2SE. Powodem wyboru tej technologii było dysponowanie komponentami opracowanymi w ramach wcześniejszych prac nie związanych z prezentowanym zagadnieniem oraz możliwość wykorzystania powszechnie stoso2 Wydajność Środowisk J2SE i C++ / OpenCV w Zagadnieniu Sterowania Komputerem … wanego pakietu jFuzzyLogic, umożliwiającego interpretację gestów za pomocą wnioskowania rozmytego. W ramach początkowo określonych zastosowań systemu, jakimi były zdalne przeglądanie obrazów i prezentacji multimedialnych, system z satysfakcjonującym rezultatem realizował swoje zadanie. Wydajność czasowa nie spełniała jednak określonych wymagań, biorąc pod uwagę zastosowanie systemu do obsługi tzw. Interaktywnej Tablicy [4] czy wprowadzając możliwość interpretacji gestów zgrupowanych, opisanych dalej w rozdziale 2.2. Z tego względu wszelkie czasochłonne operacje, takie jak przetwarzanie klatek pozyskanych strumieni wizyjnych czy detekcja rąk w obrazie zaimplementowane zostały w środowisku Visual Studio C++ z wykorzystaniem biblioteki OpenCV, w wersji 1.0, w wariancie udostępnianym bez opłat. Moduł interpretacji gestów zaimplementowano w języku JAVA z wykorzystaniem wspomnianego wcześniej pakietu jFuzzyLogic. Po stronie kodu JAVA wykonywane jest również wywoływanie akcji systemowych przypisanych do gestów. Kod napisany w języku C++ z wykorzystaniem biblioteki OpenCV został obudowany interfejsem JNI (JAVA Native Interfaces) i skompilowany do postaci biblioteki dynamicznej załączanej w kodzie JAVA. 2.1. KOMPONENTY SYSTEMU Prezentowany w niniejszym rozdziale system zaprojektowany został w oparciu o następujące komponenty: komputer lub laptop do standardowych zastosowań (procesor dwurdzeniowy 2GHz, 3GB pamięci RAM), rzutnik multimedialny, kamera internetowa i ekran dla obrazu z rzutnika. Rzutnik, do którego przymocowana jest kamera internetowa, podwieszony jest pod sufitem. Obiektyw kamery skierowany jest na ekran i ustawiony w ten sposób, aby wyświetlany obraz był możliwie największych rozmiarów w pozyskiwanym strumieniu wizyjnym i był w nim zawarty w całości. W prezentowanym rozwiązaniu użytkownik steruje aplikacją stojąc pomiędzy rzutnikiem a ekranem i wykonując proste gesty dynamiczne z możliwością łączenia ich w sekwencje, które również mogą podlegać interpretacji. 2.2. BAZA GESTÓW W systemie zaimplementowano rozpoznawanie 10 gestów, przedstawionych w tabeli 1. Pięć z nich bazuje na ruchu tylko jednej ręki i pięć na ruchu obu rąk jednocześnie. Interfejs graficzny udostępnia użytkownikowi możliwość zdefiniowania dodatkowych gestów, złożonych z gestów prostych wykonanych w odpowiedniej kolejności bez przerw, na przykład Lewo-Góra-Dół. Do każdego gestu prostego przypisana została domyślna akcja, wykonywana poprzez emulowanie zdarzenia związanego z obsługą klawiatury lub myszy. Przykładowo, podczas przeglądania obrazów 3 M. Lech, B. Kostek przybliżenie wyciągniętych przed siebie rąk, jedna do drugiej, interpretowane jest jako operacja pomniejszenia. Nazwa gestu Ręka nieruchomo Opis Trzymanie ręki nieruchomo Lewo Ruch ręki w lewo Prawo Ruch ręki w prawo Góra Ruch ręki do góry Dół Ruch ręki w dół Domyślna akcja Kliknięcie Wyświetlenie poprzedniego obrazu / slajdu lub przesuwanie zawartości Wyświetlenie następnego obrazu / slajdu lub przesuwanie zawartości Wyświetlenie poprzedniego obrazu / slajdu lub przesuwanie zawartości Wyświetlenie poprzedniego obrazu / slajdu lub przesuwanie zawartości Ręce nieru- Trzymanie obu rąk niechomo ruchomo Powiększenie Odsunięcie rąk od siebie Przybliżenie rąk do siePomniejszenie bie Ruch lewej ręki w dół i Obrót w lewo prawej do góry Obrót w pra- Ruch lewej ręki do góry i wo prawej w dół Emulowane zdarzenie Kliknięcie lewego przycisku myszy wciśnięcie wciśnięcie wciśnięcie wciśnięcie Powiększenie wciśnięcie ‘+’ Pomniejszenie wciśnięcie ‘-‘ Obrót w lewo wciśnięcie ‘l’ Obrót w prawo wciśnięcie ‘r’ Tabela 1. Baza gestów 2.3. METODA ROZPOZNAWANIA POZYCJI RĄK Rozwiązanie bazuje na odejmowaniu obrazów pozyskanych z kamery od obrazów wyświetlanych za pomocą projektora multimedialnego. Wynik odejmowania jest przetwarzany i następnie poddawany analizie pod kątem rozpoznawania gestów. Odejmowanie wykonywane jest w przestrzeni barw RGB. W pierwszej kolejności określany jest, w pozyskanej z kamery ramce, obszar, który zawiera jedynie widok grafiki wyświetlanej przez projektor. Obszar ten jest dalej zwany obszarem efektywnym. Operacja wykonywana jest ręcznie i polega na wskazaniu przez użytkownika rogów obszaru efektywnego w ramce wyświetlonej w interfejsie graficznym użytkownika. W oparciu o te wskazania obraz z kamery jest poddawany transformacji perspektywicznej, a następnie ekstrakcji obszaru efektywnego. Widok aktualnego ekranu systemu, który wyświetlany jest za pomocą projektora 4 Wydajność Środowisk J2SE i C++ / OpenCV w Zagadnieniu Sterowania Komputerem … multimedialnego, poddawany jest przeskalowaniu, w celu zapewnienia identycznych rozmiarów z przetworzonym obrazem z kamery. W celu ograniczenia wpływu warunków oświetlania panujących w pomieszczeniu, w którym wykorzystuje się system, oraz zniekształceń wprowadzanych przez obiektyw kamery, przeprowadzana jest kalibracja barwowa. W trakcie tego procesu, dla określenia charakterystyki wpływu oświetlenia na dany kolor, wyświetlane są kolejno obrazy o różnych kolorach. Wyniki odejmowania pozyskanych dla tych kolorów widoków ekranu systemowego i odpowiadających ramek pobranych z kamery służą kompensacji zabarwienia obrazów w procesie rozpoznawania gestów. Detekcja pozycji rąk realizowana jest w oparciu o obrazy poddane binaryzacji i filtracji medianowej z separowalną maską kwadratową o wielkości 7 pikseli. Dzięki zastosowaniu kompensacji barwowej i filtrowania nieliniowego największe skupisko sąsiadujących pikseli w obrazie stanowi reprezentację dłoni. Obszar ten znajdowany jest za pomocą metody aktywnych konturów z zadanym progiem wielkości obszaru. 3. ODPOWIEDŹ SYSTEMU W WARUNKACH ZMIENNOŚCI ŚRODOWISKA Opracowany system bazuje na rozpoznawaniu gestów dynamicznych. Z tego względu przetwarzanie musi odbywać się w czasie zapewniającym pozyskanie i przetworzenie określonej liczby ramek obrazu, na podstawie której można zinterpretować gest. Trajektoria ruchu ręki została zamodelowana za pomocą wektorów ruchu stworzonych w oparciu o punkty oznaczające pozycje rąk w obrazie dla czasów t1 i t2, odpowiednio w stosunku do czasów t0 i t1, zgodnie z rysunkiem 1. lewo t0 y t1 lewo y t2 21 dół u21 le10 wo u10 10 21 x x Rys. 1 Wektory ruchu stworzone dla półkolistego ruchu ręki w lewo 5 M. Lech, B. Kostek Metoda detekcji gestów na podstawie wyznaczonych wektorów ruchu opisana została w publikacji [4]. Interwały czasowe t1 – t0 i t2 – t1 wyznaczane są w zależności od uzyskanej rozdzielczości czasowej systemu. Rozdzielczość ta w dużej mierze zależy od złożoności czasowej algorytmów przetwarzania obrazu i detekcji rąk. Wiarygodne rozpoznawanie gestów w obrazie wizyjnym w większości przypadków wymaga użycia algorytmów przetwarzania obrazu o dużej złożoności czasowej [7, 8]. Zastosowanie metody złożonej z wielu takich algorytmów pozwala otrzymać obraz zawierający jednoznaczną informację o położeniu ręki w danej chwili, co w teorii pozwala skutecznie interpretować wykonany gest. Ceną za wysoką skuteczność rozpoznawania pozycji rąk czy innych obiektów sterujących jest niska wydajność całego systemu. Z tego względu, w niektórych zastosowaniach użycie takiej technologii jest niepraktyczne. Dodatkowo, biorąc pod uwagę fakt, że ruch tworzący gest dynamiczny może być wykonywany przez użytkowników z dowolną prędkością, wraz ze spadkiem wydajności maleje wiarygodność systemu. System bowiem, nie jest w stanie zapewnić przetwarzania wystarczającej liczby klatek dla zarejestrowania szybkiego ruchu w całości, co może prowadzić do błędnej interpretacji wykonanego gestu. Z tego względu projektowanie interfejsów rozpoznawania gestów, a w szczególności gestów dynamicznych, opiera się na znalezieniu kompromisu pomiędzy wiarygodnością detekcji rąk w obrazie, a co za tym idzie finalną skutecznością rozpoznawania gestów, a wydajnością systemu. W prezentowanym systemie operacjami o najwyższej złożoności czasowej, wykonywanymi najdłużej, w porównaniu z innymi algorytmami, również z punktu widzenia rozmiaru danych wejściowych, są: filtracja medianowa i korekcja perspektywy. Przetwarzanie obrazu z pominięciem tych algorytmów prowadziło do obniżenia skuteczności do nieakceptowalnego poziomu. Rozdzielczość czasowa systemu, którego część odpowiedzialną za przetwarzanie obrazu i detekcję rąk zaimplementowano w środowisku Visual Studio C++ / OpenCV, przy zastosowaniu komputera o dwurdzeniowym procesorze o częstotliwości taktowania 2GHz i pamięci RAM 3GB, utrzymuje się na poziomie 15 klatek na sekundę. Dla takiej rozdzielczości czasowej każdy z wyznaczonych wektorów ruchu obejmuje 3 kolejne ramki, co pozwala na skuteczne rozpoznawanie gestów nawet, jeśli ruch w którejś z jego faz odbywa się w innym kierunku niż kierunek globalny (rysunek 1). Oznaczanie wektorów dla punktów w ramkach i oraz i + 2 uznano za optymalne biorąc pod uwagę prędkość z jaką grupa testowa 20 osób wykonywała gesty w trakcie badań systemu. Zbadana skuteczność detekcji gestów plasowała się w przedziale 94.2% - 100.0%. Interfejs użytkownika udostępnia możliwość zmiany liczby klatek, w oparciu o które tworzone są wektory ruchu. Dla systemu z modułem odpowiedzialnym za przetwarzanie obrazu zaimplementowanym w środowisku J2SE, uzyskana rozdzielczość czasowa wynosi około 5 klatek na sekundę. Biorąc pod uwagę specyfikę pracy z Interaktywną Tablicą [4], interfejs nie spełniał wymagań stawianych systemom czasu rzeczywistego o łagodnych granicach. Kierunek ruchu był bowiem 6 Wydajność Środowisk J2SE i C++ / OpenCV w Zagadnieniu Sterowania Komputerem … rozpoznawany prawidłowo, jednak wydłużony czas uzyskania odpowiedzi powodował, że szybki ruch wykonywany w trakcie rysowania nie odzwierciedlał w prawidłowy sposób kształtu rysowanego na tablicy. Czas uzyskania odpowiedzi systemu zależny jest również od warunków oświetlenia panujących w pomieszczeniu. Czas wykonania algorytmu pozyskania obrazu z kamery, udostępnianego przez bibliotekę OpenCV, skraca się wraz ze zwiększaniem jasności w pomieszczeniu. Jednocześnie, aby zapewnić odpowiedni kontrast treści wyświetlanej przez projektor multimedialny, jasność ta nie może być zbyt duża. Z kolei, implementacja algorytmu pobierania ramek obrazu ze strumienia wizyjnego w języku JAVA oferuje lepszą wydajność przy niższych poziomach jasności. 4. WYNIKI Wyniki porównania wydajności systemu sterowania komputerem za pomocą gestów z modułem przetwarzania obrazu zaimplementowanym w środowisku J2SE i Visual Studio C++ / OpenCV przedstawiono w tabeli 2. Znak „-” w wierszach zawierających nazwę funkcji oznacza, że funkcja napisana została przez autora systemu. Tym samym nie podano nazwy biblioteki dla tej funkcji. Znak „-” w wierszach zawierających czas wykonania funkcji oznacza, że operacja wymagała wielu iteracji i była częścią innej operacji. W tym przypadku nie dokonywano pomiaru czasu, podano natomiast czas wykonania operacji nadrzędnej. Zamieszczone czasy są wartościami uśrednionymi z 1000 iteracji wykonywanych w identycznych warunkach dla obu środowisk programistycznych. Wyniki można zatem traktować jako proporcje czasowe. Biblioteka Funkcja Czas wykonania (ms) Biblioteka Funkcja Czas wykonania (ms) Biblioteka Funkcja Czas wykonania (ms) Biblioteka Funkcja J2SE Visual Studio C++ / OpenCV Pozyskanie ramki obrazu LTI-Civil OpenCV captureStream.start cvQueryFrame 33,06 32,7 Pozyskanie widoku ekranu (w tym*) java.awt.Robot windef.h, winuser.h, wingdi.h Robot().createScreenCapture CreateCompatibleBitmap 27,19 4,45 *Przeskalowanie java.awt.Graphics OpenCV g.drawImage cvResize 0,5 0,46 Korekcja perspektywy JAI OpenCV JAI.create("warp", pb); cvWarpPerspective 7 M. Lech, B. Kostek Czas wykonania (ms) Biblioteka Funkcja Czas wykonania (ms) Biblioteka Funkcja Czas wykonania (ms) Czas wykonania (ms) Funkcja Czas wykonania (ms) Biblioteka Funkcja Czas wykonania (ms) Biblioteka Funkcja Czas wykonania (ms) Biblioteka Funkcja Czas wykonania (ms) Całkowity czas wykonania (zbadany) (ms) Całkowity czas wykonania (suma) (ms) FPS 37,6 Ekstrakcja obszaru efektywnego java.awt .getSubimage 12,99 Odejmowanie 19,97 (w tym*) Kalibracja barwowa *16,52 Binaryzacja Filtracja medianowa Java Advanced Imaging JAI.create(„MedianFilter”, p) 55,75 Detekcja kształtu - 7,18 OpenCV cvGetSubRect 0,05 OpenCV cvAbsDiff 0,38 6,12 cvThreshold 0,08 OpenCV cvSmooth 4,88 OpenCV cvFindContours cvDrawContours 2,38 7,85 Detekcja gestu jFuzzyLogic rule.getDegreeOfSupport 0,22 jFuzzyLogic rule.getDegreeOfSupport 0,22 196,06 70,30 194,63 58,90 5,10 14,22 Tabela 2. Wyniki porównania wydajności intefrejsu gestowego przetwarzającego obrazy w oparciu o algorytmy zaimplementowane w środowisku J2SE i Visual Studio C++ / OpenCV Zastosowanie technologii Visual Studio C++ / OpenCV przyczyniło się do około 3-krotnego wzrostu wydajności systemu. Mierzony czas wykonania operacji był krótszy dla wszystkich badanych operacji. Znaczna różnica pomiędzy zbadanym całkowitym czasem wykonania iteracji rozpoznawania gestu a czasem wynikającym z sumy wszystkich zbadanych czasów, przy przetwarzaniu w środowisku Visual Studio C++ / OpenCV wynikała z konieczności stosowania dodatkowych operacji, których celem było dopasowanie formatów danych. Przykładem takich operacji mogą być funkcje: cvFlip, cvCvtColor, cvSplit, 8 Wydajność Środowisk J2SE i C++ / OpenCV w Zagadnieniu Sterowania Komputerem … które realizowały odpowiednio: rotację obrazu względem danej osi, konwersję kolorów, zastąpienie wszystkich składowych koloru jedną, wybraną składową. W przypadku korzystania ze środowiska J2SE, nie było konieczności stosowania tego typu operacji, stąd całkowity czas zbadany i wyliczony są podobne. Niewielkie różnice wynikają ze stosowania operacji, dla których czasy nie były mierzone, takich jak wyświetlanie nazwy rozpoznanego gestu na ekranie. Operacje te wykonywane były po stronie kodu JAVA odpowiedzialnego za interpretację gestów, a więc nie wpływały na badanie wydajności przetwarzania obrazów w poszczególnych środowiskach wytwarzania oprogramowania. 5. WNIOSKI Przeprowadzone testy uświadamiają, iż dla zapewnienia wysokiej efektywności detekcji gestów znaczenie ma nie tylko sam sposób modelowania ruchu bądź zastosowane metody przetwarzania obrazu, ale również wybór technologii wytwarzania. Interfejs opracowany w środowisku J2SE, ze względu na swoją wydajność, zapewniał efektywny sposób sterowania jedynie w sytuacji, w której proste gesty nie były grupowane w bardziej złożone struktury, a wykonanie gestu powodowało jednorazowe uruchomienie przypisanej akcji. Jako przykład tego typu zastosowania interfejsu, można podać sterowanie przeglądarką obrazów lub prezentacji multimedialnych, w którym istotny jest jedynie fakt prawidłowej interpretacji gestu, natomiast czas wykonania przypisanej akcji nie decyduje o efektywności systemu. W takim przypadku rozpatrywany system nie należy do grupy systemów czasu rzeczywistego. W sytuacji sterowania za pomocą gestów z uwzględnieniem możliwości tworzenia gestów złożonych lub w przypadku pracy z aplikacjami takimi jak Interaktywna Tablica [4], znaczenia nabiera dostarczenie odpowiedzi o rodzaju wykonanego gestu w określonych ramach czasowych, co nakłada na interfejs wymagania systemów czasu rzeczywistego. System opracowany z wykorzystaniem jedynie technologii JAVA nie zapewniał wydajności na poziomie wystarczającym do efektywnej pracy w takich warunkach. Dla wiarygodnego odzwierciedlenia gestów w postaci ruchów kursora na ekranie, rysowanie kształtów musiało odbywać się odpowiednio wolno, co czyniło interfejs niepraktycznym. Przeniesienie części systemu odpowiedzialnej za przetwarzanie obrazu i detekcję pozycji rąk do środowiska Visual Studio C++ i zastosowanie biblioteki OpenCV przyczyniło się do około trzykrotnego zwiększenia wydajności. Uzyskane przetwarzanie na poziomie 15 klatek na sekundę pozwoliło na efektywną pracę z opracowaną aplikacją Interaktywnej Tablicy. W ramach dalszych usprawnień systemu prowadzących do wzrostu wydajności rozważyć można kolejność wykonywania operacji korekcji perspektywy i ekstrakcji obszaru efektywnego. Obecnie algorytm bazuje na wykonaniu korekcji perspektywy w pierwszej kolejności, przez co oprócz przetwarzania istotnego fragmentu pobranej 9 M. Lech, B. Kostek z kamery ramki, jakim jest obraz wyświetlany przez projektor, przetwarzana jest również informacja zbędna (obszar wokół wyświetlanego obrazu). Następnie ze skorygowanego obrazu ekstrahowany jest prostokątny fragment o wierzchołkach określonych przez użytkownika w procesie kalibracji. Jako alternatywną metodę można zaproponować wstępną ekstrakcję istotnego obszaru z nieskorygowanego perspektywicznie obrazu, następnie wykonanie transformacji perspektywicznej na zmniejszonym obrazie i ostateczne wycięcie z otrzymanego obrazu fragmentu zawierającego jedynie wyświetlaną grafikę. W tym przypadku operacja ekstrakcji wykonywana jest dwukrotnie, jednak biorąc pod uwagę, potwierdzoną rezultatami badań, dużą złożoność czasową transformacji perspektywicznej i niską złożoność operacji ekstrakcji, dla określonego rozmiaru danych wykonywanie operacji w takiej kolejności może zwiększyć wydajność systemu. LITERATURA DO ROZDZIAŁU [1] Bonato V. et al.: A Real Time Gesture Recognition System for Mobile Robots. In International Conference on Informatics in Control, Automation and Robotics, 2004 [2] Dalka P., Czyżewski A.: Controlling Computer by Lip Gestures Employing Neural Networks. RSCTC 2010, materiały konferencyjne The Seventh International Conference on Rough Sets and Current Trends in Computing, Gdańsk 2010. [3] Kosikowski Ł., Dalka P., Odya P.: Wykorzystanie analizy obrazu ruchów głowy w multimedialnym interfejsie komputerowym. Technologie Informacyjne, Zeszyty Naukowe Wydziału ETI Politechniki Gdańskiej, Gdańsk 2010. [4] Lech M., Kostek B.: Gesture-based Computer Control System Applied to the Interactive Whiteboard. ICIT, Gdansk Univ. Of Technology Faculty of ETI Annals, Gdańsk 2010. [5] Lockton R., Fitzgibbon W.A.: Real-time gesture recognition using deterministic boosting. British Machine Vision Conference, conference proc., 2002 [6] Lovell B.C., Heckenberg D.: Low-Cost Real-Time Gesture Recognition. ACCV2002, proc. of the 5th Asian Conference on Computer Vision, Melbourne 2002 [7] Mitra S., Acharya T.: Gesture Recognition: A Survey. Systems, Man, and Cybernetics, Part C: Applications and Reviews, IEEE Transactions on, 2007, vol. 37, no. 3, pp. 311-324. [8] Vlaardingen M.: Hand Models and Systems for Hand Detection, Shape Recognition and Pose Estimation in Video. 10