基于原始SDK的kinect数据需要什么修正数学?
本文关键字:什么 数据 kinect 于原始 原始 SDK | 更新日期: 2023-09-27 18:12:57
我正在制作Kinect摄像头来获取深度数据。到目前为止,我的应用运行良好,我得到了13位深度信息,不包括玩家数据。把它放在一个24位的RGB位图上(我不喜欢rgb656),那么mdf应用程序看起来很棒,工作得很好,在那个区域没有问题,没有位移位错误等(不需要WPF显示它)
然而. .我想在现实世界的测量中验证它。我使用的是原始的微软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深度数据乘以10063确实会得到更好的结果。现在,尽管它改进了一点。我确实想知道是否有一些公式会更好,因为乘以100063是很好的…相当线性的数学,也许这应该是指数的,对数的,或者??我只是觉得错误率不是线性的。
以上数据,我手动(所以可能它包含一些小的人为测量误差,因为太)我正在寻找一些数学这也可以提供可能的偏差。如距离为730mm,可能高于或低于12mm。
我在c#中编码,我是一个初学者和新手。也许这不是一个关于c#的直接问题,但它有点编码困境,我在这里看到人们问正确的公式(好的编码是很多)。这里有一个非常强大的kinect社区。最有可能的是,你知道一个比我的10063更好的答案
我能读12种编程语言,所以如果你知道另一种语言的答案也很好。不帮助我的事情,是使用Aforge/OpenCV/xyz/Mathlab等当然,他们是伟大的,但如果我只需要一个功能,那么我宁愿不使用他们,因为这个项目的所有其他图形的东西,我做在我自己的库。(因为我觉得学习这些东西很酷)
——更新还没确定,不过深度是100063看起来:
depth = kinectdept * ( kinectdepth - 800 ) * 0,069
也很接近。奇怪的是,上表中的错误率非常接近
(realDepth-800)/16
但我需要更多的样本来验证,因为人为错误在这里太大了
当我读到这个错误有多严重时,警钟就响了。就我个人而言,我有点惊讶这没有引起更多的关注。我开始测试,发现了一个略有不同的结果。我猜你写的公式里有个小错误。我用
得到最好的结果//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
请注意,我们并没有经常得到精确的毫米,我们看到数字在厘米上跳跃,当距离较远时,它会跳跃2mm ~ 4mm。
我没有机会用其他kinect进行测试,但如果其他人也愿意分享他们的测试,我们只是使用Excel,放入你的数学并保留$B$1指向单个值(例如0,05)。
我们从A栏取了我们的测试结果,用你的数学做了2个修正栏来比较结果。对于我们使用的范围,我们为每个范围制作了一个小线形图,并在视觉上测试了最佳拟合。我们也画了一些趋势线,但这不是很方便。因为在一定距离上,在某些特定的间隔内会有更不准确的变化,比如随着时间增长的波的形状(而不是直线)。
还因为我们有一个上尺度校正,这可能是非线性的。但是我不能弄清楚,所以我纠正了一个基于上面的函数
我希望更多的人可以测试这个,这样我们就可以找到一个真正的解决方案。我的答案不是我认为的解决方案,但我希望有人可以根据我和你的结果改进和发布更好的解决方案。所以我把这个作为"测试"结果解决方案,而不是作为"最终"解决方案。