基于原始SDK的kinect数据需要什么校正数学

时间:2015-09-15 20:51:26

标签: c# kinect kinect-sdk

我正在使用Kinect相机来获取深度数据。 到目前为止,我的应用程序工作,我得到了13位深度信息,排除了玩家数据。把它放在一个24位RGB位图上(我不喜欢rgb656),mdf应用程序看起来很棒,在该区域没有问题,没有位移错误等(并且不需要WPF显示它)

然而.. 我接着想要验证真实世界的测量结果。 我正在使用原始的Microsoft SDK(我认为这是Windows 7的1.7)。

然后我注意到尽管我确实得到了正确的位,但错误率仍然很高,我可以使用。请参阅下表,我使用(更便宜的)卷尺测量工具进行Kinect和(实际)世界毫米测量,以验证它

(测量是从正面中像素开始,它与物体的角度不一致)

kinect  world    err
 800    800      0
 894    900      6
 987    1000    13
1082    1100    18
1179    1200    21
1271    1300    29
1366    1400    34
1459    1500    41
1550    1600    50
1647    1700    53
1730    1800    70
1831    1900    69
1924    2000    76
2014    2100    86
2112    2200    88
2207    2300    93

通过一些反复试验,我发现kinect深度数据乘以1,0063确实可以得到更好的结果。现在虽然它改善了一点。我想知道是否有一些公式可以更好地工作,因为乘以1,0063是很好的线性数学,也许这应该是指数,对数或???。我只是认为错误率不是非常线性的。

以上数据,我手动拍摄(因此也很可能包含一些小的嗡嗡声测量错误)我正在寻找一些数学 这也可能提供可能的偏差加上minus。 比如距离是730毫米,可能高于或低于12毫米。

我在C#中编码,我是一个入门者和新人。 也许这不是一个关于C#的直接问题,但它有点像编码困境,我在这里看到其他主题是人们要求正确的公式(好的编码很多) 。这里有一个非常强大的kinect社区。很可能你在这里知道一个比我的1,0063更好的答案

我可以阅读大约12种编码语言,所以如果你用不同的语言知道答案,那也很好。 不帮助我的事情是使用Aforge / OpenCV / xyz / Mathlab /等 当然它们很棒但是如果我只需要一个功能,那么我不想使用它们,就像我在自己的库中做这个项目的所有其他图形内容一样。 (因为我觉得了解这些事情很酷)

---更新 还没有钉它,但除了深度1,0063 它接缝:

depth = kinectdept * ( kinectdepth - 800 ) * 0,069

也非常接近。 奇怪的是,上表中的错误率非常接近

(realDepth-800)/16 

但是我需要更多的样本来验证它,因为这里的人类错误很大。

1 个答案:

答案 0 :(得分:2)

很棒的帖子,

警钟在这里响起。当我红了这个错误有多严重。就个人而言,我有点惊讶,这并没有引起更多关注。 我开始测试,结果略有不同。哦,我猜你在写下的公式中犯了一个小错误。我得到了最好的结果:

//Below  1300mm
kinectDepth = kinectDepth + (kinectDepth -800) * 0,05
// range 1350mm 2050mm
kinectDepth = kinectDepth + (kinectDepth -800) * 0,064
// range 2050mm 2850mm
kinectDepth = kinectDepth + (kinectDepth -800) * 0,069
// beyond 2900mm 
kinectDepth = kinectDepth + (kinectDepth -800) * 0,08
// beyond 3500mm
kinectDepth = kinectDepth + (kinectDepth -800) * 0,085

请注意,我们没有得到精确的mm,我们看到数字在更远的地方以厘米为单位跳跃,近距离跳跃的距离为2mm~4mm。

我没有机会用其他运动来测试它,但是如果其他人也喜欢分享他们的测试,我们只需要使用Excel,输入数学并保持$ B $ 1指向单个值(ea 0 ,05)。 我们从A列中获取了测试结果,并通过数学计算得出2个校正柱来比较结果。对于我们使用的范围,我们为每个范围制作了一个小线图,并且在视觉上测试了最佳拟合。我们也采取了一些趋势线,但这不太方便。由于在某些特定间隔处存在一些距离更多的不准确变化,例如随着时间(不是直线)增长的波形。 另外,因为我们有一个上升校正,这可能是非线性的。 但我无法理解,所以我纠正了基于上面的功能

我希望更多的人可以测试一下,这样我们就可以找到真正的解决方案。我的答案不是我认为的解决方案,但我希望有人可以改进并根据我和你的结果发布更好的解决方案。因此,我将此作为“测试”结果解决方案发布,而不是作为“最终”解决方案。