私は Kinect SDK を使用しており、深度画像データを次の 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;
}