我正在使用 Kinect SDK,并尝试以两种方式过滤深度图像数据:
- 移除所有与玩家无关的深度
- 移除所有大于给定深度的深度(根据玩家手腕的位置计算)
其结果本质上是仅显示距离传感器小于一定深度的球员身体部分。
虽然下面的代码做了我想要它做的事情,但当我运行性能分析时它证明不是很好,所以我正在寻找可以改进它的方法。
基本问题是数组包含 307200 个值(因为深度图像大小为 640x480),我试图让这个方法每秒调用大约 30 次。
有没有人对如何更有效地完成这项工作有任何指示?该代码还在其他部分使用 EmguCV 库,我已经使用 cvInvokeThreshold 方法进行了修改,但它似乎没有像这段代码那样工作......
如果您需要更多信息,请告诉我。
非常感谢,
戴夫·麦克布
public static byte[] GetDepths(byte[] depths, DepthImagePixel[] depthPixels, int width, int height, int threshold)
{
Parallel.For(0, width, i =>
{
for (int j = 0; j < height; j++)
{
//Have to calculate the index we are working on using i and j
int rawDepthDataIndex = i * height + j;
//gets the depth and player values
short depth = depthPixels[rawDepthDataIndex].Depth;
short player = depthPixels[rawDepthDataIndex].PlayerIndex;
if (player > 0 && depth < threshold)
depths[rawDepthDataIndex] = (byte)depth;
else
depths[rawDepthDataIndex] = 0;
}
});
return depths;
}