Math 如何计算Asus Xtion Pro Live传感器的可见边界

Math 如何计算Asus Xtion Pro Live传感器的可见边界,math,computer-vision,kinect,trigonometry,asus-xtion,Math,Computer Vision,Kinect,Trigonometry,Asus Xtion,我已经有了一个基本的设置,使用了一个传感器,传感器悬挂在离地面3米的地方,向下看。我在试图计算出以米为单位的可见边界 下面是一个图表来说明这一点: 我知道视野角度: Field of View 58° H, 45° V, 70° D (Horizontal, Vertical, Diagonal) 我想用一点trig来解决这个问题。 如果我拿HFOV,把它对半,想象成直角三角形, 我可以使用切线(相反/相邻),知道角度,计算出对边: opposite = adjacent * tan(29)

我已经有了一个基本的设置,使用了一个传感器,传感器悬挂在离地面3米的地方,向下看。我在试图计算出以米为单位的可见边界

下面是一个图表来说明这一点:

我知道视野角度:

Field of View
58° H, 45° V, 70° D (Horizontal, Vertical, Diagonal)
我想用一点trig来解决这个问题。 如果我拿HFOV,把它对半,想象成直角三角形, 我可以使用切线(相反/相邻),知道角度,计算出对边:

opposite = adjacent * tan(29)
opposite = 3m * tan(29)
opposite ~= 2.66m
为了测试,我还编写了一个非常基本的程序,用于和测量:标记两个点,获得三维坐标并计算距离

import SimpleOpenNI.*;

SimpleOpenNI ni;
PVector m1,m2,p1,p2;
PVector[] realWorldMap;

void setup(){
  size(640,480);stroke(0,192,0);
  ni = new SimpleOpenNI(this);
  if(!ni.enableDepth()) exit();
  ni.alternativeViewPointDepthToImage();
}
void draw(){
  ni.update();
  realWorldMap = ni.depthMapRealWorld();
  image(ni.depthImage(),0,0);
  if(m1 != null && m2 != null) line(m1.x,m1.y,m2.x,m2.y);
  if(p1 != null && p2 != null) text("distance :"+(int  )(p1.dist(p2)*.1)+" cm",5,15);
}
void mouseReleased(){
  if(!keyPressed){
    m1 = new PVector(mouseX,mouseY);
    p1 = realWorldMap[mouseY*640 + mouseX];
  }else{
    m2 = new PVector(mouseX,mouseY);
    p2 = realWorldMap[mouseY*640 + mouseX];
  }
}
void keyPressed(){
  if(key == ' ') m1 = m2 = p1 = p2 = null;
}
我得到了~2.6的最宽测量值,但我有点困惑,因为我认为对面的宽度仅为平截头体底部宽度的一半,所以预计为~5.3m。我的假设错了吗?如果是这样,我做错了什么/正确的计算方法是什么


我还使用了Kinect标签,因为同样的原理也适用于Kinect传感器

在Excel或OpenOffice Calc中计算可能更方便

根据经验,Kinect的水平视野(线性宽度)约为距离传感器距离的1.1倍。更确切地说,距离传感器给定距离D处的图像宽度与距离D相同,特别是如果已合并颜色和深度图像,且边缘周围有黑色深度像素

D = distance from sensor
theta = angular field of view of Kinect = 57 degrees

tangent (angle) = opposite/adjacent

tan (theta/2) = (ImageWidth/2) / D
D * tan (theta/2) = ImageWidth/2
2 * D * tan (theta/2) = ImageWidth

ImageWidth(D) = 2D * tan(28.5 degrees)
比如说,

ImageWidth(1.0m) = 2 (1.0) * tan(28.5 degrees) = 2 * (1.0) * 0.543 = 1.08m

应首先将度转换为弧度:

tan(29 degrees)=tan(0.5061 rad)=0.5543.
因此,
相反=0.5543*3m=1.663m
水平可见边界为
2*对向=3.33m

因此,上面提到的经验法则是一个很好的估计(
3m*1.1=3.3m