2012-12-17 24 views
7

Tworzymy autonomicznego robota (na uczelni), który podąża za pewnymi znakami i wskazówkami, i kieruje się wyznaczoną trasą. Robot będzie miał kamerę zamontowaną na głowie. Będzie podążał za znakami wytyczonymi na drodze przed nim lub ścianami i podejmą decyzję. Znaki będą ZIELONE STRZAŁKI (dla GO Signal) lub RED T jako znak zatrzymania. Robot skanuje te symbole w czasie rzeczywistym i wykonuje niezbędne czynności. Te znaki mogą być na ścianie bezpośrednio z przodu lub narysowane na ścieżce przed sobą.Wykrywanie obiektów w OpenCV i porównywanie w czasie rzeczywistym

Próbowałem szukać potrzebnych algorytmów lub metod transformacji obrazu, ale jesteśmy całkiem nowi w tym polu. Szukam pomocy, jak można rozwiązać ten problem i niezbędnego kodu, który może nam pomóc (zakładając, że jesteśmy starterami).

Szukałem w następujących wątkach ale jestem zdezorientowany: - OpenCV Object Detection - Center Point - How to recognize rectangles in this image? - http://www.chrisevansdev.com/computer-vision-opensurf.html (nie jestem w stanie go używać)

Jednym z nutą podane dla wydarzeniem było to, że może modelować strzałki jako prostokąt i trójkąt razem, aby określić, czy środek trójkąta znajduje się po prawej stronie tego prostokąta (co oznacza, że ​​idzie w prawo), czy w inny sposób. Podobnie dla T.

Dzięki! :)

+0

Jeśli możesz zagwarantować, że kolory czerwony i zielony są stosunkowo unikalne w Twoim środowisku problem staje się znacznie prostszy, możesz znaleźć znaki, szukając tylko tych kolorów ... – Hammer

+1

Musisz lepiej określić zakres tego zdarzenia . Czy środowisko jest wolne od innych znaków? Czy możesz pokazać przykłady znaków i przykładowego wejścia z kamery? Czy chcesz, aby robot poruszał się tak szybko, jak to możliwe, czy uderzał w symbol zatrzymania, który chcesz? W przypadku tego pierwszego algorytmy, które można zastosować, są redukowane. – mmgp

+0

Tak, środowisko powinno być wolne od innych rozpraszających kolorów lub obrazów. Tylko prosta płaszczyzna pomalowała prawdopodobnie białą ścianę na te figury. Ścieżka mogła mieć jednak inny kolor, ale i to zakłada, że ​​ma taki sam wzór. –

Odpowiedz

8

Jeśli znaki są znane wcześniej można użyć metody „rozpoznawać obiekty detekcją fabularnego”.

Chodzi o to, że masz obraz znaku (strzałki lub T) i wykonać następujące kroki szkoleniowych, Offline:

1 - funkcja wykrywania (używając, surf, szybki. ..)

2 - Ekstrakcja deskryptora (od funkcji) za pomocą przesiać, freak, itp ...

Potem przychodzi prawdziwa część czasu. Dla każdej klatki musisz wykonać wykrywanie funkcji i wyodrębnianie deskryptorów, ale musisz dopasować do obrazów treningowych, aby zobaczyć, który obiekt masz.Przykładem, który będzie działał w czasie rzeczywistym:

cv::FAST detector; 
cv::FREAK descriptor; 
BFMatcher matcher = BFMatcher(NORM_HAMMING,false); 

detector.detect(frame,keypoints_frame); 
descriptor.compute(frame, keypoints_frame,descriptors_frame); 
matcher.match(descriptors_trainning, descriptors_frame); 

Byłoby to pierwsze podejście do dopasowania, to trzeba oczyścić i usunąć błędne. Niektóre techniki są

  • stosunku test

  • Krzyż Sprawdź

  • RANSAC + homography

Tutaj masz pełną example.

3

Zakładam, że możesz uzyskać znaki przed zdarzeniem: weź znak strzałki i odbierz od niego "deskryptory" i przechowuj je w swoim robocie.

Następnie w każdej klatce, którą robot wybiera, poszukaj koloru znaku, gdy zobaczysz coś przypominające znak, weź deskryptory przesiewania i spróbuj zarejestrować między zapisanymi deskryptorami a nowymi. jeśli się uda, spróbuj obliczyć matryce obrotu i translacji między oryginalnym zapisanym znakiem, a znakiem znalezionym na obrazie.

Aby przeczytać o przesiać, polecam na tej stronie: http://aishack.in/tutorials/sift-scale-invariant-feature-transform-introduction/ Po zrozumiesz podstawy Sift, polecam ściągnąć jakąś realizację zamiast wdrażać go samodzielnie, to jest to bardzo żmudne zadanie i ma wiele pułapek

BTW Chociaż sift to "Scale Invariant Feature Transform", jestem pewien, że zadziała w twoim przypadku, nawet jeśli masz "transformację perspektywy".

Nadzieję, że pomogło

+3

Pomysł jest dobry, ponieważ deskryptory SIFT są bardzo odporne, problemem jest zastosowanie ich w czasie rzeczywistym. Jeśli robot ma dobry procesor, to nie ma problemu, ale na przykład w college'u może używają tabletu, na przykład ze zintegrowaną kamerą. Wtedy SIFT nie zrobi tego w czasie rzeczywistym. –

+0

A jeśli SIFT jest zbyt wolny, jest SURF, ORB, KRÓTKI, itp. –

Powiązane problemy