Jak uzyskać gęste chmury punktów z kamer stereo?

12

Próbuję użyć kamery stereo do rekonstrukcji sceny, ale zwykle mogę uzyskać tylko rzadkie chmury punktów (tj. Ponad połowa obrazu nie ma żadnych właściwych informacji o głębokości).

Zdaję sobie sprawę, że algorytmy przetwarzania stereo polegają na obecności tekstury na obrazach i mają kilka parametrów, które można dostosować, aby uzyskać lepsze wyniki, takie jak zakres rozbieżności lub rozmiar okna korelacji. Chociaż dostrajam te parametry, nigdy nie jestem w stanie uzyskać wyników, które są nawet zdalnie zbliżone do tego, co można uzyskać za pomocą aktywnego czujnika, takiego jak Kinect.

Powodem, dla którego tego chcę, jest to, że bardzo często chmury punktów odpowiadające sąsiednim regionom nie pokrywają się wystarczająco, aby uzyskać dopasowanie, więc rekonstrukcja jest poważnie ograniczona.

Moje pytanie do ekspertów Computer Vision brzmi następująco: co mogę zrobić, aby uzyskać ogólnie gęstsze chmury punktów (bez arbitralnej modyfikacji środowiska mojego biura)?

georgebrindeiro
źródło
To dobre pytanie, ale myślę, że potrzeba więcej szczegółów. Jakie algorytmy próbujesz obliczyć dopasowania? Czy możesz wyjaśnić, co rozumiesz przez „sąsiednie regiony” i „nakładanie się”?
Josh Vander Hook
Kiedy mówię „sąsiednie regiony”, mam na myśli części przestrzeni fizycznej, które nie są równoważne, ale mają niepuste przecięcie, które nazwałem „nakładaniem się”. To znaczy rodzaj regionów, które generowałyby chmury punktów, które można dopasować i zszyć w algorytmie ICP.
georgebrindeiro,
Jeśli chodzi o algorytm, nadal używam najprostszego możliwego rozwiązania: węzła ROS stereo_image_proc , który stosuje algorytm globalnego dopasowywania bloków dostępny w OpenCV. Byłbym bardzo zainteresowany usłyszeniem o ustawieniach parametrów, które mogą nie być dla mnie bezpośrednio dostępne za pośrednictwem węzła ROS lub innych algorytmów, o których wiadomo, że zapewniają lepsze wyniki.
georgebrindeiro,

Odpowiedzi:

4

Możesz spróbować pominąć wykrywanie najistotniejszych punktów i po prostu gęsto próbkować obraz (jako siatkę lub mniej więcej) i obliczyć deskryptor funkcji w każdym punkcie próbki. Prawdopodobnie możesz nawet posunąć się do obliczenia deskryptora dla każdego piksela.

Możesz stracić niezmienność skali, ale myślę, że nie zaszkodzi to zbytnio dla widzenia stereo, ponieważ obiekty będą miały mniej więcej taką samą skalę na obu obrazach.

Innym podejściem może być połączenie wielu algorytmów wykrywania punktu istotnego: narożniki, krawędzie, plamy i tak dalej. Następnie musisz użyć tego samego algorytmu deskryptora funkcji dla wszystkich wykrytych punktów, jednak ta ostatnia część może być nieco trudna do wdrożenia.

muksie
źródło
2

Tak więc algorytmy przetwarzania obrazu stereo, które stosowałem w przeszłości, były wdrażane piksel po pikselu. Właśnie użyliśmy modelu kamery otworkowej i wykonaliśmy staromodne pomiary za pomocą taśmy pomiarowej, dopóki nasze szacunki głębokości nie były zgodne z rzeczywistością.

Równania dla pary równoległych kamer to:

  • d=
  • f=
  • Ramy współrzędnych:
    • x,y,z=
    • uR,vR
    • uL,vL
    • Uwaga: współrzędne kamery mają swoje początki w ramce współrzędnych między kamerami (tj. Osie skierowane są w przeciwnych kierunkach)

uL=f(xd)zuR=f(x+d)z

zuR=f(x+d)zuL=f(xd)

z(uRuL)=2df

z=2dfuRuL

y=vLz+dff

x=uLz+dff

Za pomocą tych równań możesz obliczyć gęstą chmurę stereo. Jeden na każdy piksel w twoich aparatach.

thealmightygrant
źródło
Dzięki za wysiłek, ale znam się na modelowaniu stereo. Problem polega zwykle na zgodności między współrzędnymi (u, v) w lewej i prawej kamerze. muksie podsunął kilka pomysłów, jak sobie z tym poradzić, a sylvain.joyeux wskazał świetną bibliotekę stereo, która prowadzi do lepszych wyników, choć ...
georgebrindeiro
1

Kiedy mówisz: „ponad połowa obrazu nie ma żadnych właściwych informacji o głębokości”, która połowa?

Jednym z problemów, na jaki natknęliśmy się, jest to, że jeśli odległość do obiektu jest tego samego rzędu wielkości niż linia podstawowa (zwykle związana z kamerami o bardzo szerokim kącie), wówczas „standardowe” algorytmy gęstego stereo nie działają tak dobrze. Korzystamy z biblioteki libelas, a jej twórcy powiedzieli nam, że nazywa się to „dużym baseline stereo” i jest kolejnym problemem.

sylvain.joyeux
źródło
Kiedy powiedziałem, że połowa obrazu nie ma żadnych prawidłowych informacji o głębokości, miałem na myśli, że spośród wszystkich pikseli tylko około połowa miała obliczone dysproporcje (niekoniecznie tworząc jeden ciągły region). Nie mam tego samego problemu, o którym wspominałeś o stosunku odległości do obiektu / linii bazowej, ale bardzo ciekawie było usłyszeć o tej bibliotece i może to być problem. Dzięki!
georgebrindeiro,
1
Tak czy inaczej, wypróbuję libelas , ponieważ znalazłem dla niego opakowanie ROS !
georgebrindeiro,
0

Spojrzeć na kitti stereo Benchmark liderów. Ten test porównawczy nakłada kary na algorytmy nie powodujące rozbieżności w żadnym punkcie, więc najlepsi osiągają dobre wyniki (nawet jeśli nie mają wielu podstaw do oszacowania w wielu punktach). Niektóre metody mają publicznie dostępny kod połączony, który możesz wypróbować.

Pamiętaj, że nie są one karane za zajmowanie dużo czasu, więc wiele metod zajmie porządek minut na obraz i może nie być odpowiedni dla Twojej aplikacji. Wprowadzono wiele metod opartych na CNN, które działają bardzo dobrze, a jednocześnie działają w niecałą sekundę (na GPU). Co najmniej jeden z nich (CRL) ma kod publiczny.

Jeśli nadal nie otrzymujesz przyzwoitych szacunków głębokości na tych zdjęciach, być może widzisz granice tego, co jest możliwe z widocznego podejścia. Zasadniczo musi istnieć wyraźna tekstura w obszarze, aby dobrze dopasować punkty, lub potrzebujesz podstawy do przyjęcia pewnych silnych założeń (np. Gładkości) w regionach bez tekstur.

surtur
źródło