Mam śledzoną robotkę i kontroluję ją za pomocą iPhone'a. Robot wysyła obraz z kamery na żywo o znanym rozmiarze klatki, a ja wyświetlam go na UIImage.
Dodałem wskaźnik laserowy do robota i naprawiłem go wzdłuż osi robota. Próbuję wykryć kropkę wskaźnika laserowego na obrazie, a tym samym obliczyć bliskość obiektu. Jeśli kropka lasera znajduje się daleko od centrum, wiem, że robot przylgnął do ściany i musi się cofnąć.
Jak mogę wykryć kropkę jasnych biało-czerwonych pikseli na ekranie? Jednym rozwiązaniem byłoby próbkowanie koloru pikseli w pewnym promieniu środka i wykrywanie jasnego koloru kropelki. Czy ktoś może zasugerować algorytm dla tego działania?
Innym podejściem byłoby śledzenie średniej pozycji kropki w ostatnich kilku klatkach, zmniejszając w ten sposób promień orientacji. Jeśli w zdefiniowanym regionie nie ma kropki, region wyszukiwania może zostać rozszerzony.
Wreszcie, chcę nauczyć robota wykrywania dywanu wokół niego. Dywan w pewien sposób odzwierciedla wskaźnik laserowy i chcę zrozumieć, ile ramek wokół robota ma podobne właściwości. Jeśli wiem, gdzie znajduje się wskaźnik laserowy na ekranie, mogę wyciąć mały prostokąt z tego obrazu i porównać je ze sobą. Czy istnieje skuteczny sposób porównywania wielu małych obrazów, aby sprawdzić, czy ich sylwetki pasują do siebie?
Zauważyłem, że laser odbija się od błyszczących powierzchni, a kierunek tego odbicia może mi powiedzieć coś o orientacji powierzchni w przestrzeni, zgodnie z prawami refrakcji.
Dziękuję Ci!
źródło
Odpowiedzi:
OpenCV jest kompatybilny z iOS. Chociaż może nie być najbardziej wydajny, daje możliwość przeniesienia algorytmu. Zrobiłem podobny problem ze śledzeniem znaczników za pomocą algorytmu ConDensation. Wyszukaj śledzenie znaczników za pomocą OpenCV. Jest to BARDZO duży obszar badań, a dokładny algorytm zależy całkowicie od zastosowania. O ile dobrze pamiętam, istnieje około 3000 zgłoszonych technik przetwarzania obrazu - wybór dobrego to prawdziwa sztuka!
Nawiasem mówiąc, jest to podstawowa idea tego, co nazywa się filtrem cząstek (z czego kondensacja jest jedną metodą). Dobra robota, sam wymyśliłeś podstawowy pomysł!
Nazywa się to utrzymywaniem stanu i może być modelowane na różne sposoby. Algorytm kondensacji wykorzystuje podejście stochastyczne, podobne do zwykłego starego filtru Kalmana.
Ten jest trochę trudniejszy. Możesz spróbować dopasować szablon, ale nie wiem, jak dobrze będzie działać na iOS (bardzo ciężkie obliczenia i kamera iOS nie jest do tego dobrze przystosowana).
źródło
Co powiesz na ten kod?
https://www.youtube.com/watch?v=MKUWnz_obqQ
https://github.com/niitsuma/detect_laser_pointer
W tym kodzie kolor HSV jest porównywany za pomocą testu t kwadratowego hotelu
źródło