[Unity][Kinect]Unityで画像処理を行うときに実装しなければならないこと

そもそもUnityでKinect使うって、大抵の場合ボーン処理(プレイヤーの腕とかを取得する奴)ですよね。画像処理(カラー画像と深さ画像を併せて解析してあーだこーだ)とかやりませんよね。

でもやりたいと感じることもあるかも。
ただ解析を凡人のC#のハンドコードでやろうとすると、かなり重くなります。気に留めてください。Javascript?やめてください。
openCVを使うべきですが、また別の資料を解読する羽目になるので、ここでは触れません。


「Unity Kinect」とググるだけで、こんなUnityで使えるKinectSDKがヒットします。

ボーン取得に置いては十分(使ってないのでよく分からないけれども十分でしょう)ですし、カメラ画像も取得可能です。
カラーと深さのカメラ画像を取得して弄り倒せばできるんじゃない?と考えるでしょう。僕も考えました。


しかし、これだけでは画像処理ができない。このSDKには座標変換に関する関数が用意されていない
(2014/07/19時点。2015年現在は不明)から。
深さ画像を3次元座標に変換させたり、深さ画像をカラー画像に対応させるには、それを行う関数を追加させなければなりません。


「深さ画像を3次元座標に変換させたり、深さ画像をカラー画像に対応させる」を実現するためには、この2つの関数があれば十分でしょう。
NuiTransformDepthImageToSkeleton
深さ画像の座標から、実際の3次元座標空間に変換する
NuiImageGetColorPixelCoordinatesFromDepthPixel
深さ画像の座標に対応するカラー画像の座標を導出する

1つ目はC++のヘッダーファイルNuiSkeleton.hに、2つ目はKinect10.dllに用意されています。
各関数の詳細はMSDNを参照。後者についてはココのブログにざっくりメモガキが書いてあります。


この2つの関数をUnity上で実現するための方法を以下に記述します。

以下、追記文 ↓

2015/08/04 Kinect関連で訪問する方が多いので説明文修正

続きを読む

スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

tag : Kinect Unity C#

[kinect1.8]NuiImageGetColorPixelCoordinatesFromDepthPixelを用いた「深さ画像→カラー画像」のズレの修正

ここではカラー画像を640x480、深さ画像を320x240とする。

kinectでは深さ画像(depthImage)とカラー画像(colorImage)を撮影するカメラが異なるので、どうしても撮影した映像には物理的なずれが発生する。
ので、この関数を使う。
NuiImageGetColorPixelCoordinatesFromDepthPixel

http://msdn.microsoft.com/en-us/library/jj663859.aspxによると、

public:
HRESULT NuiImageGetColorPixelCoordinatesFromDepthPixel(
NUI_IMAGE_RESOLUTION eColorResolution,
const NUI_IMAGE_VIEW_AREA *pcViewArea,
LONG lDepthX,
LONG lDepthY,
USHORT usDepthValue,
LONG *plColorX,
LONG *plColorY
)


eColorResolutionではカラー画像をenum型のNUI_IMAGE_RESOLUTIONで指定するんですね。
深さ画像のサイズも指定したいなら「NuiImageGetColorPixelCoordinatesFromDepthPixelAtResolution」を使えと。
pcViewAreaには構造体を指定するみたいです。オフセットやズームが格納されるのかな?不必要なのでNullでおkです。
lDepthX,Yに変換元の深さ画像を指定して、plColorX,Yに変換先の色画像の座標が放り込まれる変数のポインタを指定する。

一番引っかかったのがusDepthValueでした。ここには0を指定するそうです。むしろ下手に深さデータ突っ込んだら酷くズレました。おそらくpcViewAreaと併せて使う項目なんでしょうが、0でも十分な精度は得られますよー。


という部分が引っかかったのでメモ

tag : Kinect

プロフィール

舞葉(ぶよう)

Author:舞葉(ぶよう)
github.io
はてなブログ(競プロ)

古い記事のソースコードは色分けしていないので、高機能テキストエディタに貼り付けたほうが見やすいかも。

検索フォーム
このブログについて
自分がつまづいた話題、なんとなく書きたいと思ったこと、ググったけど殆ど資料なかったぞオイ な話等をアップする予定。通りすがりでも、参考になっていただければと。プログラムの例外入力、メモリリークは責任負いません。投稿された記事は修正・削除する場合があります。
カテゴリ
タグ

HSP3アルゴリズムとデータ構造c++RubyJavaUnity画像解析C機械学習C#LinuxcodeIQKinectMinecraftTonyuSystemraspberrypiPythonHTML5音声制御Simulinkruby俺ルール通信制御Javascriptシミュレーション

counter-shinobi
固定記事
最新記事
最新コメント
月別アーカイブ
ブロとも申請フォーム

この人とブロともになる

アクセスランキング
[ジャンルランキング]
コンピュータ
1276位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
225位
アクセスランキングを見る>>