我最近开始在我的 Kinect 上进行黑客攻击,我想删除深度阴影。阴影是由红外发射器稍微靠近相机侧面造成的,因此任何靠近的物体都会得到很大的阴影,而远处的物体会得到更少或没有阴影。
阴影长度与阴影两侧最近点和最远点之间的距离有关。
我最近开始在我的 Kinect 上进行黑客攻击,我想删除深度阴影。阴影是由红外发射器稍微靠近相机侧面造成的,因此任何靠近的物体都会得到很大的阴影,而远处的物体会得到更少或没有阴影。
阴影长度与阴影两侧最近点和最远点之间的距离有关。
深度阴影总是变黑吗?
如果是这样,您可以使用像时间中位数这样的简单方法来计算图像的背景(更多信息在这里:http ://www.roborealm.com/help/Temporal_Median.php ),然后每当像素为黑色时,设置它到该像素位置的背景值。
几周前我对这个问题做了一些初步的工作。我的代码直接作用于 WriteableBitmap 而不是深度数据,但如果你只做图像处理,它应该可以工作。该算法并不完美,并且会通过更多调整而受益。如果您更新了代码,请告诉我;我很想看看你在做什么!
源代码贴在我的博客上:
http://richardpianka.com/2011/02/trackingni-depth-correction/
我不知道 c# 的情况如何,但 openni c++ 有一个名为 xnSetViewPoint() 的函数,唯一的问题是,由于转换,您会丢失前 20 行左右的图像数据。
原因是由于使用了两个不同的传感器,它们彼此靠近但不完全相同。
很抱歉,阴影是由于您的身体阻止推断的点撞击房间的那个点造成的,所以它会产生一个黑点......除了将基础背景更改为黑色以外的其他颜色之外,您无能为力所以它不会是一个明显的阴影
Kinect 方法 -MapDepthFrametoColorFrame
获取[x,y]
深度框中的位置,并使用该方法进行填充
彩色相机和 kinect 深度相机的尺寸不同,并且红外点的原点不是来自同一个凸轮,它是距离它几厘米的红外投影仪(因为该位移用于计算深度)。
但是,这里的解决方案很容易,您的阴影数据位于左侧。所以你需要在它变黑之前扩展最后一个已知的颜色数据。
为了更好地适应它,将彩色凸轮数据向右移动。