[0048]本明細書で提供される技法は、人間対コンピューターの様々な対話タスクのための入力のソースとして消費できる提案を生成するために、確率情報および制約を用いて、自由度の高い有関節物体の状態(姿勢および/または形状)の推定をリアルタイムに提供する。有関節物体は、たいていは6自由度を有する多くの関節を有する3D形状物体として知ることができる。状態は、知られた有関節物体のすべての部分の、並進、方向、スケール、および他の形状記述情報である。
[0049]全身トラッキングといったより限定的なケースのためのこの問題のソリューションは、手足および頭などの身体の特徴を識別するには十分であるが、より精緻なレベルの詳細が望まれる場合には一般に不十分である。例えば、ユーザーの手を検出する場合、ピクセル空間内でユーザーが手を素早く動かすことができるせいで、程度の低いフレーム対フレームのコヒーレンスしか得られないことがある。ユーザーが深度センサーに近い場合など、ユーザーの手が視野の大部分を満たす場合は、特にそうである。さらに、全身トラッキングと比較して、手は一般に、自己遮蔽に起因するより大きな曖昧性を有し、例えば指など、見掛けが似た部分を多く有する。しかし、本明細書で提供されるソリューションは、全身トラッキングにも姿勢推定にも同様に適している。
[0050]いくつかのケースでは、トポロジーが一定の有関節モデルが使用される。しかし、変化する寸法をモデルの各有関節部分が有することが有利であり得る。このケースでは、モデルのすべての部分の寸法を動的に良好に推定し、リアルタイムに誤差を補正するために寸法を調整することが、モデルフィッティング(model fitting)などのタスクには有益である。有関節姿勢推定方法は、直接測定を通して、またはユーザーがいくつかの事前に定められた較正姿勢を取る前処理ステップにおいて計算されて、モデルサイズパラメータがあらかじめ分かっていることを前提にすることができる。しかし、そのような較正プロセスはユーザーには不便であり得るので、それを避けるのが望ましい。本明細書で提供されるソリューションは、リアルタイムに有関節モデルのすべての部分の寸法を動的に較正し、調整する。これは、有関節モデルの各部分の寸法に関する情報の複数のソースを組み合わせ、重み付けを行うことによって行われる。提案されるソリューションは、ユーザー入力、事前較正ステップ、またはユーザーが簡単な姿勢を取ることを必要としない。
[0051]ある程度の連続的な期間にわたって異なるソースから獲得した情報に重み付けを行い、組み合わせることによって、既知の有関節モデルを正しい寸法に動的に調整することができる。これは、静的初期化ステップとして、またはより柔軟な有関節物体に対処するための、もしくはともに同じ既知のタイプに属する異なる有関節物体のモデル化を切り換えるための継続調整ステップとして、行うことができる。
[0052]ソリューションの特徴は、(1)距離制約違反量を使用して、有関節部分の長さを推定すること、(2)衝突制約違反量を使用して、有関節部分幅の過大評価を見つけること、(3)モデルフィッティングからのピクセル分類を使用して、有関節部分の幅を推定すること、および(4)剛体3D点群変換(rigid 3D point cloud transformation)を使用して、1Dから3Dスケールを使用する有関節モデルの全体サイズを推定することを含む。
[0053]図1は、ユーザー8がアプリケーションと対話する、撮像システム10の例示的な一実施形態を示している。これは、ユーザーの自宅内などにおける、撮像システムの現実世界配置を示している。撮像システム10は、ディスプレー196と、深度カメラシステム20と、コンピューティング環境または装置12とを含む。深度カメラシステム20は、画像カメラコンポーネント22または深度センサーを含むことができ、画像カメラコンポーネント22は、赤外(IR)光放射器24、赤外光カメラ26、および赤緑青(RGB)カメラ28を有する。ユーザー8は、人またはプレーヤーとも呼ばれ、深度センサーの視野6内に立つ。ライン2および4は、視野6の境界線を示す。この例では、深度カメラシステム20およびコンピューティング環境12が、ディスプレー196上のアバター197がユーザー8の動きをトラッキングする、アプリケーションを提供する。例えば、アバターは、ユーザーが腕を上げたときに、腕を上げることができる。ユーザーは、手でジェスチャーを行って、制御入力をアプリケーションに提供することもできる。アバター197は、3D仮想世界内の道路198上に立っている。深度カメラシステム20の焦点距離に沿って例えば水平に伸びるz軸と、垂直に伸びるy軸と、(z軸を横断して)横方向に水平に伸びるx軸とを含む、デカルト世界座標系を定義することができる。図面のパースペクティブは、単純化として、ディスプレー196が、y軸方向に垂直に広がり、z軸が、y軸およびx軸に直交し、ユーザー8が立つ地面に平行して、深度カメラシステムから手前に伸びるように変更されていることに留意されたい。
[0054]一般に、撮像システム10は、人ターゲットを認識し、解析し、および/またはトラッキングするために使用される。コンピューティング環境12は、コンピューター、またはゲームシステムもしくはコンソールなどの他、アプリケーションを実行するためのハードウェアコンポーネント、および/またはソフトウェアコンポーネントも含むことができる。
[0055]深度カメラシステム20は、片手または両手の姿勢、ジェスチャー、および/または動きを含む、ユーザーによって実行される姿勢、ジェスチャー、および/または動きをキャプチャーし、解析し、トラッキングして、アバターもしくは画面上のキャラクターを動かし、またはユーザーインターフェース(UI)内においてメニュー項目を選択するなどの、1つまたは複数の制御またはアクションをアプリケーション内において実行できるように、ユーザー8など1人または複数人の人を視覚的にモニタリングするために使用されるカメラを含むことができる。手の姿勢は、深度ピクセルからなるフレーム内などにおける、ある時点での、ユーザーの手の配置に相当し、ジェスチャーは、深度ピクセルからなる複数のフレーム内などにおける、一連の姿勢に相当する。複数のユーザーを同様にモニタリングすることができる。
[0056]撮像システム10は、例えば、テレビ、モニター、もしくは高解像度テレビ(HDTV)などの、または視覚および聴覚出力をユーザーに提供する壁面もしくは他の面上への投影のことさえある、ディスプレー196などの視聴覚デバイスに接続することができる。聴覚出力は、別個のデバイスを介して提供することもできる。ディスプレーを駆動するため、コンピューティング環境12は、アプリケーションに関連する視聴覚信号を提供する、グラフィックスカードなどのビデオアダプター、および/またはサウンドカードなどのオーディオアダプターを含むことができる。ディスプレー196は、例えば、Sビデオケーブル、同軸ケーブル、HDMI(登録商標)ケーブル、DVIケーブル、またはVGAケーブルなどを介して、コンピューティング環境12に接続することができる。
[0057]ユーザーの姿勢、ジェスチャー、および/または動きが、キャプチャーされ、アバターもしくは画面上のキャラクターを動かすために使用されるように、および/またはコンピューティング環境12によって実行されるアプリケーションへの入力制御として解釈されるように、深度カメラシステム20を使用して、ユーザー8をトラッキングすることができる。
[0058]ユーザー8のいくつかの動きは、アバターの制御以外のアクションに対応することができる制御として解釈することができる。例えば、一実施形態では、プレーヤーは、姿勢および/または動きを使用して、ゲームを終了、停止、またはセーブすること、レベルを選択すること、高得点を見ること、および友人と通信することなどができる。プレーヤーは、姿勢および/または動きを使用して、メインユーザーインターフェースからゲームもしくは他のアプリケーションを選択すること、またはそれとは別に選択肢のメニューを操作することができる。したがって、1つまたは複数のアプリケーションと対話するために、ユーザー8のあらゆる姿勢および/または動きを、任意の適切な方法で利用可能とすること、使用すること、および解析することができる。
[0059]撮像システム10はさらに、ゲームならびに娯楽およびレジャーを目的とする他のアプリケーションの分野の外にある、オペレーティングシステムおよび/またはアプリケーションの制御入力として、ターゲットの姿勢および/または動きを解釈するために使用することができる。例えば、実際に、オペレーティングシステムおよび/またはアプリケーションの制御可能な側面はいずれも、ユーザー8の姿勢および/または動きによって制御することができる。
[0060]図2は、図1aの撮像システム10の例示的なブロック図である。深度カメラシステム20は、深度ピクセル値を含むことができる深度画像を含む深度情報を有するビデオを、例えば、飛行時間(time−of−flight)、構造化照明(structured light)、またはステレオ画像(stereo image)などを含む、任意の適切な技法を介して、キャプチャーするように構成することができる。深度カメラシステム20は、深度情報を「Zレイヤ」に、すなわち、深度カメラからその視線に沿って伸びるZ軸に直交できるレイヤに組織することができる。
[0061]深度カメラシステム20は、物理空間内のシーンの深度画像をキャプチャーする深度カメラなどの、画像カメラコンポーネント22を含むことができる。深度画像は、キャプチャーされたシーンの2次元(2D)ピクセル領域を含むことができ、2Dピクセル領域内の各ピクセルは、画像カメラコンポーネント22からの直線距離を表す、関連する深度値を有する。
[0062]画像カメラコンポーネント22は、シーンの深度画像をキャプチャーするために使用できる、赤外(IR)光放射器24と、赤外光カメラ26と、赤緑青(RGB)カメラ28とを含むことができる。赤外光放射器24および赤外光カメラ26の組み合わせによって、3Dカメラが形成される。例えば、飛行時間解析では、IR光放射器24が、物理空間に赤外光を放射し、赤外光カメラ26が、物理空間内の1つまたは複数のターゲットおよび物体の表面からの後方散乱光を検出する。いくつかの実施形態では、出射光パルスと対応する入射光パルスの間の時間が測定され、深度カメラシステム20から物理空間内のターゲットまたは物体上の特定の位置までの物理距離を決定するために使用されるように、パルス赤外光を使用することができる。出射光波の位相を入射光波の位相と比較して、位相シフトを決定することができる。その後、位相シフトを使用して、深度カメラシステムからターゲットまたは物体上の特定の位置までの物理距離を決定することができる。
[0063]例えば散乱光パルス撮像(shuttered light pulse imaging)を含む、様々な技法を介して、光の反射ビームの強度を経時的に解析することによって、深度カメラシステム20からターゲットまたは物体上の特定の位置までの物理距離を間接的に決定するために、飛行時間解析を使用することもできる。
[0064]別の例示的な実施形態では、深度カメラシステム20は、構造化照明を使用して、深度情報をキャプチャーすることができる。そのような解析では、パターン化された光(すなわち、グリッドパターンまたはストライプパターンなど既知のパターンで表示される光)を、例えばIR光放射器24を介して、シーン上に投影することができる。シーン内の1つまたは複数のターゲットまたは物体の表面に当たると、それに応じて、パターンが変形されることがある。パターンのそのような変形は、例えば赤外光カメラ26および/またはRGBカメラ28によって、キャプチャーすることができ、その後、深度カメラシステムからターゲットまたは物体上の特定の位置までの物理距離を決定するために解析することができる。
[0065]深度カメラシステム20は、深度情報を生成するために分解できる視覚的ステレオデータを獲得するために、シーンを異なる角度から見ることができる2つ以上の物理的に離れたカメラを含むことができる。
[0066]深度カメラシステム20は、音波を受け取り、電気信号に変換する、例えばトランスデューサーまたはセンサーを含む、マイクロフォン30をさらに含むことができる。加えて、コンピューティング環境12によって実行されるアプリケーションを制御するために、マイクロフォン30を使用して、人によって提供される音などのオーディオ信号を受け取ることができる。オーディオ信号は、話された言葉、口笛、叫び、および他の発声などの、人の発声音の他、手を叩く、または足を踏み鳴らすなどの、非発声音も含むことができる。
[0067]深度カメラシステム20は、画像カメラコンポーネント22と通信するプロセッサー32を含むことができる。プロセッサー32は、例えば、深度画像を受け取るため、深度画像に基づいてボクセルからなるグリッドを生成するため、ボクセルからなるグリッド内に含まれる背景を除去して、人ターゲットに関連する1つもしくは複数のボクセルを分離するため、分離された人ターゲットの1つもしくは複数の四肢の位置もしくは場所を決定するため、1つもしくは複数の四肢の位置もしくは場所に基づいてモデルを調整するための命令、または以下でより詳細に説明される他の任意の適切な命令を含む命令を実行できる、標準化されたプロセッサー、専用プロセッサー、またはマイクロプロセッサーなどを含むことができる。
[0068]深度カメラシステム20は、プロセッサー32によって実行される命令を記憶できる他、3DカメラもしくはRGBカメラによってキャプチャーされた画像もしくは画像のフレーム、または他の任意の適切な情報もしくは画像なども記憶できる、メモリーコンポーネント34をさらに含むことができる。例示的な一実施形態によれば、メモリーコンポーネント34は、ランダムアクセスメモリー(RAM)、リードオンリーメモリー(ROM)、キャッシュ、フラッシュメモリー、ハードディスク、または他の任意の適切な有形なコンピューター可読記憶コンポーネントを含むことができる。メモリーコンポーネント34は、バス21を介して画像キャプチャーコンポーネント22およびプロセッサー32と通信する、別個のコンポーネントとすることができる。別の実施形態によれば、メモリーコンポーネント34は、プロセッサー32および/または画像キャプチャーコンポーネント22内に組み込むことができる。
[0069]深度カメラシステム20は、通信リンク36を介してコンピューティング環境12と通信することができる。通信リンク36は、有線および/または無線接続とすることができる。一実施形態によれば、コンピューティング環境12は、深度カメラシステム20の視野内にある物理空間からいつ画像データをキャプチャーすべきかを知らせるクロック信号を、通信リンク36を介して深度カメラシステム20に提供することができる。
[0070]加えて、深度カメラシステム20は、例えば3Dカメラ26および/もしくはRGBカメラ28によってキャプチャーされた深度情報および画像、ならびに/または深度カメラシステム20によって生成できるスケルタルモデル(skeletal model)を、通信リンク36を介してコンピューティング環境12に提供することができる。その後、コンピューティング環境12は、モデル、深度情報、およびキャプチャーされた画像を使用して、アプリケーションを制御することができる。例えば、図2に示されるように、コンピューティング環境12は、(ユーザーが姿勢を取った、または動いたときに)モデルによって実行され得るジェスチャー/姿勢に関する情報を各々が有する、ジェスチャー/姿勢フィルターの集まりなどの、ジェスチャー/姿勢ライブラリ190を含むことができる。例えば、様々な手の姿勢および/またはジェスチャーのためのジェスチャー/姿勢フィルターを提供することができる。手の例示的な姿勢は、「ストップ」姿勢における手のひらを前に向けて手を上げること、および数量を示すために1本または複数本の指を立てることなどを含む。手の例示的なジェスチャーは、手をスワイプする(swipe)こと、または振り立てる(fling)ことを含む。検出された姿勢または運動を各フィルターと比較することによって、人によって実行された特定の姿勢またはジェスチャーを識別することができる。
[0071]深度カメラシステム20によってキャプチャーされてモデルの形式を取るデータは、アプリケーションへの様々な制御入力に関連付けられた1つまたは複数の特定の姿勢または動きを、(スケルタルモデルによって表される)ユーザーがいつ実行したかを識別するために、ジェスチャー/姿勢ライブラリ190内のジェスチャー/姿勢フィルターと比較することができる。
[0072]コンピューティング環境は、メモリー194内に記憶された命令を実行して、オーディオ−ビデオ出力信号を表示デバイス196に提供するための、および本明細書で説明される他の機能を達成するための、プロセッサー192も含むことができる。
[0073]メモリー34は、本明細書で説明されるようなユーザーの手または他の有関節身体部分の姿勢をモデル化する方法を実行するために、少なくとも1つのプロセッサーをプログラミングするための、コンピューター可読ソフトウェアがその上に具体化される、有形なコンピューター可読記憶デバイスとすることができる。また、プロセッサー32は、ユーザーの姿勢をモデル化するためのプロセッサー実施方法を可能にする、1つまたは複数のプロセッサーとすることができ、方法は、本明細書で説明されるプロセッサー実施ステップを含む。
[0074]図3は、図1の撮像システムにおいて使用できるコンピューティング環境の例示的なブロック図を示している。コンピューティング環境は、1つまたは複数のジェスチャーまたは他の動きを解釈し、それに応じて、ディスプレー上の視覚空間を更新するために使用することができる。上で示されたコンピューティング環境12などのコンピューティング環境は、ゲームコンソールなどの、マルチメディアコンソール100を含むことができる。マルチメディアコンソール100は、レベル1キャッシュ102、レベル2キャッシュ104、およびフラッシュROM(リードオンリーメモリー)106を有する、中央処理装置(CPU)101を有する。レベル1キャッシュ102およびレベル2キャッシュ104は、データを一時的に記憶し、その結果、メモリーアクセスサイクルの回数を減らし、それによって、処理スピードおよびスループットを改善する。2つ以上のコアを、したがって、追加のレベル1キャッシュ102およびレベル2キャッシュ104有する、CPU101を提供することができる。フラッシュROMなどのメモリー106は、マルチメディアコンソール100に電源が入れられたときに、ブートプロセスの初期フェーズ中にロードされる、実行可能コードを記憶することができる。
[0075]グラフィックス処理ユニット(GPU)108およびビデオエンコーダー/ビデオコーデック(コーダー/デコーダー)114は、高速および高解像度グラフィックス処理のためのビデオ処理パイプラインを形成する。データは、バスを介してグラフィックス処理ユニット108からビデオエンコーダー/ビデオコーデック114に搬送される。ビデオ処理パイプラインは、データを、テレビまたは他のディスプレーに送るために、A/V(オーディオ/ビデオ)ポート140に出力する。RAM(ランダムアクセスメモリー)などの様々なタイプのメモリー112へのプロセッサーアクセスを容易にするために、メモリーコントローラー110が、GPU108に接続される。
[0076]マルチメディアコンソール100は、好ましくはモジュール118上に実装される、I/Oコントローラー120、システム管理コントローラー122、オーディオ処理ユニット123、ネットワークインターフェース124、第1のUSBホストコントローラー126、第2のUSBコントローラー128、および前面パネルI/Oサブアセンブリー130を含む。USBコントローラー126、128は、周辺機器コントローラー142(1)〜142(2)、無線アダプター148、および外部メモリーデバイス146(例えば、フラッシュメモリー、外部CD/DVD ROMドライブ、着脱可能媒体など)に対するホストとして機能する。ネットワークインターフェース(NW IF)124および/または無線アダプター148は、ネットワーク(例えば、インターネット、ホームネットワークなど)へのアクセスを提供し、イーサネット(登録商標)カード、モデム、Bluetooth(登録商標)モジュール、およびケーブルモデムなどを含む、多種多様な様々な有線または無線アダプターコンポーネントのいずれかとすることができる。
[0077]ブートプロセス中にロードされるアプリケーションデータを記憶するために、
システムメモリー143が提供される。媒体ドライブ144が提供され、媒体ドライブ144は、DVD/CDドライブ、ハードドライブ、または他の着脱可能媒体ドライブを含むことができる。媒体ドライブ144は、マルチメディアコンソール100に内蔵すること、または外付けすることができる。アプリケーションデータは、実行、再生などのために、マルチメディアコンソール100によって、媒体ドライブ144を介してアクセスすることができる。媒体ドライブ144は、シリアルATAバスまたは他の高速接続などのバスを介して、I/Oコントローラー120に接続される。
[0078]システム管理コントローラー122は、マルチメディアコンソール100の利用可能性の保証に関する様々なサービス機能を提供する。オーディオ処理ユニット123およびオーディオコーデック132は、高忠実度およびステレオ処理を行う、対応するオーディオ処理パイプラインを形成する。オーディオデータは、通信リンクを介して、オーディオ処理ユニット123とオーディオコーデック132の間で搬送される。オーディオ処理パイプラインは、データを、オーディオ機能を有する外部オーディオプレーヤーまたはデバイスによる再生のために、A/Vポート140に出力する。
[0079]前面パネルI/Oサブアセンブリー130は、電源ボタン150および排出ボタン152の機能の他、マルチメディアコンソール100の外面上に露出する任意のLED(発光ダイオード)または他のインジケーターをサポートする。システム電源モジュール136は、マルチメディアコンソール100のコンポーネントに電力を提供する。ファン138は、マルチメディアコンソール100内の回路を冷却する。
[0080]CPU101、GPU108、メモリーコントローラー110、およびマルチメディアコンソール100内の他の様々なコンポーネントは、様々なバスアーキテクチャのいずれかを使用する、シリアルおよびパラレルバス、メモリーバス、周辺バス、ならびにプロセッサーまたはローカルバスを含む、1つまたは複数のバスを介して相互接続される。
[0081]マルチメディアコンソール100に電源が入れられたとき、アプリケーションデータを、システムメモリー143からメモリー112および/またはキャッシュ102、104にロードし、CPU101上で実行することができる。アプリケーションは、マルチメディアコンソール100上で利用可能な異なる媒体タイプに移動したときにも一貫したユーザーエクスペリエンスを提供する、グラフィカルユーザーインターフェースを提示することができる。動作中、媒体ドライブ144内に含まれるアプリケーションおよび/または他のメディアを、媒体ドライブ144から起動または再生して、マルチメディアコンソール100に追加の機能を提供することができる。
[0082]マルチメディアコンソール100は、システムをテレビまたは他のディスプレーに単純に接続することによって、スタンドアロンシステムとして動作させることができる。このスタンドアロンモードでは、マルチメディアコンソール100は、1人または複数人のユーザーが、システムと対話すること、映画を観ること、または音楽を聴くことを可能にする。しかし、ネットワークインターフェース124または無線アダプター148を介して利用可能になるブロードバンド接続を組み込むことによって、マルチメディアコンソール100はさらに、より大規模なネットワークコミュニティーへの参加者として動作させることができる。
[0083]マルチメディアコンソール100に電源が入れられたとき、指定された量のハードウェアリソースが、マルチメディアコンソールオペレーティングシステムによるシステム使用のために予約される。これらのリソースは、メモリー(例えば16MB)、CPUおよびGPUサイクル(例えば5%)、ネットワーク帯域幅(例えば8kbs)などの予約を含むことができる。これらのリソースはシステムブート時間に予約されるので、予約されたリソースは、アプリケーションの見地からは存在していない。
[0084]特に、メモリー予約は、起動カーネル、並列システムアプリケーションおよびドライバーを含むのに十分な大きさであることが好ましい。CPU予約は、予約されたCPU使用がシステムアプリケーションによって使用されない場合は、アイドルスレッドが任意の未使用サイクルを消費するように、好ましくは一定である。
[0085]マルチメディアコンソール100がブートされ、システムリソースが予約された後、システム機能を提供するために、並列システムアプリケーションが実行される。システム機能は、上で説明した予約されたシステムリソース内で実行される、1組のシステムアプリケーション内にカプセル化される。オペレーティングシステムカーネルは、ゲームアプリケーションスレッドに対してシステムアプリケーションスレッドであるスレッドを識別する。システムアプリケーションは、アプリケーションからシステムリソースが一貫した見え方をするように、好ましくは所定の時間および間隔でCPU101上において動作するようにスケジュールされる。スケジューリングは、コンソール上で動作しているゲームアプリケーションが被るキャッシュ中断(cache disruption)を最低限に抑えるためである。
[0086]並列システムアプリケーションがオーディオを必要とする場合、時間に対して鋭敏であるため、ゲームアプリケーションとは非同期にオーディオ処理がスケジュールされる。(以下で説明される)マルチメディアコンソールアプリケーションマネージャーは、システムアプリケーションがアクティブである場合、ゲームアプリケーションのオーディオレベルを抑制する(例えば、消音、減衰)。
[0087]入力デバイス(例えばコントローラー142(1)、142(2))は、ゲームアプリケーションおよびシステムアプリケーションによって共用される。入力デバイスは、予約リソースではないが、システムアプリケーションとゲームアプリケーションの間で切り換えられて、各々がデバイスを占有する(have a focus of the device)ようにすべきである。アプリケーションマネージャーは、好ましくは、ゲームアプリケーションの知識を知ることなく、入力ストリームの切り換えを制御し、ドライバーが占有の切り換えに関する状態情報を維持する。コンソール100は、カメラ26および28を含む、図2の深度カメラシステム20から、追加の入力を受け取ることができる。
[0088]図4は、図1の撮像システムにおいて使用できるコンピューティング環境の別の例示的なブロック図を示している。
[0089]撮像システムでは、コンピューティング環境は、1つまたは複数のジェスチャーまたは姿勢を解釈し、それに応じて、ディスプレー上の視覚空間を更新するために使用することができる。コンピューティング環境220は、コンピューター241を含み、コンピューター241は、一般に様々な有形なコンピューター可読記憶媒体またはデバイスを含む。これは、コンピューター241によってアクセスできる任意の利用可能な媒体とすることができ、揮発性および不揮発性媒体、着脱可能および着脱不能媒体をともに含む。システムメモリー222は、リードオンリーメモリー(ROM)223およびランダムアクセスメモリー(RAM)260など、揮発性および/または不揮発性メモリーの形態を取るコンピューター記憶媒体を含む。基本入出力システム224(BIOS)は、スタートアップ中などにコンピューター241内の要素間における情報の転送を助ける基本ルーチンを含み、一般にROM223内に記憶される。RAM260は、処理ユニット259から直ちにアクセス可能な、および/または処理ユニット259によって現在操作されている、データおよび/またはプログラムモジュールを一般に含む。グラフィックスインターフェース231は、GPU229と通信する。限定することなく、例を挙げると、図4は、オペレーティングシステム225、アプリケーションプログラム226、他のプログラムモジュール227、およびプログラムデータ228を示している。
[0090]コンピューター241は、例えば、着脱不能な不揮発性の磁気媒体から読み取り、それに書き込む、ハードディスクドライブ238、着脱可能な不揮発性の磁気ディスク254から読み取り、それに書き込む、磁気ディスクドライブ239、およびCD ROMまたは他の光媒体などの着脱可能な不揮発性の光ディスク253から読み取り、それに書き込む、光ディスクドライブ240など、他の着脱可能/着脱不能、揮発性/不揮発性のコンピューター記憶媒体も含むことができる。例示的な動作環境において使用できる、他の着脱可能/着脱不能、揮発性/不揮発性の有形なコンピューター可読記憶媒体またはデバイスは、磁気テープカセット、フラッシュメモリーカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートRAM、およびソリッドステートROMなどを含むが、それらに限定されない。ハードディスクドライブ238は、一般に、インターフェース234などの着脱不能メモリーインターフェースを介して、システムバス221に接続され、磁気ディスクドライブ239および光ディスクドライブ240は、一般に、インターフェース235などの着脱可能メモリーインターフェースを介して、システムバス221に接続される。
[0091]上で説明され、図4に示される、ドライブおよび関連するコンピューター記憶媒体は、コンピューター241のために、コンピューター可読命令、データ構造、プログラムモジュール、および他のデータの記憶を可能にする。例えば、ハードディスクドライブ238は、オペレーティングシステム258、アプリケーションプログラム257、他のプログラムモジュール256、およびプログラムデータ255を記憶するものとして示されている。これらのコンポーネントは、オペレーティングシステム225、アプリケーションプログラム226、他のプログラムモジュール227、およびプログラムデータ228と同じであることも、または異なることもできることに留意されたい。オペレーティングシステム258、アプリケーションプログラム257、他のプログラムモジュール256、およびプログラムデータ255には、少なくとも、それらが異なるコピーであることを示すために、異なる番号が与えられている。ユーザーは、キーボード251、およびマウス、トラックボール、またはタッチパッドと一般には呼ばれるポインティングデバイス252などの、入力デバイスを介して、コンピューター241にコマンドおよび情報を入力することができる。他の入力デバイス(図示されず)は、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディッシュ、またはスキャナーなどを含むことができる。これらおよび他の入力デバイスは、しばしばシステムバスに結合されるユーザー入力インターフェース236を介して、処理ユニット259に接続されるが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス(USB)などの、他のインターフェースおよびバス構造によって接続されることもある。カメラ26および28を含む、図2の深度カメラシステム20は、コンソール100のための追加の入力デバイスを定義することができる。モニター242または他のタイプのディスプレーも、ビデオインターフェース232などのインターフェースを介して、システムバス221に接続される。モニターに加えて、コンピューターは、出力周辺インターフェース233を介して接続できる、スピーカー244およびプリンター243などの、他の周辺出力デバイスも含むことができる。
[0092]コンピューター241は、リモートコンピューター246などの1つまたは複数のリモートコンピューターへの論理接続を使用して、ネットワーク環境において動作することができる。リモートコンピューター246は、パーソナルコンピューター、サーバー、ルーター、ネットワークPC、ピアデバイス、または他の共通ネットワークノードとすることができ、一般に、コンピューター241に関連して上で説明された要素の多くまたはすべてを含むが、図4ではメモリー記憶デバイス247だけが示されている。論理接続は、ローカルエリアネットワーク(LAN)245およびワイドエリアネットワーク(WAN)249を含むが、他のネットワークも含むことができる。そのようなネットワーク環境は、オフィス、企業規模のコンピューターネットワーク、イントラネット、およびインターネットにおいて一般的である。
[0093]LANネットワーク環境において使用される場合、コンピューター241は、ネットワークインターフェースまたはアダプター237を介して、LAN245に接続される。WANネットワーク環境において使用される場合、コンピューター241は、インターネットなどのWAN249を介する通信を確立するためのモデム250または他の手段を含む。モデム250は、内蔵または外付けとすることができ、ユーザー入力インターフェース236または他の適切なメカニズムを介して、システムバス221に接続することができる。ネットワーク環境では、コンピューター241に関連して示されたプログラムモジュールまたはその一部は、リモートメモリー記憶デバイス内に記憶することができる。限定することなく、例を挙げると、図4は、メモリーデバイス247上に存在するものとして、リモートアプリケーションプログラム248を示している。示されるネットワーク接続は例示的なものであり、コンピューター間において通信リンクを確立する他の手段も使用できることが理解されよう。
[0094]コンピューティング環境は、本明細書で説明されるようなユーザーの手または他の有関節身体部分の姿勢をモデル化する方法を実行するために、少なくとも1つのプロセッサーをプログラミングするための、コンピューター可読ソフトウェアがその上に具体化される、有形なコンピューター可読記憶デバイスを含むことができる。有形なコンピューター可読記憶デバイスは、例えば、コンポーネント222、234、235、230、253、および254の1つまたは複数を含むことができる。さらに、コンピューティング環境の1つまたは複数のプロセッサーは、ユーザーの手または他の有関節身体部分の姿勢をモデル化するためのプロセッサー実施方法を可能にすることができ、方法は、本明細書で説明されるプロセッサー実施ステップを含む。プロセッサーは、例えば、コンポーネント229および259の1つまたは複数を含むことができる。
[0095]図5は、(菱形によって示される)関節と、(四角形によって示される)アトラクトポイントとを含む、ユーザーの手のモデルを示している。姿勢が検出されるべき所定の有関節身体部分に対するモデルを提供することができる。1つの手法では、手領域のモデルが提供される。モデル500は、腕504と、手のひら502と、指510、520、530、540と、親指550とを含むことができる。指は、末端部セグメント(distal segment)512、522、532、542と、中間部セグメント(middle segment)514、524、534、544と、基部セグメント(proximal segment)516、526、536、546とを含む。親指は、末端部セグメント552と、基部セグメント554とを含む。モデルの指セグメントおよび親指セグメントは、人体の指骨に対応する。腕/手首と手のひらの間の関節503、末端部親指部分と基部親指部分の間の関節560、および基部親指部分と手のひらの間の関節564など、隣接する身体部分の間には関節が設けられる。これらの関節は、定められた範囲の動きを行う、人体内の関節に一般に対応する。この動きは、主として角度的なものであるが、同じく並進的なものでもあり得る。指先(末端部指セグメントの先端および末端部親指セグメントの先端)などにおける追加のポイントは、末端部指セグメントの位置を定義するために使用することができる。これらの先端ポイントは、人体骨格の関節に対応しないが、便宜的に、それらも「関節」と呼ばれる。末端部親指セグメントにおける関節556が、一例である。したがって、関節556など、いくつかの関節は、人体骨格における関節に対応しないことがあり、関節560、564など、いくつかの関節は、人体骨格における関節に対応する。身体部分の方向は、身体部分の少なくとも2つの関節の位置によって定めることができる。例えば、指セグメントなどの細長い身体部分の場合、その身体部分の対向端に関節が存在することがある。
[0096]さらに、各身体部分に対して、1つまたは複数の代表的なアトラクトポイントを指定することができる。例えば、指530の末端部指セグメント、指540の末端部指セグメント、末端部親指部分552、基部親指部分554、手のひら502、および腕504に対して、それぞれ、例示的な代表的なアトラクトポイント531、541、558、562、501、および505が提供される。例えば、手のひらなど、相対的に大きい、および/または相対的により複雑な範囲の動きを行う、身体部分に対しては、複数のアトラクトポイントを同様に使用することができる。指540の中間部および基部指セグメントに対して、それぞれ、アトラクトポイント543および545が提供される。
[0097]モデルの身体部分の1つまたは複数が、アトラクトポイントを有さないことも可能である。
[0098]一般に、この指および他の指では、小さな四角形が、代表的なアトラクトポイントを表す。代表的なアトラクトポイントは、モデルの身体部分を代表するポイントとすることができる。「アトラクトポイント」という用語は、マッチングプロセスにおいて、アトラクトポイントが深度センサーデータの方へ移動される、または引き付けられる(attracted)ことを示している。1つの手法では、代表的なアトラクトポイントは、身体部分の中心点または重心に存在する。重心は、身体部分の内部または身体部分の表面に存在することができる。表面は、深度軸に沿って、または深度カメラに向かう視線に沿って、深度カメラの方を向くことができる。重心は、身体部分の中心点であると見なすことができる。
[0099]図7Aのステップ734に関連して以下で説明される、重要度の軸(axis of importance)507は、重心対アトラクトポイントマッチングのために使用することができる。
[00100]モデルは、様々な身体部分の許容可能な範囲の動きを示すことができる。各身体部分は、隣接する身体部分に対して、許容可能な角度範囲の動きを行うことができる。例えば、各指の基部セグメントは、手のひらに対して、許容可能な角度範囲の動きを行うことができ、各指の中間部セグメントは、指の基部セグメントに対して、許容可能な角度範囲の動きを行うことができるなどである。これらは、角度制約によって定義することができる。身体部分のいくつかの相対的な並進運動も許容されることがある。異なる身体部分が衝突できないこと、例えば、全体的または部分的に、同じ時間に同じ位置に存在できないことを示す、衝突制約を提供することができる。
[00101]モデルは、身体部分が一般に独立しており、自由に動けるように定義することができるが、互いに隣接していると思われる身体部分が実際に隣接している配置を得るのに有利な距離制約を設定することができる。隣接性は、隣接する身体部分の関節が実質的に同じ位置にあることを含むことができる。この手法では、各身体部分は、その先端に、隣接する身体部分の先端における関節と実質的に一致する、関節を有することができる。一例として、末端部親指部分と基部親指部分の間の関節560は、基部親指部分554の末端にある1つの関節と、末端部親指部分552の基端にある1つの関節とを表すことができる。末端部親指部分と基部親指部分が互いに離れている場合に、距離制約違反の一例が生じる。
[00102]別の手法では、例えば、末端部親指部分と基部親指部分の間に1つの関節が存在し、距離制約は、その関節と親関節の間の距離である。モデルのこの手法では、メッシュが、子関節に達するほど十分に長くはないとしても、子関節の方を指して親関節に配置される。親関節または子関節は、それぞれ、親身体部分または子身体部分に関連付けることができる。1つの可能な手法では、子身体部分は、手のひらから伸びる指など、より大きな身体部分から伸びるより小さな身体部分とすることができる。または、子身体部分は、腕から指先に向かう方向など、指定された方向に別の身体部分から伸びる身体部分とすることができる。例えば、基部親指部分554は、末端部親指部分552の親とすることができる。
[00103]身体部分のモデルは、所望のレベルの詳細さを有することができる。例えば、手のひらを単一エンティティとしてモデル化する代わりに、中手骨および関節をモデル化することなどによって、さらに詳細に手のひらをモデル化することができる。モデルは、長方形、立方体、楕円体、および球体など、個別の体積/形状を含むことができる。これらの体積は、所望のレベルの粒度を提供するために、サイズおよび形状を変えることができる。代替的または追加的に、適切にリギング(rig)およびスキニング(skin)が行われた連続的な面を形成するメッシュによって、モデルを表すことができる。リギングおよびスキニングとは、スケルトンを3Dメッシュ内に配置し、スケルトンを動かした場合にスムーズに変形する身体部分を生成するために、スケルタルセグメントをメッシュの対応する部分にマッピングすることである。モデルの複雑さは、所望のリアリズムの程度および利用可能な計算リソースなどの要因を考慮すべきである。
[00104]さらに、有関節身体部分の一例として人間の手について説明したが、その概念は、既知の範囲の動きを行う物体の他の有関節身体部分に拡張することができる。物体は、人もしくは動物、またはロボットもしくは他の無生物物体などの、生物/物体を含むことができる。1つまたは複数のそのような物体を同時にトラッキングすることができる。さらに、アプリケーションの部品として深度センサーが使用される場合、深度センサーによって撮像される人は、アプリケーションの能動的なユーザー/参加者、または受動的な見物人とすることができる。
[00105]図6は、撮像システムにおいて改善された忠実度で有関節身体部分の姿勢を検出するための方法を示している。ステップ600は、先に言及した深度カメラシステムからなど、深度センサーからユーザーの深度ピクセルを獲得するステップを含む。例えば、これは、深度ピクセルからなるフレームとすることができる。ステップ700は、図7Aのステップ702〜ステップ714に関連してさらに説明されるような、プリマッチング処理を実行するステップを含む。ステップ720は、図7Aのステップ721〜ステップ736に関連してさらに説明されるような、重心を使用してマッチングを実行するステップを含む。ステップ750は、図7Aのステップ752〜ステップ756に関連してさらに説明されるような、重心を使用してマッチングを改善するステップを含む。ステップ760は、図7Bに関連してさらに説明されるような、ラスター化モデルを使用してマッチングを改善するステップを含む。1つの手法では、ステップ700、720、750、および760は、モデルの身体部分の相対的な比率を変化させない。
[00106]図7Aは、図6のステップ700、720、および750のさらなる詳細を示している。図7Aおよび図7Bでは、(702から704などの)短い破線は、データの入力を表し、(704から706などの)長い破線は、データの出力を表し、(704から708などの)実線は、コードもしくはソフトウェアフローまたは実行シーケンスを表す。ステップ702〜ステップ714は、プリマッチング処理を実行するための図7Aのステップ700に対応する。
[00107]背景除去ステップ704は、(図8Aのフレーム800など)深度フレームデータ702を受け取る。深度フレームは、深度センサーからの深度ピクセルを含むことができる。出力は、例えば、(図8Bのフレーム810など)BGR(色順序が青−緑−赤であるピクセル)深度フレーム706とすることができる。セグメンテーションステップ708は、BGR深度フレームを処理して、両手が存在する場合に、ピクセルが右手に属するか、それとも左手に属するかを識別するセグメンテーションマップ710を提供する。この目的のために、様々な発見的問題解決法を使用することができる。見本(exemplar)ステップ712は、機械学習プロセスを使用して、BGR深度フレームを処理し、確率マップ714を提供する。機械学習プロセスは、前もってトレーニングされている。具体的には、各深度ピクセルに対して、その深度ピクセルが身体部分の1つの一部である確率を決定することができる。例えば、Pr1は、深度ピクセルが末端部親指部分の一部である確率とすることができ、Pr2は、深度ピクセルが基部親指部分の一部である確率とすることができ、Pr3は、深度ピクセルが手のひらの一部である確率とすることができるなどである。各ピクセルについて、その確率の合計は1である。したがって、確率マップは、各深度ピクセルに対して1組の確率を含むことができ、1つの確率がモデルの各身体部分に対応する。
[00108]ステップ721〜ステップ736は、図7Aのステップ720に対応する。ステップ721は、確率マップに基づいて、各身体部分に1つの重心を生成し、重心データ722を提供する。重心データは、身体部分の各々について、x、y、z座標における3D位置の形式を取ることができる。3D位置は、深度ピクセルと一致することもあり、または一致しないこともある。各身体部分の重心は、モデルにおける身体部分の代表的なアトラクトポイントに類似した、身体部分の代表的な位置である。図9A〜図9Eおよび図10は、例示的な重心を示している。ステップ724は、重心セットを生成し、合併して、重心セットデータ726を提供する。重心セットは、同じモデル化身体領域の一部であると判定された、重心の集まりである。例えば、1つのセット728は、一方の手についての重心を含むことができ、別のセット730は、他方の手についての重心を含むことができる。この時点では、重心セットが、右手に関連するのか、それとも左手に関連するのかは分かっていない。ステップ732は、重心セット728、730を入力として使用して、またセグメンテーションマップを使用して、重心セット対腕マッチング(centroid set−to−arm matching)を実行する。セグメンテーションマップは、深度マップのどの部分が左手で、どの部分が右手であるかを示す。このステップは、どの重心セットがどちらの腕に関連するかを示す。重心セットが一方の腕からどれだけ近く、他方の腕からどれだけ近いかなど、様々な要因を考慮することができる。一方の腕により近い重心セットは、その腕に関連している可能性が高い。このステップは、入力として、(右腕740および左腕742のデータを含む)先行フレームモデル738を、すなわち、直前のフレームを含む1つまたは複数の先行フレームから決定されたモデルの状態を使用することもできる。
[00109]ステップ732は、重心とアトラクトポイントのマッチングタイプの間の距離を使用して計算されたスコアに基づいた、重心セットとトラッキングされる有関節モデルとの間の2部マッチング(bipartite matching)と、確率に基づいた、重心の信頼度尺度(confidence measure)とを含むことができる。
[00110]ステップ734は、重心対アトラクトポイントマッチングを実行する。図11が、さらなる詳細を提供する。重心セット728、730およびモデルの代表的なアトラクトポイント744(図5を参照)を入力として提供することができる。代表的なアトラクトポイントは、各身体部分について、深度センサーデータのマッチング重心と一致するように理想的に作成された、有関節モデル内のポイントである。ステップ734は、様々な要因を使用して計算されたマッチスコアを使用して、重心セット内のすべての重心とモデルのすべてのアトラクトポイントとの間の1つまたは複数の最良マッチを見つけることを含むことができる。
[00111]1つの要因は、各マッチした重心とアトラクトポイントの間の距離に関し、その距離は、例えば、重心とアトラクトポイントとを接続するベクトルの大きさによって決定することができる。アトラクトポイントにより近い重心には、アトラクトポイントからより遠い重心よりも、より高いスコアを割り当てることができ、より高いスコアは、適切なマッチである可能性がより高いことに関連する。
[00112]別の要因は、重要度の軸に沿った重心の順序付けに関する。例えば、手のモデルの場合、重要度の軸は、手のひらと指の基部セグメントとの間の関節に沿って伸び、例えば指510、520、530、540などの指の(小指の付根から人差し指の付根に向かう)予想される順序を示すことができる。図5の例示的な重要度の軸507を参照されたい。例えば、重心をこの軸に直交する方向に動かして、重心が軸上のどこに落ちるかを決定することによって、重心をこの軸上に投影することができる。点の直線上への投影は、閉形式で解析的に計算することができる。その後、軸に沿った重心の順序を決定することができる。おそらく指を交差させている場合を除いて、一般に、指は予想される順序を取る。重要度の軸に沿って予想される順序を取る重心には、より高いスコアを割り当てることができ、より高いスコアは、適切なマッチである可能性がより高いことに関連する。重要度の軸に沿って予想される順序を取らない重心には、より低いスコアを割り当てることができ、より低いスコアは、適切なマッチである可能性がより低いことに関連する。重要度の軸を別の方向に取ることができ、2つ以上の重要度の軸を同様に使用することもできる。
[00113]別の要因は、隣接する重心または身体部分との接続性に関する。例えば、指の末端部セグメントの重心は、別の指のセグメントの重心ではなく、同じ指の中間部セグメントの重心に連結するピクセル経路(pixel path)内にあることが予想される。隣接する身体部分の重心に連結する経路内にある重心には、より高いスコアを割り当てることができ、より高いスコアは、適切なマッチである可能性がより高いことに関連する。隣接する身体部分の重心に連結する経路内にない重心には、より低いスコアを割り当てることができ、より低いスコアは、適切なマッチである可能性がより低いことに関連する。この要因は、比喩的に深度マップを一直線に歩いて、ピクセルデータ内に何らかの不連続が存在するかどうかを決定することによって、評価することができる。この要因は、ノイズおよび他のエッジケースに対してより頑健になるための、経路がどれだけ直線からそれ得るかについての制約を有する、重心の間の深度マップに沿った経路探索などの、より複雑な方法を使用して、評価することもできる。例えば、指の末端部セグメントから同じ指の中間部セグメントまで歩こうと試みたときに、ピクセルデータ内にギャップが検出された場合、これは、マッチが誤りである可能性が高いことを示す。すなわち、指セグメントの一方または両方が、正確に識別されていない。例えば、各指について、指の末端部と中間部の重心の間に接続を見つけることによって、接続性を評価することができる。
[00114]別の要因は、モデルの身体部分の間の衝突チェックに関する。衝突をもたらさない重心対アトラクトポイントマッチには、より高いスコアを割り当てることができ、より高いスコアは、適切なマッチである可能性がより高いことに関連し、一方、異なる身体部分が同時に同じ位置に存在する、衝突をもたらす重心対アトラクトポイントマッチには、より低いスコアを割り当てることができ、より低いスコアは、適切なマッチである可能性がより低いことに関連する。
[00115]重心とアトラクトポイントの間の最良マッチは、これらまたは他の要因の1つまたは複数の何らかの組み合わせに基づくことができる。異なる要因には、例えばテスト結果から決定された相対的な重要度に基づいて、異なる重みを与えることができる。
[00116]ステップ736は、重心へのアトラクトポイントの剛体変換を実行する。一例として図12Aを参照されたい。剛体変換は、モデルの並進、回転、およびスケーリングの1つまたは複数を含むことができる。このステップは、アトラクトポイントの最適3D点群変換の並進、回転、およびスケーリングの計算と、すべてのアトラクトポイントに対する変換の適用とを含むことができる。並進は、フレームまたは座標系に対するモデルの移動を含むことができる。座標系は、直交するx、y、z軸(図1)などの、任意の軸を含むことができる。変換を表すために、オイラー角(Euler angle)を使用することができる。回転は、軸の1つまたは複数の周りのモデルの回転を含むことができる。スケーリングは、身体部分の相対的な方向または比率を変化させることなく、モデルの全体サイズを変化させる。1つの手法では、全体としての剛体変換は、身体部分の相対的な方向を変化させない。身体部分の相対的な方向は、子身体部分とその親身体部分の間の局所変換として定義することができる。1つの可能な手法では、子身体部分は、手のひらから伸びる指など、より大きな身体部分から伸びるより小さな身体部分とすることができる。立方体の剛体変換の一例は、3D空間内で1つの位置から別の位置に動かされた、より大きなまたはより小さな立方体をもたらすことができる。剛体変換中に身体部分の相対的な方向を維持する一例は、剛体変換の前および後のどちらにおいても、第3の指の長さの4分の3の第1の指を有し、また第3の指に対して特定の角度で伸びる第1の指を有することである。
[00117]剛体変換の例示的な実施は、アトラクトポイントと重心の間の剛体変換推定を使用して、モデルのグローバルスケーリングを計算する。2つの対応するポイントセットの間の剛体変換(回転、並進、およびすべての次元における一様スケーリング)の例示的な閉形式計算は、参照により本明細書に組み込まれる、Horn,B.K.P.、「Closed−form solution of absolute orientation using unit quaternions(単位四元数を使用する絶対的な方向の閉形式解法)」、Journal of the Optical Society of America、4(4)、629〜642(1987)において説明されている。Hornは、次のように述べている。「2つの座標系における多数の点の座標の測定値のペアを使用して両系の間の関係を見出すことは、写真測量法における古典的な課題である。それは、実体写真測量およびロボット工学において用途を見出す。私はここで、3つ以上の点についての最小2乗問題に対する閉形式解法を提示する。現在、様々な経験的な方法、グラフィカルな方法、および数値反復法が使用されている。解の導出は、回転を表す単位四元数の使用によって簡略化される。私は、この問題に対する解法が有すべき対称性を強調する。最良の並進オフセットは、一方の系における座標の重心と他方の系における座標の回転およびスケーリングが施された重心との間の差である。最良のスケールは、2つの系における座標の、それぞれの重心からの2乗平均平方根偏差(root−mean−square deviation)の比に等しい。これらの正確な結果は、選択された数個の点の測定に基づいた近似法よりも好ましい。最良の回転を表す単位四元数は、対称4×4行列の最大の正固有値に関連する固有ベクトルである。この行列の要素は、点の対応する座標の積の和の結合(combinations of sums of products)である」。
[00118]剛体変換の別の例示的な実施は、A.Balan、「Restricted Affine Registration of 3D Point Clouds(3D点群の制限付きアフィンレジストレーション)」、http://priorartdatabase.com/IPCOM/000207623、2011年6月7日において説明されている。この実施は、重心とアトラクションポイント(attraction point)の間の剛体変換を計算し、1つの重要な特徴は、モデルのx軸、y軸、およびz軸に沿った異なるスケーリングパラメータを推定できることである。それは、回転、並進、および異なる次元(幅、高さ、長さ)ごとに独立した引き伸ばしを行う引き伸ばしによって、センサー観測に合わせて、物体の幾何学的モデルのレジストレーションを行う問題に対処する。この問題は、物体トラッキングおよびサイズ推定のためのモデルフィッティングにおいて用途を有する。形状は、モデルとセンサー観測との間でペアごとにマッチさせられる、3D表面点の集まりとして表される。それは、対応するセンサー測定点までの距離を最小化する、モデル点の制限付きアフィン変換(affine transformation)を計算する、反復的な解法を説明している。
[00119]ステップ752〜ステップ756は、図7Aのステップ750に対応する。ステップ752、754、および756は、重心対アトラクトポイント磁力プロセス(magnetism process)の一部と見なすことができる。ステップ752は、アトラクトポイントと重心のマッチングペアについて、アトラクトポイントを重心のより近くに移動させることを含む。例えば、アトラクトポイントと重心のマッチングペアが、モデルの基部親指部分554のアトラクトポイント562と深度センサーデータの重心916、またはモデルの末端部親指部分552のアトラクトポイント558と深度センサーデータの重心904を含むことができる、図12Aおよび図12Bを参照されたい。
[00120]ステップ752は、ステップ736から獲得された変換された代表的なアトラクトポイントのどれが、重心の対応する1つからそれぞれの閾値距離よりも遠いかを決定すること、および重心の対応する1つからそれぞれの閾値距離よりも遠い、変換された代表的なアトラクトポイントを、重心の対応する1つからそれぞれの閾値距離よりも近くなるように調整することを含むことができる。1つの手法では、それぞれの閾値距離は、各代表的なアトラクトポイントに固有の調整された距離とすることができる。または、それぞれの閾値距離は、異なる代表的なアトラクトポイントに共通とすることができる。
[00121]ステップ754は、アトラクトポイントの移動に基づいて、モデルの関節を動かすことを含む。アトラクトポイントの移動は、モデルの1つまたは複数の関節の動きと一致するので、ステップ752および754は、一緒に実行することができる。1つまたは複数のアトラクトポイントの移動によって、関節の動きに影響を及ぼすことができる。関節の動きは、動きの3D空間内における方向および大きさを定義するベクトルまたは力によって定義することができる。ステップ754への入力は、関節データ746であり、それは、3D空間内のモデルの各関節の位置を定義することができる。判断ステップ756において、例えば次の身体部分など、アトラクトポイントの次のペアが存在する場合、ステップ752および754が繰り返される。判断ステップ756が偽である場合、プロセスは、継続ポイント「E」において図7Bに引き継がれる。モデルの連続面を表すメッシュデータ748も、関節データ746に基づいて提供することができる。
[00122]次に説明される図7Bでは、継続ポイント「A」によって示されるように、確率マップが使用され、継続ポイント「B」によって示されるように、BGR深度フレームが使用され、継続ポイント「C」によって示されるように、関節データ746が使用され、継続ポイント「D」によって示されるように、メッシュデータ748が使用される。
[00123]図7Bは、図6のステップ760のさらなる詳細を示している。先に図7Aにおいて作成された重心対アトラクトポイントマッチが、反復によって改善される。1つの手法では、反復は、深度センサーデータの重心を使用せず、モデルのラスター化から獲得された深度ピクセルを使用する。モデルの関節など、モデルに適用される調整ベクトルを決定するために、モデルの深度ピクセルが、深度センサーの深度ピクセルと比較される。新しい状態のモデルは、次の反復においてラスター化され、そのプロセスが、停止基準が満たされるまで繰り返される。
[00124]ステップ762が、反復を開始する。ステップ764は、入力として、確率マップ、BGR深度フレーム、および関節データを受け取り、モデルをラスター化して、モデルの深度ピクセルを提供する。例えば、モデルのメッシュ面を、3次元(3−D)方法でラスター化することができる。1つの手法では、モデルの深度ピクセルは、x−y平面内のデータを提供する2Dバッファーと、z軸沿いの深度データを提供するz軸バッファーとにおいて提供される。モデルの深度ピクセルは、3D空間内の点である。ラスター化は、深度センサーの深度ピクセルと同じまたは異なる任意の方向に行われ、必ずしもx軸およびy軸に沿う必要はないことに留意されたい。さらに、ラスター化は、深度センサーの深度ピクセルと同じ解像度、またはそれよりも細かいもしくは粗い解像度を有することができる。手のモデルをラスター化することによって獲得されるピクセルの一例については、図12Cのピクセル1220を参照されたい。
[00125]ステップ766は、比較平面内において、モデルの深度ピクセルを深度センサーの深度ピクセルと比較する。図13Aおよび図13Bに例示される1つの手法では、平面は、深度軸を横断/直交するx−y平面である。別の手法では、平面は、深度センサーの局所的な視線を横断し、深度軸の横断からは僅かにずれている。ピクセルは、比較平面を横断する方向に比較平面に投影され、またはすでに比較平面に存在する。1つの手法では、比較平面は、z>0と深度カメラに最も近いモデルのピクセルの深度との間のどこかに存在することができる。ピクセルの3つのカテゴリーを定義することができる。カテゴリーの2つは、深度センサーの深度ピクセルについてのものであり(ステップ768および770)、カテゴリーの1つは、モデルの深度ピクセルについてのものである(ステップ772)。
[00126]具体的には、ステップ768は、モデルの深度ピクセルとオーバーラップする深度センサーのオーバーラップ深度ピクセルを識別する。「オーバーラップ」という用語は、比較平面内において、ピクセルが、少なくとも部分的に、同じ領域を占有することを指す。図12Dのピクセル1230が一例である。ピクセルをオーバーラップと分類するのに十分な、ピクセル間の最小度のオーバーラップを定義することができる。これらは、モデルが存在する場所に近似的に存在する、深度センサーの深度ピクセルであり(言い換えると、モデルは、この深度センサーデータが存在する場所に存在し)、モデルがこの深度センサーデータと良好に一致していることを示している。
[00127]ステップ770は、モデルの深度ピクセルとオーバーラップしない深度センサーの非オーバーラップ深度ピクセルを識別する。図12Dのピクセル1240が一例である。これらは、モデルが存在しない場所に近似的に存在する、深度センサーの深度ピクセルであり(言い換えると、モデルは、この深度センサーデータが存在する場所に存在せず)、この深度センサーデータとより良好に一致するようにモデルを調整すべきことを示している。
[00128]ステップ772は、深度センサーの深度ピクセルとオーバーラップしないモデルの非オーバーラップ深度ピクセルを識別する。図12Dのピクセル1220が一例である。これらは、深度センサーデータが存在しない場所に近似的に存在する、モデルの深度ピクセルであり(言い換えると、モデルは、深度センサーデータが存在しない場所に存在し)、深度センサーデータとより良好に一致するようにモデルを調整すべきことを示している。
[00129]比較に基づいて、ステップ774は、データ776として記憶されるピクセルベースの調整ベクトルを決定する。モデルをピクセルの方に引く/調整する傾向にある3D調整ベクトルを計算することができる。3つのピクセルタイプの各々に基づいて、調整ベクトルを生成し、その後、合算して、関節のための全体的な調整ベクトルを獲得することができる。ピクセルベースの調整ベクトルには、それらがステップ768、ステップ770、またはステップ772のいずれからのものかに基づいて、異なる重みを割り当てることができる。例えば、深度センサーの特性およびアプリケーションの要求に応じて、調整の1つにより重い重みを与えることが望ましいことがある。例えば、横方向解像度が最大の関心事である場合、ステップ770および/またはステップ772の調整により重い重みを与えることができる。深度解像度が最大の関心事である場合、ステップ768の調整により重い重みを与えることができる。
[00130]ピクセルの3つのタイプの各々について、調整ベクトルは、調整するのに最適な関節であるとして識別されたモデルの関節を調整することができる。この最適な関節は、必ずしもピクセルに最も近い関節である必要はない。最適な関節は、ピクセルからの関節までの距離に基づいて、モデルの異なる関節のスコアを計算することによって、識別することができる。ピクセルにより近い関節は、より高いスコアを有し、選択される確率がより高い。ピクセルからより遠い関節は、より低いスコアを有し、選択される確率がより低い。
[00131]1つの手法では、深度センサーの非オーバーラップまたはオーバーラップ深度ピクセルの場合、スコアは、確率マップからのピクセルに関連する確率(例えば、先に説明したPr1、Pr2、Pr3、...)に基づくこともできる。ピクセルが相対的に高い確率で関連する身体部分と同じ身体部分に関連する関節は、より高いスコアを有し、選択される確率がより高い。スコアは、関連の確率に比例して高くなることができる。ピクセルが相対的に高い確率で関連する身体部分と異なる身体部分に関連する関節は、より低いスコアを有し、選択される確率がより低い。
[00132]図13Aの調整ベクトル1320は、深度センサーの非オーバーラップ深度ピクセルの例示的な調整ベクトルである。ベクトルは、関節j1から深度センサーの非オーバーラップ深度ピクセルp3に向かう方向に伸びる。深度センサーのオーバーラップ深度ピクセルの場合、調整ベクトルは、深度センサーの非オーバーラップ深度ピクセルの場合と同じ方法で決定することができる。
[00133]調整ベクトルは、身体部分の動きの方向に依存する成分を有する。例えば、身体部分がz方向において深度センサーから主に遠ざかるように動かされる場合、調整ベクトルは、z方向において最も大きい成分を有する。身体部分がx−y平面内において主に動かされる場合、調整ベクトルは、x−y平面内において1つまたは複数の最も大きい成分を有する。
[00134]1つの手法では、調整ベクトルは、最良マッチ関節からピクセルに向かって伸びる。図13Aの調整ベクトル1328が一例である。ベクトルは、関節j1から深度センサーのオーバーラップ深度ピクセルp2に向かう方向に伸びる。この例では、同じ関節j1が最良マッチ関節であると見なされるが、異なる最良マッチ関節が、深度センサーの非オーバーラップ深度ピクセル、および深度センサーのオーバーラップ深度ピクセルと関連することができる。別の手法では、調整ベクトルは、モデルのオーバーラップされる深度ピクセルから深度センサーのオーバーラップ深度ピクセルに向かって伸びる。例えば、図13Aの調整ベクトル1326は、モデルのオーバーラップ深度ピクセルp1から深度センサーのオーバーラップ深度ピクセルp2に向かう方向に、基本的には深度軸に沿って伸びる。このケースでは、ベクトル1326は、関節j1に作用するベクトル1330まで並進させることができる。
[00135]1つの手法では、最良マッチングアトラクトポイントの並進には中間ステップが存在し、それは、そのアトラクトポイントによって影響を受けるすべての関節を並進させる。ピクセルのベクトル/デルタを、ある調整/調節された力で、関節に適用することができる。関節に影響を与える多くのピクセルは、あまりにも大きなデルタをもたらすことがあるので、関節にすべてのデルタを完全に適用すると、その関節を飛び去らせる可能性があり、通常は、デルタの平均が役に立つ。
[00136]1つの手法では、ベクトル1326とベクトル1330は、同じ方向にあり、同じ大きさを有する。しかし、通常はピクセルよりもはるかに少数の関節しか存在しないので、このようなことはめったにない。そのため、2つのオーバーラップピクセルと関節が単一の直線内に揃うことは、一般的ではない。調整ベクトルは、例えば、ベクトル1328とベクトル1330の間の補間に基づくこともできる。
[00137]1つの手法では、調整ベクトルは、モデルを引かない。代わりに、調整ベクトルは、アトラクトポイントを引き、今度は、アトラクトポイントが、影響を受ける関節を引く。その後、関節上のモデルが最も意味をなす場所に、モデルが配置される。例えば、基部指セグメントは、手のひらと指を接続する関節のところに基部があり、基部指セグメントが中間部指セグメントの関節の方を向くように、配置することができる。
[00138]オーバーラップするカメラ深度ピクセルとモデル深度ピクセルの間の調整ベクトルに対して、そのベクトルを使用して動かすのに適切な関節を見つけ、その関節への並進を累積し、その後、それを平均することができる。これは、z方向調整だけを含むことができる。別のケースでは、深度ピクセルと関節の間に調整ベクトルが存在し、それも累積して、平均することができる。これは、x、y、およびz方向調整を含むことができる。これらの調整は、必要に応じて組み合わせることができる。
[00139]したがって、深度センサーの非オーバーラップ深度ピクセルおよびモデルの非オーバーラップ深度ピクセルに対して、選択された関節をそれがあるべき場所に動かすために、ピクセルが寄与する必要がある力または調整を計算することができる。
[00140]深度センサーのオーバーラップ深度ピクセルに対して、深度センサーの非オーバーラップ深度ピクセルおよびモデルの非オーバーラップ深度ピクセルと同様に、ピクセルから関節までの距離から計算されるスコアに基づいて、動かすのに最良の関節を見つけることによって、調整ベクトルを決定することができる。モデルの非オーバーラップ深度ピクセルがオーバーラップされる位置に関節を動かす傾向にある調整を計算して、次の反復において、それらが、深度センサーのオーバーラップ深度ピクセルになるようにすることもできる。しかし、この計算は、モデルのすべての非オーバーラップ深度ピクセルにわたって最適化され、それは、関節における対立調整(conflicting adjustment)を課すことができる。例えば、モデルの腕は、センサーデータによって示される腕の幅よりも広いことがある。この場合、最適な解決策は、身体部分の少なくとも1つとしての腕の外周の周りのモデルの非オーバーラップ深度ピクセルの数を等しくする傾向をもつことができる。
[00141]1つの手法では、調整ベクトルは、モデルの非オーバーラップ深度ピクセルからセンサーデータの最も近い深度ピクセルに向かって伸びる。図13Aの調整ベクトル1322は、ピクセルp2がモデルの非オーバーラップ深度ピクセルp4に最も近いことを仮定した、一例である。ベクトルは、p4からp2に向かう方向に伸びる。別の手法では、調整ベクトルは、センサーデータの最も近い深度ピクセルの平面1312に向かってなど、p4から深度軸に沿って伸び、p4と平面1312の間の距離に基づいた大きさを有する。図13Aの調整ベクトル1324が、一例である。j1が動かすのに最良の関節であると仮定される場合、ベクトル1322またはベクトル1324は、関節j1に作用するベクトル(図示されず)まで並進させることができる。
[00142]図7Bにおいて、ステップ778は、説明したように、調整ベクトルを関節に適用する。このステップへの入力は、関節データ746である。図12Eおよび図12Fが、一例を提供する。その後、ステップ780における衝突制約、ステップ782における距離制約、およびステップ784における角度制約など、1つまたは複数の制約を、先に説明したように適用することができる。ステップ786は、制約ベースの調整ベクトルを決定し、対応する制約ベースの調整ベクトルデータ788を提供する。制約ベースの調整ベクトルには、タイプに基づいて、異なる重みを割り当てることができる。例えば、衝突制約は、より高い重みを受け取ることができ、距離制約は、次に高い重みを受け取ることができ、角度制約は、次に高い重みを受け取ることができる。
[00143]ステップ790は、制約ベースの調整ベクトルをモデルの関節に適用する。このステップへの入力は、関節データ746である。判断ステップ791は、例えば、一定の数のパスが実行されたとき、または関節の動きが一定の閾値を下回ったときといった、停止基準が満たされているかどうかを判定する。判断ステップ791が偽である場合、ステップ780〜ステップ790が繰り返される。判断ステップ791が真である場合、ステップ792に進む。したがって、すべての制約を同時に最も良く満たすように、ステップ780〜ステップ790において適用される制約を複数回反復することができる。
[00144]ステップ792は、ステップ780〜ステップ790の調整に基づいて、モデルメッシュを更新する。判断ステップ794は、停止基準が満たされているかどうかを判定する。例えば、停止基準は、(a)最大許容回数の反復が実行されたときに反復が停止するなど、実行された反復の回数、(b)調整ベクトルの大きさが十分に小さく、閾値を下回ったときに反復が停止するなど、調整ベクトルの大きさに基づいた収束基準、(c)最大許容回数のCPUサイクルが消費されたときに反復が停止するなど、実行された計算の量に基づいた基準のうちの1つまたは複数に基づくことができる。判断ステップ794において停止基準が満たされない場合、次の反復がステップ796において実行され、ステップ762に進む。モデルは先行する反復からの調整された状態にあるので、モデルに対してステップ764のラスター化が実行される。図12Gが、モデルの調整された状態の一例を提供する。判断ステップ794が真である場合、反復がステップ798において終了する。この時点で、モデルは、最適に調整されており、先に説明した姿勢またはジェスチャー推定ライブラリなど、より高いレベルのプロセス/アプリケーションによって使用することができる。1つの手法では、モデルは、深度データの各フレームに対して最適に調整され、制御入力としてアプリケーションに提供される。
[00145]一度に1つまたは複数の深度フレームを処理できることに留意されたい。バッチ処理モードが、一度に複数の深度フレームを処理し、複数のフレームからの情報を一緒に使用することを可能にする。最初に各フレームに対して調整ベクトルを決定することができ、その後、平均された調整ベクトルがフレームのバッチに適用されるように、調整ベクトルをフレームのバッチにわたって平均すること、または他の方法で組み合わせることができる。
[00146]1つの手法では、図7Bは、モデルの身体部分の変換(回転および並進)を変更するが、相対的な比率は変更しない。別の手法では、相対的な比率が変更される。
[00147]図8Aは、ユーザーの手の深度ピクセルを含む、深度ピクセルからなるフレーム800を示している。フレームは、図7Aの深度フレームデータ702として使用することができる。フレームは、ユーザーの片手もしくは両手、または複数のユーザーの1つもしくは複数の手を含むことができる。1人または複数人のユーザーの他の身体部分も、同様に含むことができる。基本的に、フレームは、深度センサーの視野内の物体を含む。
[00148]図8Bは、背景ピクセルを除去した、図8Aのユーザーの手の深度ピクセル810である。説明したように、図7Aの背景除去ステップ704は、(図8Aのフレーム800など)深度フレームデータ702を受け取り、背景ピクセルを除去する。
[00149]図9Aは、図8Bのユーザーの手の深度ピクセルからなる末端部指セグメントおよび末端部親指セグメントについての、図7Aの見本ステップ712からの確率値を示している。これは、確率値の2Dにおける簡略化グラフィカル表示である。言及したように、各ピクセルは、モデルの各身体部分に対して、ピクセルがその身体部分の一部である尤度を示す異なる確率値(Pr1、Pr2、Pr3、...)を有する。この図は、5つの身体部分についての結果を一緒に示している。太い実線によって輪郭が描かれた影なしピクセルの各エリアは、その局所的身体部分の一部である確率が最も高いピクセルを表す。点パターンを有するピクセルは、その局所的身体部分の一部である確率がより低く、斜線パターンを有するピクセルは、その局所的身体部分の一部である確率が最も低い。さらに、各三角形は、身体部分の深度ピクセルの重心を表す。身体部分は、第1の指または小指930と、第2の指932と、第3の指934と、第4の指または人差し指936と、親指938とを含む。
[00150]例えば、第3の指934の場合、エリア910内のピクセルは、末端部指セグメントに割り当てられ、関連する重心912が決定される。第4の指936の場合、エリア906内のピクセルは、末端部指セグメントに割り当てられ、関連する重心908が決定される。親指938の場合、エリア902内のピクセルは、末端部親指セグメントに割り当てられ、関連する重心904が決定される。
[00151]図9A〜図9Eでは、影なしピクセル、点パターンピクセル、および斜線パターンピクセルが、一貫して使用される。
[00152]図9Bは、図8Bのユーザーの手の深度ピクセルからなる中間部指セグメントおよび基部親指セグメントについての、図7Aのステップ721において生成される重心を示している。例えば、親指の場合、エリア914内のピクセルは、基部親指セグメントに割り当てられ、基部親指セグメントの重心916が決定される。
[00153]図9Cは、図8Bのユーザーの手の深度ピクセルからなる基部指セグメントについての、図7Aのステップ721において生成される重心を示している。
[00154]図9Dは、図8Bのユーザーの手の深度ピクセルからなる手のひら940についての、図7Aのステップ721において生成される重心を示している。
[00155]図9Eは、図8Bのユーザーの手の深度ピクセルからなる腕942についての、図7Aのステップ721において生成される重心を示している。
[00156]図10は、図7Aのステップ721において、ユーザーの手のテストデータから生成された重心を示している。テストデータは、一般にノイズを示す。各画像において、より暗い領域は、より高い確率に対応する。さらに、四角形は、重心を表す。例えば、画像1000は、末端部指および親指セグメントについてのものである。暗い領域が、重心の四角形アイコンによって部分的に覆われている。画像1002は、中間部指セグメントについてのものであり、画像1004は、基部指セグメントについてのものであり、画像1006は、基部親指セグメントについてのものであり、画像1008は、手のひらについてのものであり、画像1010は、前腕の下部についてのものであり、画像1012は、前腕の上部についてのものである。
[00157]図11は、重心対アトラクトポイントマッチングについての、図7Aのステップ734の詳細を示している。言及したように、各三角形は、太い実線で輪郭が描かれたそれぞれの身体部分の重心を表す。モデル500に加えて、深度センサーからのピクセルデータ900が示されている。一例として、末端部指セグメント910を表すピクセルの場合、重心912は、モデル500の対応する末端部指セグメント532のアトラクトポイント531にマッチさせられる。同様に、末端部指セグメント906を表すピクセルの場合、重心908は、モデル500の対応する末端部指セグメント542のアトラクトポイント541にマッチさせられる。末端部親指セグメント902を表すピクセルの場合、重心904は、モデル500の対応する末端部親指セグメント552のアトラクトポイント558にマッチさせられる。基部親指セグメント914を表すピクセルの場合、重心916は、モデル500の対応する基部親指セグメント554のアトラクトポイント562にマッチさせられる。腕918を表すピクセルの場合、重心920は、モデル500の対応する腕504のアトラクトポイント505にマッチさせられる。
[00158]各重心は、それぞれのアトラクトポイントにマッチさせることができる。場合によっては、必ずしもすべての重心を識別すること、および/またはそれぞれのアトラクトポイントにマッチさせることができず、その場合は、モデルは、利用可能な情報に基づいて調整される。利用可能な情報が不十分である場合、モデルを調整しないという決定を、フレームごとに下すことができる。
[00159]図12Aは、重心へのアトラクトポイントの剛体変換についての、図7Aのステップ736の詳細を示している。モデル1200は、すべてのアトラクトポイントについて、深度ピクセルデータの重心に対するモデルのアトラクトポイントの最良マッチを提供するために変換される。この例では、ピクセルデータに対するモデルのマッチは、親指を除いて、かなり良好である。特に、親指の基部セグメントのアトラクトポイント562は、関連する重心916からいくぶん離れて配置されており、親指の末端部セグメントのアトラクトポイント558は、関連する重心904からより大きく離れて配置されている。
[00160]図12Bは、アトラクトポイントを重心のより近くに移動させるための、図7Aのステップ752の詳細を示している。ここでは、アトラクトポイント562を関連する重心916のより近くに移動させ、アトラクトポイント558を関連する重心904のより近くに移動させるように、モデル1210が改善される。
[00161]図12Cは、モデルをラスター化して、モデルの深度ピクセル1220を提供するための、図7Bのステップ764の詳細を示している。これらのピクセルは、比較平面内などにおいては、末端部セグメントのピクセル900の上に見られる。モデルのピクセルは、影なしであり、一方、末端部セグメントのピクセル900は、斜線パターンを有する。基部親指セグメント554についてのモデルのピクセルの上よりも下に、深度センサーのピクセルがより多く存在するので、基部親指セグメントの位置は最適ではない。また、末端部親指セグメント552についてのモデルのピクセルの下よりも上に、深度センサーのピクセルがより多く存在するので、末端部親指セグメントの位置も最適ではない。同様に、腕および手のひらの外周の周り、左側よりも右側に、深度センサーのピクセルがより多く存在するので、腕504および手のひら502の位置も最適ではない。ラスター化を使用する改善は、モデルと深度センサーとのピクセルデータを比較することを可能にすることによって、これらの非最適な状態を識別することができる。
[00162]図12Dは、親指エリアについて、モデルの深度ピクセルをセンサーの深度ピクセルと比較するための、図7Bのステップ766〜772の詳細を示している。細部を示すために、図12Cの親指エリアを独立させている。しかし、モデルのすべての身体部分について、比較を実行することができる。影なしのピクセルからなるエリア1230は、ステップ768の深度センサーのオーバーラップ深度ピクセルを表す。斜線パターンを有するピクセルからなるエリア1240は、ステップ770の深度センサーの非オーバーラップ深度ピクセルを表す。点パターンを有するピクセルからなるエリア1220は、ステップ772のモデルの非オーバーラップ深度ピクセルを表す。
[00163]図12Eは、図12Dと一致する、ピクセルベースの調整ベクトルに基づいたモデルの関節の調整を示す、図7Bのステップ778の詳細を示している。関節位置564、560、および556が、それぞれ、位置1262、1258、および1254に調整される。結果として、アトラクトポイントも、同様に、位置562および558から、それぞれ、位置1260および1256に調整される。
[00164]図12Fは、図12Eにおいて使用されるピクセルベースの調整ベクトルを示している。関節位置564、560、および556を、それぞれ、位置1262、1258、および1254に調整するために、それぞれ、調整ベクトル1278、1274、および1270が使用される。調整ベクトルは、3Dとすることができるが、この例では簡潔にするために、2Dとして示されている。
[00165]図12Gは、図12Eと一致する、モデルの更新を示す、図7Bのステップ792の詳細を示している。図12Eでは、モデルの末端部親指セグメント552が、セグメント1250になるように調整され、モデルの基部親指セグメント552が、セグメント1252になるように調整される。この場合、親指は、手のひらに対しておおよそ下方に移動させられるとともに、回転させられる。これは、深度センサーの深度ピクセルとより緊密にマッチする、モデルの新しい状態である。
[00166]図13Aは、比較平面1310が深度センサー1300の深度軸1302を横断または直交する、モデルの深度ピクセルをセンサーの深度ピクセルと比較するための、図7Bのステップ768、770、および772のさらなる詳細を示している。軸1304、1306、および1308も、(表記「||」によって示されるように)深度軸1302と平行である。比較平面1310は、ラスター化モデルの2つの例示的なピクセルp1およびp4を含み、一方、平面1312は、深度センサーからの2つの例示的なピクセルp2およびp3を含む。1つの手法では、比較平面1310および1212は、x軸およびy軸に平行に広がり、したがって、深度軸1302を横断/直交する。別の手法では、比較平面1310および1212は、x軸およびy軸から僅かにずれており、深度軸1302に対して角度αをなして伸びる、深度カメラからの視線1305を横断する。
[00167]p2は、例えば軸1306に沿って、p1とオーバーラップするので、深度センサーのオーバーラップ深度ピクセルである(図7B、ステップ768)。p1も、モデルの対応するオーバーラップ深度ピクセルと考えることができる。j1は、モデルの例示的な関節である。1つの手法では、調整ベクトル1328が、最良マッチ関節j1からp2に向かう方向に伸びる。別の手法では、調整ベクトル1326が、p1からp2に向かう方向に伸びる。さらに、ベクトル1326は、関節j1に作用するベクトル1330まで並進させることができる。
[00168]p3は、例えば軸1308に沿って、モデルのピクセルとオーバーラップしないので、深度センサーの非オーバーラップ深度ピクセルである(図7B、ステップ770)。図7Bのステップ778に関連して先に説明したように、p3についての例示的な調整ベクトル1320は、関節j1からp3に向かう方向に伸びる。
[00169]p4は、例えば軸1304に沿って、深度センサーデータのピクセルとオーバーラップしないので、モデルの非オーバーラップ深度ピクセルである(図7B、ステップ772)。対応する調整ベクトル1322は、p4から、この例ではp2であると仮定される、センサーデータの最も近い深度ピクセルに向かって伸びる。別の手法では、p4についての調整ベクトル1324は、平面1312のセンサーデータの最も近い深度ピクセルなどに向かって、p4から深度軸1302/1304に沿って伸びる。ベクトル1322またはベクトル1324は、j1がp4のために動かすのに最良な関節であると仮定した場合には、関節j1に作用するベクトル(図示されす)まで並進させることができる。
[00170]図13Bは、図13Aの比較平面1310のさらなる詳細を示している。p1およびp2は、オーバーラップピクセルであり、深度センサーのp3は、モデルのピクセルとオーバーラップしておらず、モデルのp4は、深度センサーのピクセルとオーバーラップしていない。||xおよび||yは、それぞれ、x軸およびy軸と平行な軸である。
[00171]図14は、距離制約、衝突制約、およびピクセル比較を使用して、撮像システムにおいて改善された忠実度で有関節身体部分の姿勢を検出するための方法を示している。図14の方法は、図7Aおよび図7Bの方法と併せて実行することができる。方法は、一般に、初期姿勢推定を獲得するステップと、それに続いて、距離制約、衝突制約、角度制約、およびラスター化モデルを使用するピクセル比較のうちの1つまたは複数に基づいて、姿勢推定を改善するステップとを含む。1つの手法では、初期姿勢推定は、図7Aの方法によって提供することができる。1つの手法では、ラスター化モデルを使用するピクセル比較は、図7Bの方法のステップ762〜ステップ790によって提供することができる。姿勢推定の改善は、全体的または部分的に、順次的または並列的に実行することができる。
[00172]その中に多数の区別可能な特徴点を有する既知のトポロジーを有する有関節モデルのパラメトリック幾何モデル(例えばメッシュ)を有することを仮定することができる。特徴検出器は、モデル内の点に対応する深度センサーデータから(関節および他の参照など)できるだけ多くの区別可能な特徴点を見つける。既知の有関節モデルのメッシュは、較正され、動的に調整される。この方法は、これを達成するために、有関節モデルの寸法についてのローカルおよびグローバル情報の複数のソースを組み合わせ、それらに重み付けを行う。
[00173]ステップ1400は、例えば、図6のステップ600と同様に、深度センサーからユーザーの深度ピクセルを獲得するステップを含む。ステップ1402は、例えば、図6のステップ700と同様に、深度センサーの深度ピクセルに対するモデルの初期マッチを決定するステップを含む。図6のステップ750も、同様に含むことができる。これは、先に説明したような、いくつかのタイプの代表的なアトラクトポイント対重心マッチング、または他の任意の技法を含むことができる。さらに、図7Aのステップ736に関連して説明したような変換を使用することができる。これは、例えば、3Dスケールを用いる3D点群の剛体変換など、3D点群の制約付きアフィンレジストレーションを含むことができる。モデルと深度センサー観測との間の特徴点対応を与えると、単一のスケーリングまたは各次元(長さ、幅、および高さ)で別々のスケーリングを用いて、最良の剛体変換を計算することによって、有関節物体の各身体部分のための個別のスケーリングパラメータ、またはすべての身体部分のためのグローバルなスケーリングパラメータを直ちに(おそらくは先行フレームにおいて推定された身体比率を考慮して)計算することができる。
[00174]ステップ1404は、距離制約を使用して、モデルの初期マッチを改善する。ステップ1406は、各有関節身体部分について距離制約が違反された程度を決定するステップを含む。ステップ1404およびステップ1406に関する例は、図16A1〜図16Cおよび図17Aに関連して提供される。
[00175]ステップ1408は、衝突制約を使用して、モデルの初期マッチを改善する。ステップ1410は、衝突制約を実施することを決定するステップを含む。例えば、衝突制約の実施をもたらす特定の姿勢にモデルがあると決定された場合に、この決定を下すことができる。一例は、モデルの少なくとも2つの隣接する指セグメントが、例えば互いに実質的に平行など、特定の相対的な位置にあると決定された場合である。この条件は、例えば、数度の閾値角度よりも小さい角度をなして伸びる2つの隣接する指セグメントの縦軸によって、検出することができる。ステップ1412は、各有関節身体部分について衝突制約が違反された程度を決定するステップを含む。ステップ1408〜ステップ1412に関する例は、図18Aおよび図18Bに関連して提供される。
[00176]ステップ1414は、ラスター化モデルを使用してマッチングを改善する。ステップ1416は、例えば、図7Bのステップ764と同様に、モデルをラスター化して、モデルの深度ピクセルを提供する。ステップ1418は、例えば、図7Bのステップ766と同様に、比較平面内において、モデルの深度ピクセルを深度センサーの深度ピクセルと比較する。ステップ1420は、例えば、図7Bのステップ770と同様に、モデルの深度ピクセルとオーバーラップしない、深度センサーの非オーバーラップ深度ピクセルを識別する。ステップ1422は、例えば、図7Bのステップ772と同様に、深度センサーの深度ピクセルとオーバーラップしない、モデルの非オーバーラップ深度ピクセルを識別する。ステップ1414〜ステップ1422に関する例は、図16Dおよび図16Eに関連して提供される。
[00177]ステップ1424は、様々な制約を満たそうと試みて、モデルを調整する。判断ステップ1426において、停止基準が満たされている場合、プロセスは、ステップ1428において停止する。判断ステップ1426が偽の場合、プロセスの別の反復が実行される。停止基準が満たされるまで、1つまたは複数の反復において、方法のステップのいずれかを反復的に実行することができる。一般に、すべての制約を適度に満たすために、複数の反復が使用される。さらに、モデル調整は、各制約についてのすべての利用可能な情報に基づくことができる。ステップ1426における調整は、各制約の寄与を組み合わせ、重み付けを行うことができる。代替として、例えば、ステップ1406、1412、1420、および1422の各々の後、別々に各制約に基づいて、モデルを調整することもできる。
[00178]距離制約を満たそうと試みるモデルの調整は、例えば、指もしくは親指セグメントまたは手のひらもしくは手首の長さまたは幅を増やしまたは減らすことによって、有関節身体部分の少なくとも1つについての寸法を調整することを含むことができる。衝突制約を満たそうと試みるモデルの調整は、例えば、指もしくは親指セグメントまたは手のひらもしくは手首の長さまたは幅を減らすことによって、衝突に係わる有関節身体部分の少なくとも1つについての寸法を調整することを含むことができる。場合によっては、処理時間もしくは他の限界、または他の制約のために、必ずしもすべての制約を完全に満たすことはできず、その場合は、衝突制約を満たすために、最善の努力が行われる。
[00179]深度センサーの非オーバーラップ深度ピクセルに基づいたモデルの調整は、深度センサーの非オーバーラップ深度ピクセルの方向に、モデル部分の寸法(例えば、高さ、幅)を増やすことを含むことができる。与えられた方向に寸法を増やす程度は、例えば、与えられた方向におけるオーバーラップピクセルの数に基づくなど、オーバーラップの程度に比例することができる。モデルの非オーバーラップ深度ピクセルに基づいたモデルの調整は、深度センサーの非オーバーラップ深度ピクセルから離れる方向にモデル部分の寸法を減らすことを含むことができる。最適な解決策は、モデルの非オーバーラップ深度ピクセルに隣接する、身体部分の外周の周りのモデルの非オーバーラップ深度ピクセルの数を等しくする傾向をもつことができる。与えられた方向に寸法を減らす程度は、例えば、与えられた方向におけるオーバーラップピクセルの数に基づくなど、オーバーラップの程度に比例することができる。
[00180]図15は、図14の方法とともに使用するための、ユーザーの手の深度ピクセル1500の一例を示している。この例は、図16A1〜図16Eおよび図17Aにおいて使用される。
[00181]図16A1は、距離制約が実施されず、モデルが望ましいものよりも小さい場合の、図15の深度ピクセルに対する図5のモデルのマッチングを示している。このマッチングは、深度センサーデータのそれぞれの部分に最適にマッチさせるために、モデルの各部分が、隣接部分に取り付けられることなく、独立して浮かんでいることを可能にすることを含むことができる。先に説明したように、深度センサーデータの異なる部分は、例えば確率マップを使用して(図7A)、それぞれの身体部分に関連付けることができる。その後、モデルの各身体部分は、距離制約を考慮することなく、深度センサーデータの同じ部分に対して最適に配置される。1つの可能な手法では、モデルの部分の代表的なアトラクトポイントを、深度センサーデータの同じ部分の重心にマッチさせる。しかし、任意のマッチング技法を使用することができる。
[00182]距離制約は、モデルの部分の間の距離、およびモデルの部分の相対的な配置に関する。例えば、距離制約は、指セグメントが端部と端部とを接して配置され、指セグメントの一方の端部が隣接する指セグメントの近接端から伸びることを要求することができる。さらに、深度センサーは、基部指セグメントが手のひらの指定された関節から伸びることを要求することができる。別の距離制約は、手のひらが手首から伸びることを要求することができる。身体部分の関節の位置に基づいて、距離制約が違反されたかどうか、および違反の程度を決定することができる。この図および他の図では、例示的な関節が、菱形によって表されている。1つの手法では、距離制約は、モデルの1つの部分の関節がモデルの隣接する部分の関節と実質的に(例えば閾値距離以内で)一致することを要求する。例えば、モデル部分516の下部の関節は、手のひらの関連する最も左の関節と一致すべきであり、モデル部分516の上部の関節は、身体部分514の下部の関節と一致すべきであり、モデル部分5146の上部の関節は、身体部分512の下部の関節と一致すべきである。関節の間のギャップは、距離制約の違反を表す。より大きなギャップまたは距離は、違反の程度がより大きいことを表す。
[00183]この例でも、モデルは、深度ピクセル1500からなる手の表現と比較して、全体的により小さい。
[00184]距離制約は、関節などモデル内の特徴点の間の直線によって表すことができる。各直線は、圧縮または伸張状態にあると見なすことができる。センサーが検出したものよりもモデルが小さい場合、関節を互いに引き離そうとする傾向にある張力が存在する。センサーが検出したものよりもモデルが大きい場合、関節を互いの方に押しやろうとする傾向にある圧縮力が存在する。モデルを調整するために、有関節モデルの各部分に関連する個々の張力および/または圧縮力情報が使用される。
[00185]図16A2は、親関節および子関節が示された、図16A1の代替である。別の手法では、例えば、末端部親指部分と基部親指部分の間に1つの関節560が存在し、距離制約は、関節560と関節564などの親関節との間の距離である。関節564の親関節は、関節503とすることができる。例えば、関節560は、末端部親指セグメント552の基部端に存在することができ、関節564は、基部親指セグメント554の基部端に存在することができる。モデルのこの手法では、メッシュが、子関節に達するほど十分に長くはないとしても、子関節の方を指して親関節に配置される。親または子関節は、それぞれ、親または子身体部分に関連付けることができる。1つの可能な手法では、子身体部分は、手のひらから伸びる指など、より大きな身体部分から伸びるより小さな身体部分とすることができる。または、子身体部分は、腕から指先の方向など、指定された方向に別の身体部分から伸びる身体部分とすることができる。例えば、基部親指部分554は、末端部親指部分552の親とすることができる。同様に、基部指セグメント546の基部端の関節553は、基部指セグメントと手のひら502の間にあり、手のひら502の関節503から距離dにある、スケルタル関節を表す。中間部指セグメント544の基部端の関節551は、中間部指セグメント544と基部指セグメント546の間にあるスケルタル関節を表す。末端部指セグメント542の基部端の関節549は、末端部指セグメント542と中間部指セグメント544の間にあるスケルタル関節を表す。
[00186]図16B1は、人差し指についての図16A1の画像の詳細を示している。人差し指540では、深度センサーのピクセルは、太い実線によって示されるように、末端部指セグメントピクセル領域1620と、中間部指セグメントピクセル領域1630と、基部指セグメントピクセル領域1640とにグループ化される。指の末端部、中間部、および基部モデル部分は、それぞれ、542、544、および546である。モデル部分542は、上部関節(菱形547)と、下部関節549と、(ピクセル領域1620の重心である三角形1622に揃えられる)代表的なアトラクトポイント541と、幅wdm(幅、末端部、モデル)と、高さhdm(高さ、末端部、モデル)と、下にあるピクセル領域の左端からの間隔dl(末端部、左)と、下にあるピクセル領域の右端からの間隔dr(末端部、右)とを含む。末端部指セグメントに割り当てられた下にあるピクセル領域は、幅wdおよび高さHDP(高さ、末端部、ピクセル)を有する。
[00187]モデル部分544は、上部関節1632と、下部関節551と、(ピクセル領域1620の重心である三角形1634に揃えられる)代表的なアトラクトポイント543と、幅wmm(幅、中間部、モデル)と、高さhmm(高さ、中間部、モデル)と、下にあるピクセル領域の左端からの間隔ml(中間部、左)と、下にあるピクセル領域の右端からの間隔mr(中間部、右)とを含む。中間部指セグメントに割り当てられた下にあるピクセル領域は、幅wdおよび高さHMP(高さ、中間部、ピクセル)を有する。
[00188]モデル部分546は、上部関節1642と、下部関節553と、(ピクセル領域1640の重心である三角形1644に揃えられる)代表的なアトラクトポイント545と、幅wpm(幅、基部、モデル)と、高さhpm(高さ、基部、モデル)と、下にあるピクセル領域の左端からの間隔pl(基部、左)と、下にあるピクセル領域の右端からの間隔pr(基部、右)とを含む。基部指セグメントに割り当てられた下にあるピクセル領域は、幅wdおよび高さHPPを有する。
[00189]手のひら502は、モデル部分546の基部端がそこから伸びる、関節1650を有する。
[00190]寸法は、モデルの大域座標系において定義することができ、または各身体部分は、独自の座標系を有することができる。高さおよび幅などの用語は、任意の方向の寸法を表すことができる。
[00191]関節549と関節544の間の距離md(中間部から末端部)は、制約が、距離がゼロであること、またはゼロではないが一定の許容値よりも小さいことである場合、違反された距離制約を表す。制約が身体部分542および544の両方によって違反されたと言うことができる。関節551と関節1642の間の距離pm(基部から中間部)は、今回は身体部分544および546によって違反された、別の距離制約を表す。関節553と関節1650の間の距離pp(基部から基部)は、今回は身体部分546および502によって違反された、別の距離制約を表す。関節の間の距離制約は、3D距離とすることができることに留意されたい。本例は、簡潔にするため、2Dである。
[00192]距離dt(末端部から上端)は、ピクセル領域1620の上端からの関節547の隔たりである。図16Dおよび図16Eを参照されたい。
[00193]この例では、次に説明するように、指の方向に伸ばすことによって、モデル部分を調整すべきである。
[00194]図16B2は、親関節および子関節が示された、図16B1の代替を示す図である。この場合、距離制約は、(a)hdm、(b)hmm+md、(c)hpm+pm、および(d)dによって表すことができる。この場合、関節1632、1642、および1650は使用されない。距離dは、他の距離とともにスケーリングすべきでなく、したがって、断線によって示されている。角度制約などの他の制約も、関節503と関節553の間の直線などに適用することができる。
[00195]図16Cは、距離制約を実施した後の、図16B1のモデルに対する調整を示している。指セグメントがHDP+HMP+HPPの全長を有するように、各指セグメントの長さを伸ばして、距離制約を実施することができる。この長さは、直線である軸に沿うことができ、または3Dにおいてはカーブすることができる。距離制約を実施した結果は、関節549と関節1632、関節551と関節1642、および関節553と関節1650が、実質的に(許容範囲内で)一致することである。身体部分542の長さは、hdmからhdm’に増やされ、身体部分544の長さは、hmmからhmm’に増やされ、身体部分546の長さは、hpmからhpm’に増やされる。モデル調整の結果として、重心および代表的なアトラクトポイントの相対的な位置は移動できる。1つの手法では、各身体部分は、長さが増やされる隣接する他の身体部分と比べた自らの長さに基づいて、また身体部分の間の距離に基づいて、長さが増やされる。他の例では、指のすべてのセグメントのうちの一部が、寸法を調整される。他の例では、手の他の部分が、寸法を調整される。他の例では、モデルは、手以外の別の身体部分についての、またはその挙動をモデル化できる別の有関節物体についてのものである。
[00196]親関節および子関節が使用される場合も(例えば図16B2)、同様の結果が達成される。
[00197]図16Dは、ラスター化および深度センサーの深度ピクセルとの比較の後の、図16Cのモデルを示している。モデル部分542、544、および546は、ピクセル領域として示されている。モデルのピクセルとオーバーラップしない深度センサーの深度ピクセルを識別することができる。具体的には、領域1650、1651、および1652内の深度ピクセルは、モデル部分542に対して非オーバーラップであり、領域1660および1662内の深度ピクセルは、モデル部分544に対して非オーバーラップであり、領域1670および1672内の深度ピクセルは、モデル部分546に対して非オーバーラップである。非オーバーラップピクセルは、点ボックスに囲われ、点パターンで示されている。この比較は、モデルの指セグメントが狭すぎることを示している。モデル部分542は、左に量dlだけ、右に量drだけ、広げることができる。モデル部分544は、左に量mlだけ、右に量mrだけ、広げることができる。モデル部分546は、左に量plだけ、右に量prだけ、広げることができる。モデル部分542の上端のオーバーラップdtに関して、これは、モデル部分542の長さのみをdtだけ増やすことによって、または指のモデル部分の各々についての長さを増やすことによって、対処することができる。一般に、モデルを調整する距離は、長さメトリックまたはピクセルの数によって表すことができる。
[00198]この例では、各モデル部分の右側および左側に一定のオーバーラップが存在する。モデル部分の外周に沿ってオーバーラップが変化する場合、オーバーラップに対して最も良く一致するように、モデル部分を調整することができる。1つの手法では、平均オーバーラップが決定され、モデル部分を調整するために使用される。
[00199]図16Eは、ピクセル比較に基づいた、図16Dのモデルに対する調整を示している。この例では、モデル部分542の上端のオーバーラップdtは、指のモデル部分の各々についての長さを増やすことによって対処されている。身体部分542の長さは、hdm’からhdm”に増やされ、身体部分544の長さは、hmm’からhmm”に増やされ、身体部分546の長さは、hpm’からhpm”に増やされる。同様に、モデル部分に隣接する横方向の非オーバーラップピクセルのため、身体部分542の幅は、wdmからwdm’に増やされ、身体部分544の幅は、wmmからwmm’に増やされ、身体部分546の幅は、wpmからwpm’に増やされる。
[00200]親関節および子関節が使用される場合も(例えば図16B2)、同様の結果が達成される。
[00201]図17Aは、距離制約が実施されず、モデルが望ましいものよりも大きい場合の、図15の深度ピクセルに対する図5のモデルのマッチングの別の例を示している。モデルのピクセルは、明瞭にするために示されていない。
[00202]深度センサーのピクセルとオーバーラップしないモデルの深度ピクセルを識別することができる。具体的には、領域1750および1752内の深度ピクセルは、モデル部分542に対して非オーバーラップであり、領域1760および1762内の深度ピクセルは、モデル部分544に対して非オーバーラップであり、領域1770および1772内の深度ピクセルは、モデル部分546に対して非オーバーラップである。非オーバーラップピクセルは、点ボックスに囲われ、点パターンで示されている。この比較は、指セグメントが広すぎることを示している。モデル部分542は、左に量dlだけ、右に量drだけ、狭めることができる。モデル部分544は、左に量mlだけ、右に量mrだけ、狭めることができる。モデル部分546は、左に量plだけ、右に量prだけ、狭めることができる。
[00203]この例では、各モデル部分の右側および左側に一定または一様のオーバーラップが存在する。モデル部分の外周に沿ってオーバーラップが変化する場合、オーバーラップに対して最も良く一致するように、モデル部分を調整することができる。1つの手法では、平均オーバーラップが決定され、モデル部分を調整するために使用される。
[00204]与えられたモデル部分は、1つまたは複数のフレームにおいて、反対の調整を施され得ることに留意されたい。同様に、隣接するモデル部分は、1つまたは複数のフレームにおいて、反対の調整を施され得る。例えば、指セグメントは、1つのフレームでは、幅を広げられ、別のフレームでは、幅を狭められ得る。これは、例えば、調整の反復性、ノイズ、深度センサーの解像度、ユーザーの動き、計算限界、および他の要因によって引き起こされることがある。モデル部分は、例えば、反対または対立する距離制約調整、衝突制約調整、および/またはピクセル比較調整のせいで、1つのフレームにおいても、反対または対立する調整を施され得る。
[00205]距離制約は、(a)md、(b)pm、(c)pp’によって表すことができる。
[00206]図17Bは、親関節および子関節が示された、図17Aの代替を示している。この場合、距離制約は、(a)hdm、(b)hmm−md、(c)hpm−pm−pp’、および(d)d’によって表すことができる。この場合、関節1632、1642、および1650は使用されない。距離d’は、他の距離とともにスケーリングすべきでなく、したがって、断線によって示されている。
[00207]図18Aは、衝突を示す、図5のモデルの2つの隣接する指を示している。衝突制約は、モデルの異なる部分が同時に同じ位置に存在することを回避することである。例えば、この例は、モデルの隣接する指530および540を示しており、指の影つき部分1820が、同一場所に配置されている。この簡略化された例では、指530のモデル部分532、534、および536は、幅wdm1を有し、指540のモデル部分542、544、および546は、幅wdm2を有する。距離pd(浸食深さ(penetration depth))は、例えば衝突制約の違反の程度など、衝突の程度を表す。中心縦軸が、各モデル部分内に、例えば、軸1800、1802、および1804が、それぞれ、モデル部分532、534、および536内に、また軸1810、1812、および1814が、それぞれ、モデル部分542、544、および546内に伸びている。
[00208]軸1830は、指540の外縁に沿って伸びる、指530の浸食軸であると見なすことができ、軸1832は、指530の外縁に沿って伸びる、指540の浸食軸であると見なすことができる。この場合、pdは、浸食軸1830と浸食軸1832の間の距離である。
[00209]図18Bは、衝突制約を実施した後の、図18Aの2つの隣接する指を示している。衝突制約を満たすため、指530および540の一方または両方が調整される。ことによると、1つの解決策は、指どうしをより遠くに引き離すことである。しかし、距離制約が、手のひら内の指定された関節から指が伸びることを要求することがあり、そのため、この解決策は、好ましくない。別の解決策は、指の一方のみの幅を減らすことであるが、これも、最適である可能性は高くない。最適な解決策は、一般に、衝突する指または他の身体部分の両方の幅を減らすことである。1つの手法では、指530および540は、衝突を防止するのに十分な、例えば同じパーセンテージなど、同じ比率だけ幅を減らすことができる。この場合、指530の幅は、wdm1からwdm1’に減らされ、指540の幅は、wdm2からwdm2’に減らされる。
[00210]モデルが衝突制約の実施に特に適した姿勢にあると判断された場合に、衝突制約を実施する決定を下すことができる。したがって、衝突制約は、姿勢が適しているがどうかに応じて、フレームに対して実施することができる。1つの可能な手法では、姿勢が適していない場合、そのフレームに対して衝突制約は実施されない。
[00211]1つの手法では、初期モデルの改善は、距離制約を満たそうとする試みにおいてモデルを調整することと、その後、衝突制約を実施することを決定することとを含む。衝突制約を実施することを決定したことに応じて、初期マッチにおいて、モデルの指セグメントなどの少なくとも2つの隣接するモデル部分によって衝突制約が違反された程度に関する評価を行うことができる。モデルは、モデルの少なくとも2つの隣接する指セグメントの幅を減らすことによって、モデルの少なくとも2つの隣接する指セグメントによって衝突制約が違反された程度に基づいて、衝突制約を満たそうとする試みにおいてモデルを調整することができる。衝突制約を実施することの決定は、モデルの少なくとも2つの隣接する指セグメントが指定された相対的な位置にあることを決定することを含むことができる。1つの手法では、モデルの少なくとも2つの隣接する指セグメントは、モデルの少なくとも2つの隣接する指セグメントのそれぞれの縦軸が、図18Aにおけるように、指定された角度閾値内にあり、実質的に平行である場合に、指定された相対的な位置にある。この角度閾値は、例えば、軸1830と軸1832の間の角度とすることができる。モデルの少なくとも2つの隣接する指セグメントによって衝突制約が違反された程度は、それぞれの縦軸の間の距離に基づくことができる。
[00212]この例では、2つの隣接する指または指セグメントが、実質的に平行で、著しく衝突している場合、これは、指の幅が太すぎであり、減らすべきであることを示している。1つの手法では、各指セグメントは、円筒としてモデル化され、その場合、円筒の長さ軸が平行であるかどうかを判定することができる。
[00213]本明細書の技術の上述の詳細な説明は、例示および説明の目的で提示された。それは、網羅的であること、または開示された形通りのものに技術を限定することを意図していない。上述の教示に照らして、多くの変更および変形が可能である。説明された実施形態は、技術の原理およびその実際的な適用を最も良く説明し、それによって、様々な実施形態において、企図される特定の用途に適するように様々な変更を施して、当業者が技術を最も良く利用することを可能にするように選択された。技術の範囲は、本明細書に添付された特許請求の範囲によって確定されることが意図されている。