Witam wszystkich :)
Mam do wykonania pewien projekt a mianowicie kamerę, która będzie śledziła ruch. Z założenia kamera będzie umieszczona na silniku krokowym i będzie obracała się w zależności od ruchu przedmiotu śledzonego. Wszystkim ma zarządzać aplikacja napisana w Delphi 7.
Śledziłem to forum od jakiegoś czasu ale dopiero dziś się zarejestrowałem, wiem że jest tu sporo osób z ogromną wiedzą o programowaniu.
Mam do Was pytanie a raczej prośbę o jakieś wskazówki i porady jak wykonać ten projekt. W moim zamyśle ma to wyglądać tak:
Kamera obserwuje jakiś obiekt, co jakiś czas jest robiony screen (myślę że jeden na sekundę by wystarczył ponieważ obiekt nie będzie się poruszał z dużą prędkością). Screeny zapisywane są do BMP (ze względu na kompresje bezstratną) i porównywane. Tutaj zastanawiam się nad sposobem porównania tych screenów. Następnie program poda 4 bity w odpowiedniej kolejności i odpowiednim interwałem do silnika krokowego, który obróci kamerę ze względu na ruch przedmiotu.
Dziś wziąłem się do wykonania tego projektu. Na razie mam program, który pobiera obraz z kamery i zapisuje screeny co 1 sekundę. Na razie zapisywane są 3 screeny a każde następne nadpisują już istniejące w pętli tak aby nie zapychać dysku. Możliwe że trzeba będzie zwiększyć ich liczbę w zależności od ilości czasu jaką będzie potrzebował program do obróbki i porównania.
Sterowaniem silnika się nie martwię bo wiem jak to ma wyglądać. Już pisałem program do takiego układu tylko że w pascalu.
Co do porównania grafiki to tu mam największy problem. Jeszcze nigdy się tym nie bawiłem. Pisałem bazy danych i drobne programy sieciowe ale nigdy nie zajmowałem się grafiką. Zastanawiam się jaki algorytm użyć aby to miało ręce i nogi. Mam kilka pomysłów:
- bazowanie na konturach czyli przepuszczenie obrazka przez filtr i porównanie zmiany konturów: sposób prosty ale podatny na zakłócenia.
2.Odejmowanie klatek czyli szukanie różnic na kolorowych obrazkach.
3.Użycie filtrów cząstkowych: "particle filtering" czyli "nauczenie" programu jakiejś tekstury i wyszukiwanie jej na rysunku i sprawdzanie jej ruchu.
Doszedłem do wniosku że chyba NIE MA sensu przeszukiwać całego obrazka tylko trzeba stworzyć "celownik" czyli mniejszy prostokąt, w którym będzie się działa cała akcja:) i program będzie sprawdzał czy dany element(tekstura) nie wysunęła się poza ten prostokąt i nastawiał kamerę tak aby tekstura wróciła do tego prostokąta. Na razie kamera ma się poruszać w poziomie ale jeżeli program będzie działał dobrze to to może dojedzie jeszcze ruch pionowy.
Proszę Was o sugestie, porady, wskazówki co najlepiej użyć, jak by wyście widzieli ten projekt, co w nim zmienić co dodać co usunąć.
Pozdrawiam.