【问题标题】:Remove Kinect depth shadow移除 Kinect 深度阴影
【发布时间】:2011-06-18 14:11:12
【问题描述】:

我最近开始对我的 Kinect 进行 hack,我想移除深度阴影。阴影是由于红外发射器稍微偏向相机一侧造成的,因此任何靠近的物体都会得到很大的阴影,而远处的物体会得到更少或没有阴影。

阴影长度与阴影两侧最近点和最远点之间的距离有关。

我的目标是能够将彩色图像正确映射到深度。这在不处理阴影的情况下是行不通的,如下图所示:

【问题讨论】:

  • 也许某种梯形调整大小会起作用?
  • 对于像我这样的 Kinectless 来说,更明确地说明您必须使用哪些数据会有所帮助。听起来您有一个来自相机的像素网格和一个与红外发射器相应的距离网格。对吗?
  • 我有你在两张图片中看到的数据。黑色区域是颜色为 0 的阴影。其余区域的颜色值取决于距离。
  • 也许你离传感器太近了? MS确实建议你离它几英尺远,我想这就是原因。
  • @Tedd 我注意到你用 C# 标记了这个,你为此使用了哪些库?我一直在等待官方的 MS SDK 出来,以便我可以在大学项目中使用 C#。

标签: c# algorithm image image-processing kinect


【解决方案1】:

彩色相机和kinect深度相机的尺寸不同,红外点的原点不是来自同一个cam,它是一个距离它几厘米的红外投影仪(因为这个位移是用来计算深度的) .

但是这里的解决方案很容易,您的阴影数据位于左侧。 所以你需要在它变黑之前扩展最后一个已知的颜色数据。

为了更好地适应它,将颜色凸轮数据向右移动。

【讨论】:

  • 谢谢。 Kinect SDK 解决了这个问题。将 MapDepthFrametoColorFrame 标记为正确答案。 :)
【解决方案2】:

Kinect 方法 - MapDepthFrametoColorFrame

获取深度框中的[x,y]位置,并使用该方法填充

【讨论】:

    【解决方案3】:

    很抱歉,阴影是由于您的身体阻止推断的点撞击房间的那个点造成的,所以它会产生一个黑点...除了将基础背景更改为不同的颜色之外,您无能为力不是黑色,所以不会有明显的阴影

    【讨论】:

    • 我理解,但是如果你看一下我的图像,你会发现阴影是完美的匹配,但是对齐和大小错误。大小和对齐方式取决于接近度。如果它经过校准,我将能够在移除背景的同时完美地在前景中重新绘制自己。 (很容易看到所有需要的数据都在那里。)
    • 哦,我明白你的意思了......我无能为力
    【解决方案4】:

    几周前我对这个问题做了一些初步的工作。我的代码直接作用于 WriteableBitmap 而不是深度数据,但如果你只做图像处理,它应该可以工作。该算法并不完美,并且会通过更多调整而受益。如果您更新了代码,请告诉我;我很想看看你在做什么!

    源代码贴在我的博客上:

    http://richardpianka.com/2011/02/trackingni-depth-correction/

    【讨论】:

      【解决方案5】:

      我不知道 c# 的情况如何,但 opennic c++ 有一个名为 xnSetViewPoint() 的函数,唯一的问题是,由于转换,您会丢失前 20 行左右的图像数据。

      原因是由于使用了两个不同的传感器,它们彼此靠近但不完全相同。

      【讨论】:

        【解决方案6】:

        深度阴影总是变黑吗?

        如果是这样,您可以使用像时间中位数这样的简单方法来计算图像的背景(更多信息:http://www.roborealm.com/help/Temporal_Median.php),然后每当像素为黑色时,将其设置为该像素位置的背景值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-01-08
          • 2017-09-01
          • 2014-04-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-08
          • 1970-01-01
          相关资源
          最近更新 更多