删除Kinect深度阴影

时间:2011-01-31 13:25:44

标签: c# algorithm image image-processing kinect

我最近开始攻击我的Kinect,我想删除深度阴影。阴影是由红外发射器稍微放置在相机侧面引起的,因此任何近距离物体都会得到一个大阴影和远处物体较少或没有阴影。

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

我的目标是能够将彩色图像正确地映射到深度上。如果没有处理阴影,这不起作用,如图所示:
enter image description here

6 个答案:

答案 0 :(得分:3)

深度阴影是否总是黑色?

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

答案 1 :(得分:3)

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

源代码发布在我的博客上:

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

答案 2 :(得分:2)

我不知道c#是怎么回事,但openni c ++有一个名为xnSetViewPoint()的函数唯一的问题是,由于转换,你丢失了前20行左右的imagedata。

原因是由于使用了两个不同的传感器,这两个传感器彼此靠近放置但不完全在同一位置。

答案 3 :(得分:0)

我很遗憾地说,但是这个阴影是由你的身体阻挡推断的点击中房间的那个点而引起的,所以它会产生一个黑点......没什么可以做的,只是将基本背景改成不同的颜色除了黑色,所以它不会是一个明显的阴影

答案 4 :(得分:0)

Kinect方法 - MapDepthFrametoColorFrame

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

答案 5 :(得分:0)

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

然而,此处的解决方案很容易,您的阴影数据位于左侧。 所以你需要在它变黑之前扩展最后已知的颜色数据。

为了更好地适应它,将颜色凸轮数据转换到右边。