我正在使用 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 是很好的..非常线性的数学,也许这应该是指数、对数或 ???。我只是认为错误率不是线性的。
以上数据是我手动获取的(因此它可能包含一些小的人类测量误差)我正在寻找一些数学 这也可以提供可能的偏差正负。 例如距离为 730 毫米,可能在其上方或下方 12 毫米。
我用 C# 编写代码,我是初学者,是新来的。 也许这不是关于 C# 的直接问题,但它有点编码困境,我在这里看到其他主题是人们要求正确的公式(wel 编码是很多)。这里有一个非常强大的 kinect 社区。很可能你在这里知道比我的 1,0063 更好的答案
我可以阅读大约 12 种编码语言,所以如果您知道用其他语言给出的答案,那也很好。 对我没有帮助的事情是使用 Aforge/OpenCV/xyz/Mathlab/etc 当然它们很棒,但如果我只需要 1 个功能,那么我宁愿不使用它们,因为我在自己的库中为这个项目做的所有其他图形 Material 。 (因为我觉得了解这些东西很酷)
---更新 还没有确定,但除了深度 1,0063 它接缝:
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
请注意,我们并不经常得到精确的毫米,我们看到数字在更远的前方以厘米为单位跳跃,在近距离时跳跃 2 毫米到 4 毫米。
我没有机会用其他 Kinect 来测试它,但如果其他人也喜欢分享他们的测试,我们只是使用 Excel,输入你的数学并保留 $B$1 以指向单个值( ea 0,05).
我们从 A 列中提取了我们的测试结果,并根据您的数学进行了 2 个校正列以比较结果。对于我们使用的范围,我们为每个范围制作了一个小线图,并通过视觉测试了最佳拟合。我们还采用了一些趋势线,但这不太方便。由于在某些特定的时间间隔内,在一定距离处存在更多的不准确性变化,例如随着时间的推移而增长的波浪形状(不是直线)。
另外,由于我们进行了放大校正,这很可能是非线性的。但是我想不通,所以我根据上面的内容修正了一个函数
我希望更多人可以对此进行测试,以便我们找到真正的解决方案。我的回答不是我认为的解决方案,但我希望有人可以根据我和你的结果改进并发布更好的解决方案。所以我将其作为“测试”结果解决方案而不是“最终”解决方案发布。
关于c# - 基于原始 SDK 的 kinect 数据需要什么校正数学,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32595384/