Detekcja ruchu

0

Witam - mam pytanie - potraię przechwycić w Delphi obraz z kamerki internetowej - jednak nie wiem jak stworzyć algorytm który dokonywałby detekcji ruchu rejestrowanych obiektów? - Chciałbym stworzyć algorytm który potrafiłby znajdować konkretny kształt ( znak / symbol / litere ) w przechwytywanym obrazie i później śledzić jego przemieszczanie się. Wiem że temat jest trudny i długi do omówienia ale nie potrafię znaleŹć nic konkretnego w sieci. Jeśłi ktoś zna jakieś stronki na których mógłbym znaleŹć takie informacje lub konkretne przykłady algorytmów - to bardzo proszę o pomoc!!!! - Z góry bardzo dzięuję i pozdrawiam!!!!

0

Sama detekcja ruchu jest prosta, wystarczy porównywać za pomocą np. ScanLine ostatni obrazek zrobiony przez kamerę z przedostatnim. Rozpoznawanie kształtów to jednak wyższa szkoła jazdy, był w serwisie jakiś kod źródłowy dotyczący rozpoznawania liter. W przypadku liter statycznych (w tym przykładzie o którym mówię to było rozpoznawanie tokena przy rejestracji na gg), wiemy co szukamy, a w przypadku, tak jak piszesz, figur przemieszczających się, to same obroty wokół jednej osi dają nieskończoną liczbę obiektów. Można jednak powalczyć ze wzorcami, tzn. opisujesz sobie matematycznie jakiś obiekt (chciażby jakiś algorytm opisujący położenie pikseli) i potem matematycznie obracasz to i w przybliżeniu porównujesz zgodność obróconego obrazka z tym sfotografowanym. No trochę zagmatwałem, ale mam nadzieję, że będziesz wiedział, o co mi chodzi.

0

Opisz jaki obraz filmujesz: kształty, kolory (czy jakoś specjalnie wyrażne czy zlewające się z tłem) i jaka może być szybkość ich przemieszczania.

0

Dzięki za odpowiedzi - jeśli chodzi o to co filmuje... powiedzmy ze np filmuje osobe ktora porusza przed kamera ręką - lub palcem i chcialbym zrobic program ktory sledzilby ten palec - zeby ulatwic sprawę - można by na takim palcu umieścić jakąś naklejkę - jakiś wzorek np czarną gwiazdke - i ten właśnie wzorek śledzić... tylko jak???? Tzn wiem że na początku przeszukuje się cały obraz w poszukiwaniu porządanego kształtu a później w czasie ruchu palca poszukiwania ogranicza się do obszaru otaczającego znaleziony wzór - tylko caly problem ogranicza się do tego jak mam porównać obraz wzorcowy - znaczek którego będę szukał z obrazem z kamery - zakładając że oba to mapy bitowe - mam sprawdzać piksel po pikselu???? to będzie strasznie czasochłonne... obraz z kamery pprzechwytuję z prędkością 10 fps - jeśli ktoś ma jakieś propozycje - to proszę niech sie podzieli =)

0

Dodam coś od siebie... Może coś pomoże...
Robiłem podobny program.
Najpierw zapisał sobie pierwsze zdięcie z kamery do zmiennej np. klatka.
Później pobierał następne klatki z kamery i "odejmował" od tego klatka.
Jeżeli obraz sie nie zmienił wychodził mi biały obraz, zaś jak dałem ręke przed kamere to wyświetlała mi się ręka na białym tle. Można z tego odczytać krawędzie tej ręki i nałożyć na obraz z kamery.
Chyba wiadomo o co chodzi ;P

0

ciekawy pomysł z tym odejmowaniem - mam tylko jedną obawę - jak na takie rozwiązanie wpłynie efekt migotania pikseli - tzn. nasze wspaniałe kamerki - tzn te z którymi miałem możliwość pracy mają taką przyjemną właściwość że obraz dostarczany przez nie cechuje się pewną przemykającą w tle ziarnistością - być może to wada przetwornika - teraz chce kupić taką z przetwornikiem 300 kpix - może ona będzie miała mniej tego delikatnego śnieżyku... a moze to ja mam pecha???? choc widząc jakosc obrazow na czatach z kamerkami no to heeeeh chyba jednak sprzet nie jest jeszcze doskonały. Dziś szukałem tego przykładu z rozpoznawaniem pisma - o którym pisała jedna z osób powyżej - niestety nie znalazłem - choć chyba właśnie takie rozwiązanie - rozpoznawanie po krawędziach z pewnym marginesem błędu jakiegoś kształtu pobieranego z obrazu wzorcowego i porównywanego z kolejnymi klatkami obrazu z kamery byłby najlepszy... tylko jak sie za to zabrać???? - no nic czekam dalej - może w końcu ktoś mnie poratuje :p

do kolegi powyżej - ja używam delphi 2005 - do delphi można po prostu pobrać odpowiednie komponenty które umożliwiają pobieranie obrazu lub dźwięku z zewnętrznych źródeł - np. dspack - ja używam czegoś innego - pakietu komponentów videolab - w przeciwieństwie do dspacka te komponenty są komercyjne - choć można pobrać bezpłatną wersję do nauki. Obsługa i działanie jest bardzo proste - a obraz - tzn kolejne klatki z kamerki internetowej można sprowadzić do poziomu bitmapy - więc z edycją nie ma żadnego problemu =) - do komponentów jest dołączone wiele przykładów - polecam!!!! - i czekam dalej na jakąś pomoc w mojej sprawie :p

0

Możesz ograniczyć ilość informacji - np.: podzielić obraz na kwadraty 16x16 pikseli i wyliczyć średni kolor całego takiego kwadratu - potem wykonujesz odejmowanie - przy zmianie efekcie śnieżenia różnica odpowiadających kwadratów będzie ciemnoszara (bliska 0), przy wystąpieniu ruchu różnica będzie znaczna.

0

no ok - tylko ze chciałbym śledzić pojedynczy kształt - tak jak pisałem wcześniej np. gwiazde albo cokolwiek innego co znajdowałoby się na ręce/palcu - a nie powiedzmy całą rękę - chciałbym później za pomocą ruchu tego kształtu czymś posterować - ruch całej ręki - który mógłby być wykryty za pomocą omówionej powyżej metody - byłby chyba zbyt ogólny - poza tym wiadomo, że całe tło też wcale nie pozostaje zupełnie nieruchome - śledzenie konkretnego kształtu byłoby dlatego najlepsze - tylko jak wykrywać ten kształt? - jak ktoś choć wie jak to zrobić na statycznym obrazie to niech napisze - najlepiej z fragmentem jakiegoś kodu - może być nawet w c++ to jakos go sobie przerobie na delphika - albo niech da jakiegoś linka do stronki z podobnymi informacjami - z góry dzięki

1 użytkowników online, w tym zalogowanych: 0, gości: 1