0

我正在使用 Kinect SDK,并尝试以两种方式过滤深度图像数据:

  1. 移除所有与玩家无关的深度
  2. 移除所有大于给定深度的深度(根据玩家手腕的位置计算)

其结果本质上是仅显示距离传感器小于一定深度的球员身体部分。

虽然下面的代码做了我想要它做的事情,但当我运行性能分析时它证明不是很好,所以我正在寻找可以改进它的方法。

基本问题是数组包含 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;
    }
4

1 回答 1

0

嗨,我对深度图像和剪切有疑问。

我使用此代码

Using depthFrame As DepthImageFrame = e.OpenDepthImageFrame()
            If depthFrame IsNot Nothing Then
                ' Copy the pixel data from the image to a temporary array
                Me.depthPixels = Me.smoothingFilter.CreateFilteredDepthArray(Me.depthPixels, depthFrame.Width, depthFrame.Height)

                depthFrame.CopyDepthImagePixelDataTo(Me.depthPixels)

                depthReceived = True
            End If
End Using
于 2013-05-11T21:34:35.227 回答