System wizyjny i mapowania pojedynczej kamery

17

Jakiś czas temu widziałem demo małego „zabawkowego czołgu” z zamontowaną pojedynczą kamerą. Czołg ten mógł jeździć po podłodze i wykrywać przedmioty, a następnie poruszać się / sterować, aby ich uniknąć. Co ciekawe, korzystał z systemu wizyjnego z pojedynczą kamerą i, o ile pamiętam, wykorzystywał płaską podłogę. a następnie wykorzystując tempo, w jakim poruszała się funkcja w scenie względem silników i kierunków podróży, w celu oceny, a tym samym mapowania sceny.

Czy ktoś może wysłać mi wskaźniki, których szukać, aby uzyskać więcej informacji na ten temat, lub niektóre wskaźniki do baz kodów, które mogą to zrobić.

Pytam dlatego, że był to system z jedną kamerą sprzed kilku lat (5+), a zatem (z tego co pamiętam) był stosunkowo niewielkim obciążeniem obliczeniowym. Zamierzałem wypróbować to na Raspberry PI, aby zbudować samochód / czołg, który mapuje pokój lub zestaw pokoi.

Ben
źródło
2
Witamy w robotyce Ben. Proszę sprawdzić , jak zadawać i wycieczkę do pewnych wskazówek na temat jak napisać praktyczne, odpowiada na pytania na podstawie rzeczywistych problemów, które możesz napotkać . Dzięki,
Mark Booth

Odpowiedzi:

4

Trudno powiedzieć dokładnie, co oni robili, ale terminami, których możesz tu chcieć, są „ przepływ optyczny ” i „ egomotion ”. Wygląda na to, że doszło do detekcji i dopasowania funkcji (coś takiego jak SURF lub SIFT) lub segmentacji pierwszego planu / tła.

OpenCV jest prawdopodobnie najczęściej używaną bazą kodu do wizji komputerowej, mają wiele funkcji do analizy ruchu . OpenCV powinien działać na Raspberry Pi, chociaż twoje algorytmy mogą być ograniczone mocą obliczeniową.

WildCrustacean
źródło
4

Opierając się na odpowiedzi WildCrustceana , inną możliwością może być widzenie stereo . Podczas gdy często myślimy o wizji stereo jako o użyciu dwóch kamer, techniki naprawdę potrzebują jedynie obrazów przemieszczonych w przestrzeni i modelu przesunięcia. Innymi słowy, mogę zrobić zdjęcie, przenieść się, a następnie zrobić kolejne zdjęcie. Tak długo, jak znam transformację między tymi dwoma obrazami, mogę używać technik wizyjnych stereo do obliczania odległości do punktu na obrazie.

DaemonMaker
źródło
2
Myślę, że technika, o której mówisz, nazywa się „Struktura z ruchu”.
Kozuch,
1

Mogło być używane śledzenie Parellel i mapowanie PTAM . PTAM jest implementacją problemu polegającego na jednoczesnej lokalizacji i mapowaniu (SLAM), który wykorzystuje pojedynczą kamerę do budowy mapy 3D świata i lokalizacji poprzez śledzenie funkcji wizualnych.

Mój zespół kiedyś eksperymentował z użyciem pakietu PTAM w ROS .

Pracowaliśmy na Ubuntu na procesorze Intel Atom i, jak pamiętam, nie zużył on zbyt wiele procesora. Nie wykorzystaliśmy tego jednak głównie dlatego, że nie udało nam się znaleźć wystarczającej liczby funkcji w środowisku, w którym działałby nasz robot.

Robz
źródło
0

Zasadniczo nie można wyodrębnić metrycznych pomiarów odległości z jednego obrazu, chyba że masz dodatkowe informacje o świecie. Na przykład, jeśli wiesz, że świat jest płaski (lub możesz wykryć podłogę, która jest regionem płaskim), możesz oszacować homografię.

Homografia to projekcyjna transformacja między płaszczyznami (matryca 3x3). Biorąc pod uwagę wewnętrzną kalibrację kamery, można rozłożyć homografię indukowaną płaszczyzną na obrót i translację. Tłumaczenie jest na dużą skalę. Można rozwiązać tę niejednoznaczność skali, znając odległość od kamery do podłogi (płaszczyzny).

Po uzyskaniu homografii możesz wykryć obiekty, których nie ma na płaszczyźnie. Homografia pozwala wypaczyć pierwszy obraz na drugi. Obiekty na płaszczyźnie zostaną wyrównane i będą miały mały błąd. Obiekty spoza płaszczyzny nie zostaną wyrównane. Nazywa się to paralaksą.

Jednym ze sposobów realizacji tego może być

  1. Wyodrębnij funkcje z obu obrazów.
  2. Dopasuj funkcje lub śledź je.
  3. Oszacuj homografię za pomocą RANSAC.
  4. Rozłóż homografię na rotację i tłumaczenie za pomocą kalibracji.
  5. Wypacz pierwszy obraz na
    drugi. Piksele z dużymi błędami nie znajdują się na podłodze i mogą stanowić
    przeszkodę.

Większość elementów konstrukcyjnych jest zaimplementowana w opencv (patrz http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html ).

Powodzenia.

PS rozkład homografii daje również normalną płaszczyznę. Ale skoro zakładasz, że jest to płaszczyzna podłoża, mamy normalne skierowanie w górę. Bardziej precyzyjne rozwiązanie można uzyskać w procedurze kalibracji. Możesz użyć celu szachownicy i oszacować jego pozycję. Pozycja będzie miała płaszczyznę normalną i odległość do kamery.

bendervader
źródło