(57)【特許請求の範囲】
【請求項１】
対話型計算システムであって、
可動深度カメラが動いているときに、第１の一連の深度画像を前記可動深度カメラから受け取り、静止しているとき、第２の一連の深度画像を前記可動深度カメラから受け取る入力と、
前記可動深度カメラが動いているときに、その位置を追跡するリアル・タイム・カメラ追跡エンジンと、
前記一連の深度画像のいずれか、および前記リアル・タイム・カメラ追跡エンジンからの位置データーから、環境の緻密３Ｄモデルを生成するように構成された緻密３Ｄ環境モデリング・システムと、
前記緻密３Ｄモデルの少なくとも一部をアプリケーションに統合し、前記第２の一連の深度画像を用いて、前記環境の一部におけるリアル・タイムの動きを追跡することにより、ユーザー入力を前記アプリケーションに供給するように構成された統合エンジンと、
前記環境の緻密３Ｄモデルを分析し、前記モデルの内部にある物体を特定するように構成された物体認識モジュールと、
を備え、前記統合エンジンが、更に、前記緻密３Ｄモデルの内部で特定された物体に基づいて、前記アプリケーションを適応させるように構成されており、前記アプリケーションの適応化が、検出されたディスプレイおよび前記可動深度カメラの相対的位置に基づいて物体についての位置較正情報を自動的に判断することを含み、前記物体がポインティング・デバイスまたは前記システムのユーザーを含む、対話型計算システム。
【請求項２】
対話型計算システムの動作方法であって、
環境内を動き回っている可動深度カメラから一連の深度画像を受け取るステップと、
前記一連の深度画像から前記環境の緻密３Ｄモデルを生成するステップと、
前記緻密３Ｄモデルの少なくとも一部をアプリケーションに統合するステップと、
動いていないときの前記可動深度カメラから、第２の一連の深度画像を受け取るステップと、
前記第２の一連の深度画像を用いて、前記環境のある領域においてリアル・タイムの動きを３Ｄで追跡することにより、ユーザー入力を前記アプリケーションに供給するステップと、
を備え、
前記緻密３Ｄモデルの少なくとも一部をアプリケーションに統合するステップが、
前記環境の緻密３Ｄモデルを分析し、前記モデルの内部にある物体を特定するステップと、
前記緻密３Ｄモデルの内部で特定された物体に基づいて、前記アプリケーションを適応させるステップであって、前記アプリケーションの適応化が、検出されたディスプレイおよび前記可動深度カメラの相対的位置に基づいて物体についての位置較正情報を自動的に判断することを含み、前記物体がポインティング・デバイスまたは前記システムのユーザーを含む、ステップと、
を備える、方法。
【請求項３】
請求項２記載の方法であって、更に、
前記第２の一連の深度画像を用いて前記緻密３Ｄモデルを生成するステップと、
前記第２の一連の深度画像を用いて、前記緻密３Ｄモデルを更新するステップと、
を備えており、前記緻密３Ｄモデルの少なくとも一部をアプリケーションに統合するステップが、
前記モデルにおいて物体を自動的に特定するために前記緻密３Ｄモデルを分析するステップと、
物体が特定された場合、物体タイプおよび物体位置情報を前記アプリケーションに入力するステップと、
前記入力された物体タイプおよび位置情報に基づいて、前記アプリケーションの動作を調節するステップと、
を含む、方法。
【請求項４】
請求項３記載の方法において、前記物体が能動的物体を含み、前記アプリケーションの実行を調節するステップが、前記能動的物体の出力を調節するステップを含む、方法。
【請求項５】
請求項３記載の方法において、前記物体がディスプレイを含み、前記アプリケーションの実行を調節するステップが、検出された前記ディスプレイおよび前記可動深度カメラの相対的位置に基づいて、前記ディスプレイに対する物体の位置を自動的に較正するステップを含む、方法。
【請求項６】
請求項３記載の方法において、前記アプリケーションの実行を調節するステップが、他の検出された物体の出力を調節するステップを含む、方法。
【請求項７】
請求項３記載の方法において、前記物体が他の深度カメラを含み、前記アプリケーションの実行を調節するステップが、各深度カメラの相対的位置に基づいて、前記システムを較正するステップを含む、方法。
【請求項８】
請求項２記載の方法であって、更に、
１つ以上の追加の深度カメラの各々から一連の深度画像を受け取るステップと、
各一連の深度画像から、前記環境の緻密３Ｄモデルを生成するステップと、
１つよりも多い緻密３Ｄモデルにおいて共通の特徴を特定するステップと、
前記特定した共通の特徴に基づいて、カメラの相対的位置を計算するステップと、
を備えている、方法。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]  ビデオ・カメラまたは深度カメラのようなカメラを用いて、ユーザーの動きまたはユーザーが保持しているコントローラーの動きを検出し、こうしてユーザーのゲームとの対話処理を可能にするゲーミング・システムが開発されている。ユーザーの位置／動き(motion)を検出するためには、カメラによって取り込まれた画像を区分して、前景（ユーザー）を選択し、背景を取り除く。次いで、ユーザーはゲーム自体の中に創作された環境内において、ゲームにおけるキャラクタまたは物体と対話処理することができる。この環境は、ユーザーの実際の環境とは完全に別個である。以下で説明する実施形態は、既知のゲーミング・システムの欠点のいずれかを解決する実施態様にも、その全てを解決する実施態様にも限定されるのではない。
【発明の概要】
【０００２】
[0002]  以下に、基本的な理解を読者に与えるために、本開示を簡略化した摘要を紹介する。この摘要は、本開示の広範な全体像ではなく、本発明の主要な／重要な要素を特定するのでも、本発明の範囲を明確に定めるのでもない。その唯一の目的は、本明細書において開示する概念から選択したものを、簡略化した形態で、後に紹介する更に詳細な説明に対する序説として提示することである。
【０００３】
[0003]  ゲーム・プレイにおける３Ｄ環境モデルの使用について記載する。一実施形態では、可動深度カメラを用いて、この可動深度カメラを動かしつつ一連の深度画像を取り込み、この一連の深度画像から環境の緻密３Ｄモデルを生成する。この緻密３Ｄモデルを、ゲームのような、対話型アプリケーション(interactive application)の内部に組み込む。次いで、可動深度カメラを、対話フェーズの間静止位置に置く。対話フェーズとは、例の中では、ゲーム・プレイである場合もある。そして、この環境の一部において、システムがユーザーの動きを、カメラによって取り込まれた第２の一連の深度画像から検出する。この動きは、ゲームのような対話型アプリケーションにユーザー入力を供給する。更に他の実施形態では、３Ｄモデル内部における物体の自動認識および特定を実行することができ、次いでこれらの特定された物体が、対話型アプリケーションが動作する方法を変化させる。
【０００４】
[0004]  付帯する特徴の多くは、以下の詳細な説明を参照し、添付図面と合わせて検討することによって一層深く理解されていくに連れて、一層容易に認められるようになるであろう。
【０００５】
[0005]  この説明は、添付図面を参照しながら以下の詳細な説明を読むことによって、一層深く理解できよう。
【０００６】
添付図面における同様の部分を示すために、同様の参照番号を用いる。
【図面の簡単な説明】
【０００７】
【図１】図１は、部屋の中で起立して、この部屋の３Ｄモデルを生成するために用いることができる可動深度カメラを保持している人の模式図である。
【図２】図２は、可動深度カメラを保持している人によって調べられている建物のフロアの平面図を示す。
【図３】図３は、図１に示した対話型計算システムの動作の一例の流れ図である。
【図４】図４は、対話型計算システムに接続された可動深度カメラの模式図である。
【図５】図５は、対話型計算システムに接続された可動深度カメラの模式図である。
【図６】図６は、図５に示した物体認識モジュールの使用を伴う対話型計算システムの動作の一部の流れ図を示す。
【図７】図７は、ポインティング・デバイスの較正方法および自動較正方法の双方の模式図を示す。
【図８】図８は、図１に示した構成と同様であるが、多数の深度カメラを含む構成の模式図である。
【図９】図９は、多数の深度カメラの自動較正方法の一例の流れ図である。
【図１０】図１０は、本明細書において記載する方法の実施形態を実現することができる計算主体デバイスの一例を示す。
【図１１】図１１は、フレーム整列エンジンにおける反復プロセスの一例の流れ図である。
【図１２】図１２は、対応する点の対を計算するステップを更に詳細に示す流れ図である。
【図１３】図１３は、３Ｄ環境モデルを生成する並列化可能なプロセスの一例の流れ図である。
【図１４】図１４は、並列化可能な符合付き距離関数計算の一例を示す。
【発明を実施するための形態】
【０００８】
[0006]  添付図面と合わせて以下に示す詳細な説明は、本例の説明であることを意図するのであって、本例を構成または利用することができる唯一の形態を表すことを意図するのではない。この説明は、本例の機能、および本例を構成し動作させるためのステップのシーケンスを明記する。しかしながら、同じまたは等価な機能およびシーケンスが、異なる例によって遂行されてもよい。
【０００９】
[0007]  図１は、部屋の中で起立して可動深度カメラ１０２を保持している人１００の模式図である。可動深度カメラ１０２は、ゲーミング・システムのような、対話型計算システム１０３と通信する（そしてその一部であると考えることもできる）。この部屋には、種々の物体１０６（椅子、テーブル、ドア、窓、植物、および照明具のような物体）、他の人１０４、ディスプレイ１０５、および猫１０８が入っている。ディスプレイ１０５は、例えば、テレビジョンまたはコンピューター・モニターであってもよく、あるいは、代わりに、対話型計算システム１０３のグラフィカル・ユーザー・インターフェース（ＧＵＩ）を表示可能であれば、いずれの形態のディスプレイでもよく、ディスプレイまたは投影ディスプレイを内蔵しためがねを含む。物体１０６の多くは静止しているが、人１００、１０４および猫１０８のような、物体の一部は移動することがある。可動深度カメラ１０２を保持している人１００が部屋の中を動き回ると、または静止している間に可動深度カメラ１０２を動かすと、可動深度カメラは、部屋および物体の深度画像を取り込む。
【００１０】
[0008]  可動深度カメラ１０２は、緻密環境モデリング・システム１１０と通信する（この場合、環境とは部屋のことである）。モデリング・システム１１０は、対話型計算システム１０３の一部であってもよい。この例における「緻密」とは、入ってくる深度マップからの点の全てまたは多くの使用によって得られ、暗黙的に表面を記述するためのモデルの精度および解像度が高度であることを指す。これは、計算を高速化しメモリー・フットプリントを削減するために点の部分集合のみを取り込む「疎」モデルとは対照をなすことができる。例えば、可動深度カメラ１０２によって取り込まれた画像は、人が部屋の中で動き回り、可動深度カメラ１０２をあちこち動かしながら、環境の緻密３ＤＳモデルを形成し構築するために用いられる。
【００１１】
[0009]  リアル・タイム・カメラ追跡システム１１２は、部屋におけるカメラ１０２の位置および向きを監視する。リアル・タイム・カメラ追跡システム１１２は、可動深度カメラ１０２と一体化されてもよく、または対話型計算システム１０３の一部というように、他の場所にあってもよい。リアル・タイム・カメラ追跡システム１１２がどこに位置するかには関係なく、可動深度カメラ１０２からの通信を直接または間接的に受信することができる。一例では、リアル・タイム・カメラ追跡システム１１２を、対話型計算システム１０３の一部である計算デバイスに設けてもよく、そして可動深度カメラ１０２とワイヤレス通信することもできる。他の例では、リアル・タイム・カメラ追跡システム１１２は、建物のどこにあってもよく、またはいずれかの適したタイプの通信ネットワークを用いて可動深度カメラ１０２と通信できる他の離れた場所にあってもよい。
【００１２】
[0010]  リアル・タイム・カメラ追跡システム１１２は、個々の深度画像を全体的な３Ｄモデル内に組み立てることを可能にするために、入力を緻密３Ｄモデリング・システムに供給する。リアル・タイム・カメラ追跡システム１１２は、また、環境の３Ｄモデルに対するカメラの位置を追跡することもできる。カメラ追跡および３Ｄモデリングの組み合わせは、同時定位およびマッピング（ＳＬＡＭ：simultaneous localization and mapping）として知られている。
【００１３】
[0011]  リアル・タイム・カメラ追跡システム１１２および緻密３Ｄモデリング・システム１１０の出力は、統合エンジン１１４によって用いることができる。統合エンジン１１４は、ゲーミング・エンジン、拡張現実エンジン、または環境の緻密３Ｄモデルの少なくとも一部をアプリケーションに統合することを可能にするいずれかのエンジンを備えることができる。例えば、統合エンジンは、対話型アプリケーション（ゲームであってもよい）とのユーザー対話処理を可能にする。例えば、モデル化された現実世界物体をゲーミング（または他の対話型）環境に含ませることができる。これについては以下で更に詳しく説明する。他の例では、可動深度カメラ１０２におけるプロジェクターが、リアル・タイム・カメラ追跡システム１１２および３Ｄモデリング・システム１１０の出力に応じて画像を投影するように構成することもできる。
【００１４】
[0012]  更に他の例として、図２は、建物のフロア２００の平面図を示す。可動深度カメラ２０４を保持している人２０２が、点線矢印２０８で示すように、フロア上を動き回っている。この人は、部屋および家具２１０を通り過ぎて廊下２０６に沿って歩く。リアル・タイム・カメラ追跡システム１１２は、可動深度カメラ２０４が動くに連れて、その位置を追跡することができ、３Ｄモデリング・システムは、フロアの３Ｄモデルまたはマップを生成する。人２０２が可動深度カメラ２０４を携行することは必須ではない。他の例では、可動深度カメラ２０４はロボットまたは車両上に装着される。これも図１の例に該当する。
【００１５】
[0013]  対話型計算システム１０３の動作の一例の流れ図を図３に示す。図１に示した部屋のような環境において可動深度カメラ１０２を動かしながら、一連の深度画像を可動深度カメラ１０２から受け取る（ブロック３０２）。この一連の深度画像は、次に、この環境の緻密３Ｄモデルを生成するために用いられ（ブロック３０４）、この３Ｄモデル（またはモデルの一部）を対話型アプリケーション内に統合する。このアプリケーションは、対話型計算システム上で実行し、ユーザーはこのアプリケーションと対話処理することができる（ブロック３０６）。対話型計算システム１０３がゲーミング・システムである場合、対話型アプリケーションはゲームであり、３Ｄモデル（またはその一部）をこのゲームの中に統合する。一旦３Ｄモデルをゲームの中に統合したなら、このモデルはユーザーには見ることができるとよく、またはゲーム内部で用いることができるがユーザーには見えないのでもよい。環境の緻密３Ｄモデルは、緻密３Ｄ背景モデルと呼ぶこともできるが、この生成は、対話型計算システムの動作の第１フェーズであると考えることができ（点線のボックス３１で示すように）、アプリケーション（例えば、ゲーム）の一部としてオフラインでまたはリアル・タイムで実行することができ、または別個の動作（ゲームまたはゲーミング・システムの設定フェーズのような）として実行することもできる。
【００１６】
[0014]  続いて、可動深度カメラ１０２が静止しているときに、第２の一連の深度画像を可動深度カメラ１０２から受け取り（ブロック３０８）、この第２の一連の深度画像を用いて、カメラの視野（ＦＯＶ）内の３Ｄにおけるリアル・タイムの動きを動的に追跡する。これは、第１フェーズにおいてモデル化された環境（例えば、部屋の一部のみ）の一領域のみを表す（ブロック３１０）。この環境の領域は、「対象領域」と呼ぶこともでき、実施態様の中には、本システムの動作におけるこの段階中に、可動深度カメラに対して定義された固定位置があっても良い（例えば、図１におけるディスプレイ１０５の上または下）。環境の一部におけるリアル・タイムの検知（ブロック３０８および３１０）は、対話型計算システムの動作の第２フェーズと見なすこともできる（点線のブロック３２で示すように）。リアル・タイム移動データーは、生データー、または特定されたユーザー・ジェスチャについてのデーターというような処理されたデーターを含むのであってもよく、入力として対話型アプリケーションに供給される（ブロック３１２）。第２の一連の深度画像は（リアル・タイムでまたは後に）、以前に生成された３Ｄモデルを更新する（ブロック３１４）ためにも用いることができ、次いで、更新されたモデル（または更新されたモデルの複数の様相(aspect)）をアプリケーションにフィードバックすることができる（ブロック３１４からブロック３０６への点線の矢印で示すように）。
【００１７】
[0015]  ゲームのような対話型アプリケーションに環境の詳細モデル（背景と見なすことができる）を組み込むことによって、ユーザー体験全体を改善し、対話処理の現実らしさを高めることができる。例えば、ユーザーが、ボールのような、対話型アプリケーションにおける仮想物体と対話処理する場合、ボールの動きおよび挙動を、緻密３Ｄモデルに基づいて適応させることができる。ユーザーが仮想ボールを壁または他の物体に向けて蹴った場合、対話型アプリケーションは、ボールが壁から跳ね返って戻ってくる様子が見えるように、仮想ボールの挙動を変更することができる（アプリケーションのＧＵＩに示すように）。他の例では、ユーザーが仮想ボールを部屋内部にあるもっと小さい（実）物体に向けて蹴った場合、ボールは必ずしも跳ね返るとは限らず、仮想ボールの軌道が、実物体とのその仮想衝突に続いて、変化させられることもある。この仮想ボールの結果的な動き(motion)を決定するときに、この特定の小さい実物体の特性を用いることができる。これについては、以下で更に詳しく説明する。また、実際の照明源（例えば、図１のランプまたは窓）からの光、物体（例えば、図１における植物）からの陰等というな、この環境の他の様相を対話型アプリケーションに組み込むこともできる。
【００１８】
[0016]  加えて、対話型アプリケーション（ゲームのような）に環境の詳細モデルを組み込むことによって、新たなユーザー体験を提供することもできる。例えば、フライト・シミュレーション・ゲームは、ユーザー自身の自宅において（例えば、第１フェーズにおいて取り込まれている彼らの居間において）小規模でプレイされる（例えば、シミュレーションによる小型の飛行機でユーザーが飛行する）。他の例では、対話型アプリケーション（ゲームのような）が、部屋を変換して、滝がソファに流れ落ちるジャングル等または他の代替環境にすることもできる。更に他の例では、対話型アプリケーション（ゲームのような）が、ユーザー自身の自宅をシミュレーション・ゲームに組み込むことをユーザーに可能にすることもできる。更に他の例では、詳細モデルを対話型アプリケーションに組み込むことによって、実際に変更を行う前（例えば、壁を異なる色で塗装する、カーペットの色を変更する、壁を解体する等）または新たな家具等を購入する前に、ユーザーが自宅の装飾、新たな家具等の変更を部屋の仮想表現の中で試すことを可能にすることもできる。一実施態様では、対話型アプリケーションを住居家具設置店舗(home furnishing store) によって（例えば、そのウェブサイトを通じて）提供してもよく、アプリケーションに統合されるモデルを作成する際に用いられる深度データーをインポートし、次いでその店舗から仮想場面に商品をインポートできるようにするとよい。
【００１９】
[0017]  図１に示したシステムは、１つの深度カメラ（可動深度カメラ１０２）を備えており、図３に示した方法は、１つの深度検知デバイスを用いて環境の詳細３Ｄモデルを作成することを可能にし、更にそのもっと大きな環境の一領域内においてリアル・タイムの動きを３Ｄで追跡することを可能にする。これによって、多数の深度検知デバイスを備えるシステムよりも低コストのシステムを設ける。また、図３の方法は、多数の深度カメラを備えているシステムと組み合わせて用いることもできる。これについては、図８を参照して以下で更に詳しく説明する。
【００２０】
[0018]  図４は、リアル・タイム・カメラ追跡システム４１６、緻密モデル形成システム４２４、および統合エンジン４３２（ゲーム・エンジンであってもよい）と共に用いるための可動環境キャプチャー・デバイス４００の模式図である。可動環境キャプチャー・デバイス４００は、場面の深度画像のシーケンス（即ち、一連の深度画像）を取り込むように構成されている深度カメラ４０２を備えている。以下で深度カメラに言及するときは、単体の深度カメラ、または図４に示すような可動深度キャプチャー・デバイスの一部である深度カメラを指すこともある。深度検知に用いられる技術に依存して、深度カメラは追加のコンポーネント（例えば、深度カメラ４０２が赤外線構造化光パターンを検出する場合には、発光器４０４が必要となる）を必要とすることもあるが、このような追加のコンポーネントは必ずしも深度カメラと同じ位置になくてもよい。
【００２１】
[0019]  各深度画像４１４（または深度マップ・フレーム）は、二次元画像を構成し、各画像エレメント（即ち、画素）は、カメラから取り込まれた場面において、その画像エレメントを生じさせたある物体までの長さ即ち距離というような深度値を含む。この深度値は、メートル、またはセンチメートルというような、指定された測定単位で与えられる絶対値であってもよく、または相対的な深度値でもよい。取り込まれた各深度画像４１４には約３００，０００個以上の画像エレメントがあることもあり、その各々が深度値を有する。深度カメラ４０２のフレーム・レートは、作業ロボット(working robotics)、コンピューター・ゲーム、または他のアプリケーションに深度画像を用いることを可能にするのに十分な高さである（例えば、毎秒２０フレーム以上）。
【００２２】
[0020]  深度情報は、適した技法であればそのいずれを用いてでも得ることができる。これらの技法には、飛行時間、構造化光、およびステレオ画像が含まれるが、これらに限定されるのではない。また、可動環境キャプチャー・デバイス４００は、深度情報を深度カメラ４０２によって確認できるように、場面を照らすように構成された発光器４０４も備えることができる。
【００２３】
[0021]  例えば、深度カメラ４０２が赤外線（ＩＲ）飛行時間カメラである場合、発光器４０４はＩＲ光を場面に発光し、深度カメラ４０２は、場面における１つ以上の物体の表面からの後方散乱光を検出するように構成される。例の中には、パルス状赤外線光を発光器４０４から発光し、出立光パルスと対応する到来光パルスとの間の時間を深度カメラによって検出し、これを測定して、環境キャプチャー・デバイス４００から場面における物体上の位置までの物理的距離を判定するために用いるとよい場合がある。加えて、例の中には、発光器４０４からの出立光波の位相を、深度カメラ４０２における到来光波の位相と比較して、位相ずれを判定するとよい場合もある。この位相ずれは、次に、例えば、散乱光パルス撮像(shuttered light pulse imaging)を含む種々の技法によって経時的に反射光ビームの強度を分析することによって、可動環境キャプチャー・デバイス４００から物体上の位置までの物理距離を判定するために用いることができる。
【００２４】
[0022]  他の例では、可動環境キャプチャー・デバイス４００は、構造化光を用いて深度情報を取り込むことができる。このような技法では、パターン化光（例えば、スポット、格子、または縞模様パターンのような既知のパターンとして表示される光。これらは時間可変であってもよい）を、発光器４０４を用いて場面上に投影することができる。場面における物体の表面に衝突すると、このパターンを取り込む深度カメラ４０２の視点からは、このパターンは変形する。この取り込んだパターンにおける変形を分析して、深度カメラ４０２から場面における物体までの絶対距離または相対距離を判定する。
【００２５】
[0023]  他の例では、深度カメラ４０２は1対のステレオ・カメラを備え、視覚的ステレオ・データーを入手し、解明して相対的深度情報を生成する。この場合、発光器４０４は、場面を照らすために用いることができ、あるいは省略してもよい。
【００２６】
[0024]  例の中には、深度カメラ４０２に加えて、可動環境キャプチャー・デバイス４００が、ＲＧＢカメラ４０６と呼ばれるカラー・ビデオ・カメラを備えている場合もある。ＲＧＢカメラ４０６は、可視光周波数で場面の画像のシーケンスを取り込むように構成されている。
【００２７】
[0025]  可動深度キャプチャー・デバイス４００は、慣性測定ユニット（ＩＭＵ）、加速度計、ジャイロスコープ、コンパス、または他の方位センサ４０８というような、方位センサ４０８を備えることができる。しかしながら、方位センサを用いることは必須ではない。可動環境キャプチャー・デバイス４００は、ＧＰＳのような位置追跡デバイスを備えることもできるが、これも必須ではない。
【００２８】
[0026]  可動環境キャプチャー・デバイスは、前述のようなプロジェクター４１２を備えることもできるが、これは必須ではない。また、可動環境キャプチャー・デバイスは、以下で更に詳細に説明するように、１つ以上のプロセッサー、メモリー、および通信インフラストラクチャも備えている。可動環境キャプチャー・デバイスは、ユーザーが手の中に収めるまたはユーザーが装着するような形状およびサイズに作られた筐体内に設けることもできる。他の例では、可動環境キャプチャー・デバイスは、車両、おもちゃ、または他の移動可能な装置に組み込むまたは装着するようなサイズおよび形状に作られる。また、可動環境カメラは、固定（または静止）位置で動作するとき（例えば、図３の第２フェーズにおける、ボックス３２）に表面またはブラケット上に載せることができるような形状にすることもできる。
【００２９】
[0027]  可動環境キャプチャー・デバイス４００は、リアル・タイム追跡装置４１６に接続されている。この接続は、物理的な有線接続とするとよく、またはワイヤレス通信を用いてもよい。例の中には、インターネットのような１つ以上の通信ネットワークを通じて、可動環境キャプチャー・デバイス４００を間接的にリアル・タイム追跡装置４１６に接続する場合もある。
【００３０】
[0028]  リアル・タイム追跡装置４１６は、１つ以上のグラフィクス処理ユニット（ＧＰＵ）または他の並列計算ユニットを制御する汎用マイクロプロセッサーを用いて、コンピューターで実現する。これは、フレーム整列エンジン４１８と、任意に、ループ閉鎖エンジン４２０および再定位エンジン(relocalization engine)４２２とを備えている。リアル・タイム追跡装置４１６は、深度カメラ４０２からの深度画像フレームを取り込み、任意に可動環境キャプチャー・デバイス４００からの入力、および任意のマップ・データー４３４も取り込む。リアル・タイム追跡装置４１６は、深度カメラ４０２の一連のリアル・タイム６自由度（６ＤＯＦ）姿勢推定値を生成するために、深度画像フレームを空間的に整列するように動作する。また、１対の深度画像フレーム間における変換のために変換パラメータも生成することができる。例の中には、リアル・タイム追跡装置が、深度カメラからの深度画像フレーム４１４に対して１対毎に動作する場合もある。他の例では、リアル・タイム追跡装置４１６は、１つの深度画像４１４を取り込み、それを、他の深度画像とではなく、環境の緻密３Ｄモデル４２６と整列する。リアル・タイム追跡方法の一例が、"Real-time Camera Tracking Using Depth Maps"（深度マップを用いたリアル・タイムのカメラ追跡）と題し本願と同じ日に出願された同時係属中の米国特許出願に記載されている。この方法についても、図１１および図１２を参照して以下で端的に説明する。
【００３１】
[0029]  リアル・タイム追跡装置４１６は、カメラ姿勢を出力として緻密３Ｄモデル生成システム４２４に供給する。緻密３Ｄモデル生成システム４２４は、この情報を深度画像フレームと共に用いて、可動環境キャプチャー・デバイス４００が動いている場面即ち環境の緻密３Ｄモデル４２６を形成し格納する。例えば、図１の場合、３Ｄモデルは部屋における表面および物体の３Ｄモデルである。図２の場合、３Ｄモデルは、建物のフロアの３Ｄモデルである。緻密３Ｄモデルは、ＧＰＵメモリーに格納することができる。緻密３Ｄモデル生成方法の一例が、"Three-Dimensional Environment Reconstruction"（三次元環境の再現）と題し本願と同じ日に出願された同時係属中の米国特許出願に記載されている。この方法についても、図１３および図１４を参照して以下で端的に説明する。緻密３Ｄモデル生成方法の他の例が、"Volumetric Method for Building Complex Models from Range Images"（距離画像から複雑なモデルを構築する空間的方法）と題し、ＳＩＧＧＲＡＰＨ’９６においてCurless and Levoyによって発表された論文に記載されている。
【００３２】
[0030]  リアル・タイム追跡装置４１６および／または緻密３ＤＳモデル生成システム４２４によって実行する処理は、一例では、可動環境キャプチャー・デバイス４００の位置から離れて実行することができる。例えば、可動環境キャプチャー・デバイス４００を、比較的処理パワーが低い計算デバイスに接続する（またはこれを備える）ことができ、通信ネットワークを通じて深度画像をサーバーにストリーミングする。サーバーは、比較的高い処理パワーを有し、リアル・タイム追跡装置４１６および／または緻密３ＤＳモデル生成システム４２４の計算的に複雑なタスクを実行する。サーバーは、レンダリングした緻密再現画像をフレーム毎に戻して、ユーザーに対話処理体験を提供し、更にモデルの完成時における最終的な３Ｄ再現を、今後のローカルな使用（例えば、ゲームにおいて）のために戻すこともできる。このような構成は、ユーザーが高パワーのローカル計算デバイスを所有する必要性を回避する。
【００３３】
[0031]  ユーザーが緻密３Ｄモデルを構築するのを補助するために、緻密３Ｄモデルのリアル・タイム・レンダリングの形態で、ユーザーにフィードバックを提供することができる。これによって、ユーザーは緻密モデルの状態を、これが組み立てられていくに連れて見ることが可能になり、これによって、失われていた領域をユーザーが取り込むのを補助する。環境の内どの領域がもっと多くのデーターを必要としているのかユーザーに示すために、レンダリング上に色および／または表面模様を重ね合わせることもできる。これによって、一層対話処理し易い環境をユーザーに提供する。また、失われているエリアまたは緻密３Ｄモデルの中では品質が劣るエリアにユーザーを導くために、聴覚的キューまたは視覚的キューをユーザーに供給することもできる。
【００３４】
[0032]  可動環境キャプチャー・デバイス４００は、ディスプレイ・デバイス４３０に接続されている統合エンジン４３２（ゲーム・エンジンでもよい）と合わせて用いてもよい。例えば、ゲームは、一人称射撃（ＦＰＳ）ゲーム、ゴルフ・ゲーム、ボクシング・ゲーム、自動車レース・ゲーム、または他のタイプのコンピューター・ゲームとするとよい。図３を参照して先に説明したように、緻密３Ｄモデルを統合エンジン４３２に供給し、モデルの様相をゲームに組み込むことができる。例えば、３Ｄモデルは、部屋の中にある物体の形状および位置を判定するために用いることができ、次いでゲーム自体にゲーム内の物体として組み込むことができ、プレイヤーがゲーム内で仮想物体と対話処理することができ、あるいは環境内の物体と（仮想的に）対話処理することができる（例えば、プレイヤーが蹴った仮想ボールが、部屋の壁または環境内にある他の物体に当たった後に跳ね返ってくるように見えるとよい）。また、統合エンジン４３２は、第２フェーズ（例えば、ゲーム・プレイの間。この場合、統合エンジンはゲーム・システムとなる）の間に取り込まれた深度画像を用いて、対象領域におけるリアル・タイムの動きを３Ｄで追跡し、この動きを、ゲームのようなアプリケーションの入力として用いる。深度画像４１４を用いたリアル・タイムの動きの追跡は、背景除去およびそれに続く例に基づく本体部分認識（例えば、"Human Body Pose Estimation"と（人間の身体姿勢の推定）題し２００９年５月１日に出願され、公開番号がＵＳ−２０１０−０２７８３８４−Ａ１である同時係属中の米国特許出願に記載されているような技法）というような、既知の技法を用いて実行することができる。ゲーム状態またはゲームについてのメタデーターというような、統合エンジン４３２からのデーターも、リアル・タイム追跡装置４１６に供給することができる。
【００３５】
[0033]  任意に、マップ・データー４３４がリアル・タイム追跡装置４１６に入手可能である。例えば、これは、建築家による環境（例えば、部屋または建物のフロア）の図面、環境において知られている陸標の位置、他のソースから入手可能な環境のマップとしてもよい。
【００３６】
[0034]  リアル・タイム追跡装置のフレーム整列エンジン４１８は、深度画像フレームの対を整列するように、または深度画像フレームと緻密３Ｄモデルからの深度画像フレームの推定値とを整列するように構成されている。これは、フレーム整列エンジンがリアル・タイムで動作するために、１つ以上のグラフィクス処理ユニットを用いて実現される。ループ閉鎖エンジン４２０は、可動環境キャプチャー・デバイスが移動してループ内に入って、現在の深度フレーム内において描かれている場面が、モデルに既に統合されている以前の深度フレームのそれと少なくとも部分的に重なり合っているときを検出するように構成されている。例えば、これは、ユーザーが図２の建物のフロア全体を歩き回り、再度出発地点に達したときに起こると考えられる。また、ユーザーがある家具の背後で部屋内を動き回り、元の出発地点に再度戻ったとき、またはその元の出発地点の近くに戻ったときにも起こると考えられる。再定位エンジン４２２は、リアル・タイム追跡装置が可動環境キャプチャー・デバイス４００の現在の位置を失い、再度現在の位置を再定位または発見するという状況に対処するように構成されている。
【００３７】
[0035]  前述のように、リアル・タイム追跡装置４１６および／または緻密３Ｄモデル生成システム４２４によって実行する処理は、一例では、可動環境キャプチャー・デバイス４００の位置から離れて実行することができる。例えば、可動環境キャプチャー・デバイス４００を、比較的処理パワーが低い計算デバイスに接続すること（またはこれを備えること）ができ、深度画像をサーバーに通信ネットワークを通じてストリーミングする。サーバーは、比較的高い処理パワーを有し、リアル・タイム追跡装置４１６および／または緻密３ＤＳモデル生成システム４２４の計算的に複雑なタスクを実行する。サーバーは、レンダリングした緻密再現画像をフレーム毎に戻して、ユーザーに対話処理体験を提供し、更にモデルの完成時における最終的な３Ｄ再現を、今後のローカルな使用（例えば、ゲームにおいて）のために戻すこともできる。このような構成は、ユーザーが高パワーのローカル計算デバイスを所有する必要性を回避する。
【００３８】
[0036]  以上で説明したシステムおよび方法では、緻密３Ｄモデルは、可動深度カメラが動いている間に取り込まれた深度画像に基づいて組み立てられ（フェーズ１，図３におけるボックス３１）、対話型計算システム上で実行するアプリケーションに統合され、次いで、可動深度カメラが一旦仕舞われ(set down)、したがって静止したとき（フェーズ２、図３におけるボックス３２）に検出された動き(motion)によって、ユーザーはアプリケーションと対話処理することができる。例の中には、フェーズ１において可動深度カメラをどのように動かすかに関して、システムによってユーザーに命令が与えられてもよく、更に他の例では、ユーザーが自由に可動深度カメラをいかようにでも動かしてもよい。以上で説明したシステムおよび方法の一変形では、対話型計算システムが、図５の模式図において示したような物体認識モジュール５０２を備えていてもよい。このモジュール５０２によって３Ｄモデル内部から認識された物体には、ディスプレイ・デバイス４３０またはスピーカー、プロジェクター、光源等のような周辺機器５０４といった能動的な物体、および様々な家具(items of furniture)のような受動的な物体を含むことができる。
【００３９】
[0037]  図６は、物体認識モジュール５０２の使用を伴う対話型計算システムの動作の一部の流れ図を示す。この方法は、例えば、図３において３Ｄモデルをアプリケーションに統合するステップ（ブロック３０６）の一部を成すことができ、またはこのステップに続いて統合エンジンによって実行してもよい。３Ｄモデル（緻密３ＤＳモデル生成システム４２４によって生成した）を分析して（ブロック６０２）、認識可能な物体を探す。これは、例えば、生成されたモデルにおいて際立った特徴を探すことによって、またはモデルの部分を格納されているテンプレイトと比較することによって実行することができ、これらのテンプレイトまたは際立った特徴は、物体データーベース５０６に格納することができる。一例では、テレビジョンの概略的な形状を定義する（例えば、奥行きが約１０ｃｍで、幅対高さの比が約１６：９）汎用の「テレビジョン」テンプレイトを格納することができる。この分析（ブロック６０２における）を実行するためには、適した画像分析または機械学習方法であればいずれでも用いることができ、例に中には、訓練データーを物体データーベース５０６に格納できる場合もある。
【００４０】
[0038]  緻密３Ｄモデルの解像度に応じて、物体認識モジュール５０２は、埋め込まれたまたは刻み込まれた製品ロゴを特定して、物体識別を補助できるのでもよい（例えば、ＤＥＬＬ（商標）がコンピューターまたはコンピューター・ディスプレイを示すことができる）。可動環境キャプチャー・デバイス４００が、深度カメラ４０２に加えて、任意のＲＧＢカメラ４０６（図４に示したような）を備えている場合、３Ｄモデルと組み合わせてＲＧＢ画像を使用して物体認識を実行することができる（例えば、ロゴの検出のため、あるいはバーコードまたは製品ＩＤを読み取るため）。認識すべき物体が、テレビジョン、コンピューター・モニター、または移動体電話機のようなディスプレイを備えている場合、走査している間に、既知の特定のパターンがそのデバイス上に表示されている場合があるので（そして、デバイスが本システムの制御下にある場合、この既知のパターンを本システムによってデバイスに出力することができる）、ＲＧＢで容易に検出することができる。同様に、プロジェクターでは、同様に、プロジェクターは、既知のパターン（任意に、ときの経過と共に変化する）を、独立してまたは本システムの制御の下で、そして世界においてそのＲＧＢパターンを発見することによって、出力することができ、部屋の中にあるプロジェクターの位置を判定することができる（例えば、深度再現によって分かる部屋の幾何学的形状を用いて）。システムの中には、物体認識／分類において補助するために、マーカー（例えば、赤外線反射マーカー）を用いることができる場合もある。
【００４１】
[0039]  物体を認識した場合（ブロック６０４において「Ｙｅｓ」）、この物体についてのデーターを、統合エンジン４３２上で実行しているアプリケーションに入力する（ブロック６０６）。このアプリケーションは、例えば、ゲーム・システム上で実行しているゲームであってもよい。この物体についてのデーターは、例えば、物体の種類（例えば、「テレビジョン」または「ディスプレイ」）および位置情報（例えば、可動深度カメラまたは可動環境キャプチャー・デバイス４００の現在の位置に対する）を含むことができる。次いで、特定した物体に基づいてアプリケーションの実行（または動作）を調節する（ブロック６０８）。
【００４２】
[0040]  特定した物体に基づいてアプリケーションの実行（または動作）を調節する（ブロック６０８）には、多くの異なる方法があり、これは、特定した物体の種類に応じて異なってもよい。物体がスピーカーのような能動的な物体である場合、スピーカーの位置および間隔を考慮に入れるために、対話型計算システムの音響出力を調節することができる（ブロック６８１）。このように、本システムは、サラウンド音響システムの効果をシミュレートすることができるとよく、または実物のサラウンド・システムが３Ｄの部屋再現全体を用いて、その出力を較正し最適化できるとよい。例の中には、多数のスピーカーが特定された場合、各スピーカーから順次音を発して、対話型計算システムおよび検出されたスピーカー・オブジェクトからの音響出力間で区別する必要がある場合もある（可動環境キャプチャー・デバイス４００は、任意に、図４には示されていない、マイクロフォンを備えることもできる）。状況によっては、これが不要な場合もある。何故なら、この情報は、検出されたスピーカー・オブジェクトのサイズ／形状から、および／またはスピーカーの相対的位置付けから推論できる場合があるからである。スピーカーの検出、およびそれに続くサラウンド音響のシミュレーションは、例えば、ゲーミングの現実らしさ、または拡張現実環境を高めるために用いることができる。
【００４３】
[0041]  能動的な物体の他の例には、ディスプレイ・デバイス４３０自体があり、カメラおよびディスプレイの相対的な位置の知識を用いて、ポインティング・デバイスの自動較正を実行することができる（ブロック６８２）。これは、図７を参照して説明することができる。多くの既知のシステムでは、ポインティング・デバイスをディスプレイ７０２に対して較正するためには、図７の上側の図に示すように、ディスプレイの角の各々に表示される標線(reticule)７０４（または他のマーカー）に照準をあてる（そして、恐らくは照準を当てている間にボタンを押す）必要がある。しかしながら、本明細書において記載するシステムでは、統合エンジンが、深度カメラ７１２、ディスプレイ７１４、およびポインティング・デバイス７１６（ボール・ゲームをプレイしているときのバット、またはＦＰＳゲームをプレイしているときの偽兵器のようなポインティング・デバイス）の相対的位置を把握しており、したがって、初期較正フェーズ（図７の上側の図に示すような）を必要とすることなく、ユーザーがディスプレイ上で照準を当てている位置（図７における下側の図において矢印７１８で印す）を計算することができる（例えば、三角測量法を用いて）。更に、生成された環境の緻密３Ｄモデルに基づいて、統合エンジンは、ユーザーがディスプレイに照準を当てていない場合でも、ユーザーが環境内の何に照準を当てているのか判断することができる。これによって、例えば、可動深度カメラの視野の外側にある実物体をユーザーが選択し（例えば、それに照準を当てることによって）（フェーズ２）、それをゲーム内物体としてゲームにインポートすることが可能になる場合がある。
【００４４】
[0042]  図７に示し先に説明したものの変形では、ユーザーが環境内においてどこを見ているのか判断する方法を用いることもできる。本システムは深度カメラおよびディスプレイの相対的な位置を把握しており、更にユーザーの頭部および目の相対的位置も把握しているので、本システムは、ユーザーが彼らの頭部を動かすことによってＧＵＩを見渡すことができるように、頭部追跡を実行することができる。これは、ゲーミングまたは拡張現実アプリケーション内において仮想環境を探求するための非常に現実的で直感的なインターフェースを提供する。
【００４５】
[0043]  他の例では、特定した物体に基づいて、アプリケーションのＧＵＩを調節するとよい（ブロック６８３）。例えば、光源（図１に示したランプまたは窓のような）を認識したときに、ＧＵＩを調節すると、特定された光源の場所から出た追加の光を、表示される場面においてシミュレートすることができる。検出した物体が窓である場合、窓を通る日光から予測することができる（例えば、１日の時刻または季節(time of year)に基づいて）あらゆる眩光にも対処するために、または以前の例におけるように、追加の光をシミュレートするために、ＧＵＩを適応させることができる。
【００４６】
[0044]  尚、スピーカーおよびディスプレイは、能動的な物体の２つの例に過ぎず、本システムは他の能動的な物体も認識し、次いでアプリケーションからその能動的な物体に対して出力を調節する（ブロック６０８において）ことができることは認められよう。能動的な物体に対する出力は、検出した物体の位置(location)および／または検出した他の物体の位置(position)に基づいて調節することができる（ブロック６８５において）。
【００４７】
[0045]  更に他の例では、前述のデバイスが、プロジェクターのような、特定した能動的な物体であってもよく、環境内部で特定した他の物体に対して判定したその位置に基づいて、プロジェクターの出力を調節することができる。これによって、較正段階を不要とし、本システムは、特定した能動的物体の検出した位置に基づいて、それ自体で自動的に適応できることを意味する。プロジェクターは、可視画像（または他のＧＵＩ）を投影することができ、分かっているプロジェクターの位置、および画像を投影する表面に対するその相対的な位置に基づいてこれらを調節して、例えば、平坦でない表面またはプロジェクターに対して傾いている表面を補償することができる。また、分かっているプロジェクターの位置に基づいて、投影のために画像を生成して、一層夢中にさせる環境をユーザーに提供し、更に主要な表示から表示を拡大させることができる。主要な表示は、投影された表示、あるいはテレビジョン、コンピューター・モニター、または他の表示画面上に示された表示でもよい。具体的には、３Ｄ効果が得られるように、ユーザーの位置（例えば、彼らの顔および目の位置）に対して投影画像をリアル・タイムで適応させ、任意の形状の表面上に画像を投影することができる。
【００４８】
[0046]  他の例では、プロジェクターは、深度検出に用いられる構造化光を投影することもでき、投影された構造化光パターンは、例えば、可動深度カメラの現在の位置に対する、プロジェクターの分かっている位置に基づいて変化させることができる（ブロック６８５）。投影がある角度をなして平坦な表面に衝突する場合、投影画像のあらゆる投影歪み（キーストン効果とも呼ばれている）を補償するために、画像を予め歪ませることもできる。一例では、２つのステップで画像を予め歪ませる。最初に、取り込んだ３Ｄモデルにおいて、投影表面の中心に対して直交する位置からの２Ｄ投影画像によって、表面に投影的に織り目を出す(textured)。次いで、プロジェクターと同じ外在および内在レンズ・パラメータを共有する仮想カメラを用いて、織り目を出した３Ｄ表面を、逆に２Ｄ画像に投影する。投影は、平坦な表面にではなく、ユーザーに対して歪みをなくすることができ、本システムが任意の非平坦表面上において歪みを補正することが可能になる。以上で説明した技法は、ユーザーの推定眼位から、取り込んだ３Ｄモデルにおいて表面（平坦でなくても）に投影的に織り目を付けることによって、変更することもできる。
【００４９】
[0047]  以上で説明した例は全て能動的な物体であった。しかしながら、様々な家具のような受動的な物体、または更に言えば、他の動く物体(animate object)（図１に示した他の人１０４または猫１０８のような）の検出に基づいて、アプリケーションの実行を調節することもできる。ユーザーがボールのような仮想物体と対話処理しており、この仮想物体を投げた／蹴った場合、仮想物体と実物体との間の相互作用を一層精度高くシミュレートするように、統合エンジン内部にある物理エンジンを調節することができる（ブロック６８４）。仮想ボールが壁から跳ね返る場合、ソファ（カウチとしても知られている）のような、壁よりも柔らかい物体から跳ね返る場合よりも速く動くと考えられる。偶然仮想ボールがランプ１０６または実際の猫１０８と接触した場合、しかるべき音響効果を統合エンジンによってシミュレートし、ユーザーに再生することができる（例えば、ガラスが割れる音、または猫の「にゃあ」という鳴き声）。
【００５０】
[0048]  物体の認識について、以上では、ゲーム・プレイ（またはフェーズ２における他のユーザー対話処理）の開始前に実行するように説明したが、物体の認識は、加えてまたは代わりに、深度カメラが静止状態にあるときに生成した第２の一連の深度画像（図３のブロック３０８において受け取る）に基づいて実行してもよい。このような例では、ユーザーが物体と対話処理する様式を用いて、物体を認識または分類することができ、これは、模範に基づく身体部分認識方法または他の方法を用いることもできる。例えば、ユーザーが座っている物体であれば、物体認識モジュール５０２によって椅子またはソファであると特定することができる。
【００５１】
[0049]  尚、特定した物体に基づいてアプリケーションの実行を調節するまたは適応させる方法（ブロック６０８における）について以上で説明したが、これらは単なる数例に過ぎないことは認められよう。一旦物体が緻密３Ｄモデルから特定されこの情報がしかるべきエンジン／モジュールに供給されたなら、ユーザー体験を改良し、ユーザーのアプリケーションとの対話処理の現実らしさを高めるためには、多くの方法で調節を行うことができる。
【００５２】
[0050]  以上で説明したシステムは、１つの深度カメラ、即ち、可動深度カメラ１０２、２０４、４０２のみを備えるが、他のシステム例では、図８に示すように、１つ以上の追加の深度カメラ８０２〜８０６も備えることができ、このようなシステム例でも、以上で説明した方法（例えば、図３および図６において示した）を用いることができる。本システムにおける深度カメラ１０２、８０２〜８０６の各々は、同一であってもよく、またはこれらが異なってもよい（例えば、これらは、異なる形状の視野を有してもよく、広角、短距離(short-throw)、および長距離深度カメラの組み合わせを有してもよく、および／または構造化光、飛行時間、ステレオ、レーザー距離計等のような、異なる技術を用いるカメラを含んでもよい）。追加の深度カメラ８０２〜８０６は、静止カメラであってもよく、したがって、可動深度カメラ１０２に対して異なる形状の筐体を有してもよく、または追加の深度カメラ８０２〜８０６の内１つ以上も可動深度カメラであってもよい。各深度カメラは、有線またはワイヤレス接続を用いて、対話型計算システムに接続する。
【００５３】
[0051]  このようなシステムの一実施態様では、可動深度カメラ１０２のみを用いて、環境の緻密３Ｄモデルを生成してもよく（図３のブロック３０４において）、または多数の深度カメラから受け取った一連の画像を用いてもよい。更に、第２フェーズ（ボックス３２）では、全ての深度カメラ１０２、８０２〜８０６からの画像、またはこれらのカメラの一部からの画像を用いて、３Ｄにおけるリアル・タイムの動きを追跡することもできる（図３のブロック３１０における）。一例では、家具、他のユーザー、または彼ら自身によって生ずるユーザーの遮蔽を補償するために、別個のリアル・タイム身体部分認識を、深度カメラ毎に実行し、最も信頼度の値が高い追跡装置の結果を用いる。
【００５４】
[0052]  図８に示すような多数の深度カメラを備えているシステムの一実施態様では、図６に示した方法を用いると、追加の深度カメラ８０２〜８０６の存在および位置を検出し、これらの判定した位置に基づいてアプリケーションの実行を調節することができる（図６のブロック６０８において）。加えて、各静止カメラがユーザーに対するその相対的な向きを判定するために、ユーザーを個々に追跡することもできる。この知識は、他の静止カメラに対するカメラの位置に関する曖昧さをいずれも解明するために用いることができる。この例では、アプリケーション実行の調節は、分かっているカメラ位置に基づいて本システムの自動較正を実行することを含むとよく、この較正は、リアル・タイムで動き(motion)を検出するときに用いることもできる（例えば、図３におけるボックス３２の第２フェーズの動作において。多数の深度カメラからの一連の画像を用いる）。
【００５５】
[0053]  これらの深度カメラが同一でない場合、物体認識（図６）を用いると、カメラの存在および位置に加えて、カメラのタイプも検出することができる。先に説明したように、可動深度カメラが可動環境キャプチャー・デバイスの一部であり、この可動環境キャプチャー・デバイスがＲＧＢカメラ（例えば、図４に示したような）も備えている場合、ＲＧＢカメラによって取り込んだ画像も、カメラのタイプの特定に用いることができる。他の例では、デバイス上にある特定のマーカーまたはラベル（例えば、ＩＲ反射マーカー）というような、他の特性もカメラのタイプを特定するために用いることができる。
【００５６】
[0054]  他の変形では、多数の深度カメラの決定した位置（または相対的な位置）に基づく自動較正を、３Ｄモデルの比較によって実行することもできる。図９は、多数の深度カメラの自動較正方法の一例の流れ図である。この方法では、各深度カメラから受け取った（ブロック９０２において）一連の深度画像を用いて別個の緻密３Ｄモデルを生成する（ブロック９０４において）。深度カメラが１つの場合、可動深度カメラを含む。これらのモデルは、一連の中の全ての画像を用いて生成することも、これらの画像の一部から生成すること（必要な計算を減らすため）もできる。一旦生成したなら、次に、個々のモデルを比較して、１つよりも多いモデルにおいて見ることができる共通の特徴集合を特定し（ブロック９０６）、２つ以上のモデルにおける共通の１組の特徴の特定に基づいて、モデルの各々と関連するカメラの相対的な位置を計算することができる（ブロック９０８）。一例では、環境が、多数の物体が置かれているコーヒー・テーブルのような散らかった表面を含む場合、このような特徴は、カメラの相対的な位置を計算するためには相応しい基準点として作用する。何故なら、物体の配列には殆どまたは全く対称性がなさそうに思われるからである。図９に示す方法の一実施態様では、共通の特徴集合の特定は、第１モデル（散らかったコーヒー・テーブルのような）における、他とは異なる特徴の配列を特定し、次いで、他の各モデルを調べて同じ配列の特徴がそのモデルにおいて見ることができるか否か判断することによって実現することができる。一実施態様例では、記述子ベクトル(descriptor vector)をモデルの各々から疎な対象点(sparse interest point)において抽出するとよく、次いでこれらを照合して、異なるモデル間における初期対応を与える。最後に、基準フレーム間の変換（例えば、２つのモデルを比較する場合、２つの基準フレーム間）に対して、何らかの最適化を実行して、これらを整列する。
【００５７】
[0055]  図１０は、いずれかの形態の計算および／または電子デバイスとして実現することができ、本明細書において記載した方法の実施形態を実現することができる計算主体(computing-based)デバイス例１０００の種々のコンポーネントを示す。
【００５８】
[0056]  計算主体デバイス１０００は、１つ以上のプロセッサー１００２を備えている。プロセッサー１００２は、マイクロプロセッサー、コントローラー、またはデバイスの動作を制御するための計算実行可能命令を処理するのに適したタイプのプロセッサーであれば他のいずれでもあってもよく、第１の一連の深度画像から環境の緻密３Ｄモデルを生成し、そのモデルの少なくとも一部をアプリケーションにおいて用い、このアプリケーションへの入力として用いるために第２の一連の深度画像から環境の一部におけるリアル・タイムの動きを追跡するための動作を制御する。例の中には、例えば、チップ・アーキテクチャ上のシステムを用いる場合、プロセッサー１００２は、本明細書において説明した方法の一部をハードウェアで実現する（ソフトウェアでもファームウェアでもなく）１つ以上の固定機能ブロック（アクセレレータとも呼ぶ）を含むのでもよい場合もある。
【００５９】
[0057]  また、計算主体デバイス１０００は、グラフィクス処理システム１００４も備えることができる。グラフィクス処理システム１００４は、通信インターフェース１００６を通じてプロセッサー１００２と通信し、１つ以上のグラフィクス処理ユニット（ＧＰＵ）１００８を備えている。グラフィクス処理ユニット１００８は、高速でしかも効率的に並列なスレッド動作を実行するように構成されている。また、グラフィクス処理システム１００４は、メモリー・デバイス１０１０も備えている。メモリー・デバイス１０１０は、ＧＰＵ１００８からの高速並列アクセスを可能にするように構成されている。例の中には、緻密３Ｄモデルを生成するときに、ＧＰＵを用いるとよい場合もある。これについては、以下で更に詳しく説明する。
【００６０】
[0058]  また、計算主体デバイス１０００は、入力／出力（Ｉ／Ｏ）インターフェース１０１２も備えている。入力／出力インターフェース１０１２は、可動環境キャプチャー・デバイス（深度カメラを備えている）、深度カメラ、および任意に１つ以上のユーザー入力デバイス（例えば、ゲーム・コントローラー、マウス、キーボード等）というような１つ以上のデバイスから入力を受け取り、これらを処理するように構成されている。また、Ｉ／Ｏインターフェース１０１２は、通信インターフェースとして動作することもできる。通信インターフェースは、１つ以上のネットワーク（例えば、インターネット）と通信するように構成することができる。
【００６１】
[0059]  また、表示インターフェース１０１４も設けられ、表示情報をディスプレイ・デバイスに出力するように構成されている。ディスプレイ・デバイスは、計算主体デバイス１０００とは別個であっても、またはこれと一体であってもよい。表示情報は、グラフィカル・ユーザー・インターフェース、例えば、緻密３Ｄモデルの少なくとも一部が統合されているアプリケーションのためのグラフィカル・ユーザー・インターフェースを設けることができる。一実施形態では、ディスプレイ・デバイスは、接触感応ディスプレイ・デバイスである場合には、ユーザー入力デバイスとしても機能することができ、このような場合、Ｉ／Ｏインターフェース１０１２および表示インターフェース１０１４を組み合わせて１つのインターフェースにすることもでき、またはディスプレイ・デバイスを双方のインターフェースを介して接続することもできる。
【００６２】
[0060]  計算主体デバイス１０００によってアクセスすることができるいずれかのコンピューター読み取り可能媒体を用いて、コンピューター実行可能命令を供給することもできる。コンピューター読み取り可能媒体は、例えば、メモリー１０１６のようなコンピューター記憶媒体、および通信媒体を含むことができる。メモリー１０１６のようなコンピューター記憶媒体は、揮発性および不揮発性、リムーバブルおよび非リムーバブル媒体を含み、コンピューター読み取り可能命令、データー構造、プログラム・モジュール、またはその他のデーターというような情報の格納のためのいずれかの方法または技術で実現される。コンピューター記憶媒体は、限定ではなく、ＲＡＭ、ＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ，フラッシュ・メモリーまたは他のメモリー技術、ＣＤ−ＲＯＭ、ディジタル・バーサタイル・ディスク（ＤＶＤ）あるいは他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスク・ストレージまたは他の磁気記憶デバイス、あるいはコンピューター・デバイスによるアクセスのために情報を格納するために用いることができるその他のあらゆる非伝送媒体(non-transmission medium)を含むことができる。対照的に、通信媒体は、コンピューター読み取り可能命令、データー構造、プログラム・モジュール、または他のデーターを、搬送波というような変調データー信号、または他の伝達メカニズム内に具体化することができる。本明細書において定義する場合、コンピューター記憶媒体は通信媒体を含まないこととする。コンピューター記憶媒体（メモリー１０１６）は計算主体デバイス１０００内部に示されているが、ストレージは、分散することまたは離れて配置することもでき、ネットワークまたは他の通信リンクを通じてアクセスできる（例えば、Ｉ／Ｏインターフェース１０１２を用いる）ことは認められよう。
【００６３】
[0061]  オペレーティング・システム１０１８を構成するプラットフォーム・ソフトウェアまたは他のいずれかの適したプラットフォーム・ソフトウェアは、アプリケーション・ソフトウェア１０２０を計算主体デバイス上で実行することを可能にするために、計算主体デバイスにおいて設けることができる。また、メモリー１０１６は、緻密モデル統合エンジン１０２２、物体認識モジュール１０２４、統合エンジン１０２６（例えば、ゲーム・エンジン）、およびカメラ追跡エンジン１０２８の内１つ以上の機能を実現するための実行可能命令も格納することができる。また、このメモリーは、データー・ストア１０３０も設けることができる。データー・ストア１０３０は、例えば、受け取った一連の深度画像を格納するため、生成した緻密３Ｄモデルを格納するため、物体認識を実行するときに用いられるデーターを格納するため（例えば、図５に示した物体データーベース５０６を設けるため）等、プロセッサー１００２によって用いられるデーターのストレージを設けるために用いることができる。
【００６４】
[0062]  "Real-time Camera Tracking Using Depth Maps"（深度マップを用いたリアル・タイムのカメラ追跡）と題し本願と同じ日に出願された同時係属中の米国特許出願は、図４の論述において先に引用したが、深度カメラによって生成した深度マップを用いた、リアル・タイム・カメラ追跡方法について記載する。この方法の態様は、図４、図１１、および図１２を参照して説明することができる。一実施態様例では、図４のフレーム整列エンジン４１８は、１つ以上のＧＰＵ４１６または他の並列計算ユニットを有する計算デバイスにおいて実装されたコンピューターである。例えば、これらの並列計算ユニットは、ベクトル・プロセッサー、単一命令多重データー（ＳＩＭＤ：single instruction multiple data）アーキテクチャー、グラフィクス処理ユニット、またはその他の並列計算デバイスであってもよい。これは、反復最近接点プロセスおよび任意の平面抽出コンポーネントを備えている。反復最近接点プロセスは、投影データー連携(projective data association)および点−平面誤差計量(point-to-plane error metric)を用いる。フレーム整列エンジンは、現在の深度マップを深度カメラから受け取る。これは、宛先深度マップとも呼ばれる。例の中には、フレーム整列エンジンが原初深度マップ(source depth map)も受け取る場合がある。この深度マップは、深度カメラからの直前の深度マップ・フレームである。他の例では、フレーム整列エンジンは、原初深度マップの緻密表面モデル推定値を取り込む。フレーム整列エンジンの出力は、現フレームおよび原初フレーム（またはフレーム推定値）を整列するための変換の１組の位置合わせパラメータ(registration parameter)であり、これらのパラメータは、図１１に示す方法を用いて計算することができる。例の中には、これらの位置合わせパラメータが、ＳＥ３マトリクス（以下で更に詳しく説明する）として供給される。しかしながら、位置合わせパラメータは、適した形式であればいずれでも供給されてもよい。これらの位置合わせパラメータは、リアル・タイム追跡装置４１６が一連の深度カメラのリアル・タイム６自由度姿勢推定値を生成するために用いられる。
【００６５】
[0063]  図１１は、フレーム整列エンジンにおける反復プロセスの一例の流れ図である。位置合わせパラメータの初期推定値を形成する（１１００）。これらは、現フレームおよび原初フレームを整列するための変換の位置合わせパラメータである。この初期推定値は、適したやり方であればいずれでも形成される。例えば、以下の情報源の内１つ以上を用いると、初期推定値を形成することができる。その情報源とは、ゲーム状態、ゲーム・メタデーター、ＲＧＢカメラ出力、方位センサ出力、ＧＰＳデーター等である。他の例では、初期推定値は、カメラの直前の移動経路(motion path)についての情報を用いて、どこでカメラを使用しているか予測することによって形成する。例えば、カメラが一定速度または一定加速度を有すると仮定することもある。時点０から時点ｔ−１までのカメラの移動経路を用いると、時点ｔにおいてカメラがどこにあるか推定することができ、こうして位置合わせパラメータの推定値を得ることもできる。
【００６６】
[0064]  初期推定値を用いて、現フレームと原初フレーム（深度マップまたは推定深度マップ）間において対応する点の対を計算する（１１０２）。１対の対応する点は、１つの深度マップからの点、および他の深度マップからの点であり、これらの点は、場面における同じ現実世界点から生じたと推定する。「点」といいう用語は、本明細書では、画素、あるいは隣接する画素の集合または小区画(patch)を指す。この対応問題は、巨大な数の点の組み合わせがあり得ることから、非常に難しい。カラー画像または中間調画像を用いた以前の手法では、この問題に取り組む際に、線、エッジ、角等というような形状を各画像において識別し、次いでこれらの形状を画像の対間で照合しようとした。対照的に、図１２に示し以下で説明する方法では、深度マップにおいて形状を発見する必要なく、対応する点を特定する。位置合わせパラメータの推定値の更新を計算する（１１０４）。これは、計算した対応点に適用する誤差計量(error metric)を最適化する。収束に達したか否か評価するために、チェックを行う（１１０６）。達した場合、更新推定値には殆どまたは全く変化がなく、位置合わせパラメータを出力する（１１０８）。達していない場合、図１１に示すように、反復プロセスを繰り返す。
【００６７】
[0065]  図１２を参照して、対応する点の対をどのように計算するかについて更に詳細に示す。入手可能な各点の法線曲面を計算する（ブロック１２０２）。一例では、深度マップにおいて２つ（またはそれ以上）の最も近い点を発見し、これらの近隣点およびその点自体を包含する曲面分を計算することによって、所与の点についてこれを遂行する。次いで、その点の位置において、その曲面分に対する法線を計算する。
【００６８】
[0066]  次いで、対応する点の対を発見するプロセスが続く（ブロック１２０４）。これより、このプロセスについて、緻密３Ｄモデルを使用せずに原初現深度マップおよび現深度マップが利用可能な場合において説明する。原初深度マップからのサンプリングした原初点毎に、この原初深度マップと関連するカメラ位置から、サンプリングした原初点を通り、宛先深度マップにおける宛先点まで光線を投影する（ブロック１２０６）。場合によっては、宛先点が、投影された光線に沿って、サンプリングした原初点の前に来ることもある。この投影プロセスは、「投影データー連携」(projective data association)と呼ぶこともできる。次いで、宛先点の周囲にあり宛先点を含む候補対応点の検索を行う（ブロック１２０８）。例えば、この検索は、サンプリングした原初点の法線曲面と共存する法線曲面を有し、宛先点から指定されたユークリッド距離以内にある点を求める。法線曲面が共存すると言われるのは、これらが互いに指定された範囲内にある場合である。例えば、この指定範囲およびユークリッド距離は、ユーザーが設定可能にしてもよく、および／または関与する特定のアプリケーション条件に関する経験的データーを用いて設定してもよい。
【００６９】
[0067]  この検索の結果、１つ以上の候補対応点を発見する(ブロック１２０８において）。これらの候補対応点から、１つの点を選択し（ブロック１２１０において）、原初点と対を形成する。この選択は、距離計量(distance metric)に基づいて行われる。例えば、ユークリッド距離は、原初点と候補対応点の各々との間で計算する。次いで、最も小さいユークリッド距離を与える対を選択する。次いで、サンプリングした原初点の各々について、ブロック６０４のプロセスを繰り返し、サンプリングが行われない場合、原初深度マップの入手可能な点の各々について、このプロセスを繰り返す。
【００７０】
[0068]  実施形態の中には、対応点の対の各々に、重みを割り当てる場合もある（ブロック１２１２）。例えば、ＲＧＢカメラまたは他のセンサというような、他のソースからの情報を用いて、重みを割り当てることができる。一例では、放射方向のレンズの歪みおよび／または深度依存誤差というような深度カメラの測定特性に関する重みを計算し、対応点の対の各々と共に格納する。他の例では、エッジ検出アルゴリズムを用いて深度マップ内において検出したエッジにある点を含む対には、他の点よりも大きな重み付けを行う。これらの重みは、結果の品質を向上させるために、誤差計量を適用するプロセスの間に用いるとよい。例えば、深度依存誤差に関する重みは、精度の欠如のために多く変動しそうに思われる高い深度値を考慮に入れることを可能にする。
【００７１】
[0069]  実施形態の中には、深度マップの境界上またはその付近にある点を含む対を拒絶する場合がある（ブロック１２１４）。これは、２つの深度マップ間の重複が部分的に過ぎない場合の誤差を回避するのに役立つ。対を拒絶するには、他の判断基準も用いることができる。例えば、実施形態の中には、平面抽出を実行する場合もあり、その場合、平面上にある対を拒絶すると、追跡装置が大きな平面によって偏倚されるのを防止し、したがって小さいが唯一の部分を深度マップ内において無視するのを防止することができる。
【００７２】
[0070]  実施形態の中には、現深度マップおよび原初深度マップのいずれかからまたは双方からサンプル点を取り込み（ブロック１２００において）、これらのサンプル点を、対応点の対を発見するための候補として用いる場合もある。このような実施形態では、入手可能な点毎の代わりに、サンプリングした点毎に法線曲面を計算し（ブロック１２０２において）、次いでサンプリングした原初点毎に、ブロック１２０４のプロセスを実施する。サンプリングは、点の中から指定された割合をランダムに選択することによって行うとよい。他の実施形態では、点の法線曲面を考慮に入れるようにサンプリングを行い（ブロック１２００において）、したがってブロック１２０２の後に実行するとよい。例えば、法線曲面を点毎に計算し（ブロック１２０２において）、法線曲面値の異なる範囲に対する複数のビンによって、ヒストグラムを作成する。これらのビンにわたって均一なサンプリングが行われるように、サンプリングを実行する。
【００７３】
[0071]  "Three-dimensional environment reconstruction"（三次元環境の再現）と題し本願と同じ日に出願された同時係属中の米国特許出願を、図４の論述において先に引用したが、これはカメラ位置および向きを記述するデーター、ならびに深度カメラによって生成した深度マップから現実世界環境の３Ｄモデルを構築する方法について記載しており、この方法の態様を、図４、図１３、および図１４を参照して説明することができる。
【００７４】
[0072]  図１３は、３Ｄ環境モデルを生成する並列化可能なプロセスの一例のフローチャートを示す。一例では、図１２のプロセスは、ＧＰＵプロセッサー、マルチコア・プロセッサー、または高度な実行並列性を可能にする他のタイプのプロセッサー上で実行する。他の例では、単一コア・プロセッサーが十分に速いのであれば、これを用いることもできる。最初に、モデルを格納するためのメモリー・デバイス上に、３Ｄ立体空間(volume)を作成する（ブロック１３００において）。一例では、この３Ｄ立体空間は、グラフィクス処理システム（例えば、図１０におけるシステム１００４）のメモリー上に作成する。このグラフィクス処理システムは、ＧＰＵからの高速並列アクセスを可能にする。
【００７５】
[0073]  ３Ｄ立体空間は、メモリーの直方体として可視化することができ、各メモリー位置は、モデル化する環境の空間内における一点を表すボクセルとなる。したがって、３Ｄ立体空間は現実世界環境の空間部分を直接表す。３Ｄ立体空間は現実世界立体空間に直接対応するので、固定サイズのメモリーにおいて表される現実世界立体空間のサイズが、モデルの解像度を決定する。例えば、大きな現実世界立体空間をモデル化しようとする場合、メモリーの各ボクセルは、もっと小さな現実世界立体空間をモデル化する場合よりも、現実世界空間において大きな領域を表し、したがって、解像度は低くなる。しかしながら、もっと多くのメモリーが利用可能である場合、大きな現実世界立体空間をより高い解像度でモデル化することができる。
【００７６】
[0074]  一旦３Ｄ立体空間をメモリーにおいて作成したなら（ブロック１３００において）、モデリング・プロセスを開始して、可動環境キャプチャー・デバイス４００から深度画像４１４を受け取り、その深度画像を取り込むときの深度カメラ４０２の６ＤＯＦ姿勢推定値を受け取る（ブロック１３０２において）。６ＤＯＦ姿勢推定値は、深度カメラ４０２の位置および向きを示し、リアル・タイム追跡装置４１６によって供給することができる。一例では、６ＤＯＦ姿勢推定値は、現実世界座標に対する深度カメラ４０２の回転および並進を記述するＳＥ３マトリクスの形態とすることができる。更に形式的には、この変換マトリクスは、次のように表すことができる。
【００７７】
【数１】
0006001562.tif 000002
【００７８】
[0075]  ここで、Ｔｋは深度画像フレームｋに対する変換マトリクスであり、Ｒｋはフレームｋに対するカメラの回転であり、ｔｋはフレームｋにおけるカメラの並進であり、ユークリッド集合ＳＥ３は、次のようになる。
【００７９】
【数２】
0006001562.tif 000003
【００８０】
この変換マトリクスを乗算することによって、カメラ空間における座標（即ち、カメラ視線からの）を現実世界座標にマッピングすることができる。
【００８１】
[0076]  ３Ｄ立体空間の平面における各ボクセルに、別個の実行スレッドを割り当てることができる（ブロック１３０４において）。例えば、立体空間の平面がｚ−平面である場合、３Ｄ立体空間のｘ−座標およびｙ−座標の各組み合わせに実行スレッドを割り当てる。次いで、別個の実行スレッドは各々、図１３における点線ボックス１３０６で示すように、同じ動作を実行する。各スレッドによって実行する動作を図１４に模式的に示す。図１４は、３Ｄ立体空間の上面図(top-down view)を示す（即ち、ｘ−軸１４２０およびｚ−軸１４２２を示し、ｙ−軸は、明確さの目的上、無視する）。この立体空間のｚ−平面上にある各座標に、実行スレッドを割り当て、Ｔ１  １４０２、Ｔ２  １４０４、...、Ｔｎ−１  １４０６、Ｔｎ  １４０８で示す。ボックス１３０６において各スレッドによって実行する動作を、最初にＴ１  １４０２を参照して示す。
【００８２】
[0077]  実行スレッドに対するｚ−座標をゼロに設定し（ブロック１３０８において）、このスレッドに関連付けられたボクセルに対するｘ、ｙ、ｚ座標を、現実世界座標に変換する（ブロック１３１０において）。例えば、スレッドＴ１  １４０２の場合、このスレッドに関連付けられたｘ、ｙ座標は（０，０）であるので、ｚ−座標をゼロに設定すると、これによって（０，０，０）の座標が得られる（即ち、図１４におけるボクセル１４１０）。これを現実世界座標に変換することができる。一旦ボクセル１４１０に対する現実世界座標が決定されたなら、深度カメラの６ＤＯＦ位置および向きを用いてこれらを変換し、このボクセルに対する深度画像４１４における対応位置を判定することができる。これが意味するのは、このスレッドに関連付けられた現在のボクセルに対する現実世界座標は、深度カメラの投影によって投影された全体像(perspective)となるということである。言い換えると、現実世界におけるこの点を表すボクセルが、位置および向きを有する深度カメラによって捉えられているとすると、これによって、深度画像４１４におけるその点に対する座標を決定する。このボクセルに対する深度カメラの視野における座標をｐＸ、ｐＹ、ｐＺで示す。深度カメラの視野における座標を、ｕ＝ｐＸ／ｐＺおよびｖ＝ｐＹ／ｐＺによって、深度画像画素座標（ｕ、ｖによって示す）に変換する。
【００８３】
[0078]  深度カメラ４０２の台形１４１２を示す破線によって、深度カメラ４０２の視野を図１４に示す。また、図１４は、深度カメラから出力された深度画像４１４における表面１４１４も示す。
【００８４】
[0079]  現在スレッドに関連付けられたボクセルに対する深度画像座標（ｕ、ｖ）を用いて、このボクセルが深度カメラの台形１４１２内部に位置するか否か判定を行う（ブロック１３１４において）。位置していない場合、このボクセルを飛ばすことができる。図１４を参照すると、スレッドＴ１の場合、現ボクセル１４１０はカメラの台形１４１２内部にあることに気付く。これは、例えば、スレッドＴｎ−１によって考慮される第１ボクセルがカメラの台形１４１２の外側にあり、したがって飛ばされるのとは対照をなすことができる。
【００８５】
[0080]  現在のボクセルがカメラの台形１４１２の内部にあると判定した場合、このボクセルと、カメラの視線からのこのボクセルに対応する位置における環境内の点との間の距離に関係する係数(factor)を決定する。この対応する位置における環境内の点は、深度画像における深度値によって（ｕ，ｖ）において与えることができる。したがって、図１４を参照すると、この係数は、ボクセル１４１０とボクセル１４１０上にマッピングする深度画像４１４の表面１４１４上にある点との間の距離１４１６を考慮する。
【００８６】
[0081]  一例では、計算した係数（ブロック１３２０において）は、符合付きの距離関数である。符合付き距離関数の計算は、現在のボクセルと深度画像４１４における対応点との間の距離値を与え、深度画像（カメラの視線からの）における対応点の外側（即ち、外部）にあるボクセルには正の距離が与えられ、深度画像（カメラの視線からの）における対応点の内側（即ち、内部）にあるボクセルには負の距離が与えられるように、符合が付けられる。ゼロの値は、関連するボクセルが正確に対応点と一致することを示す。この符合付き距離関数は、深度画像内の（ｕ，ｖ）における深度値からｐＺを減算することによって、容易に計算することができる。例えば、図１４におけるボクセル１４１０は、表面１４１４上の対応点の前にあり、したがって、正の符号がついた距離関数値を有する。逆に、図１４におけるボクセル１４１８は、表面１４１４上でその対応点の背後にあり、したがって、負の符号がついた距離関数値を有する。
【００８７】
[0082]  次に、この符号付き距離関数値を、既定の距離値に対して正規化する（ブロック１３２２において）。一例では、この既定値は、５ｃｍというような小さな距離にすることができるが、適した値であればいずれでも用いることができる。次に、正規化した距離が正の閾値よりも大きいか（符合付き距離が正の場合）、または負の閾値よりも小さいか（符合付き距離が負の場合）判定を行う（ブロック１３２４において）。そうである場合、符合付き距離関数値を最大値または最小値に切り上げる（切り下げる）（ブロック１３２６において）。例えば、正規化した距離が正の閾値よりも大きい場合、この値を＋１（正規化後の正の閾値）に切り上げることができ、正規化した距離が負の閾値よりも小さい場合、この値を−１（正規化後の負の閾値）に切り下げることができる。この計算の結果は、丸め符合付き距離関数（ＴＳＤＦ）として知られている。
【００８８】
[0083]  例えば、図１４を参照すると、ボクセル１４１０は、表面１４１４の外側の比較的大きな距離にあり、したがって＋１に切り上げることができる。逆に、ボクセル１４１８は表面１４１４の内側の比較的短い距離にあり、したがって切り下げられず、その正規化した距離（例えば、−０．６）を維持すればよい。
【００８９】
[0084]  正規化した（そして、該当する場合には、丸めた）符合付き距離関数値を、次に、現在のボクセルに格納されている以前の値があればそれと組み合わせる。これが３Ｄ立体空間に組み込まれた最初の深度画像である場合、以前の値は存在しない。しかしながら、深度カメラから別のフレームを受け取って組み込んでいくと、ボクセルにおいて値が既に存在する可能性がある。
【００９０】
[0085]  一例では、符合付き距離関数値を以前の値と平均化によって組み合わせる（ブロック１３２８）。これは、移動物体で環境のモデルを構築するのを補助することができる。何故なら、これによって、追加された測定値が古くなりもっと新しい測定値と平均化されて行くに連れて、移動した物体がときの経過とともに消えていくことが可能になるからである。例えば、指数的に減衰する移動平均を用いることができる。他の例では、この平均は、深度カメラから関連するボクセルの距離に関係する重み関数を用いる加重平均とすることができる。平均符合付き距離関数値は、次に、現在のボクセルに格納することができる（ブロック１３３０において）。
【００９１】
[0086]  代替例では、各ボクセルに２つの値を格納することができる。符合付き距離関数値の加重和を計算して格納することができ、更に重みの総和も計算して格納することができる。次いで、（加重和）／（重みの総和）として、加重平均を計算することができる。
【００９２】
[0087]  次いで、３Ｄ立体空間の全てのｚ−平面がこのスレッドによって考慮されたか否か判定を行う（ブロック１３１６において）。されていない場合、ｚ−座標を増分し（ブロック１３１８）、ｚ方向における次のボクセルに対して、本プロセスを繰り返す。言い換えると、スレッドは、立体空間のｚ方向に沿って同等のボクセル（即ち、同じｘ、ｙ座標を有するもの）にわたって繰り返して、丸め符合付き距離関数値を決定し、以前の値とこれらとの平均を取る。
【００９３】
[0088]  スレッドが全てのｚ−平面にわたって反復し終えるまで、これを繰り返す。これは各スレッドによって実行され、その各々がｚ−平面上にある異なるｘ、ｙ座標に割り当てられる。一度に立体空間の１つ平面ずつ順次行うことは、図５におけるメモリー・レイアウトには、相応しいメモリー・アクセス効率特性を有することになる。何故なら、１つのｚ−平面は線形間隔アレイ(linearly pitched array)の小さな連続領域に対応するからである。したがって、一旦全てのスレッドによってこれを完了したなら、３Ｄ立体空間全体が分析されたことになり、深度画像４１４に関するボクセル毎に、丸め符合付き距離関数が計算されたことになる。次いで、本プロセスは、深度カメラから次の深度画像が受け取られるのを待ち、可能な場合には、再び更に多くの値を３Ｄ立体空間に追加し始める。
【００９４】
[0089]  このプロセスの結果、−１と＋１との間の平均値を有するボクセルを含む３Ｄ立体空間が得られる（しかし、この平均値は、以上の「加重和」および「重みの総和」値というような、多数の値によって表すことができることを注記しておく）。平均値がゼロである場合、環境における表面がその位置に存在することを示す。ときの経過と共に深度画像の多数のフレームが立体空間に追加されるので、この立体空間に格納されるモデルは、徐々に増々詳しく構築されていく。環境の同じ領域の測定を繰り返すことによって、更なる詳細が追加され、深度カメラによって提供される情報の解像度が効果的に高められる。更に、平均を取ることによって、深度画像からノイズも効果的に消し去られ、遙かに平滑な表面が残る。これによって、個々の深度画像からは見ることができない詳細を、モデルにおいて見ることが可能になる。
【００９５】
[0090]  このような別個に実行するスレッドの使用によって、３Ｄ立体空間全体にわたって計算的に効率的な処理が可能になる。例えば、ＧＰＵプロセッサーは、並列プログラム・スレッドを効率的に実行するように構成され、各スレッドが同じ動作を実行する。これによって、図１３を参照して以上で説明したモデル生成プロセスをリアル・タイムで実行することが可能になり、深度カメラのフレーム・レートでモデルが組み立てられるようになる。
【００９６】
[0091]  本明細書では、本例は、ゲーミング・システムにおいて実装されたものとして説明し例示したが、説明したシステムは、一例として示したのであって、限定ではない。当業者には認められるであろうが、本例は、種々の異なるタイプの対話型計算システムにおける用途に適しており、拡張現実システムおよびロボット・システム、テレプレゼンス、ならびにシミュレーションが含まれる。他の例には、３Ｄ  ＴＶまたは３Ｄプレゼンテーションの遠隔表示のための一式(a set for...)を走査すること、仮想旅行のためのコンテンツを生成すること、遠隔協調作業(remote collaboration)、緊急サービスや緊急対応要員のために場面を走査することが含まれる。
【００９７】
[0092]  「コンピューター」という用語は、本明細書では、命令を実行することができるような処理能力を有するあらゆるデバイスを指すために用いられる。当業者には、このような処理能力が多くの異なるデバイスに組み込まれ、したがって、「コンピューター」という用語はＰＣ、サーバー、移動体電話機、パーソナル・ディジタル・アシスタント、および多くの他のデバイスを含むことが分かるであろう。
【００９８】
[0093]  本明細書において記載した方法は、有形記憶媒体上における機械読み取り可能な形態としたソフトウェアによって実行することができ、例えば、コンピューター・プログラムの形態をなし、このプログラムをコンピューター上で実行すると、本明細書において記載した方法のいずれでも、全てのステップを実行するように構成されたコンピューター・プログラム・コードを備えており、このコンピューター・プログラムは、コンピューター読み取り可能媒体上に具体化することができる。有形（または、非一時的）記憶媒体の例には、ディスク、サム・ドライブ(thumb drive)、メモリー等が含まれ、伝搬信号は含まれない。ソフトウェアは、本方法ステップをいずれかの適した順序で、または同時に実行することができるように、並列プロセッサーまたは直列プロセッサー上で実行するのに適していると言うことができる。
【００９９】
[0094]  これは、ソフトウェアが、価値があり、別個に取引可能な産物であることができることを認めるものである。所望の機能を実行するために、「ダムターミナル」(dumb)または標準的なハードウェア上で実行するまたはこれを制御するソフトウェアを包含することを意図している。また、所望の機能を実行するために、シリコン・チップを設計するためあるいはユニバーサル・プログラマブル・チップを構成するために用いられる、ＨＤＬ（ハードウェア記述言語）ソフトウェアのような、ハードウェアの構成を「記述する」または定義するソフトウェアを包含することも意図している。
【０１００】
[0095]  当業者には、プログラム命令を格納するために利用する記憶デバイスはネットワークを跨がって分散できることは分かるであろう。例えば、リモート・コンピューターが、ソフトウェアとして記述されたプロセスの一例を格納することができる。ローカル・コンピューター即ち端末コンピューターがこのリモート・コンピューターにアクセスして、そのソフトウェアの一部または全部をダウンロードしてプログラムを実行することができる。あるいは、ローカル・コンピューターが必要に応じて複数のソフトウェア(pieces of software)をダウンロードすることもでき、または一部のソフトウェア命令をローカル端末において実行し、一部をリモート・コンピューター（またはコンピューター・ネットワーク）で実行することもできる。また、当業者には周知の従来の技術を利用することによって、ソフトウェア命令の全部または一部が、ＤＳＰ、プログラマブル・ロジック・アレイなどのような専用回路によって実行するのでもよいことは、当業者には分かるであろう。
【０１０１】
[0096]  本明細書において示した範囲またはデバイス値はいずれも、求めようとする効果を失うことなく、広げることまたは変更することもでき、これは当業者には明白であろう。
【０１０２】
[0097]  以上、構造的特徴および／または方法論的動作に特定の文言で本発明について説明したが、添付した特許請求の範囲において定められている主題は、記載した特定の特徴や動作には必ずしも限定されないことは言うまでもない。むしろ、以上で記載した特定の特徴および動作は、特許請求する発明を実施する形態例として開示したのである。
【０１０３】
[0098]  尚、以上で記載した効果および利点は、一実施形態に関する場合もあり、または様々な実施形態に関する場合もあることは言うまでもない。実施形態は、記載した問題のいずれを解決するものにも、またその全てを解決するものにも限定されず、更には記載した効果および利点のいずれかを有するものにも、またその全てを有するものにも限定されない。更に、「１つの」品目に対する引用は、１つ以上のこれらの品目にも言及することは言うまでもない。
【０１０４】
[0099]  本明細書において記載した方法のステップは、いずれの順序でも実行することができ、またしかるべき場合には同時に実行することもできる。加えて、本明細書に記載した主題の主旨および範囲から逸脱することなく、個々のブロックを前述の方法のいずれからでも削除することもできる。以上で説明した例のいずれの態様も、求めようとする効果を失うことなく、更に他の例を形成するために、説明した他の例のいずれの態様とでも組み合わせることができる。
【０１０５】
[00100]  「備えている」(comprising)という用語は、本明細書では、特定された方法のブロックまたはエレメントを含むことを意味するが、このようなブロックまたはエレメントが排他的なリストを構成するのではなく、方法または装置が追加のブロックまたはエレメントを含んでもよいことを意味する。
【０１０６】
[00101]  尚、好ましい実施形態についての以上の説明は、一例として示したに過ぎず、種々の変更が当業者によってなされてもよいことは言うまでもない。以上の明細書、例、およびデーターは、本発明の代表的実施形態の構造および使用についての完全な説明を提供する。以上では本発明の種々の実施形態についてある程度の特定性をもって、または１つ以上の個々の実施形態を参照して説明したが、当業者であれば、本発明の主旨または範囲から逸脱することなく、開示した実施形態に対して多数の変更を行うことができよう。
【図１】
0006001562.tif 000004
【図２】
0006001562.tif 000005
【図３】
0006001562.tif 000006
【図４】
0006001562.tif 000007
【図５】
0006001562.tif 000008
【図６】
0006001562.tif 000009
【図７】
0006001562.tif 000010
【図８】
0006001562.tif 000011
【図９】
0006001562.tif 000012
【図１０】
0006001562.tif 000013
【図１１】
0006001562.tif 000014
【図１２】
0006001562.tif 000015
【図１３】
0006001562.tif 000016
【図１４】
0006001562.tif 000017