KATEGORIE:

Ta strona wykorzystuje pliki cookies (ciasteczka) tylko w celu budowy statystyki odwiedzin. Możesz zablokować tę funkcję w swojej przeglądarce.




Skaner 3D (024; 18.02.2010; blender)

 

 

Konstrukcja.

 

Konstrukcja przedstawionego tu skanera nastawiona była na użycie dostępnych pod ręką przedmiotów i w przedstawionej tu formie spełniła swoje zadanie, którym było pokazanie prostej możliwości dość dokładnego skanowania obiektów trójwymiarowych (wcześniej powstały jeszcze 3 mniej udane prototypy). W konstrukcji użyto następujących elementów:

 

aparat fotograficzny z możliwością nagrywania filmów (tu rozdzielczość 640x480, 30klatek/s),

 

wskaźnik laserowy uzupełniony o końcówkę pozwalającą na uzyskanie wiązki liniowej (końcówka wymontowana z najprostszej i najtańszej poziomicy laserowej),

 

gramofon jako napęd obrotowy układu skanującego. Zmodyfikowany z użyciem wolnoobrotowego silniczka i sterowany z użyciem Arduino.

 

Poza tym przydała się również deska jako element montażowy.

 

 

 

Zasada działania.

 

Aparat ustawiony w osi obrotu nagrywa kształt linii lasera na powierzchni obiektów (najlepiej w ciemności). Zniekształcenie linii odpowiada zniekształceniu przedmiotów i wynika ze sposobu umiejscowienia lasera względem aparatu. Niezwykle ważne jest tu obracanie układu z możliwie stałą prędkością. Dodatkowo znaczny wpływ na dokładność odwzorowania wymiarów i geometrii przedmiotów ma kalibracja układu. Zasadę działania przybliżyć może poniższy schemat:

 

 

Dla zmierzonych wartości kalibracyjnych a, b i c, ułożenie odpowiednich zależności geometrycznych pozwala określić współrzędne punktów zeskanowanych.

 

 

 

Oprogramowanie.

 

Do przetworzenia zarejestrowanego obrazu na chmurę punktów użyłem Blendera 2.49b oraz specjalnie opracowanego skryptu w języku Python. Niezbędna była również biblioteka Python Image Library (PIL-1.1.7.win32-py2.6). Konieczne było niestety przerobie pliku wideo formatu *.mov na wymagany przez bibliotekę PIL format *.gif, co pogorszyło jakość przetwarzania obrazu (format gif obsługuje tu tylko 256 kolorów).

 

W przygotowaniu skryptu niezwykle pomocne były poradnik do biblioteki PIL, oraz API Blendera 2.49b.

 

 

 

Rezultaty.

 

Poniższe ilustracje przedstawiają skan pomieszczenia wykonany w jednej operacji:

 

 

 

 

 

 

 

Parametry przedstawionego skanu:
  pełen obrót skanera,
  czas rejestracji wideo: 82s,
  czas generowania chmury punktów na podstawie wideo: 115s,
  liczba wygenerowanych punktów: 72 000.

 

Plik zawierający zeskanowaną chmurę punktów: Room.blend.

 

 

Szybki skan twarzy:

 

Skan z automatycznym uzupełnianiem powierzchni między punktami:

 

Utworzona wyżej siatka po usunięciu zbędnych powierzchni i szybkiej obróbce 'sculp':

 

 

 

 

I co dalej?

 

Dalszy rozwój projektu wymagałby obróbki obrazów video lepszej jakości, a w przypadku obiektów o małych wymiarach niezbędne było by ulepszone źródło wiązki światła. Istotnym problem ze względu na obróbkę obrazu skanowanego jest występowanie innych źródeł światła jak również odbić lasera od powierzchni połyskujących. Ciekawym zagadnieniem jest też dobór odpowiedniego filtru obrazu wideo (czasem czerwony laser lepiej odczytywać z kanału zielonego niż z czerwonego).
Odrębną, lecz niezwykle istotną kwestią jest utowrzenie siatki powierzchniowej (siatki trójkątów lub kwadratów) na podstawie otrzymanej chmury punktów - bez tej operacji praktycznie nie jest możliwe otrzymanie renderingów na podstawie przedstwionego skanu. Łączenie punktów w ściany z użyciem skryptu jest dość proste, jednak niezbędny jest tu odpowiedni algorytm. Spośród programów do obróbki chmur punktów polecić mogę MeshLab'a (open source).

 

ostatnia aktualizacja: 03.03.2010

 

© Copyright Sebastian Korczak 2009 - 2017