Math 视野中的Kinect固有参数

Math 视野中的Kinect固有参数,math,geometry,kinect,projection,camera-calibration,Math,Geometry,Kinect,Projection,Camera Calibration,Microsoft声明,Kinect的视场角度为垂直43度,水平57度(如上所述)。鉴于这些,我们可以计算固有参数,即焦点和投影中心吗?我假设投影中心可以表示为(0,0,0) 谢谢 编辑:关于我正在尝试做什么的更多信息 我有一个用Kinect记录的图像数据集,我试图将像素位置(x_屏幕、y_屏幕和z_世界(单位:mm))转换为真实世界坐标 如果我知道相机放置在真实世界坐标系中的点(x',y',z'),通过执行以下操作来查找真实世界坐标是否足够: x_world = (x_screen - c_x

Microsoft声明,Kinect的视场角度为垂直43度,水平57度(如上所述)。鉴于这些,我们可以计算固有参数,即焦点和投影中心吗?我假设投影中心可以表示为(0,0,0)

谢谢

编辑:关于我正在尝试做什么的更多信息

我有一个用Kinect记录的图像数据集,我试图将像素位置(x_屏幕、y_屏幕和z_世界(单位:mm))转换为真实世界坐标

如果我知道相机放置在真实世界坐标系中的点(x',y',z'),通过执行以下操作来查找真实世界坐标是否足够:

x_world = (x_screen - c_x) * z_world / f_x
y_world = (y_screen - c_y) * z_world / f_y
其中
c_x=x'
c_y=y'
f_x,f_y
是焦距?还有,如果只知道视野,我怎样才能找到焦距呢


谢谢

如果将世界原点(0,0,0)与相机焦点(您称之为投影中心)相等,并且假设相机指向正z轴,则平面x=0中的情况如下:

这里的轴是z(水平)和y(垂直)。下标
v
表示“视口”或屏幕,
w
表示世界

如果我没有弄错你的意思,你就知道屏幕的高度(以像素为单位)。另外,
zw
yv
xv
。您想知道
yw
xw
。注意:此计算在视口的中心有(0,0)。根据通常的屏幕坐标系(0,0)在左上角进行适当调整。应用一点trig:

tan(43/2) = (h/2) / f = h / (2f),  so f = h / ( 2 tan(43/2) )
和类似的三角形

yw / zw = yv / f            also              xw / zw = xv / f
解决:

yw = zw * yv / f            and                xw = zw * xv / f
注:这假设相机的“焦距”在x方向上相等。不一定是这样。为了在
xw
中获得最佳精度,应使用
f=w/2 tan(57/2)
重新计算,其中
w
是屏幕宽度。这是因为
f
不是真正的焦距。这只是一个转换常数。如果相机的像素是正方形,并且光学元件没有像差,这两个
f
计算将给出相同的结果


NB:在一篇被删除(不恰当)的文章中,OP似乎说已知的不是zw,而是斜边的长度D:原点到(xw,yw,zw)。在这种情况下,只需注意
zw=D*f/sqrt(xv²+yv²+f²)
(假设相机像素为正方形;如果不是,则需要进行一些缩放)。你可以按照上面的步骤进行。

我不能添加评论,因为我在这里的声誉太低了。 但我要提醒的是,kinect的相机角度一般不一样 与普通的照相/摄像机一样,由于视频流格式及其传感器芯片。因此,提及57度和43度的SDK可能指的是高度和宽度的不同度分辨率

它发送一个320x240像素的位图,这些像素与

Horizontal FOV: 58,5° (as distributed over 320 pixels horizontal)
Vertical FOV: 45,6° (as distributed over 240 pixels vertical).

Z是已知的,你的角度是已知的,所以我相信正弦定律可以帮你找到合适的位置,如果你仍然找不到答案,你试过在这里发帖吗?对于kinect的问题,他们通常会有一些很好的回应。@bflosabre91谢谢,我会尝试一下。在OpenNI的某个地方,焦距默认定义为
525.5f
,而f=480/2/tan(43/2.)=609.3f。为什么?@张晓晨所说的视场角可能是错的。例如,请参见SDK为真实设备检索到的垂直视野为48.6度。这产生了530焦距。我现在更困惑了。。。KinectSDK文档称FOV为
57和43
:;当你的链接和另一个链接说它们是
58.5和45.6/46.6
时,它们是否意味着官方的M$文档是错误的?更重要的是,KinectSDK文档没有区分图像和深度FOV,而彩色图像FOV是
62 x 48.6
,深度FOV是
58.5 x 46.6
。这是否意味着后一篇文章更准确(但实际上我认为它错误地说深度分辨率为320x240)?@zhangxaochen我们的问题是,我们不知道Kinect规范中的FOV实际测量的是什么。由于视差深度计算在相机视场边缘附近不起作用,因此可以有意从总相机视场中减少视差。