Hatena::ブログ(Diary)

明日とロボット このページをアンテナに追加 RSSフィード

2011-10-07

Kinectをskypeとかでウェブカメラとして使う方法

手順

条件として、kinect sdkをインストール済み。
まず、KinectCam.axをダウンロード
次に、コマンドプロンプトを管理者権限で開いて、

cd "<KinectCam.axをダウンロードしたディレクトリ>"
c:\windows\system32\regsvr32.exe KinectCam.ax

これで、"DllRegisterServer in KinectCam.ax succeeded" と表示されれば成功。

kinectの角度を変更したい場合は

c:\users\<username>\AppData\Local\KinectCam\config.ini
のファイルの、Camera Elevation Angleを変更して保存

Kinect関連記事

2011-07-26

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

Kinect関連記事

内容

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

ノイズ除去

  • 本当は、ガウシアンフィルタとか使ってやるのがふさわしいのだと思うが、今はまだ勉強不足なので、簡単に以下の方法で。
  • 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

f:id:astrobot:20110726194842j:image

  • after

f:id:astrobot:20110726194841j:image

イメージのポリゴン表示

f:id:astrobot:20110726200223j:image

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

f:id:astrobot:20110726200224j:image

Kinect関連記事