© best_vector/Shutterstock.com
Windows Developer
Microsoft Kinect zum 3-D-Scanner umrüsten

Kalte Fusion

3-D-Drucker haben mittlerweile den Massenmarkt erobert. Dennoch bestehen in der Praxis einige Schwierigkeiten: Probleme bei der Kalibrierung und das Erzeugen von druckfertigen Vorlagen sind die häufigsten. Microsofts Kinect in der zweiten Generation will Abhilfe schaffen und bietet einen sehr genauen Tiefenscanner an, der einen planaren Scan von vor ihm befindlichen Objekten anfertigen kann. Verändert man die Position des Sensors nun periodisch, gewinnt man eine Vielzahl verschiedener Perspektiven - ihr Zusammenfügen ist ein mathematisch stabiles, aber rechenaufwendiges Verfahren.

Tam Hanna


Entwickler müssen sich nicht mehr mit der Realisierung von Fusionsalgorithmen befassen: Microsofts Kinect-SDK bietet einige schlüsselfertige Pipelines an, die das Einscannen von Objekten erleichtern. Die folgenden Schritte basieren auf einer aktuellen Version des 2.0-SDK für Kinect 2 – Betaversionen des Produkts bieten ihren Nutzern weniger Rekonstruktionsalgorithmen an.

Der hohe Speicherbedarf ist allen Algorithmen gemein. Rekonstruktions-Engines arbeiten im Allgemeinen mit Voxeln, die Sie sich als dreidimensionale Miniwürfel vorstellen können. Microsoft schweigt sich in der Dokumentation über den genauen Speicherbedarf pro Voxel aus, gibt aber an, dass ohne Farbinformationen 640 x 640 x 640 = 262 144 000 Voxel in 1,5 GB passen – mit Farbinformationen verdoppelt sich der Speicherbedarf.

Die Größe der Rekonstruktionsarbeitsfläche hängt dann von der Menge der Voxel pro Meter ab: Je höher dieser Wert, desto genauer die Ergebnisse und desto höher der Speicherverbrauch.

Aber nun los!

Die für Fusion erforderliche Rendering-Pipeline ist immens komplex: Wer selbst erste Versuche wagen möchte, sollte dies auf Basis des KinectFusionExplorer-WPF-Beispiels versuchen. Es handelt sich dabei um eine klassische WPF-Applikation: Universal Windows Applications unterliegen im Moment Einschränkungen beim Zugriff auf die Sensorhardware.

Die vier Klassen KinectFusionHelper, MathUtils.cs, GraphicsCamera und ScreenSpaceLines3D sind für uns im Moment nicht weiter relevant. Sie realisieren die Rendering-Logik und/oder Matrixmathematik, die in den meisten Fällen unverändert übernommen werden kann. Die eigentliche Errichtung der Pipeline beginnt mit der Suche nach kompatibler Hardware. GetDeviceInfo sucht bei Übergabe von -1 nach dem Default-Gerät, und das Setzen des Flags Amp informiert die Klasse darüber, dass wir uns auf die Jagd nach einer Grafikkarte machen wollen (Listing 1).

Listing 1private void Window_Loaded(object sender, RoutedEventArgs e){ int deviceMem = 0; string deviceD = string.Empty; string devicePath = string.Empty; FusionDepthProcessor.GetDeviceInfo(ReconstructionProcessor.Amp, -1, out deviceD, out devicePath, out deviceMem);

Im nächsten Schritt wird Kinect zum Anliefern von Tiefen- und Farbframes konfiguriert. Aufgrund der Einfachheit der Aufgabe drucken wir diesen (sehr umfangreichen) Code nicht ab. Das gilt auch für die Speicherallokation, die hier nicht weiter interessiert.

In der für das Entgegennehmen von Frames zuständigen Methode Reader_MultiSourceFrameArri...

Windows Developer
Microsoft Kinect zum 3-D-Scanner umrüsten

Kalte Fusion

3-D-Drucker haben mittlerweile den Massenmarkt erobert. Dennoch bestehen in der Praxis einige Schwierigkeiten: Probleme bei der Kalibrierung und das Erzeugen von druckfertigen Vorlagen sind die häufigsten. Microsofts Kinect in der zweiten Generation will Abhilfe schaffen und bietet einen sehr genauen Tiefenscanner an, der einen planaren Scan von vor ihm befindlichen Objekten anfertigen kann. Verändert man die Position des Sensors nun periodisch, gewinnt man eine Vielzahl verschiedener Perspektiven - ihr Zusammenfügen ist ein mathematisch stabiles, aber rechenaufwendiges Verfahren.

Tam Hanna


Entwickler müssen sich nicht mehr mit der Realisierung von Fusionsalgorithmen befassen: Microsofts Kinect-SDK bietet einige schlüsselfertige Pipelines an, die das Einscannen von Objekten erleichtern. Die folgenden Schritte basieren auf einer aktuellen Version des 2.0-SDK für Kinect 2 – Betaversionen des Produkts bieten ihren Nutzern weniger Rekonstruktionsalgorithmen an.

Der hohe Speicherbedarf ist allen Algorithmen gemein. Rekonstruktions-Engines arbeiten im Allgemeinen mit Voxeln, die Sie sich als dreidimensionale Miniwürfel vorstellen können. Microsoft schweigt sich in der Dokumentation über den genauen Speicherbedarf pro Voxel aus, gibt aber an, dass ohne Farbinformationen 640 x 640 x 640 = 262 144 000 Voxel in 1,5 GB passen – mit Farbinformationen verdoppelt sich der Speicherbedarf.

Die Größe der Rekonstruktionsarbeitsfläche hängt dann von der Menge der Voxel pro Meter ab: Je höher dieser Wert, desto genauer die Ergebnisse und desto höher der Speicherverbrauch.

Aber nun los!

Die für Fusion erforderliche Rendering-Pipeline ist immens komplex: Wer selbst erste Versuche wagen möchte, sollte dies auf Basis des KinectFusionExplorer-WPF-Beispiels versuchen. Es handelt sich dabei um eine klassische WPF-Applikation: Universal Windows Applications unterliegen im Moment Einschränkungen beim Zugriff auf die Sensorhardware.

Die vier Klassen KinectFusionHelper, MathUtils.cs, GraphicsCamera und ScreenSpaceLines3D sind für uns im Moment nicht weiter relevant. Sie realisieren die Rendering-Logik und/oder Matrixmathematik, die in den meisten Fällen unverändert übernommen werden kann. Die eigentliche Errichtung der Pipeline beginnt mit der Suche nach kompatibler Hardware. GetDeviceInfo sucht bei Übergabe von -1 nach dem Default-Gerät, und das Setzen des Flags Amp informiert die Klasse darüber, dass wir uns auf die Jagd nach einer Grafikkarte machen wollen (Listing 1).

Listing 1private void Window_Loaded(object sender, RoutedEventArgs e){ int deviceMem = 0; string deviceD = string.Empty; string devicePath = string.Empty; FusionDepthProcessor.GetDeviceInfo(ReconstructionProcessor.Amp, -1, out deviceD, out devicePath, out deviceMem);

Im nächsten Schritt wird Kinect zum Anliefern von Tiefen- und Farbframes konfiguriert. Aufgrund der Einfachheit der Aufgabe drucken wir diesen (sehr umfangreichen) Code nicht ab. Das gilt auch für die Speicherallokation, die hier nicht weiter interessiert.

In der für das Entgegennehmen von Frames zuständigen Methode Reader_MultiSourceFrameArri...

Neugierig geworden?


    
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang