0

私は Kinect SDK を使用しており、深度画像データを次の 2 つの方法でフィルタリングしようとしています。

  1. プレーヤーに関連付けられていないすべての深さを削除します
  2. 指定された深さよりも大きいすべての深さを削除します (プレーヤーの手首の位置から計算されます)。

その結果、本質的には、センサーから特定の深さ未満のプレイヤーの体の部分のみが表示されます。

以下のコードは私がやりたいことを実行しますが、パフォーマンス分析を実行するとあまりうまくいかないので、改善できる方法を探しています。

基本的な問題は、配列に 307200 の値が含まれていることです (深度画像のサイズが 640x480 であるため)。このメソッドを 1 秒間に約 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 に答える