Sunday, May 5, 2013

Fabian David Tschopp - Swiss youth in science portrait - Intel ISEF abstract

Bau und Programmierung eines 3D-Scanners

Würdigung durch den Experten
Prof. Heinz Domeisen
3D-Darstellung von Objekten ist ein sehr aktuelles Thema. Fabian Tschopp wollte hinter die Kulissen blicken und die Zusammenhänge verstehen. Er hat deshalb einen Scanner für kleinere Objekte selbst entwickelt. Dank dem sich selbst auferlegten «strengen Zeitplan» konnte er sowohl die mathematischen Herausforderungen als auch die Hard- und Software rechtzeitig fertigstellen - mit ausführlichem Benutzerhandbuch. Er zeigt mit dieser Arbeit, dass er fähig ist, interdisziplinäre Problemstellungen gezielt anzupacken und auch mit begrenztem Aufwand ein hochgestecktes Ziel zu erreichen.


Fragestellung
In jüngster Zeit kommen immer mehr 3D-Techniken zum Einsatz wie 3D-Fernseher, Kinos und Drucker. Diese machen auch die Verwendung von 3D-Scannern immer interessanter.
Das Ziel meiner Arbeit war es, einen 3D-Scanner zu entwickeln, mit dem Ziel, eingescannte Objekte am Computer dreidimensional darstellen zu können. Die Zusatzziele waren Farberfassung (Texturierung) und Speicherung in den geeigneten 3D-Formaten. Dazu notwendig war also Folgendes:
- Entwickeln einer Software für die Scanner-Simulation
- Bau des Scanner-Prototyps - Schnittstelle zwischen Hardware und Software
- Evaluieren der Kamera
- Entwickeln einer Software zur Steuerung, Auswertung und Anzeige des Scans
- Benutzerhandbuch
- Schriftliche Dokumentation

Methodik
Am Anfang steht die Simulationssoftware, welche die gesamte Hardware in einer 3D-Szene simuliert. Sie ist die Machbarkeitsstudie für die Arbeit, wird aber auch als Evaluation für die Hardware verwendet. Dadurch ist es möglich, die optimalen Abstände zwischen Kamera, Drehteller und Lasermodul sowie den Winkel zwischen Kamera und Laser zu ermitteln. Anhand dieser Daten wird die Hardware ausgewählt und zusammengebaut. Der Scanner besteht hauptsächlich aus einem USB-Interface, Steuerelektronik, einem Drehteller mit Schrittmotor, dem LED-Linienlaser- Modul, 6 weissen LEDs und einer Webcam.
Bei der Entwicklung des Prototyps und der Software ist besonders die Benutzerfreundlichkeit wichtig. Die Hauptsoftware wird schlussendlich von der Simulation (3D-Szene) auf die richtige Hardware (Webcam) angepasst und optimiert sowie die Steuerung der Elektronik (USB-Interface) implementiert.
Alle Softwareteile wurden mit der Programmiersprache BlitzMax mit Maxgui (GUI/Benutzeroberflächen-Modul) sowie miniB3D (3D-Visualisierung, OpenGL) geschrieben.

Ergebnisse
Der Scanner kann 3D-Objekte erfassen und darstellen. Pro Scan werden dabei bis zu 3 GB (VGA-Kamera) oder 9 GB (720p-Kamera) an Bildmaterial verarbeitet. Massgebend hierfür sind die Kameraauflösung und die Anzahl Schritte, die das Objekt während einer Umdrehung auf dem Drehteller macht:
2 Umdrehungen · 1752 Schritte · 3 Bytes pro Pixel · 1280x720 Pixel (0.9 Megapixel) = 9 GB. Die maximale Schrittzahl pro Umdrehung ist durch den Schrittmotor und die Umsetzung auf den Drehteller bedingt. Aus jeder vertikalen Linie auf dem Kamerabild wird ein 3D-Punkt errechnet. Es werden also je nach Auflösung zwischen 800‘000 und 1‘300‘000 Punkte pro Scan berechnet. Diese werden dann durch Triangulation zu Polygonen verbunden und bilden so die Oberfläche des Körpers.
Ein Scan besteht aus zwei Durchläufen. Beim ersten werden alle 3D-Punkte errechnet (Laser) und beim zweiten wird ein Mantelbild (Textur, Farben, durch LEDs belichtet) des Objektes erstellt. Das Resultat kann im .x (DirectX) oder .obj (Alias Wavefront) Format gespeichert werden, die dann in anderen Programmen geöffnet und bearbeitet werden können.

Diskussion
Es gelang mir, diverse Objekte dreidimensional am Computer inklusive Farben zu erfassen, darzustellen und zu speichern. Während eines Scans fällt eine beträchtliche Datenmenge an. Von Hand wäre es nicht denkbar, alle 3D-Koordinaten eines Objektes aus den Kamerabildern zu errechnen. Da dieser 3D-Scanner nur die Oberfläche abtastet, sind einige Beschränkungen vorhanden. So kann das Innere der Körper mit einer optischen Methode wie dieser nicht bestimmt werden und der Scanner- Prototyp begrenzt die Grösse auf maximal 20cm Breite und 16cm Höhe. Weil der Scanner auf einem 650nm Laser basiert (rot) sind auch stark reflektierende Oberflächen wie Metall und lichtdurchlässige Körper aus Glas nicht für einen Scan geeignet. Die Qualität der Scans hängt sehr stark von der Genauigkeit der verwendeten Scanner-Hardware ab: Wichtig für präzise Scans sind eine hohe Kameraauflösung und eine möglichst dunkle Umgebung, da sonst Umgebungslicht und Laserstrahl nicht mehr unterscheidbar sind.

Schlussfolgerung
Die Arbeit zeigt, dass es möglich ist, einen kostengünstigen 3D-Scanner zu bauen, der hochauflösende Scans erstellen kann. Die Technik lässt sich auch für grössere Objekte verwenden, wenn man den Prototyp entsprechend skaliert. Die Qualität der Scans liesse sich durch bessere Kameras und eine höhere Umsetzung auf den Drehteller noch wesentlich steigern.

--------------------------------------------------------------------------------

Building and Programming of a 3D-Scanner
Various 3D techniques have recently been used in televisions, cinemas and 3D printers. These applications make the use of 3D scanners more important. 3D scanners capture objects in three dimensions and output a 3D mesh, while stereoscopic approaches only yield pictures from two different angles.
The goal of this work was to develop a 3D scanner which is able to scan objects and visualize them in 3D on a computer. User-friendliness, low costs and high scanning resolution were important objectives.
This approach uses a line laser module (a laser pointer with a special lens), a customary USB webcam and a turntable powered by a stepping motor. The development of novel algorithms for picture filtering, camera calibration and surface reconstruction was necessary in order to achieve high accuracy. Before building the hardware, a 3D simulation software was designed to compute the optimal physical parameters of the scanner. The software is written in Java with Swing, OpenGL and OpenCV.
The finalized 3D scanner consists of a scanner prototype, computer software for the scanner and the documentation. The scanner outperforms similar commercial solutions in terms of both features and quality. Per scan, up to 9GB (720p camera) of picture material is being processed. This leads up to 1’300’000 vertices per object. Color information can be captured during a second scan and is directly mapped onto the 3D mesh. The scanning process takes ten to twenty minutes.
The scans can be used in 3D games as well as for surface size and volume computation.

No comments:

Post a Comment