深度データのノイズ軽減とポリゴン表示

内容

  • 深度データのノイズが気になったのものすごく適当にノイズをごまかした。
  • 今まではポイントの集合で図形を表示していたのを、ポリゴンの集合で表示することにした。

ノイズ除去

  • 本当は、ガウシアンフィルタとか使ってやるのがふさわしいのだと思うが、今はまだ勉強不足なので、簡単に以下の方法で。
  • kinectから受け取った深度データを色配列に入れる際に、指定したサイズ以下の空白(深度が0から4000外)はノイズと見なし、その前後の平均値の色で埋める。(深度データの復習はkinectセンサーから任意の範囲の深度マップ抽出より)
if(sizeCount++ < maxHoleSize)
    hole = true;
else
    hole = false;
  • ホールを抜けて、新たな深度データのセルに出くわした際に、そのホールを埋める
if (hole)
{
    int dist = (distance + startDist) / 2;
    int di = depthIndex / 2;
    int i;
    int tmpx = x;
    byte t = (byte)(255 * (dist - minRange) / range);

    while (sizeCount-- > 0)
    {
        i = ((width - (--tmpx) - 1) + heightOffset) * 4;
        colorFrame[i + BlueIndex] = t;
        colorFrame[i + GreenIndex] = t;
        colorFrame[i + RedIndex] = 10;
    }
    hole = false;
}
else
{
    startDist = distance;
    hole = false;
}

ものすごく適当だが、結果は以下の通り

  • before

  • after


イメージのポリゴン表示

  • 何も考えずに全部の点を繋げたため、当然、大きな格差がある部分もこのように延び延びで繋がってしまう。
  • よって、z座標の値にある基準以上のギャップがある場合は、描写しないことにしたところ、以下のようになった。