Michał Jaworski 10 czerwca 2010 -...

21
Skanowanie i wizualizacja obiektów przestrzennych Michal Jaworski 10 czerwca 2010

Transcript of Michał Jaworski 10 czerwca 2010 -...

Skanowanie i wizualizacja obiektów przestrzennych

Michał Jaworski

10 czerwca 2010

Spis treści

1 Opis projektu 21.1 Wstęp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2 Skanowanie obiektów 3D - zarys teoretyczny . . . . . . . . . . . . . . . 21.3 Charakterystyka tematu projektu . . . . . . . . . . . . . . . . . . . . . 3

1.3.1 Specyfikacja zadania . . . . . . . . . . . . . . . . . . . . . . . . 31.3.2 Wykorzystana koncepcja mechaniczna . . . . . . . . . . . . . . 41.3.3 Podcele i etapy realizacji projektu . . . . . . . . . . . . . . . . . 51.3.4 Przewidziany terminarz realizacji poszczególnych podcelów

(z dokładnością do 1 tygodnia) . . . . . . . . . . . . . . . . . . . . 6

2 Realizacja 72.1 Struktura projektu aplikacji . . . . . . . . . . . . . . . . . . . . . . . . 72.2 Dokumentacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2.2.1 System dokumentacji . . . . . . . . . . . . . . . . . . . . . . . . 72.2.2 Struktura dokumentacji . . . . . . . . . . . . . . . . . . . . . . 8

2.3 Pakiet modułów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.3.1 devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.3.2 processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.3.3 calculate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.3.4 interface oraz calibrateViewWizard . . . . . . . . . . . . . . . . 12

2.4 Narzędzia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.4.1 serialConsole . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.4.2 Generator plansz do kalibracji kamery . . . . . . . . . . . . . . 12

2.5 Aplikacje testowe - kalibracja obrazu . . . . . . . . . . . . . . . . . . . 122.6 Interfejs aplikacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.6.1 Kreator kalibracji . . . . . . . . . . . . . . . . . . . . . . . . . . 162.7 Wyniki - testy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2.7.1 Nieprawidłowe oświetlenie sceny . . . . . . . . . . . . . . . . . . 172.7.2 Zmiana pozycji przedmiotu . . . . . . . . . . . . . . . . . . . . 172.7.3 Niepoprawne przetwarzanie danych . . . . . . . . . . . . . . . . 17

2.8 Wnioski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.9 Zawartość raportu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

1

Rozdział 1

Opis projektu

1.1 Wstęp

Dokument ten został przygotowany jako podsumawanie prac wykonanych w ramachprzedmiotu “Wizualizacja danych sensorycznych (projekt)”. Zawiera on założenia kon-cepcyjne projektu, kolejne etapy realizacji, wyniki podjętych działań, testów oraz wy-ciągnięte wnioski. Stworzone oprogramowanie jest częścią większego projektu, któryma na celu przygotowanie całościowego rozwiązania pozwalającego na skanowanie obiek-tów przestrzennych. Urządzenie będące platformą umożliwiającą skanowanie obiektówi akwizycję danych jest tematem innej pracy wykonanej w ramach przedmiotu “Ste-rowniki robotów (projekt)” u dra M. Wnuka [5].

1.2 Skanowanie obiektów 3D - zarys teoretyczny

Skanowanie 3D jest jednym ze sposobów tworzenia cyfrowych modeli rzeczywistychobiektów z otaczającego nas świata. W odróżnieniu od klasycznego podejścia polegają-cego na ręcznym modelowaniu w przystosowanym do tego oprogramowaniu graficznym(np. 3ds max, Maya, Blender) czy profesjonalnych pakietach typu CAD (Autode-skCAD, SolidEdge itp.) pozwala na zautomatyzowanie tego procesu i ograniczenieczynnika ludzkiego do minimum. W przypadku odtwarzania geometrii przedmiotówna zasadzie projektowania modeli czynnik ten jest znaczący. Wyraźnie zwiększa nie-dokładności odwzorowania, a często uniemożliwia idealne skopiowanie pewnych aspek-tów rzeczywistości (np. charakterystyczna faktura, kolor). Zaletą skanowania jesttakże możliwość uzyskania cyfrowych reprezentacji obiektów bez potrzeby posiadaniajakiegokolwiek doświadczenia, które to jest niezbędne w przypadku wspomnianych pro-gramów do projektowania 3D.

