iPhone iOS UIImage jak wykryć kropkę „wskaźnika laserowego” na kanale kamery?

9

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!

Wskaźnik laserowy zamknięty

Wskaźnik laserowy 1

Alex Stone
źródło
1
Czy potrafisz włączać i wyłączać wskaźnik laserowy we wzorze? Podobnie jak jedna klatka jest wyłączona, następna jest włączona, a odejmujesz kolejne klatki, aby było to bardzo oczywiste.
endolith,
To bardzo dobry pomysł! Ale nie mam kontroli nad wskaźnikiem laserowym, który jest włączony lub wyłączony.
Alex Stone
@AlexStone Staram się osiągnąć podobne rzeczy, jedyną różnicą jest to, że próbuję wykryć światło lasera na źrenicy oka. Czy możesz mi pomóc z kodem ios lub dowolnym kodem przykładowym, którego pozwałeś z opencv w śledzeniu wiązki laserowej? Z góry dziękuję za pomoc, dzięki AJ.
AmJa

Odpowiedzi:

10

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!

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?

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ł!

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.

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.

Czy istnieje skuteczny sposób porównywania wielu małych obrazów, aby sprawdzić, czy ich sylwetki pasują do siebie?

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).

Paul de Lange
źródło
Paul, dziękuję za niezwykle szczegółową odpowiedź! Mam platformę OpenCV i będę szukał przykładów projektów z jej wykorzystaniem.
Alex Stone
Cześć Paul, czy masz pomysł na przykładową aplikację do wykrywania lasera za pomocą kamery iOS za pomocą openCV?
AmJa