Rafał Toboła Wizualizacja obiektu widzianego przez kamerę stereowizyjną w trójwymiarze (metoda mapy głębokości) 14 czerwca 2009 Spis treści 1. Rozwiązywany problem.......................... 1 2. Funkcjonalność aplikacji.......................... 2 3. Interfejs graficzny aplikacji........................ 3 4. Diagram klas................................. 6 5. Diagram przepływu sterowania..................... 7 6. Wyniki eksperymentów.......................... 7 6.1. Scena z płytą CD............................ 8 6.2. Budynki.................................. 11 6.3. Scena z maską.............................. 17 6.4. Rzeźba i lampa.............................. 20 6.5. Pluszowe zabawki............................ 23 7. Wnioski Podsumowanie.......................... 26 Literatura..................................... 26 1. Rozwiązywany problem Przetwarzanie obrazów stereowizyjnych umożliwia bezinwazyjne mierzenie odległości. Stereowizja może mieć zastosowanie w wielu miejscach. Może być wykorzystana np. do pomiaru kształtu terenu, czy odległości od przeszkód dla robotów mobilnych. Robot manipulacyjny na podstawie mapy głębokości może rozpoznawać kształ i odległość obiektów, na których ma przeprowadzać jakieś operacje (wiercenie otworów, spawanie itp.). Przez ostatnie lata rozwinięto wiele metod na tworzenie mapy głębi na podstawie obrazów stereowizyjnych. Możemy je podzielić na cztery działy: oparte na cechach - algorytmy te wydzielają z obrazów pewne cechy, krawędzie, linie proste, krzywe. Dopasowanie następuje na podstawie odna- Instytut Informatyki, Automatyki i Robotyki, Politechnika Wrocławska, ul. Z. Janiszewskiego 11/17, 50-320 Wrocław, maj 2008. 1
lezienia takich elementów na obu obrazach. Wadą tej metody jest nieliczność informacji n.t. głębi obrazu; oparte na obszarach - obrazy dopasowywane są na podstawie poziomów szarości, czy tekstury. Wadą tej metody jest brak informacji o krawędziach; oparte na fazie - porównywane tutaj są transformaty Fouriera obrazów. Trzeba tutaj odnaleźć algorytm znajdujący globalne minimum; oparte na energii - algorytm minimalizuje równanie Euler a-lagrange a, które stowarzyszone jest z mapą głębi obrazów. Odległość można wyznaczyć na podstawie różnicy położenia tego samego punktu na obrazach uzyskanych z dwóch kamer. Rzutowanie punktu na obraz kamer przedstawiono na rysunku 1. Aby wyznaczyć odległość wystarczy skorzystać z prostej geometrycznej zależności: h = m f d, (1) gdzie: m odległość pomiędzy osiami optycznymi soczewek, f ogniskowa soczewek w kamerach, d rozbierzność (disparity), różnica względna pomiędzy położeniem tego samego punku na dwóch obrazach (x l x r). Rysunek 1. Rzutowanie tego samego punktu na obraz obu kamer 2. Funkcjonalność aplikacji Celem projektu było napisanie oprogramowania do przetwarzania obrazów stereowizyjnych. Program umożliwia stworzenie mapy głębi na podstawie dwóch zdjęć. Możliwe jest też zwizualizowanie obiektu odtworzonego na podstawie tejże mapy w trójwymiarze. W aplikacji, do znalezienia mapy głębokości, użyta została funkcja cvfindstereocorrespondence z biblioteki OpenCV[15]. Jest to implementacja algorytmu opisanego przez Birchfield a i Tomasi ego w [1]. Tam znaleźć można dokładny opis paramerów algorytmu. Program pozwala na wprowadzenie dwóch zdjęć i wyliczenie na ich podstawie mapy głębokości oraz zwizualizowanie obiektu w trójwymiarze za pomocą OpenGL. Możliwe jest też 2
podanie sześciu parametrów, jakich do obliczeń potrzebuje zaimplementowany algorytm. Za jego pomocą można też dokonać zapisu mapy głębokości do popularnych formatów graficznych. 3. Interfejs graficzny aplikacji Interfejs użytkownika programu, jaki pojawia się po uruchomieniu aplikacji, pokazany został na rysunku 2. Daje on możliwość wprowadzenia lewego oraz prawego obrazu, podania parametrów algorytmu, wyznaczenia oraz zapisania mapy głębokości, jak również pokazania obrazów stereowizyjnych, mapy głębokości i zwizualizowania w trójwymiarze odtworzonej sceny. Rysunek 2. Interfejs użytkownika po uruchomieniu programu Przykład przeprowadzonej wizualizacji znajduje się na rysunku 3. Model 3d może być obracany, przybliżany oraz przesuwany przy pomocy klawiatury i myszy. Istnieje również możliwość odczytania wysokości danego punktu z wizualizacji 3d, wystarczy wcisnąć klawisz Shift oraz kliknąć lewym klawiszem myszy w miejsce, którego wysokość nas interesuje. Wynik pojawi się w polach,,x:,,,y:,,,z:. 3
Rysunek 3. Interfejs użytkownika z przykładową wizualizacją w OpenGL Po kliknięciu w przycisk Pokaż obrazy stereowizyjne pojawi nam się okno z prawym oraz lewym obrazem jak na rysunku 4, natomiast po kliknięciu w Pokaż mapę głębokości, zobaczymy okno jak na rysunku 5, pokazujące nam obliczoną przez algorytm mapę głębokości. Rysunek 4. Okno wyświetlające obrazy stereowizyjne 4
Rysunek 5. Okno wyświetlające mapę głębokości 5
4. Diagram klas Diagram klas przedstawiono na rysunku 6. W programie zaimplementowane zostały wzorce projektowe Singleton (klasa Context), Adapter (klasy Image, OpenCVImage) oraz Strategia (klasy StereoAlgorithm, OpenCVStereoCorrenspondence)[19]. Rysunek 6. Diagram klas 6
5. Diagram przepływu sterowania Rysunek 7. Diagram aktywności 6. Wyniki eksperymentów Eksperymenty przeprowadzone zostały dla pięciu par zdjęć stereowizyjnych oraz czterech zestawów parametrów. Wyniki przedstawiono poniżej. 7
6.1. Scena z płytą CD Rysunek 8. Scena z płytą CD: lewy obraz Rysunek 9. Scena z płytą CD: prawy obraz 8
Rysunek 10. Scena z płytą CD, parametry. Constant oclusion penalty: 12, constant match revard: 3, highly reliable region: 3, moderately reliable region: 3, slightly reliable region: 3, max disparity: 70. Rysunek 11. Scena z płytą CD, parametry. Constant oclusion penalty: 25, constant match revard: 5, highly reliable region: 12, moderately reliable region: 15, slightly reliable region: 25, max disparity: 50. 9
Rysunek 12. Scena z płytą CD, parametry. Constant oclusion penalty: 15, constant match revard: 3, highly reliable region: 6, moderately reliable region: 8, slightly reliable region: 15, max disparity: 70. Rysunek 13. Scena z płytą CD, parametry. Constant oclusion penalty: 55, constant match revard: 9, highly reliable region: 3, moderately reliable region: 44, slightly reliable region: 5, max disparity: 150. 10
6.2. Budynki Rysunek 14. Budynki: lewy obraz 11
Rysunek 15. Budynki: prawy obraz 12
Rysunek 16. Budynki, parametry. Constant oclusion penalty: 12, constant match revard: 3, highly reliable region: 3, moderately reliable region: 3, slightly reliable region: 3, max disparity: 70. 13
Rysunek 17. Budynki, parametry. Constant oclusion penalty: 25, constant match revard: 5, highly reliable region: 12, moderately reliable region: 15, slightly reliable region: 25, max disparity: 50. 14
Rysunek 18. Budynki, parametry. Constant oclusion penalty: 15, constant match revard: 3, highly reliable region: 6, moderately reliable region: 8, slightly reliable region: 15, max disparity: 70. 15
Rysunek 19. Budynki, parametry. Constant oclusion penalty: 55, constant match revard: 9, highly reliable region: 3, moderately reliable region: 44, slightly reliable region: 5, max disparity: 150. 16
6.3. Scena z maską Rysunek 20. Scena z maską: lewy obraz Rysunek 21. Scena z maską: prawy obraz 17
Rysunek 22. Scena z maską, parametry. Constant oclusion penalty: 12, constant match revard: 3, highly reliable region: 3, moderately reliable region: 3, slightly reliable region: 3, max disparity: 70. Rysunek 23. Scena z maską, parametry. Constant oclusion penalty: 25, constant match revard: 5, highly reliable region: 12, moderately reliable region: 15, slightly reliable region: 25, max disparity: 50. 18
Rysunek 24. Scena z maską, parametry. Constant oclusion penalty: 15, constant match revard: 3, highly reliable region: 6, moderately reliable region: 8, slightly reliable region: 15, max disparity: 70. Rysunek 25. Scena z maską, parametry. Constant oclusion penalty: 55, constant match revard: 9, highly reliable region: 3, moderately reliable region: 44, slightly reliable region: 5, max disparity: 150. 19
6.4. Rzeźba i lampa Rysunek 26. Rzeźba i lampa: lewy obraz Rysunek 27. Rzeźba i lampa: prawy obraz 20
Rysunek 28. Rzeźba i lampa, parametry. Constant oclusion penalty: 12, constant match revard: 3, highly reliable region: 3, moderately reliable region: 3, slightly reliable region: 3, max disparity: 70. Rysunek 29. Rzeźba i lampa, parametry. Constant oclusion penalty: 25, constant match revard: 5, highly reliable region: 12, moderately reliable region: 15, slightly reliable region: 25, max disparity: 50. 21
Rysunek 30. Rzeźba i lampa, parametry. Constant oclusion penalty: 15, constant match revard: 3, highly reliable region: 6, moderately reliable region: 8, slightly reliable region: 15, max disparity: 70. Rysunek 31. Rzeźba i lampa, parametry. Constant oclusion penalty: 55, constant match revard: 9, highly reliable region: 3, moderately reliable region: 44, slightly reliable region: 5, max disparity: 150. 22
6.5. Pluszowe zabawki Rysunek 32. Pluszowe zabawki: lewy obraz Rysunek 33. Pluszowe zabawki: prawy obraz 23
Rysunek 34. Pluszowe zabawki, parametry. Constant oclusion penalty: 12, constant match revard: 3, highly reliable region: 3, moderately reliable region: 3, slightly reliable region: 3, max disparity: 70. Rysunek 35. Pluszowe zabawki, parametry. Constant oclusion penalty: 25, constant match revard: 5, highly reliable region: 12, moderately reliable region: 15, slightly reliable region: 25, max disparity: 50. 24
Rysunek 36. Pluszowe zabawki, parametry. Constant oclusion penalty: 15, constant match revard: 3, highly reliable region: 6, moderately reliable region: 8, slightly reliable region: 15, max disparity: 70. Rysunek 37. Pluszowe zabawki, parametry. Constant oclusion penalty: 55, constant match revard: 9, highly reliable region: 3, moderately reliable region: 44, slightly reliable region: 5, max disparity: 150. 25
7. Wnioski Podsumowanie Jako możliwości na przyszłość przewidywane jest zaimplementowanie metod opartych na minimalizacji energii [2], [3], [4]. Ciekawym pomysłem wydaje się też implementacja algorytmów stereowizyjnych na kartach graficznych firmy NVIDIA z rodziny 8000 i nowszych, przy pomocy interfejsu programistycznego CUDA [11], [10]. Skorzystać tutaj można również z powstających gotowych bibliotek [25], [24]. Literatura [1] Stan Birchfield, Carlo Tomasi, Depth Discontinuities by Pixel-to-Pixel Stereo, ftp://reports.stanford.edu/pub/cstr/reports/cs/tr/96/1573/cs-tr-96-1573.pdf. [2] Luc Robert, Rachid Deriche, Dense Depth Map Reconstruction: A Minimalization and Regularization Approach which Preserves Discontinuities, https://eprints.kfupm.edu.sa/33986/1/33986.pdf. [3] Natalia Slesareva, Andrés Bruhn, Joachim Weickert, Optic Flow Goes Stereo: A Variational Method for Estimating Discontinuity-Preserving Dense Disparity Maps, http://www.mia.uni-saarland.de/publications/slesareva-dagm05.pdf. [4] Luis Alvarez, Rachid Deriche, Javier Sńchez, Joachim Weickert, Dense Disparity Map Estimation Respecting Image Discontinuities: A PDE and Scale-Space Based Approach, ftp://ftp.inria.fr/inria/publication/publi-pdf/rr/rr-3874.pdf. [5] Pedro F. Felzenszwalb, Daniel P. Huttenlocher, Efficient Belief Propagation for Early Vision, http://people.cs.uchicago.edu/ pff/papers/bp-long.pdf. [6] Kuk-Jin Yoon, In So Kweon, Adaptive Support-Weight Approach for Correnspondence Search, IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 28, no. 4, april 2006, http://perception.inrialpes.fr/people/yoon/pami2006 stereo.pdf. [7] James Davis, Ravi Ramamoorthi, Szymon Rusinkiewicz, Spacetime Stereo: A Unifying Framework for Depth from Triangulation, http://graphics.stanford.edu/papers/spacetimestereo/spacetimestereo final.pdf. [8] Thomas Brox, Andrés Bruhn, Nils Papenberg, Joachim Weickert, High Accuracy Optimal Flow Estimation Based on a Theory for Warping, http://www.mia.uni-saarland.de/publications/brox-eccv04-of.pdf. [9] Christoper Zach, Thomas Pock, Horst Bischof, A Globally Optimal Algorithm for Robust TV-L Range Image Integration, http://www.icg.tugraz.at/pub/pdf/iccv07 paper.pdf. [10] Thomas Pock, Markus Grabner, Horst Bischof, Real-time Computation of Variational Methods on Graphics Hardware, http://www.icg.tugraz.at/pub/pdf/cvww07 pock.pdf. [11] Joe Stam, Stereo Imaging with CUDA, http://dfn.dl.sourceforge.net/sourceforge/openvidia/stereoimaging.pdf. [12] J.P. Mellor, Seth Teller, Tomás Lozano-Pérez, Dense Depth Maps from Epipolar Images, http://people.csail.mit.edu/seth/pubs/aim-1593.pdf. [13] T. Kanade, A Stereo Machine for Video-Rate Dense Depth Mapping and Its New Applications, http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.33.4657. [14] Pascal Fua, A parallel stereo algorithm that produces dense depth maps and preserves image features, http://cvlab.epfl.ch/publications/publications/1993/fua93.pdf. [15] Open Computer Vision Library, http://opencv.willowgarage.com/wiki/. 26
[16] Biblioteka Qt, http://www.qtsoftware.com. [17] Biblioteka libqglviewer, http://www.libqglviewer.com. [18] Generator dokumentacji kodu źródłowego Doxygen, http://www.doxygen.org. [19] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Wzorce projektowe, WNT 2005. [20] Kevin Hawkins, Dave Astle, OpenGL: Programowanie Gier, Helion 2003. [21] Richard S. Wright jr, Michael Sweet, OpenGL: Księga Eksperta, Helion 1999. [22] Neon Helium, nehe.gamedev.net. [23] www.cplusplus.com. [24] GpuCV: GPU-accelerated Computer Vision, https://picoforge.int-evry.fr/cgi-bin/twiki/view/gpucv/web/. [25] Biblioteka oparta na kartach graficznych firmy NVIDIA, http://gpu4vision.icg.tugraz.at. [26] Przetwarzanie obrazów stereowizyjnych na karcie graficznej, http://gpu4vision.icg.tugraz.at/videos/range.mpg. 27