Skanowanie nie jest niestety rozwiązaniem idealnym. Istnieje wiele podejść do pro-blemu, a każde z nich ma swoje wady oraz zalety. Wiele z nich ma także swoje ogra-niczenia. Przykładem są tutaj metody bazujące na analizie obrazu, w których wielkątrudność sprawiają powierzchnie o dużej połyskliwości.

Potencjalne obszary zastosowań techniki skanowania 3D to [8]:

� pomiary parametrów geometrycznych obiektów,

� proces szybkiego prototypowania,

� grafika komputerowa, efekty filmowe etc.,

2

� nawigacja robotów

� cyfrowa archiwizacja obiektów rzeczywistych (np. dobra kultury).

Dostępne urządzenie zakłada jedną z prostszych koncepcji realizacji zadania ska-nowania. Jest to optyczna, odbiciowa, aktywna technika akwizycji kształtu [4]. Ska-nowany przedmiot oświetlany jest promieniem lasera przechodzącym wcześniej przezsoczewkę cylindryczną w celu uzyskania linii prostej (oświetlenie strukturalne). Obiektobserwowany jest przez cyfrową kamerę. Na obrazie widoczny jest profil przedmiotuwyznaczony przez płaszczyznę lasera. Po odpowiedniej obróbce obrazu i przy znajomo-ści relacji między orientacją i pozycją kamery, a lasera, można wyznaczyć współrzędneoznaczonych punktów. Dzięki zmienianiu ustawienia obiektu uzyskuje się pełen obrazprzedmiotu. Dane reprezentowane jako chmura punktów mogą zostać poddane dal-szej obróbce w celu dokładniejszego wyznaczenia geometrii. Idea tej techniki zostałaschematycznie przedstawiona na rysunku 1.1.

Rysunek 1.1: Zasada działania urządzenia, ilustracja z wikipedii [11]

1.3 Charakterystyka tematu projektu

1.3.1 Specyfikacja zadania

Projekt ma na celu opracowanie oprogramowania do skanowania obiektów przestrzen-nych z wykorzystaniem skanera 3D (urządzenie wykonane w ramach innego projektu).Aplikacja musi porozumiewać się z urządzeniem w celu wydawania poleceń sterują-cych, pobierać obraz z systemu wizyjnego, dokonywać kalibracji, pomiaru i wizuali-zacji skanowanych przedmiotów. Program ma być obsługiwany za pomocą interfejsugraficznego.

Realizacja projektu opiera się w pewnej mierze na efektach pracy wykonanej przezautora hobbystycznie w czasie poprzedzającym projekt:

3

� framework oprogramowania w języku Python;

� prototyp skanera 3D;

� prosty interfejs graficzny wykonany z użyciem modułu PyGTK;

� wykrywanie linii z oświetlenia strukturalnego obiektu z wykorzystaniem bibliotekiopencv [2];

� próbna wizualizacja chmury punktów w silniku mayavi [10];

� podstawowe przekształcenia geometryczne w SO(3).

1.3.2 Wykorzystana koncepcja mechaniczna

Urządzenie od strony mechanicznej jest platformą z obrotowym talerzem napędzanymprzez krokowy silnik elektryczny (rys. 1.2). W urządzeniu znajduje się przekładniamająca na celu uzyskanie dużej rozdzielczości obrotu. Platforma posiada odpowiedniemocowania na kamerę cyfrową oraz laser oświetlający liniową wiązką skanowany obiekt(rys. 1.3). Zapewnia stabilność oraz powtarzalność warunków skanowania.

Rysunek 1.2: Zmontowane urządzenie skanera

4

Rysunek 1.3: Oświetlanie skanowanych przedmiotów laserem

1.3.3 Podcele i etapy realizacji projektu

W celach sprawnej realizacji projektu, efektywnego podziału czasu i uzyskania jaknajwiększej jakości finalnej wersji oprogramowania, projekt został podzielony na trzynastępujące po sobie tzw. iteracje. W każdej z nich realizowane są osobne zada-nia. Przejście do kolejnej wymaga pozytywnego zakończenia poprzedniej. Obok 3głównych iteracji znajduje się zadanie tworzenia spójnej dokumentacji projektu, któramusi być tworzona regularnie przez cały okres trwania projektu. Pomiędzy iteracjamiprzewidziany został kilkudniowy okres poświęcony na szczegółowe testy wytworzonegooprogramowania. Testy nie są ujęte w poniższym wyszczególnieniu.

