Commit 13dc0668 by wester

more

parent 003d03b4
\chapter{Punktwolke} \chapter{Punktwolke}
\label{chapter:03points} \label{chapter:03points}
Das Erzeugen der Punktwolke soll einfach und schnell funktionieren und mit einer Kinect erfolgen. Das Erzeugen der Punktwolke soll einfach und schnell sein und mit einer Kinect erfolgen.
Aus einem Frame der Kinect, bestehnd aus Farbbilde und Tiefenbild, lässt sich einfach eine Punktwolke relativ zur Tiefenkamera der Kinect errechnen. Aus einem Frame der Kinect, bestehnd aus Farbbild und Tiefenbild, lässt sich einfach eine Punktwolke relativ zur Tiefensensor der Kinect errechnen.
Eine Aufnahme beinhaltet aber nur alle Informationen die aus den 2D Bilder errechnet werden können. Eine Aufnahme beinhaltet aber nur alle Informationen die aus den 2D Bilder errechnet werden können.
Das heißt man erhält nur eine Seite des Objektes gut aufgelöst und einige Artefakte die sich aus dieser Berechnung ergeben. Das heißt man erhält eine Seite des Objektes gut aufgelöst und Artefakte die sich aus dieser Berechnung ergeben.
Für die Darstellung in einer VR Umgebung ist dies nicht ausreichend. Für die Darstellung in einer VR Umgebung ist dies nicht ausreichend.
Der Betrachter kann sich frei in der virtuellen Welt bewegen und erkennt schnell die nicht vorhanden Informationen und Fehler. Der Betrachter kann sich frei in der virtuellen Welt bewegen und erkennt schnell die nicht vorhanden Informationen und Fehler.
Ein Fehler entsteht zum Beispiel bei Kanten und Flächen die nicht Senkrecht zur Kamera sind Eine Fehlerquelle sind die Kanten von Objekten zu Flächen die von der Kienct nicht gesehen werden.
Die unausreichendne Informationen in den Ausgangsdaten werden falsch angenähert und ergeben falsche Flächen. (siehe \ref{img:KinectSides} ). Das Bild der Kinect ist perspektivisch und wird beim errechne der Punktwolke dort ein Punkt approximiert, dann entstehen Flächen die nicht der Realität entsprechen. (siehe \ref{img:KinectSides} ).
\todo{Bild 2 ändern / vergrößern?} \todo{Bild 2 ändern / vergrößern?}
\begin{figure} \begin{figure}
\label{img:KinectSides} \label{img:KinectSides}
\subfigure[Aufnahme aus Sicht der Kinect ]{\includegraphics[width=0.49\textwidth]{Bilder/1FrameKamera.png}} \subfigure[Aufnahme aus Sicht der Kinect ]{\includegraphics[width=0.49\textwidth]{Bilder/1FrameKamera.png}}
\subfigure[Aufnahme von der Seite]{\includegraphics[width=0.49\textwidth]{Bilder/1FrameSeite.png}} \subfigure[Aufnahme von der Seite]{\includegraphics[width=0.49\textwidth]{Bilder/1FrameSeite.png}}
\caption{Aufnahmen aus verscheidenen Perspectiven In Bild b) sind falsche Punkte zu sehen die durch die Rekonstruktion aus einem 2D Bild entstehen.} \caption{Aufnahme der Kinect aus verscheidenen Perspectiven In Bild b) sind falsche Punkte zu sehen die durch die Rekonstruktion aus einem 2D Bild entstehen.}
\end{figure} \end{figure}
Das zweite Problem das es zu lösen galt war das zusammenfügen von mehreren Aufnahmen aus unterschiedlichen Perspektiven zu einer großen zusammenhängenden Punktwolke. Das zweite Problem das es zu lösen galt war das Zusammenfügen von mehreren Aufnahmen aus unterschiedlichen Perspektiven zu einer großen zusammenhängenden Punktwolke.
Um 2 Frames miteinander zu verbinden braucht man die relative Transformation zwischen den beiden Aufnahmen, bzw. absolute Kamerapositionen. Um 2 Frames miteinander zu verbinden braucht man die relative Transformation zwischen den beiden Aufnahmen.
Bei bestehenden Algorithmen wird dies zum Beispiel durch Featureerkennung oder zurückrechnen der Kamerabewegung erreicht \todo{quellen}. Bei bestehenden Algorithmen wird dies zum Beispiel durch zurückrechnen der Kamerabewegung erreicht \todo{quellen}.
Solche verfahren sind meist rechenaufwändig und zeitintensiv. Solche verfahren sind meist rechenaufwändig und zeitintensiv.
Für diese Arbeit war es das Ziel die Kinect mit dem Lighthouse Tracking System zu verbinden. Für diese Arbeit war es das Ziel die Kinect mit dem Lighthouse Tracking System zu verbinden.
Die Trackingdaten aus SteamVR, bzw OpenVR geben uns eine globale Position aller Aufnahmen und vereinfachen das Erzeugen einer großen Punktwolke. Die Trackingdaten aus SteamVR, bzw OpenVR geben uns eine globale Position aller Aufnahmen und vereinfachen das Erzeugen einer großen Punktwolke.
...@@ -39,19 +39,21 @@ Die Rohdaten sind teilweise sehr verrauscht und so erhält man eine Punktwolke m ...@@ -39,19 +39,21 @@ Die Rohdaten sind teilweise sehr verrauscht und so erhält man eine Punktwolke m
Hierfür braucht man einen Filter der zwar die Flächen glättet, aber gleichzeitig Objektkanten erhält. Hierfür braucht man einen Filter der zwar die Flächen glättet, aber gleichzeitig Objektkanten erhält.
Ein Bilateral Filter erzielt den gewünschten Effekt ist aber relativ Rechenaufwändig. Ein Bilateral Filter erzielt den gewünschten Effekt ist aber relativ Rechenaufwändig.
Verwendet wurde der Filter der in dem Paper \cite{Martin:2014:RTH} vorgestellt wird. Verwendet wurde der Filter der in dem Paper \cite{Martin:2014:RTH} vorgestellt wird.
Hierbei wird zunächst das Bild mit einem Gausfilter geglättet und anschließend mit dem Original vergleiche um dabei entstehende Artefakte zu entfernen. Hierbei wird zunächst das Bild mit einem Gausfilter geglättet.
Dieser ist nicht Kanten erhaltend, deshalb wird das geglättet Bild anschließend mit dem Original verglichen.
Bei zu starker Abweichung vom Original wird der Wert des Pixels au das Original zurückgesetzt.
Nach der Glättung des Tiefenbildes wird dieses in eine Punktwolke umgewandelt. Nach der Glättung des Tiefenbildes wird dieses in eine Punktwolke umgewandelt.
Hierfür wurde ebenfalls das Microsoft Kinect SDK verwendet das alle benötigten Methoden bereitstellt. Hierfür wurde ebenfalls das Microsoft Kinect SDK verwendet das alle benötigten Methoden bereitstellt.
Nach der Umwandlung werden noch weiter Punkte verworfen. Nach der Umwandlung werden noch weiter Punkte verworfen.
Zunächst werden alle Punkte zu denen keine Farbe zugeordnet werden kann verworfen. Zunächst werden alle Punkte ohne zuordnungsfähige Farbe verworfen.
Auch alle Punkte die zu nah oder zu weit vom Sensor entfernt sind, werden nicht weiter betrachtet. Auch alle Punkte die zu nah oder zu weit vom Sensor entfernt sind, werden nicht weiter betrachtet.
Je weiter das Objekt entfernt, desto ungenauer werden die Aufnahmen. Je weiter das Objekt entfernt, desto ungenauer werden die Aufnahmen.
Im folgenden wurde ein Mindestabstand von 30cm und ein Maximalabstand von 90cm verwendet. Im folgenden wurde ein Mindestabstand von 30cm und ein Maximalabstand von 90cm verwendet.
Als letztes filtern wir alle Flächen die nicht Senkrecht zur Kamera sind (siehe Abb \ref{img:KinectSides} b) Als letztes filtern wir alle Flächen deren Oberflächennormale zu weit von dem Kameravektor abweicht(siehe Abb \ref{img:KinectSides} b)
Diese Flächen entstehen durch die Umwandlung von einem 2D Tiefenbild in einer 3D Punktwolke. Diese Flächen entstehen durch die Umwandlung des 2D Tiefenbilds in einer 3D Punktwolke.
Die benötigten Informationen fehlen an dieser Stelle und Punkte werden auf die Fläche zwischen Oberflächenobjekt und Hintergrund gesetzt. Die benötigten Informationen fehlen an dieser Stelle und Punkte werden auf die Fläche zwischen Oberflächenobjekt und Hintergrund gesetzt.
Diese Ebene stimmt nicht mit der wirklichen Oberfläche überein und müssen entfernt werden. Diese Ebene stimmt nicht mit der wirklichen Oberfläche überein und müssen entfernt werden.
Hierfür wird die Oberflächennormale verwendet. Hierfür wird die Oberflächennormale verwendet.
......
...@@ -9,11 +9,13 @@ Bei synchronisierten Welten zwischen VR und AR sollte dieser Strahl auch in der ...@@ -9,11 +9,13 @@ Bei synchronisierten Welten zwischen VR und AR sollte dieser Strahl auch in der
\section{Unreal Engine 4 und HoloLens} \section{Unreal Engine 4 und HoloLens}
Es gibt keinen Offiziellen Support der HoloLens für dei Unreal Engine 4. Es gibt keinen Offiziellen Support der HoloLens für dei Unreal Engine 4.
Aktuell wird das einwickeln für die neue AR Plattform nur in Unity unterstützt. Aktuell wird das einwickeln für die neue AR Plattform nur in Unity unterstützt.
Microsoft hat auf Github einen Fork der Unreal Engine \todo{citehttps://github.com/MICROSOFT-XBOX-ATG/MICROSOFT_UWP_UNREAL/tree/dev_MixedReality} in dem Support für die Universel Windows Plattform (UWP)\todo{glossar} enthalten ist. Microsoft hat auf Github einen Fork der Unreal Engine \todo{cite} in dem Support für die Universel Windows Plattform (UWP)\todo{glossar} enthalten ist.
%https://github.com/MICROSOFT-XBOX-ATG/MICROSOFT_UWP_UNREAL/tree/dev_MixedReality
UWP beitet eine allgemeine Plattform Für Apps, die auf allen Windows basierten Systemen funktionieren. UWP beitet eine allgemeine Plattform Für Apps, die auf allen Windows basierten Systemen funktionieren.
In diesem Repositoy befindet sich auch ein Development Branch der die HoloLens Unterstüzung in Unreal integriert. In diesem Repositoy befindet sich auch ein Development Branch der die HoloLens Unterstüzung in Unreal integriert.
Für die Implementierung wurde dieser Development Branch getestet. Für die Implementierung wurde dieser Development Branch getestet.
Nach dem bauen der aktuellen Version wurde ein HoloLens Template in die Engine geladen \todo{cite https://github.com/ProteusVR/Hololens https://www.youtube.com/watch?v=KxvAm2qNJ0Q&feature=youtu.be}. Nach dem bauen der aktuellen Version wurde ein HoloLens Template in die Engine geladen \todo{cite }.
%https://github.com/ProteusVR/Hololens https://www.youtube.com/watch?v=KxvAm2qNJ0Q&feature=youtu.be
Jedoch gab es Probleme das Projekt zu packen, sodass es auf die HoloLens geladen werden kann. Jedoch gab es Probleme das Projekt zu packen, sodass es auf die HoloLens geladen werden kann.
Deshalb wurde für die AR Implementierung Unity verwendet. Deshalb wurde für die AR Implementierung Unity verwendet.
...@@ -30,7 +32,7 @@ Diese werden anschließen relativ zum Welt Anker visualisiert. ...@@ -30,7 +32,7 @@ Diese werden anschließen relativ zum Welt Anker visualisiert.
Die Kalibrierung erfolgt anhand des Welt Ankers und eins Vive Trackers. Die Kalibrierung erfolgt anhand des Welt Ankers und eins Vive Trackers.
Der Welt Anker orientiert sich an dem erkannten Boden sodass die y Achse senkrecht nach oben zeigt. Der Welt Anker orientiert sich an dem erkannten Boden sodass die y Achse senkrecht nach oben zeigt.
Um die beiden Welten zu synchronisieren wird ein Vive Tracker so platziert, das die beiden Koordinatensysteme übereinstimmen. Um die beiden Welten zu synchronisieren wird ein Vive Tracker so platziert, das die beiden Koordinatensysteme übereinstimmen.
Durch einen Tastenduck auf einen KJontroller wird die aktuelle Rotation und Position des Trackers in der Unreal Engine gespeichert. Durch einen Tastenduck auf einen Controller wird die aktuelle Rotation und Position des Trackers in der Unreal Engine gespeichert.
Mit dieser Transformation kann der Strahl der VR Umgebung in das lokale Koordinatensystem des Weltankers transformiert werden. Mit dieser Transformation kann der Strahl der VR Umgebung in das lokale Koordinatensystem des Weltankers transformiert werden.
\todo{Bilder übereinanderliegen. } \todo{Bilder übereinanderliegen. }
......
...@@ -38,9 +38,7 @@ Für die Evaluation wurde auf das Aufnehmen von Punktwolken durch die Probanden ...@@ -38,9 +38,7 @@ Für die Evaluation wurde auf das Aufnehmen von Punktwolken durch die Probanden
Die Methode die Kinect mit dem Lighthose Tracking zu verbinden liefert zu ungenaue Wolken. Die Methode die Kinect mit dem Lighthose Tracking zu verbinden liefert zu ungenaue Wolken.
Deshalb wurden im nur statische Punktwolken verwendet die vorher aufgenommen wurden und per Hand nachbearbeitet wurden. Deshalb wurden im nur statische Punktwolken verwendet die vorher aufgenommen wurden und per Hand nachbearbeitet wurden.
Diese Limitierung führt dazu das die Türme nicht umgebaut werden könne und nur statisch betrachtet wurden. Diese Limitierung führt dazu das die Türme nicht umgebaut werden könne und nur statisch betrachtet wurden.
Für das Videoszenario wurden imVrooraus Bidler aufgenommen, die dem Experten bei der Vorbereitung zur Verfügung stehen. Für das Videoszenario wurden im voraus Bilder aufgenommen, die dem Experten bei der Vorbereitung zur Verfügung stehen.
\section{Versuchsablauf} \section{Versuchsablauf}
Als erstes muss der Experte das nötige Vorwissen erhalten. Als erstes muss der Experte das nötige Vorwissen erhalten.
...@@ -48,41 +46,67 @@ In einem echten Szenario hat der Experte bereits alles benötigte Wissen im Vorf ...@@ -48,41 +46,67 @@ In einem echten Szenario hat der Experte bereits alles benötigte Wissen im Vorf
Bei der Evaluation müssen aber alle Probanden in beiden Szenarien das gleiche Wissen erhalten. Bei der Evaluation müssen aber alle Probanden in beiden Szenarien das gleiche Wissen erhalten.
Das Vorwissen wurde durch die eindeutigen Farbsequenzen simuliert. Das Vorwissen wurde durch die eindeutigen Farbsequenzen simuliert.
Als ersten schritt erhält der Experte eine Aufgabe. Ein Test in beiden Szenarien besteht aus 15 Durchläufen der gleichen Aufgabenbescheibung.
Diese Aufgabe ist eine eine Farbsequenz von oben nach unten von 4 aufeinaderfolgenden Farben. Bei einem Durchlauf erhält der Experte eine Aufgabe.
Diese Aufgabe ist eine eine Farbsequenz von oben nach unten von 4 aufeinanderfolgenden Farben.
Am Anfang oder Ende der Farbsequenz ist ein zusätzlicher gesuchter Stein markiert. Am Anfang oder Ende der Farbsequenz ist ein zusätzlicher gesuchter Stein markiert.
Beispiel Aufgabe aus dem Turmpaar 1: $XXX, Blau, Rot, Grün, Blau$ Beispiel Aufgabe aus dem Turmpaar 1: $XXX, Blau, Rot, Grün, Blau$.
Im ersten Schritt sucht der Experte damit den gesuchten Stein. Im ersten Schritt sucht der Experte damit den mit XXX makierten Stein.
Im VR Szenario kann er dies direkt in der Punktwolke, die der Lokale Nutzer vorher aufgenommen hat. Im VR Szenario kann er dies direkt in der Punktwolke, die der Lokale Nutzer vorher aufgenommen hat.
Für das Nicht VR Szenario stehen dem Experten dafür 6 Bilder aus verschieden Perspektiven zur Verfügung, damit er sich vorbereiten kann. Für das Nicht VR Szenario stehen dem Experten dafür 6 Bilder aus verschieden Perspektiven zur Verfügung, damit er sich vorbereiten kann.
Nachdem der Experte den gesuchten Stein und deren Farbe gefudnen hat soll er diesen dem Lokalen Nutzer beschreiben. Nachdem der Experte den gesuchten Stein und deren Farbe gefunden hat soll er diesen dem Lokalen Nutzer beschreiben.
In beiden Szenarios ist das reden Erlaubt, bis auf die ursprüngliche Fabsequenz zu sagen. In beiden Szenarios ist das reden Erlaubt, bis auf die ursprüngliche Farbsequenz zu sagen.
Erlaubt sind damit unter andrem die Farbe des gesuchten Steins zu sagen und auch die Position im Turm. Erlaubt sind damit unter andrem die Farbe des gesuchten Steins zu sagen und auch die Position im Turm.
Im VR Szenario wird dem Experten zusätzlich der Beam angeschaltet mit dem er auf die entsprechende Stelle zeigen kann. Im VR Szenario wird dem Experten zusätzlich der Beam angeschaltet mit dem er auf die entsprechende Stelle zeigen kann.
Im video Szenario wird der Videostream angeschaltet, sodass dieser als Interaktionsmöglichkeit zur Verfügung steht. Im Video Szenario wird der Videostream angeschaltet, sodass dieser als Interaktionsmöglichkeit zur Verfügung steht.
Nachdem der Lokale Nutzer den gesuchten Stein erkannt hat liest dieser die Beschriftung vor.
Der Experte hat selber bestimmt wann er zum nächsten Aufgabenteil voranschreitet.
Nachdem er aus dem Vorbereitungsdaten den Stein erkannt hat drückt er eine Taste (Controller Trigger/ Enter) und bekommt damit zugriff auf den Laserbeam bzw den Videostream.
Wurde das Label vorgelesen kann er erneut mit der gleichen Taste zur nächsten Aufgabe gelangen.
Bei jedem Tastendruck wird ein Timestamp mit dem die Zeiten errechnet werden können.
Der Gesamtablauf der Evaluation erfolge immer im ähnlichen Ablauf.
Vor dem Test wurden der allgemeine Fragebogen ausgefüllt, das grundlegende Szenario erklärt und eine Beispielaufgabe an einem seperaten Turm erklärt.
Anschließen wurden die beiden Szenarien evaluiert.
Die Reihenfolge VR und Video und die Turmpaare wurden hierbei zwischen den Team gewechselt, sodass diese selber nicht die Messung beeinflussen.
Nach jedem Szenario wurden die Fragebögen zu dem Test ausgefüllt. Hierbei wurden eigene Fragen, NASA-TLX und der User Experience Questionnaire (UEQ) verwendet.
Abschließend gab es noch einen weiteren Fragebogen mit einer allgemeine Frage und freien Kommentaren.
\section{Statistische verfahren}
In der Auswertung werden Boxplots verwendet. Hierbei ist die Kennzeichnung wie folgt:
\begin{description}
\item[Whisker] Minimum bzw Maximum
\item[Box]erstes bzw drittes Quartil
\item[gepunktete Line] Median
\item[Raute]Mittelwert
\end{description}
Insgsammt wurden 19 mänlcihe udn 3 weibliche Probanden
\section{Probanden}
Statistik Statistik
Etwas erfahrung mIt VR Etwas erfahrung mIt VR
AR erfahrung quasi ncih vorhanden AR erfahrung quasi ncih vorhanden
Pokemaon Go Pokemaon Go
Rot grün schwäche (genauen Namen erfragen) Rot grün schwäche (genauen Namen erfragen)
ha keine Probleme gemacht, Farbbend der Steine war kräftig genug ha keine Probleme gemacht, Farbbend der Steine war kräftig genug
\todo{allgemin Boxplot beschreiben} \section{Probanden}
Insgesamt wurden die Evaluation mit 13 Teams a 2 Personen durchgeführt.
Bei den Versuchen 2 und 5 gab es Technische Probleme mit dem VR /AR Setup (große tracking Ungenauigkeiten) deshalb wurden diese komplett aus den Daten gestrichen.
\begin{figure} \begin{figure}
\caption{Erfahrung mit VR und AR. Median sind 1 und -1} \caption{Erfahrung mit VR und AR}
\label{plot:Erfahrung} \label{plot:Erfahrung}
\pgfplotstableread{Charts/Erfahrung.txt} \pgfplotstableread{Charts/Erfahrung.txt}
\datatable \datatable
......
No preview for this file type
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment