Commit 5b1cf181 by wester

bisle evaluation

bisle schreiben
parent b9e3e67b
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -74,9 +74,9 @@ std::vector<glm::vec3> controllerPositions;
bool toggleCam = true;
Camera mainCam;
static bool trackControllerPos = true;
static bool trackControllerPos = false;
static bool writeFile = true;
static bool writeFile = false;
static bool captureFrame = false;
int lastX, lastY;
......@@ -89,9 +89,9 @@ float maxTrackingKinect = 0.9f;// 2.5f;
//float angleDegrees = 20.0f;
float maxNormalAngle = degreeToRadian(25.0f);
bool enableDepthFilter = false;
bool enableNormalFilter = true;//true;
bool enableNormalFilter = false;//true;
//Bilateral / FastDepthNoise
bool enableFastDepthNoiseFilter = true;
bool enableFastDepthNoiseFilter = false;
float repairThreshold = 100.0f;
......@@ -634,7 +634,7 @@ void mainRenderLoop() {
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//rotateCamera(); //todo
if (toggleCam && trackControllerPos) {
if (toggleCam ) {
glTranslatef(0.0f, -0.3f, -1.0f);
glRotatef(10.0, 1.0, 0.0, 0.0);
......
......@@ -49,20 +49,62 @@ Die Normale wird aus dem Tiefenbild geschätzt.
\begin{split}
dzXAxis = depthAt[x+1,y] -depthAt[x-1,y]\\
dzYAxis = depthAt[x,y+1] -depthAt[x,y-1] \\
Normale = Normalize(-dzXAxis,-dzYAxis,1.0f)\\
Normale = Normalize(-dzXAxis,-dzYAxis,1.0)\\
\end{split}
\end{equation}
Mit dem Skalarprodukt lässt sich der Winkel zwischen dem Kameravektor $(0,0,1)$ und Normale ausrechnen.
Ein maximaler Winkel von 65\textdegree hat in den Tests ein gutes Ergebnis geliefert.
Ein maximaler Winkel von 65 hat in den Tests ein gutes Ergebnis geliefert.
%\textdegree
\todo{grad symbol}
\todo{Quellen auf Kinect und Lighthose}
\section{Zusammenfügen von Frames}
Ein wichtiger Teil beim dem Aufnehmen der Punktwolke ist das zusammenführen von mehreren Frames.
Hierfür wurde die Kinect mit dem Lighthouse Tracking System verbunden und verzichtet damit auf aufwändige Berechnungen.
\todo{Foto Halterung}
Im lokalen Koordinatensystem der Kinect, also jedes Frames liegt der Ursprung in dem Tiefensensor.
die Transformation $transformControllerToKinect$ zwischen denm Koordinatensystem des Controllers und der Kinect wurde bestimmt
und die globale Transformation des Controllers $transformController$ ist in der OpenVR API abfragbar
Die Transformation der lokalen Punktwolke in ein globale ist mit diesen beiden Transformationen möglich.
\begin{equation}
\begin{split}
globalPosition = transformController * transformControllerToKinect * localPosition
\end{split}
\end{equation}
\subsection{Ungenauigkeiten im Lighthouse Tracking}
Ein großes Problem sind Ungenauigkeiten im Tracking.
https://www.roadtovr.com/analysis-of-valves-lighthouse-tracking-system-reveals-accuracy/
http://journals.sagepub.com/doi/full/10.1177/2041669517708205
\todo{bild}
\todo{schreiben}
\subsection{Kalibrierung Kinect zu Vive}
Eine wichtige Transformation ist die zwischen dem Koordinatensystem der Kinect und dem des Vive Controllers.
Ist zum Beispiel die Transformation entlang der X Achse der Kinect verschoben so verstärkt sich der Fehler wenn man die Kinect um 180 dreht (siehe Abbildung()\todo{grad zeichen}
Der Ursprung der Controllers lässt sich aus den Modellen von SteamVR auslesen.
Bei der Kinect ist der offiziellen Doku entnehmbar das der Ursprung in dem Tiefensensor liegt (siehe \cite{KinectDoku})
Aber es gibt keine offizielle Dokumentation wo dieser exakt liegt.
Im Bild \ref{img:KinectOrigin} ist aus dem chinesischen Microsoft Forum eine von Benutzern vermessene schematische Darstellung der Kinect abgebildet.
Der Tiefensensor liegt hinter der kleineren runden Öffnung, aber Fertigungsungenauigkeiten machen das exakte bestimmen nicht möglich ohne die Kinect zu zerlegen.
Eine digitale Kalibrierung gestaltet sich schwierig, da das Lighhouse Tracking für den Controler selber noch einige Ungenauigkeiten mit sich bringt.
\begin{figure}
\begin{center}
\label{img:KinectOrigin}
\includegraphics[width=\textwidth]{../kinect mesures.png}
\caption{Abmessungen der Kienct. Der Tiefensensor liegt in der mittleren runden Öffnung. Quelle:\cite{KinectChina}}
\end{center}
\end{figure}
\section{Ergebnisse}
......
......@@ -23,4 +23,16 @@
title = {GLTF Spezifikation},
howpublished = {\url{https://github.com/KhronosGroup/glTF}},
note = {Accessed: 2017-09-13}
}
@misc{KinectChina,
title = {Kinect Tiefensensor Position},
howpublished = {\url{https://social.msdn.microsoft.com/Forums/sqlserver/ja-JP/05a6d2b3-9096-4236-b77a-691c5f047066/kinect-for-windows-v2-?forum=windowsgeneraldevelopmentissuesja}},
note = {Accessed: 2017-11-02}
}
@misc{KinectDoku,
title = {Kinect Dokumentation Koordinatensysteme},
howpublished = {\url{https://msdn.microsoft.com/de-de/library/dn785530.aspx}},
note = {Accessed: 2017-11-02}
}
\ No newline at end of file
Ablauf:
Scenario beschreiben
2 Schritte
Beispiel machen
Vorher Fragebogen
Start:
Turmpaar einstellen
hinstellen
haken setzen
tracking an aus &richtig starten (Vr/normal)
Webcam einschalten
Kalibrieren
vr verschieben
Mitschreiben was gesagt wurde
Evaluationsbögen
Nachher Fragebogen
Drucken
1* xxx gelb grün schwarz blau
tlx
Todos
-zeitstempel anpassen
sequenzen auswählen
-sequenzen auswählen
-bilder in ue4
punktwolke hinscheiben
video stream
bilder/stream abwechselnd
evaluations bögen
Ablauf:
......
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