� Utworzenie spójnej dokumentacji projektu:

– analiza porównawcza dostępnych rozwiązań (np. doxygen [9], Sphinx[3]),wybranie rozwiązania;

– tworzenie dokumentacji w kodzie (docstrings).

� Iteracja 1. - wstępna wersja oprogramowania:

– kalibracja kamery, research, szukanie literatury;

– generowanie meshy, research, szukanie literatury;

– interfejs:

* analiza przetestowanych rozwiązań i opracowanie schematu,* przejście z pyGTK[7] do PyQt[6];

– prezentacja wyników.

� Iteracja 2. - Usprawnianie:

5

– poprawianie błędów;

– kalibracja kamery;

– generowanie meshy (siatek obiektów).

� Iteracja 3. - Zamykanie projektu:

– poprawianie błędów i usprawnianie kodu;

– sporządzenie raportu;

– prezentacja raportu.

1.3.4 Przewidziany terminarz realizacji poszczególnych pod-celów(z dokładnością do 1 tygodnia)

� Iteracja 1. – 8 kwietnia

� Iteracja 2. – 29 kwietnia

� Iteracja 3. – 27 maj

6

Rozdział 2

Realizacja

2.1 Struktura projektu aplikacji

Aplikacja została napisana w języku Python. Ze względu na złożoność została po-dzielona na części które zawierają zarówno samą aplikację jak i narzędzia oraz testypozwalające na pracę z skanerem oraz dalszy rozwój projektu. Wprowadzono następu-jący podział odpowiadający podziałowi na foldery:

� \ - główne pliki aplikacji skanera, oraz Makefile pozwalający na budowę wybra-nych elementów aplikacji (m.in. narzędzia, interfejs, dokumentacja);

� doc\ - pliki źródłowe dokumentacji w systemie Sphinx, skompilowana wersjadokumentacji oraz raporty;

� tests\ - skrypty testujące wybrane zagadnienia dot. skanowania obiektów prze-strzennych, tworzone w celach dokumentacji lub rozwojowych;

� utils\- narzędzia przydatne w obsłudze skanera (m.in. konsola komunikacji zeskanerem, formatka planszy kalibracyjnej)

� ui\ - pliki Designera Qt4

� modules\ - paczka z modułami Pythona

2.2 Dokumentacja

2.2.1 System dokumentacji

Jako system dokumentacji wybrano narzędzie o nazwie Sphinx. Dostępne w wersjiv0.6.5 oprogramowanie pozwala na szybkie i proste tworzenie dokumentacji koduoprogramowania [3]. Sphinx ma możliwość generowania dokumentacji w formacie.html oraz .tex. Dzięki temu dokumentacja może być tworzona zarówno jako do-kument gotowy do druku jak i jako strona internetowa z dodatkową możliwością wy-szukiwania i przeglądaniem za pomocą kilku typów indeksów.

Dokumentacja w silniku Sphinx tworzona jest na dwa sposoby. Pierwszy z nich totworzenie dokumentacji w kodzie programu posługując się mechanizmem “docstring”.Jest to specyficzna właściwość języka Python pozwalająca na umieszczanie komentarzy

7

wewnątrz kodu w sposób umożliwiający m.in. dostęp do ich treści z poziomu wykony-wanego programu. Dzięki temu mechanizmowi można, posługując się interaktywnyminterpreterem Pythona, na bieżąco sprawdzać opis używanych klas, funkcji czy też na-wet całych modułów. Sphinx potrafi uruchamiać wskazane moduły i skrypty, wyciągaćz nich łańcuchy docstrings i tworzyć automatycznie na ich podstawie opis wybranychelementów.

