2

我正在使用深度相机检测矩形。在这一点上,我正在努力使用 NFOV 深度相机生成选定像素的准确 3d 坐标。我通过在测试板上选择 2 个点来测试这一点,使用 Depth 2d 将它们转换为 Color 3d Kinect-SDK C# Wrapper 函数,计算接收坐标之间的距离,并测量所选真实世界点之间的距离(918mm)。在 2.7 米距离处,图像中心出现 2 厘米的误差,而在角落,误差达到 6 厘米。

变换函数不应该纠正失真吗?我是否错过了接收准确数据的关键步骤?这可能是别的东西吗?

谢谢您的帮助!

4

1 回答 1

0

添加来自 Git 问题的响应:

几点:

  1. 你是如何选择二维点的。是通过手动查看红外图像还是手动查看深度图像?关键是,您应该从与 3d 点完全匹配的准确 2d 像素开始,通常在人眼执行此操作时需要一些纹理,例如在 IR 光谱中具有可见标记的目标板,然后您可以进行像素检查(假设人类eye 可以提供足够的精度)找到标记的中心或使用 CV 算法检测 2d 点。
  2. 仅尝试将 2d 深度像素转换为 3d 深度相机空间点(而不是颜色 3d 空间)。您只需将TransformTo3D的最后一个参数更改为K4A.CalibrationDeviceType.Depth,然后将A点到B点的相对距离与现实世界的测量值进行比较。这可以帮助缩小是否仅使用深度相机内在函数可以提供更好的结果(而不是一直使用颜色空间)。如果您使用深度相机空间中的 3d 点与颜色空间中的 3d 点相比看到更好的结果,则可能存在与外部或颜色内部相关的一些校准问题。

最后,深度相机相对于 colot 相机倾斜 6 度应该无关紧要。相机校准内在函数针对每个相机的失真进行校准,而外在因素则针对相机力学进行校准。

于 2020-08-27T01:40:23.413 回答