深度データのノイズ軽減とポリゴン表示
内容
- 深度データのノイズが気になったのものすごく適当にノイズをごまかした。
- 今まではポイントの集合で図形を表示していたのを、ポリゴンの集合で表示することにした。
ノイズ除去
- 本当は、ガウシアンフィルタとか使ってやるのがふさわしいのだと思うが、今はまだ勉強不足なので、簡単に以下の方法で。
- 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; }
イメージのポリゴン表示
- KinectのデータからOpenGLで立体表示する(その2)では、取得したデータをそのままPointの集合として表示していたが、それを、四角形の集合にして表示してみた。
- その1
- 何も考えずに全部の点を繋げたため、当然、大きな格差がある部分もこのように延び延びで繋がってしまう。
- よって、z座標の値にある基準以上のギャップがある場合は、描写しないことにしたところ、以下のようになった。