Druga metoda tworzenia dokumentacji opiera się na tworzonych ręcznie plikach tek-stowych. Sphinx wymaga połączenia ich w logiczną hierarchię. Sam tworzy powiązaniamiędzy wskazywanymi nazwami obiektów, posiada wiele rozszerzeń pozwalających nagenerowanie np. indeksów, list, bloków kodu z kolorowaną składnią, list typu TODO.Dzięki temu możliwe jest grupowanie opisu elementów łączących się ze sobą nie tylkow sposób wynikający ze struktury projektu czy też hierarchii klas ale także w dowolnysposób wynikający z intencji osoby dokumentującej. Dzięki temu możliwe jest tworze-nie w dokumentacji bogatych opisów teoretycznych czy też samouczków zastępującychpodręcznik mniej doświadczonym użytkownikom. Funkcjonalność Sphinxa można roz-szerzać pisząc własne moduły w Pythonie. Na potrzebę Projektu został stworzonyjeden z takich modułów.

Dokumentacja w Sphinxie opiera się na systemie znaczników reStructuredText[1].Jest to system typu WYSIWYG charakteryzujący się estetyką, prostą składnią i dużączytelnością. Sprawia to, że świetnie nadaje się do wykorzystania w opisie za pomocądocstrings oraz jako podstawa systemu do składu bardziej rozbudowanej dokumentacji.Z tego powodu standard ReST został przyjęty we wszystkich docstringach projektu.

2.2.2 Struktura dokumentacji

Stworzona dokumentacja została umieszczona w katalogu doc\ projektu. Wewnątrzznajdują się foldery ze złożonymi raportami, źródłami dokumentacji oraz skompilowanadokumentacja. Dokumentacja w formacie HTML podzielona jest na działy:

� API - opis API projektu czyli modułów, funkcji oraz skryptów narzędzi wraz zdiagramami i komentarzami;

� Zawartość - spis zawartości

� Tutorial - miejsce na umieszczenie tutoriala obsługi aplikacji

� Teoria - wstęp teoretyczny

� TODO - generowana automatycznie lista rzeczy wymagających zmian

Dalszy opis modułów jest poglądowy i przedstawia jedynie ich zastosowanie orazkonkretne algorytmy, które wymagają wyjaśnienia. Szczegółowy opis, znajduje się wźródłach oraz utworzonej dokumentacji w formacie html.

2.3 Pakiet modułów

2.3.1 devices

devices jest modułem odpowiadającym za modelowanie urządzenia skanera oraz ko-munikację z nim. Klasy modułu przedstawione są na diagramie 2.1. Moduł implemen-

8

tuje ponadto funkcję pomocniczą listScannerDevices pozwalającą na wyszukaniepotencjalnych urządzeń skanera.

Rysunek 2.1: Diagram klas modułu devices

videoSource

Klasa videoSource stanowi reprezentację źródła obrazu - w tym przypadku taniejkamery cyfrowej. Interfejs klasy pozwala na podłączenie urządzenia, zmianę jego pod-stawowych parametrów i sprawdzenie stanu.

scanner

Klasa scanner odpowiada za obsługę głównego urządzenia skanera. Do jej możliwościnależy łączenie się z nim przez port szeregowy, sprawdzanie stanu i wydawanie pod-stawowych poleceń. Na potrzeby projektu opracowano prosty protokół komunikacjiskładający się na polecenia zawarte w tabeli 2.1. Z urządzeniem można się komuniko-wać także poza aplikacją. Do tego celu utworzone zostało narzędzie opisane w sekcji2.4.1

polecenie komputera odpowiedź urządzenia znaczenieSprędkość; OK: S ustawienie prędkości obrotu na

wartość prędkośćPkroki; OK: P obrót w prawo o wartość krokiLkroki; OK: L obrót w lewo o wartość krokiV nr wersji OK: V sprawdzanie numeru wersji

Tablica 2.1: Tabela poleceń w protokole komunikacji skanera

2.3.2 processing

Moduł implementujący funkcje przetwarzania obrazu z użyciem opencv niezbędne funk-cje pozwalające na konwersję formatów przechowywania obrazu pomiędzy bibliotekamiOpenCV i Qt4 oraz funkcję realizującą procedurę autoskanowania. Moduł nie imple-mentuje żadnych klas.

9

Wyszukiwanie linii

Funkcją wyszukującą linie w obrazie jest weightLines. Jako parametr przyjmuje onawstępnie przetworzony obraz. Obraz musi zawierać odprogowaną linię, która mogłazostać poddana filtrowaniu w celu usunięcia zakłóceń. Każda z linii przetwarzana jestosobno jako pojedynczy wycinek linii. Przetwarzanie polega na wyznaczeniu środkaciężkości wybranego wycinka linii. Środek ciężkości uznaway jest za środek wycinkalinii i liczony jest według wzoru:

s =

k∑i=0

wii

k∑i=0

i

gdzie wi to jasność i− tego punktu w linii, k to szerokość linii pomniejszona o 1, as to środek ciężkości linii.

Autoskanowanie

Procedura autoskanowania przeprowadzana jest przez funkcję autoScan. Realizuje onaalgorytm przedstawiony na schemacie 2.2.

Skanowanie odbywa się z użyciem urządzenia i źródła obrazu wskazanych w ar-gumentach funkcji. Parametry procedury przekazywane są w krotce krotce. Najważ-niejszy z nich to "rotRes" oznaczający rozdzielczość kołową skanowania w punkrachna pełen obrót (maksymalnie 1160 dla dostępnego urządzenia). Podczas skanowaniawykorzystywany jest moduł obliczeń w SO(3) calculate. Po pomyślnym zakończeniuprocedury skanowania uruchamiany jest widżet zewnętrznego modułu mayavi, któryobsługuje wyświetlanie chmury punktów i manipulację wizualizacją [10]. Podczas ska-nowania na bieżąco wyświetlany jest obraz z kamery oraz pobrane punkty. Wizualizacjata wykonana jest z użyciem udostępnionego w bibliotece OpenCV HighGui. W tymprzypadku zaniechano wykorzystanie pyQt ze wzglęgu na optymalizację.

Konwersja OpenCV - Qt4

Dużym wyzwaniem podczas projektu okazał się problem konwersji między typamiIPLImage w OpenCV oraz QImage w pyQt. Pomimo udostępnionej w interfejsie klasyIPLImage metody tostring() pozwalającej na pobranie danych obrazu w czystej for-mie tekstowej i przekazanie ich do inicjalizatora obiektu QImage nie udało się wykonaćbezpośredniej konwersji pomiędzy tymi klasami. Problem rozwiązano wprowadzającpo drodze konwersję do obiektu klasy PILImage implementowane w module Image(Python Imaging Library). Schemat konwersji przedstawiony jest na diagramie 2.3.

2.3.3 calculate

Moduł calculate implementuje operacje w obrębie specjalnej grupy obrotów (SO3)oraz specjalnej grupy euklidesowej (SE3). Wykorzystuje w tym celu bibliotekę numpyktóra umożliwia m.in. operacje na macierzach. Moduł pozwala na wylicznie nowychwspółrzędnych punktu po transformacji wektorem translacji i rotacji.

10

Rysunek 2.2: Algorytm procedury autoskanowania

Rysunek 2.3: Konwersja pomiędzy IPLImage, a QImage

11

2.3.4 interface oraz calibrateViewWizard

Moduły interface oraz calibrateViewWizard są automatycznie generowane przeznarzędzie pyuic4 służące do tworzenia kodu Pythona dla biblioteki pyQt na podstawieplików ui Designera.

2.4 Narzędzia

2.4.1 serialConsole

Skrypt serialConsole umożliwia komunikację szeregową z urządzeniem skanera. Wy-syła tekstowe zapytania do układu sterownika, a następnie odbiera odpowiedź i wy-świetla ją na ekranie komputera. Przykładowa sesja pracy z urządzeniem:

swistakm@swistakm-laptop:~$ python serialConsole.pyWpisz polecenia.Wpisz exit by wyjść z aplikacji.> V0.9OK: V> exit

2.4.2 Generator plansz do kalibracji kamery

Plik checkboard.ps jest postscriptowym generatorem plansz służących do kalibracjiobrazu z kamery. Plansze mają postać szachownic o określonej ilości pól w pionie ipoziome.

2.5 Aplikacje testowe - kalibracja obrazu

Podczas tworzenia aplikacji powstały drobne aplikacje testowe służące głównie rozwią-zaniu problemu kalibracji. Kalibracja obrazu może zostać przeprowadzona na pod-stawie obrazu planszy kalibracyjnej w postaci szachownicy. Przy odpowiedniej ilościujęć planszy możliwa jest analiza zniekształceń wprowadzanych przez niedoskonałościukładu optycznego oraz wyznaczenie odpowiednich współczynników do kalibracji ob-razu. Cały proces został przeprowadzony z użyciem udostępnianych przez OpenCVfunkcji służączych temu celowi [2].

Przeprowadzone doświadczenia wykazały, że wykorzystana w projekcie kamera matak dobrą optykę, że kalibracja nie poprawia jakości obrazu, a może czasami doprowa-dzić do niechcianych deformacji obrazu. Z tego powodu zaniechano na czas projektuostatecznej implementacji kalibracji obrazu w aplikacji głównej. Mimo to pozostawionookno Wizarda kalibracji jako zalążek pod dalszy rozwój projektu.

2.6 Interfejs aplikacji

Głównym elementem interfejsu aplikacji jest okno podglądu obrazu widoczne na ry-sunku 2.7. Po prawej stronie okna widoczny jest aktualny podgląd obrazu z kameryoraz 4 zakładki wyświetlania:

12

Rysunek 2.4: Przykład wyszukiwania wierzchołków szachownicy na obrazie z kamery

� Z kamery - nieprzetworzony obraz z kamery (rys. 2.7).

� Progowany - obraz wyprogowany zadanym progiem czerwieni (rys. ??).

� Wygładzony - progowany obraz wygładzony zadanym filtrem (rys. ??).

� Przetworzony - aktualny obraz z kamery po nałożeniu punktów ostanich pobra-nych punktów obrazu (rys. 2.8).

Prawa część ekrany zawiera kontrolki służące do doboru nastaw skanera oraz ręcz-nego nawiązywania połączenia z urządzeniami:

� Auto - przeprowadzanie procedury autoskanowania. Możliwe jeśli nastąpiło po-łączenie z urządzeniem i źródłem obrazu.

� Podłącz skaner.

� Podłącz kamerę.

