【问题标题】:Get Depth in mm for recorded video from Kinect SDK从 Kinect SDK 获取录制视频的深度(mm)
【发布时间】:2016-05-17 01:02:26
【问题描述】:

我正在为我的项目使用从 Kinect 用 c++ 语言录制的视频。我正在尝试获取一个点的真实世界坐标(真实深度)。但我不知道,Kinect SDK 中是否有用于此目的的功能。所以我把这个公式颠倒过来:

BYTE b = 255 - static_cast (256  realDepth / 0x0FFF)

得到这个:

realDepth = (255-b) * 0x0FFF / 256

我不知道我所做的是否正确。你有什么建议?

【问题讨论】:

  • 您使用的是哪个 SDK?微软 SDK?如果是,是哪个版本? 1.x (Kinect for Xbox360) 还是 2.x (Kinect for Xbox One)?
  • 我正在使用 Kinect for Windows SDK v1.7
  • 你能添加一个用于录制深度视频的代码的sn-p吗?
  • 我使用了来自该链接上数据集的深度视频:sucro.org/homepage/wanghaibo/SDUFall.html
  • 我无法访问该页面。尝试在您的问题中添加指向示例视频的链接(例如,您可以将其上传到 Dropbox 并添加指向该文件的公共链接...或尝试其他文件托管服务)

标签: c++ kinect


【解决方案1】:

看过this video之后,我觉得你应该这样处理:

  • 白色像素是可能的最远距离,(对于 Kinect SDK 1.x 未处于近距离模式,即默认模式)等于 4 米;
  • 黑色像素可能是未知值,也可能是最接近的值,(对于 Kinect SDK 1.x 在默认模式下)等于 0.8 米。

所以这意味着,如果我正确猜到这些视频是在默认模式下录制的,并且假设您将每一帧转换为灰度图像(每个像素值范围从 0 到 255),则应该使用以下内容公式:

realDepth(以米为单位)= ( 3.2 * grayValue / 255 ) + 0.8

这样,如果grayValue等于0(黑色),那么realDepth就是0.8米。而如果grayValue 等于255(白色),那么realDepth 就是4 米。

如果您想要以毫米为单位的 realDepth,只需将其除以 1000。

另请注意,一些黑色像素也可以表示未知值。因此,如果realDepth 等于 0.8,您无法确定这是正确的值,或者它实际上是否是未知值。

【讨论】:

  • 我能理解公式中的3.2吗?
  • 如果计算通过二维坐标系中两点(即 [0; 0.8] 和 [255; 4] )的直线方程,以grayValue为横坐标,@987654330以@为纵坐标,即可得到上式。看看this link
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多