在给定深度处由单个Kinect像素表示的空间

时间:2014-04-28 14:07:01

标签: c# coordinates kinect kinect-sdk kinect.toolbox

基本上我想在设备的角度采取固定的直线,并确定是否有任何拦截它,但在我的例子中,我想制作"激光线"可以根据距视场顶部的距离进行配置。

现在只需通过这样做就可以轻松获得给定像素点的深度数据。

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
    }
}

最终结果是这样的。

enter image description here

但是,例如,我可能希望在距离视场顶部50米处的线截距为3米深。现在显然我明白,随着深度的增加,所代表的区域也会增加,但我找不到任何参考,或者我自己研究如何计算这种关系。

那么,如何利用Kinect传感器计算在给定深度处表示的坐标空间。任何帮助都真诚地感激。

修改

因此,如果我理解正确,可以在C#

中实现
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

1 个答案:

答案 0 :(得分:2)

     2 sin(PI VFOV / 360) D Y
X = --------------------------
              VRES

X :线条与图像顶部之间的距离(以米为单位)

D :距离 - 与图像平面正交 - 来自相机的线条,以米为单位

Y :线条与图像顶部的距离(以像素为单位)

VRES :图像的垂直分辨率,以像素为单位

VFOV :相机的垂直视场,以度为单位