� Kalibruj obraz - uruchomienie wizarda kalibracji obrazu (wizard uruchamia siępoprawnie ale nie posiada jeszcze możliwości kalibracji - szczegóły w sekcji 2.5.

� Kalibruj perspektywę (nieaktywne)

� Port USB - port szeregowy urządzenia. Lista dostępnych portów uaktualnianajest automatycznie.

� Próg czerwieni - wartość operacji progowania obrazu.

� Rozdzielczość - rozdzielczość kołowa skanowania.

� Filtrowanie - dostępne filtry obrazu.

� Renderuj punkty - renderowanie punktów na podglądzie “Przetworzony”.

13

Rysunek 2.5: Okno główne aplikacji

Rysunek 2.6: Obraz po progowaniu - widoczne zakłócenia

14

Rysunek 2.7: Obraz po filtrowaniu filtrem medianowym - widoczna eliminacja zakłóceń

Rysunek 2.8: Okno z renderowanymi punktami

15

2.6.1 Kreator kalibracji

Pomimo, że nie podpięto ostatecznie funkcji kalibracji, w projekcie pozostawiono kre-ator kalibracji. Kolejne okna przedstawione są na rysunkach 2.11 - ??. W założeniukreator ma umożliwić proces kalibracji zniekształceń obrazu w sposób szybki i wy-godny. Przewidziano możliwość zapisu informacji o znieksztalceniach tak aby możnabyło wykorzystać ją w przyszłości.

Rysunek 2.9: Pierwsze okno kreatora kalibracji

Rysunek 2.10: Drugie okno kreatora kalibracji

Rysunek 2.11: Trzecie okno kreatora kalibracji

16

2.7 Wyniki - testy

Przeprowadzono testy działania aplikacji. Skaner w kontrolowanych warunkach po-prawnie skanuje obiekty (rys. 2.12). Aby uzyskać zadowalające wyniki należy dokład-nie dobrać parametry skanowania (tj. rozdzielczość kołowa, próg czerwieni, filtr) wzależności od oczekiwanych wyników. Podczas testów wyszczególniono kilka czynni-ków które mogą utrudnić lub nawet uniemożliwić poprawny skan obiektu.

(a) Skanowany obiekt (b) Wizualizacja w mayavi

Rysunek 2.12: Efekt poprawnego skanowania obiektu

2.7.1 Nieprawidłowe oświetlenie sceny

Nieprawidłowe oświetlenie sceny wpływa negatywnie na jakość skanu. Zmniejsza kon-trast linii i przez to ogranicza ilość dokładnych punktów pomiaru (rys. ??). Punktoweźródło światła może dodatkowo wprowadzić stałe zakłócenie w skanowanym obrazie(rys. 2.13b). Idealnym rozwiązaniem byłoby umieszczenie skanera w szczelnej obudo-wie nie wpuszczającej do wewnątrz światła, a od wewnątrz pokrytej dobrze rozprasza-jącym światło materiałem.

2.7.2 Zmiana pozycji przedmiotu

Jednym z poważniejszych problemów jest przesuwanie się przedmiotów podczas skano-wania (rys. 2.12). Jest to efekt nieunikniony w przypadku braku stałego przytwier-dzenia przedmiotu do podłoża. Rozwiązaniem minimalizującym efekt może być od-powiednie sterowanie silnikiem w celu zmniejszenia wibracji lub próba zamodelowaniapoślizgów.

2.7.3 Niepoprawne przetwarzanie danych

Część zakłóceń systemu wizyjnego można usunąć odpowiednimi filtrami, jednak wprzypadku zbyt dużej ich ilości jedynym wyjściem jest zmiana podejścia do skanowaniadanych. Zaproponowany w projekcie algorytm wyszukiwania linii lasera jest bardzoprosty ze względu na specyfikę problemu. Nie poradzi sobie jednak z sytuacjami gdy

17

(a) Słaby kontrast linii (b) Widoczne punktowe odbicie diody lasera naścianie skanera

Rysunek 2.13: Efekt nieprawidłowego oświetlenia sceny

(a) Skanowana scena (b) Efekt przeprowadzonego skanu

Rysunek 2.14: Efekt przesuwania się przedmiotów pod wpływem drgań silnika

18

wiązka za bardzo rozproszy się na przedmiocie lub zostanie rozszczepiona. W tymprzypadku należałoby zaproponować inny, bardziej efektywny algorytm.

2.8 Wnioski

W ramach projektu udało się zrealizować większość zamierzonych celów, a zadania owysokim priorytecie zostały wykonane w całości. Program działa poprawnie i wedługspecyfikacji. Problemy, na które natrafiono podczas realizacji zostały rozwiązane.

Podczas realizacji i testów stwierdzono kilka możliwości dalszego rozwoju projektu:

� dokończenie obsługi kalibracji

� umożliwienie generowania siatek obiektów

� współpraca z oprogramowanie do grafiki 3D (np. Blender ze względu na imple-mentacje w Pythonie)

� udoskonalenie algorytmów przetwarzania obrazu

� udoskonalenie konstrukcji mechanicznej

Testy na wykazują, że urządzenie spełnia swe wymagania. Podejście modułowe doproblemu zapewnia możliwość łatwego rozszerzenia specyfikacji urządzenia i oprogra-mowania oraz dodawanie rozszerzeń.

2.9 Zawartość raportu

Pełen raport zawiera:

� ten dokument,

� źródła aplikacji, narzędzi i testów,

� źródła dokumentacji i skompilowaną dokumentację,

� raport z realizacji projektu urządzenia u dra M. Wnuka [5].

19

Bibliografia

[1] Markup syntax and parser component of docutilse.http://docutils.sourceforge.net/rst.html.

[2] G. Bradski and A. Kaehler. LearningOpenCV. O’Reilly Media, Inc., 2008.

[3] G. Brandl. Sphinx python documentation generator. http://sphinx.pocoo.org/.

[4] B. Curless. http://www.cs.cmu.edu/~seitz/course/Sigg00/notes.html,2000. Notatki do wykładów z fotografii 3D - techniki aktywne.

[5] M. Jaworski, 2010. Raport z realizacji projektu ”Urządzenie skanera 3D”.

[6] R. C. Limited. Pyqt v4 - python bindings for qt v4, reference guide.http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html.

[7] T. G. Project and P. Team. Gtk+ for python. http://www.pygtk.org/.

[8] S. Seitz. http://www.cs.cmu.edu/~seitz/course/Sigg00/notes.html, 2000.Notatki do wykładów z fotografii 3D - wstęp.

[9] D. van Heesch. Doxygen. http://www.doxygen.nl/.

[10] P. R. . G. Varoquaux. http://code.enthought.com/projects/mayavi/docs/development/html/mayavi/index.html. Dokumentacja mayavi.

[11] Wikipedia. http://en.wikipedia.org/wiki/3D_scanner. Artykuł na angielsko-języcznej wikipedii.

20