C# 由给定深度的单个Kinect像素表示的空间

C# 由给定深度的单个Kinect像素表示的空间,c#,coordinates,kinect,kinect-sdk,kinect.toolbox,C#,Coordinates,Kinect,Kinect Sdk,Kinect.toolbox,基本上,我想在设备的观察点上画一条固定的直线,并确定是否有任何东西截获它,但在我的示例中,我想根据与视野顶部的距离来配置“激光线” 现在,只需这样做,就可以很容易地获得给定像素点的深度数据 var depthInMM = DepthImagePixel.Depth; 简单地说,我想通过这样做,把焦点放在从顶部开始的第100行像素上 for (int i = 0; i < this._DepthPixels.Length; ++i) //_DepthPixels.Length is obv

基本上,我想在设备的观察点上画一条固定的直线,并确定是否有任何东西截获它,但在我的示例中,我想根据与视野顶部的距离来配置“激光线”

现在,只需这样做,就可以很容易地获得给定像素点的深度数据

var depthInMM = DepthImagePixel.Depth;
简单地说,我想通过这样做,把焦点放在从顶部开始的第100行像素上

for (int i = 0; i < this._DepthPixels.Length; ++i) //_DepthPixels.Length is obviously 307200 for 640x480
{
    if (i >= 64000 && i <= 64640) //Hundredth vertical pixel line
    {
        //Draw line or whatever
    }
}
X:线条与图像顶部的距离(以米为单位)

D:直线与摄像机的距离(与图像平面正交),以米为单位

Y:线条与图像顶部的距离(像素)

VRES:图像的垂直分辨率(像素)


VFOV:摄像机的垂直视野(以度为单位)

绝对图例!非常感谢你。你能证实我的理解吗?我可以用水平分辨率和水平视野替换垂直分辨率和垂直视野来计算水平距离吗?最后,你有没有可能给我一个链接,让我知道这到底是基于什么数学的(或者请随意详细说明)。再次真诚地感谢你的帮助。它在水平方向上也会起作用。这只是基本的。哈哈,我收集了那么多,但希望得到它所基于的具体公式(或trig的小节)。正如你可能收集到的那样,我的数学远不是很好,而且还在努力提高。不管是哪种方式,再次感谢……它本质上只是一个三角形,由两条线组成,从相机穿过图像的中心像素、最顶端的中心像素和远处的平面
D
。诀窍是只看视锥台的一半-这就是为什么它是
PI VFOV/360
而不是
2 PI VFOV/360
-以获得直角,当然是在2D中,即仅在平面和视锥台的交点处。至少有中心线,找不到更好的图像。非常感谢。没有这些知识,围绕Kinect编写基于3D的软件是一个相当大的挑战。但愿我能下载一个像你这样的大脑-pYou示例看起来是正确的,得到了相同的结果。
double d = 2; //2 meters depth
double y = 100; //100 pixels from top
double vres = 480; //480 pixels vertical resolution
double vfov = 43; //43 degrees vertical field of view of Kinect
double x = (2 * Math.Sin(Math.PI * vfov / 360) * d * y) / vres;
//x = 0.30541768893691434
//x = 100 pixels down is 30.5 cm from top field of view at 2 meters depth
     2 sin(PI VFOV / 360) D Y
X = --------------------------
              VRES