2011-11-25 3 views
2

Contexte:comparaison profondeur Kinect à la profondeur OpenGL efficacement

Ce problème est lié avec le suivi 3D de l'objet.

Mon système projette des objets/échantillons à partir de paramètres connus (X, Y, Z) vers OpenGL et essaie de faire correspondre les informations d'image et de profondeur obtenues à partir du capteur Kinect pour déduire la position 3D de l'objet.

Problème:

Kinect profondeur-> Process-> valeur en millimètres

OpenGL-> profondeur Buffer-> valeur entre 0-1 (qui est mis en correspondance entre non linéairement près et de loin)

Bien que je puisse récupérer la valeur Z à partir d'OpenGL en utilisant la méthode mentionnée sur http://www.songho.ca/opengl/gl_projectionmatrix.html mais cela donnera des performances très lentes.

Je suis sûr que c'est le problème commun, alors j'espère qu'il doit y avoir une solution de cleaver existe.

Question:

moyen efficace de récupérer l'œil coordonnée Z de OpenGL?

Ou existe-t-il un autre moyen de résoudre le problème ci-dessus?

+0

Jetez un coup d'œil à OpenCV. Je ne l'ai pas encore utilisé avec OpenGL, mais OpenCV peut faire la plupart des opérations comme celle-ci presque en temps réel. – Blender

+0

@Blender: Pouvez-vous me pointer les docs sur ce ... J'ai également cherché là, mais sans chance. Merci! – Rudi

+0

Regardez [ici] (http://opencv.willowgarage.com/wiki/Kinect). – Blender

Répondre

2

Maintenant, mon problème est la profondeur Kinect est en mm

Non, ce n'est pas. Kinect indique que la profondeur est une valeur dans une plage de 11 bits d'unités arbitraires. Ce n'est qu'après l'application d'un calibrage que la valeur de profondeur peut être interprétée comme une unité physique. Vous avez raison dans la mesure où les valeurs de profondeur de projection de la perspective OpenGL sont non linéaires. Donc, si je vous ai bien compris, vous voulez émulater Kinect en récupérant le contenu du buffer de profondeur, n'est-ce pas? La solution la plus simple consistait à utiliser une combinaison de vertex et fragment shader, dans laquelle le vertex shader passe la profondeur linéaire en tant que variable supplémentaire au fragment shader, et le fragment shader écrase alors la valeur de profondeur du fragment avec la valeur passée. (Vous pouvez également utiliser une cible de rendu supplémentaire pour cela).

Une autre méthode utilisait une texture 1D, projetée dans la plage de profondeur de la scène, où les valeurs de texture codaient la valeur de profondeur. Ensuite, la valeur désirée serait dans le tampon de couleur.

Questions connexes