我在1920 * 1080彩色相框中有一个像素,我需要知道它在相机空间中的位置,以米为单位。我知道我应该使用CoordinateMapper类,但是记录here的方法CoordinateMapper.MapColorFrameToCameraSpace
将深度帧作为输入。我很困惑:输入不应该是彩色框架吗?毕竟我想在彩色边框和相机空间之间进行映射。
我觉得有些事情让我望而却步,如果有人能说清楚,我会很感激。谢谢!
答案 0 :(得分:0)
这更多是评论而不是答案(但我没有评论代表):
我认为它需要一个深度框架而不仅仅是一个彩色框架的原因是相机空间是三维的,所以它不知道只是从2D像素位置 - 它需要深度。
答案 1 :(得分:0)
检查一下...... 这段代码是我为万圣节建造的。它展示了(某种程度上)你正在寻找的东西。代码中的注释也有帮助。
http://github.com/IntStarFoo/KinectAStare
http://github.com/IntStarFoo/KinectAStare/blob/master/ViewModels/KinectBaseViewModel.cs
TrackedHead = body.Joints[JointType.Head].Position;
//This is an 'aproxometery' http://trailerpark.wikia.com/wiki/Rickyisms
// of the tracking direction to be applied to the eyeballs on
// the screen.
TrackedHeadX = (int)(TrackedHead.X * 10);
TrackedHeadY = (int)(TrackedHead.Y * -10);
// Really, one should map the CameraSpacePoint to
// the angle between the location of the eyes on
// the physical screen and the tracked point. And stuff. //This is the TrackedHead Position (in Meters)
//The origin (x=0, y=0, z=0) is located at the center of the IR sensor on Kinect
//X grows to the sensor’s left
//Y grows up (note that this direction is based on the sensor’s tilt)
//Z grows out in the direction the sensor is facing
//1 unit = 1 meter
//Body
//body.Joints[JointType.Head].Position.X;
//body.Joints[JointType.Head].Position.Y;
//body.Joints[JointType.Head].Position.Z;
//Kinect (0,0,0)
//Screen Eyes (?,?,?)
答案 2 :(得分:0)
它没有问彩色框架是因为它不需要它。该方法将颜色框中的每个可能像素映射到其对应的3D坐标。为此,它需要深度框架,这是包含3D深度信息的框架,这允许软件知道2D图像中每个点的3D空间在哪里(我不知道它们是如何做的)它,但我想它可以用光线投射完成)。如果你考虑一下,就无法从简单的图像(每个点只包含颜色信息)重建3D世界。如果有的话,根本不需要Kinect,对吧?我们可以从简单的相机获得深度信息:)
希望我的回答能帮助您理解,如果事情不清楚,请随时提出。