【问题标题】:Transforming 2D pixel coordinates to 3D Azure Kinect将 2D 像素坐标转换为 3D Azure Kinect
【发布时间】:2020-08-05 07:39:12
【问题描述】:
我正在使用深度相机检测矩形。此时,我正在努力使用 NFOV 深度相机生成选定像素的准确 3d 坐标。我通过在测试板上选择 2 个点来测试这一点,使用 Depth 2d 将它们转换为 Color 3d Kinect-SDK C# Wrapper 函数,计算接收坐标之间的距离,并测量所选真实世界点之间的距离(918mm)。在 2.7 米距离处,图像中心出现 2 厘米的误差,而在角落,误差达到 6 厘米。
转换函数不应该纠正失真吗?我是否错过了接收准确数据的关键步骤?这可能是别的东西吗?
感谢您的帮助!
【问题讨论】:
标签:
c#
kinect
kinect-sdk
azurekinect
【解决方案1】:
添加来自 Git 问题的响应:
几点:
- 您是如何选择二维点的。是不是通过手动查看
红外图像或手动查看深度图像?重点是,你
应该从与 3d 完全匹配的准确 2d 像素开始
点,通过人眼执行此操作时,您通常需要一些纹理
例如在红外光谱中有可见标记的目标板,然后你
像素检查(假设人眼可以提供足够的精度)到
找到标记的中心或使用 CV 算法检测 2d
分。
- 仅尝试将 2d 深度像素转换为 3d 深度点
相机空间(而不是彩色 3d 空间)。你只需要改变
TransformTo3D 的最后一个参数为
K4A.CalibrationDeviceType.Depth 然后比较相对
A点到B点的距离与真实世界的测量值。这
可以帮助缩小是否仅使用深度相机内在函数可以
给出更好的结果(而不是一直到色彩空间)。
如果您使用深度相机空间中的 3d 点看到更好的结果
与色彩空间中的 3d 点相比,可能有
一些与外部或颜色内部相关的校准问题。
最后,深度相机相对于 colot 相机倾斜 6 度应该无关紧要。相机校准内在函数针对每个相机的失真进行校准,而外在函数则针对相机力学进行校准。