トップ :: G 物理学 :: G06 計算;計数




【発明の名称】 3Dコンピュータモデリング装置
【発明者】 【氏名】アダム マイケル ボームバーグ

【氏名】アレキサンダー ラルフ リオンズ

【氏名】アーロン ウィリアム クリストファー コッチェフ

【要約】 【課題】少ない計算量で正確に被写体オブジェクトの3Dコンピュータモデルを生成できるコンピュータ処理装置を提供する。

【解決手段】処理装置において、被写体オブジェクトのいくつかのデプスマップ3210を処理して被写体オブジェクトの3Dコンピュータモデルを生成する。各デプスマップ中の点を連結して2Dメッシュを与え、メッシュ中の点のデプスに従い、各2Dメッシュを3D空間に投影することで3Dメッシュ3610を与える。3Dメッシュの各稜線の側面をデプスマップから延長して追加することで、各デプスマップに対する多面体3600を生成する。多面体3600の交点を計算することで被写体オブジェクトの3Dコンピュータモデルを生成する。
【特許請求の範囲】
【請求項1】 被写体オブジェクトの複数のデプスマップを定義するデータを処理することで、被写体オブジェクトの面上の点を表す3次元空間の点で構成される被写体オブジェクトの3Dコンピュータモデルを生成する方法であって、各デプスマップを処理してその中の点を連結することで各デプスマップの連結された点の2次元メッシュを生成する工程と、メッシュを含むデプスマップの3次元空間の位置と向きと、デプスマップによって定義されたメッシュの中のそれぞれの点のデプスとに従って各2次元メッシュを3次元空間に投影することで、各々が3次元メッシュの各稜線に対する平面状の側面と共に2次元メッシュに対応する平面を定義する連結された頂点の3次元メッシュからなる多面体を各デプスマップから生成する工程と、生成された多面体からの所定数の平面が交差する点を計算することで被写体オブジェクトの表面上の点を表す3次元空間中の点を計算する工程とを備えることを特徴とする方法。
【請求項2】 各デプスマップは画素の配列で構成され、デプスマップを処理してその中の点を連結する工程では、画素を小画素に分割し、小画素を連結して2次元メッシュを生成することを特徴とする請求項1に記載の方法。
【請求項3】 更に、交点計算に先立ち、生成された各多面体を処理することで4つ以上の平面が接する多面体中の各頂点を3つ以下の平面が接する複数の頂点に置換する工程を備えることを特徴とする請求項1又は2に記載の方法。
【請求項4】 各置換頂点は、それが置換する頂点と同じ位置を3次元空間中で有するように定義されることを特徴とする請求項3に記載の方法。
【請求項5】 被写体オブジェクトの面上の点を表す3次元空間の点を計算する工程は、被写体オブジェクトの全ての点が存在すべき3次元空間のボリュームを定義する工程と、ボリュームを複数のボリューム部分に再分割する工程と、ボリューム部分をデプスマップから生成した多面体に対して検査する工程、及び、あるボリューム部分が少なくとも1つの多面体の完全に外側に存在する場合、そのボリューム部分を破棄し、あるボリューム部分が少なくとも部分的に全ての多面体の内側に存在する場合、そのボリューム部分と交差する平面を定義するデータをそのボリューム部分と交差する平面の数に従って処理し、更なる検査のためにボリューム部分を複数のより小さいボリューム部分に再分割し、所定数の平面が接するボリューム部分の3D点を計算するか、あるいはそのボリューム部分を破棄する工程とを備えることを特徴とする請求項1乃至4のいずれか1項に記載の方法。
【請求項6】 あるボリューム部分が少なくとも部分的に全ての多面体の内側に存在し、そのボリューム部分と交差する平面の数が所定数より多い場合、そのボリューム部分を再分割することを特徴とする請求項5に記載の方法。
【請求項7】 あるボリューム部分が少なくとも部分的に全ての多面体の内側に存在し、そのボリューム部分と交差する平面の数が所定数より少ない場合、そのボリューム部分を破棄することを特徴とする請求項5又は6に記載の方法。
【請求項8】 あるボリューム部分を検査した際、そのボリューム部分に交差する平面を定義するデータが記憶され、親ボリューム部分の再分割により生成された小さいボリューム部分を検査した際、親ボリューム部分に交差する平面のみを検査することでその平面が小さいボリューム部分に交差するか否かを判断することを特徴とする請求項5乃至7のいずれか1項に記載の方法。
【請求項9】 あるボリューム部分を検査した際、そのボリューム部分が完全に内側に存在すると判断された各多角形を定義するデータが記憶され、親ボリューム部分の再分割により生成された小さいボリューム部分を検査した際、検査を行って小さいボリューム部分が記憶されたデータに定義されていない多面体の各々の内側に存在するか否かを判断するが、記憶されたデータに定義された多面体についてはその内側に小さいボリューム部分が存在するか否かを判断する検査を行わないことを特徴とする請求項5乃至8のいずれか1項に記載の方法。
【請求項10】 更に、被写体オブジェクトの面上の点を表す3次元空間の計算した点を連結することで被写体オブジェクトの面を表す多角形メッシュからなる3Dコンピュータモデルを生成する工程を備えることを特徴とする請求項1乃至9のいずれか1項に記載の方法。
【請求項11】 更に、3Dコンピュータモデルを搬送する信号を生成する工程を備えることを特徴とする請求項1乃至10のいずれか1項に記載の方法。
【請求項12】 更に、直接あるいは間接に信号の記録を作成する工程を備えることを特徴とする請求項11に記載の方法。
【請求項13】 被写体オブジェクトの複数のデプスマップを定義するデータを処理することで、被写体オブジェクトの面上の点を表す3次元空間の点からなる被写体オブジェクトの3Dコンピュータモデルを生成する装置であって、各デプスマップを処理してその中の点を連結することで各デプスマップの連結された点の2次元メッシュを生成する連結手段と、メッシュを含むデプスマップの3次元空間の位置と向きと、デプスマップによって定義されたメッシュの中のそれぞれの点のデプスとに従って前記連結手段によって生成された各2次元メッシュを3次元空間に投影することで、各々が3次元メッシュの各稜線に対する平面状の側面と共に2次元メッシュに対応する平面を定義する連結された頂点の3次元メッシュからなる多面体を各デプスマップから生成する投影手段と、投影手段により生成された多面体からの所定数の平面が交差する点を計算することで被写体オブジェクトの表面上の点を表す3次元空間中の点を計算する3D点計算手段とを備えることを特徴とする装置。
【請求項14】 各デプスマップは画素の配列で構成され、連結手段は画素を小画素に分割し、小画素を連結して2次元メッシュを生成することを特徴とする請求項13に記載の装置。
【請求項15】 更に、3D点計算手段による処理に先立ち、生成された各多面体を処理することで4つ以上の平面が接する多面体中の各頂点を3つ以下の平面が接する複数の頂点に置換する頂点置換手段を備えることを特徴とする請求項13又は14記載の装置。
【請求項16】 頂点置換手段は、各置換頂点がそれが置換する頂点と同じ位置を3次元空間中で有するように定義することを特徴とする請求項15に記載の装置。
【請求項17】 3D点計算手段は、被写体オブジェクトの全ての点が存在すべき3次元空間のボリュームを定義するボリューム定義手段と、ボリュームを複数のボリューム部分に再分割するボリューム分割手段と、ボリューム部分を投影手段によって生成された多面体に対して検査するボリューム検査手段とを具備し、当該ボリューム検査手段はあるボリューム部分が少なくとも1つの多面体の完全に外側に存在する場合、そのボリューム部分を破棄し、あるボリューム部分が少なくとも部分的に全ての多面体の内側に存在する場合、そのボリューム部分と交差する平面を定義するデータをそのボリューム部分と交差する平面の数に従って処理し、更なる検査のためにボリューム部分を複数のより小さいボリューム部分に再分割する、所定数の平面が接するボリューム部分の3D点を計算するか、あるいはそのボリューム部分を破棄することを特徴とする請求項13乃至16のいずれか1項に記載の装置。
【請求項18】 ボリューム検査手段は、あるボリューム部分が少なくとも部分的に全ての多面体の内側に存在し、そのボリューム部分と交差する平面の数が所定数より多い場合、そのボリューム部分を再分割するように構成されることを特徴とする請求項17に記載の装置。
【請求項19】 ボリューム検査手段は、あるボリューム部分が少なくとも部分的に全ての多面体の内側に存在し、そのボリューム部分と交差する平面の数が所定数より少ない場合、そのボリューム部分を破棄するように構成されることを特徴とする請求項17又は18に記載の装置。
【請求項20】 ボリューム検査手段は、あるボリューム部分を検査した際、そのボリューム部分に交差する平面を定義するデータを記憶するように構成され、さらに、親ボリューム部分の再分割により生成された小さいボリューム部分を検査した際、親ボリューム部分に交差する平面のみを検査することでその平面が小さいボリューム部分に交差するか否かを判断するように動作するよう構成されることを特徴とする請求項17乃至19のいずれか1項に記載の装置。
【請求項21】 ボリューム検査手段は、あるボリューム部分を検査した際、そのボリューム部分が完全に内側に存在すると判断された各多角形を定義するデータを記憶するように構成され、さらに、親ボリューム部分の再分割により生成された小さいボリューム部分を検査した際、検査を行って小さいボリューム部分が記憶されたデータに定義されていない多面体の各々の内側に存在するか否かを判断するが、記憶されたデータに定義された多面体についてはその内側に小さいボリューム部分が存在するか否かを判断する検査を行わないように動作するよう構成されることを特徴とする請求項17乃至20のいずれか1項に記載の装置。
【請求項22】 更に、被写体オブジェクトの面上の点を表す3次元空間の計算した点を連結することで被写体オブジェクトの面を表す多角形メッシュからなる3Dコンピュータモデルを生成する手段を備えることを特徴とする請求項13乃至21のいずれか1項に記載の装置。
【請求項23】 プログラム可能な処理装置が請求項1乃至12のうちの少なくとも1項に記載された方法を実行するよう動作可能となる命令を記憶すうr記憶装置。
【請求項24】 プログラム可能な処理装置が請求項1乃至12のうちの少なくとも1項に記載された方法を実行するよう動作可能となる命令を搬送する信号。
【発明の詳細な説明】【0001】本発明は、複数のデプスマップ(すなわち、オブジェクト上の点と基準点との間の距離を定義する1セット分の値)からオブジェクトの3次元(3D)コンピュータモデルを生成するコンピュータ処理に関する。
【0002】従来、オブジェクトの3Dコンピュータモデルをそのオブジェクトの複数のデプスマップ(depth map)「範囲画像(range image)」ともいわれる)から生成する方法が数多く知られている。
【0003】これらの既知の方法において、全てのデプスマップからのデータは同じ座標系に配置され、それぞれのデプスマップによって定義された3D点を連結することで各々が1つのデプスマップに対応する複数の3D面メッシュを形成する。次に、2種類の方法のいずれかを用いて、別々の面メッシュをオブジェクトの面を表す単一の面に合成する、すなわち、(1)例えばTurkとLevoyの“Zippered Polygon Meshes from Range Image” (SIGGRAPH 94 (ACM)、Addison-Wesley社刊、ISBN 0-201-60795-6)に記載されるように、個々の面メッシュが3D空間において実質的に近接しているならば、それらを「ジップ」する。
(2)「マーチンキューブス(marching-cubes)」ボリューム系の方法を用いる。この方法では、座標系の3D空間をボクセル(直平行六面体)に分割し、ボクセル内の少なくとも1点(各頂点あるいは中心)からデプスマップから最も近い3D点までの距離を定義するそれぞれのボクセルについて「符号付距離」を計算し、それがオブジェクト面の内側か(マイナス値)、外側か(プラス値)、オブジェクト面の上(ゼロ値)かを判定する。次に、前に計算した符号付距離に基づくボクセルをゼロ値表面が通過する経路を計算してボクセルの周囲を「マーチング」することで、連結された多角形の面メッシュを生成する。こうした技術は例えばWheelerなどの“Consensus Surfaces for Modelling 3D Objects from Multiple Range Images” (Proceedings of International Conference on Computer Vision 1998、917〜924ページ、Narosa社刊、ISBN 81-7319-221-9)に記載されている。
【0004】しかしながら、これらの方法には数々の問題がある。
【0005】特に、「メッシュジッピング(mesh zippering)」法の場合、かなりの処理資源と処理時間を要するうえ、生成した面は被写体オブジェクトの面を正確に表すものではないという問題がある。
【0006】マーチンキューブスボクセル系の方法の場合、オブジェクトを表す得られた面の精度(解像度)は3D空間を分割したボクセルのサイズによって決まるという問題がある。しかしモデル解像度を上げるためにボクセルサイズを小さくすれば検査を要するボクセルの数が増大し、処理時間が長くなる。
【0007】メッシュジッピング系の方法もマーチンキューブスボクセル系の方法も他の点(例えば、オブジェクトの背後の面あるいはオブジェクトが存在する面を表す)から識別されるべき被写体オブジェクトに関連するデプスマップにおける点を必要とする。しかし、モデリングされているオブジェクトを表す点とその他の点を区別する方法はしばしば点を誤分類することになり、最終的な3Dコンピュータモデルが不正確となる。例えば、ある方法ではオブジェクトの稜線が生じるデプスの急激な変化を識別するために「任意の」最大デプスを用いる。しかし、多くのオブジェクトはデプスが急激に変化する表面を有するため、多くの点を誤分類する可能性がある。
【0008】本発明は上記の問題点に鑑みてなされたものであり、その1つ以上の問題に対処することを目的としている。
【0009】本発明によれば、被写体オブジェクトのいくつかのデプスマップのそれぞれを多面体に変換し、それらの多面体の交点を計算することで、被写体オブジェクトの3Dコンピュータモデルを生成するコンピュータ処理装置及び方法が提供される。
【0010】それぞれの多面体はデプスマップ内の点を連結して2D多角形メッシュを与え、2Dメッシュを3次元空間に投影してメッシュ内の点の既知のデプスに依存した3Dメッシュを与えることで生成するのが好ましい。3Dメッシュのそれぞれの稜線の側面をデプスマップから任意の長距離まで延長して加えても良い。
【0011】こうして被写体オブジェクトの輪郭形状(シルエット)をデプスデータと合成してそれぞれの多面体を生成することができる。
【0012】この方法ではボリュームを分割するため、被写体オブジェクトに関連する点やその他のオブジェクトに関連する点を識別するためにそれぞれのデプスマップを分割する必要がない。
【0013】この方法によれば多面体の交点からなる3Dモデルを得ることができる。よってボクセルに基づく技術を用いる必要がない。
【0014】また、本発明によれば、例えば記憶装置あるいは信号として実施され、プログラミング可能な処理装置が上記の方法を行うように動作可能となる命令を含み、又は上記の装置を構成するコンピュータプログラム製品が提供される。
【0015】以下、添付の図面を参照して、単なる一例としての本発明の実施形態を説明する。
【0016】第1実施形態図1を参照すると、本発明の第1実施形態は、従来通りに1つ以上のプロセッサと、複数のメモリと、グラフィックスカードなどを含むパーソナルコンピュータのような処理装置3002と、従来のパーソナルコンピュータモニタなどの表示装置3004と、キーボード、マウスなどのユーザ入力装置3006とを具備する。
【0017】処理装置3002は、例えば、ディスク3012などのデータ記憶媒体に格納されたデータとして及び/又は例えば遠隔データベースからインターネットなどの通信ネットワーク(図示せず)を介する伝送、あるいは無線伝送により処理装置3002に入力され且つ/又はキーボードなどのユーザ入力装置3006を介してユーザにより入力される信号3014として入力されるプログラミング命令に従って動作するようにプログラムされている。
【0018】以下にさらに詳細に説明するが、それらのプログラミング命令は、被写体オブジェクト(subject object)のデプスマップ(depth map)と各デプスマップの相対的な位置及び向きを定義するデータとを処理することで被写体オブジェクトの3次元コンピュータモデルを定義するデータを生成するように処理装置3002を構成させるための命令である。被写体オブジェクトの3Dコンピュータモデルは新規且つ発明的な技術を用いて生成される。この技術においては、それぞれのデプスマップを処理することで複数の多角形からなる多面体を生成し、全てのデプスマップに対する多面体における多角形の交点を判断することで、被写体オブジェクトの頂点を表す3D点を計算する処理を行う。以下にさらに詳細に説明するが、本実施形態において、この処理は特に、被写体オブジェクトの表面上に3D点を生じることができない多角形の交点を計算しなくても良いので、非常に効率的な方法で実行される。
【0019】処理装置3002は、プログラミング命令によりプログラミングされたとき、処理動作を実行するための幾つかの機能ユニットとして構成されたと考えることができる。そのような機能ユニットの例及びそれらの相互接続関係を図1に示す。しかし、図1に示すユニット及び相互接続は概念上のものであり、理解を助けるという目的のために一例として示されているにすぎない。しかし、それらは、処理装置3002のプロセッサ、メモリなどが構成されるユニットや接続を必ずしも表してはいない。
【0020】図1に示す機能ユニットを説明すると、中央制御装置3020はユーザ入力装置3006からの入力信号を処理すると共に、その他の機能ユニットの制御及び処理を実行する。
【0021】メモリ3030は、中央制御装置3020及びその他の機能ユニットにより用いられるべく設けられている。
【0022】入力データ記憶装置3040は処理装置3002から入力された入力データを例えばディスク3042などの記憶装置に記憶されたデータ、又は処理装置3002に送信された信号3044として、あるいはユーザ入力装置3006を用いて記憶する。本実施形態において入力データは被写体オブジェクトの複数のデプスマップを定義する。各デプスマップは、従来と同様、複数の画素から構成される被写体オブジェクトの画像と、画素内で撮影された内容のカメラの焦点からの距離を定義するデプス値とで構成される。デプスマップを定義する入力データは従来の3D撮影装置、例えばレーザスキャナ、構造光システム、受動ステレオカメラ対などによって生成しても良い。
【0023】本実施形態においては、入力されたそれぞれのデプスマップを装置3002に入力する前に分割することで、各画素が被写体オブジェクトに関連するのか「背景」(すなわち、被写体オブジェクト以外のもの)に関連するのかを示すフラグを定義する。しかし、この分割を行う処理は処理装置3002において従来技術を用いて選択的に行っても良い。
【0024】入力データはさらにデプスマップ画像を記録した(1つあるいは複数の)カメラの固有のパラメータ、すなわち、縦横比(aspect ratio)、焦点距離、主点(光軸が撮影平面と交わる点)、1次半径方向歪み(first order radial distortion)係数及びスキュー角(画素格子の軸が厳密には直交していないことがありえるため、それらの軸が成す角度)を定義するデータも含む。固有カメラパラメータを定義する入力データはユーザの側からユーザ入力装置6を用いて入力されても良い。
【0025】入力データはまた、入力されたデプスマップの相対的な位置と向き(すなわち、デプスマップの画像が記録された位置と向き)を定義する。
【0026】カメラ計算器3050は入力データを処理して、それが入力されたデプスマップの相対的な位置と向きとをまだ定義していない場合、相対的な位置と向きとを計算するように構成される。以下に述べるように、カメラ計算機3050はデプスマップ画像の特徴を一致させ、異なるデプスマップにおいて一致した特徴の相対的な位置に基づいた位置と向きとを計算することでこの処理を行うように構成されている。
【0027】デプスマップ点コネクタ3060は各入力デプスマップを定義するデータを処理しデプスマップの画素を連結することでデプスマップにおける被写体オブジェクトを表す2D三角面を生成するように構成される。
【0028】多面体生成器(polyhedron generator)3070はデプスマップ点コネクタ3060によって生成されたそれぞれの2D三角面を、デプスマップの位置と向きとを定義するデータ及びデプスマップにおける画素のデプスを定義するデータとともに処理することで、被写体オブジェクトの画像を定義する複数の多角形で構成される各デプスマップに対する3D多面体を生成するように構成される。
【0029】サーフェスモデラ3080は3D点計算器3090及び多角形生成器(polygongenerator)3100を具備する。
【0030】3D点計算器3090は多面体生成器3070によって生成された多面体を処理してそれらの多角形の交点を計算するように構成される。交点は被写体オブジェクトの面上に潜在的に存在する3D点を定義する。これらの交点は、被写体オブジェクトの表面に潜在的に存在する3D点を定義する。3D点計算器3090は、計算した3D点を検査して、どの点が被写体オブジェクト中の実際の3D点を表すのかを判断するように構成される。
【0031】多角形生成器3100は、3D点計算器3090により計算され、検査後保持された3D点を連結し、被写体オブジェクトの面を表す多角形メッシュを形成するように構成される。
【0032】具体的には、デプスマップ多面体の多角形の交点が被写体オブジェクトの全体的な面画像上の3D点を定義する。従って、これらの3D点は、被写体オブジェクトの面を表す多角形メッシュの多角形の頂点を形成するように多角形生成器3100により連結される。このため、これ以降、3D点計算器3090により計算され、多角形生成器3100によって連結される3D点を3D頂点と呼ぶ。
【0033】サーフェステクスチャラ3110は、サーフェスモデラ3080により生成されたサーフェスモデルにレンダリングするために、入力デプスマップの画像データからテクスチャデータを生成するように構成される。
【0034】ディスプレイプロセッサ3120は、中央制御装置3020の制御の下に、3Dコンピュータモデルを生成する処理中に、表示装置3004を介してユーザに対し画像及び命令を表示するように構成される。さらに、中央制御装置3020の制御の下に、ディスプレイプロセッサ3120は、サーフェスモデラ3080により生成されたサーフェスモデルデータを処理し且つサーフェステクスチャラ3110により生成されたテクスチャデータをサーフェスモデル上にレンダリングすることにより、ユーザが選択した視点から被写体オブジェクトの3Dコンピュータモデルの画像を表示するように構成される。
【0035】出力データ記憶装置3130は、サーフェスモデラ3080により生成されたサーフェスモデルを定義するデータを格納するのに加え、オプションとしてサーフェステクスチャラ3110により生成されたテクスチャデータも格納するように構成される。中央制御装置3020は、出力データ記憶装置3130からの出力データを例えばディスク3140などの記憶装置へのデータ及び/又は信号3150として制御するように構成される。
【0036】図2は、本実施形態において処理装置3002によって行われる処理動作を示す。
【0037】図2において、ステップS2−1で、中央制御装置3020はディスプレイプロセッサ3120によって表示装置3004にメッセージを表示させユーザに処理のためのデータを入力するよう要求する。
【0038】ステップS2−2で、ステップS2−1での要求に応じてユーザによって入力されたデータが入力データ記憶装置3040に記憶される。具体的に本実施形態では、入力データは異なる位置と向きで記録された被写体オブジェクトの複数のデプスマップを定義するデータで構成される(各デプスマップは被写体オブジェクトの画像と、カメラ焦点からの画素内に示される内容の距離を定義する画像の各画素のデプス値と、本実施形態では、各画素が表すものが被写体オブジェクトであるか背景であるかを特定するフラグを定義するデータで構成される)。入力データはさらにデプスマップの画像を記録したカメラに固有のパラメータ、すなわち、縦横比、焦点距離、主点、1次半径方向歪み係数及びスキュー角を定義するデータを含む。入力データはまた、入力されたデプスマップの相対的な位置と向き(すなわち、デプスマップが記録された、3D空間における相対的な位置と向き)とを定義するデータを含む。
【0039】ステップS2−4で、中央制御装置3020はステップS2−2で記憶された入力データが入力デプスマップの相対的な位置と向きとを定義するか否かを判断する。
【0040】ステップS2−4で入力データがデプスマップの相対的な位置と向きとを定義しないと判断した場合、ステップS2−6でカメラ計算機3050はこれらの相対的な位置と向きとを計算する処理を行う。本実施形態では、画像が、例えばEP−A−0898245に記載されるように、従来の方法で記録されたのであれば、カメラ計算機3050はデプスマップ画像を処理しその中の特徴をマッチさせカメラの相対的な位置と向きとを計算することでデプスマップの相対的な位置と向きとを計算する。
【0041】これに対し、ステップS2−4でステップS2−2で記憶された入力データがすでにデプスマップの相対的な位置と向きとを定義していると判断した場合、ステップS2−6は省略される。
【0042】図3において、処理のこの段階では。処理装置3002は複数のデプスマップ3200から3270を定義するデータと、デプスマップの3D空間の相対的な位置と向きとを定義するデータを記憶する(デプスマップの焦点位置3400から3470を含む)。
【0043】デプスマップ3200から3270は各々、被写体オブジェクト3300の画像と、カメラ焦点3400から3470の3D位置からの画素内に示される被写体の距離を定義する画像の各画素のデータと、本実施形態では、各画素の内容が被写体オブジェクト3300に関連するのかあるいは背景に関連するのかを定義するデータで構成される。
【0044】図2に戻って、ステップS2−8で、デプスマップ点コネクタ3060はデプスマップ3200から3270のそれぞれにおける被写体オブジェクト3300を表す画素を連結しそれぞれのデプスマップの被写体オブジェクトの2D三角面を生成する。
【0045】図4は、ステップS2−8でデプスマップ点コネクタ3060が行う処理動作を示す。
【0046】図4において、ステップS4−2で、デプスマップ点コネクタ3060は次に処理すべきデプスマップ(ステップS4−2が初めて行われる場合は最初のデプスマップ)を検討する。
【0047】ステップS4−4で、デプスマップ点コネクタ3060は各画素を4つの画素に分割する。各画素には親画素と同じデプス値、さらに親画素と同じ被写体オブジェクト・背景フラグを割り当てられる(画素が被写体オブジェクト3300の一部かそれともそれ以外のもの、すなわち「背景」を示すかを表す)。
【0048】この処理をさらに図5を参照して説明する。図5はデプスマップ画像の一部を一例として示す。具体的には、図5は図3において丸で示したデプスマップ画像3240の一部3480を示す。
【0049】図5において、親画素は格子状の太線で定義される。ステップS4−4で親画素を4つに分割することで生成された画素は格子状の細線で表す。
【0050】図5の線3500は画像中の被写体オブジェクト3300の輪郭を表す。従って、線3500が通過する元の親画素はそれぞれ、元は入力データにおいて被写体オブジェクト3300を示す画素として指定されていたものである。ステップS4−4で、被写体オブジェクト3300を表すそれぞれの画素を4つの画素に分割する。4つの新しい画素もまた被写体オブジェクト3300を示す画素として指定される(図5では被写体オブジェクト3300を表す各画素の点によって表される)。尚、ステップS4−4で生成された新しい画素のいくつか(例えば画素3502)は被写体オブジェクト3300を表すとして指定されるが線3500の外側に位置する。こうした状況は、上記のように、親画素の位置とは無関係にステップS4−4で親画素から生成された4つの画素はそれぞれ親画素と同じ被写体オブジェクト・背景フラグを割り当てられるために生じる。
【0051】これ以降、本実施形態では、デプスマップ中の「画素」といった場合、特に言及のない限りは元の画素ではなく、ステップS4−4で生成した小さな画素を意味する。
【0052】図4に戻って、ステップS4−6で、デプスマップ点コネクタ3060は被写体オブジェクト3300を示すデプスマップの画素の周囲にバウンディングボックス(bounding box)を定義する。本実施形態では、バウンディングボックスはデプスマップ画像の稜線に平行な稜線を有するように定義される。バウンディングボックスは少なくとも1つの背景画素の各稜線に沿った境界を含むように定義される。
【0053】ステップS4−8で、デプスマップ点コネクタ3060はステップS4−6で定義されたバウンディングボックス内の画素を2×2画素窓(換言すると、ステップS4−4が実施される以前のデプスマップ中の元画素と同じサイズを有する窓)で走査する。
【0054】画素窓の各位置について、デプスマップ点コネクタ3060は、図6a乃至6kを参照して以下に説明するように、被写体オブジェクト3300を表す窓内の画素の位置及び所定の連結規則により画素窓内に現れたデプスマップ内の画素を連結する。
【0055】具体的には、図6a乃至6dにおいて、画素窓に被写体オブジェクト3300を表す画素が2つあるいは2つだけ出現した場合(こうした画素は図6aから6kでは図5と同様点によって示される)、その2つの画素が垂直及び水平方向に隣接している場合、デプスマップ点コネクタ3060は被写体オブジェクト3300を表す画素の中心を連結する。
【0056】これに対し、図6e及び6fにおいて、画素窓内に画素が2つあるいは2つだけ対角線上の対向する隅に出現した場合、ステップS4−8でデプスマップ点コネクタ3060は画素を連結しない。
【0057】図6g及び6jにおいて、被写体オブジェクト3300を表す画素が3つあるいは3つだけ画素窓内に存在する場合、デプスマップ点コネクタ3060は、図示するように、垂直方向の連結と水平方向の連結(対角線方向の連結ではない)によって被写体オブジェクト3300を表す画素の中心を連結する。
【0058】図6kにおいて、画素窓内の4つの画素全てが被写体オブジェクト3300を表す場合、デプスマップ点コネクタ3060は2つの垂直連結、2つの水平連結、及び1つの対角線連結によって画素の中心を連結する。
【0059】被写体オブジェクト3300を表す画素が1つあるいは1つだけ画素窓内に出現した場合には、デプスマップ点コネクタ3060は画素連結を行わない。
【0060】図7は図5に示した例についてステップS4−8で行われた処理の結果を示す。
【0061】図7において、被写体オブジェクト3300を表すデプスマップ画像内に2D三角面が生成されているのがわかる(あるいは図5及び7の例の被写体オブジェクト3300の一部)。
【0062】図4に戻って、ステップS4−10で、デプスマップ点コネクタ3060はステップS4−8で生成された三角面を間引く。これは面内の連結の数を削減するためである。本実施形態では、間引き処理は連結された画素のデプス値によって行われる。この処理は例えばHoppeなどの“Mesh Optimization”(ACM SIGGRAPH93、Addison-Wesley社刊、ISBN 0-201-58889-7)”に記載されるように、従来の方法で行われる。
【0063】ステップS4−12で、デプスマップ点コネクタ3060は他に処理する入力デプスマップがあるか否かを判断する。
【0064】上記の方法で各入力デプスマップが処理されるまでステップS4−2からS4−12を繰り返す。
【0065】図2に戻って、ステップS2−10で、多面体生成器3070は被写体オブジェクト3300の画像を定義するそれぞれの入力デプスマップの多面体を生成する。
【0066】図8は、ステップS2−10で多面体生成器3070によって行われる処理動作を示す。
【0067】図8において、ステップS8−2で多面体生成器3070はステップS2−8で生成された次の2D三角デプスマップ(ステップS8−2が初めて行われる場合は三角デプスマップ)を検討する。
【0068】ステップS8−4で、多面体生成器3070は入力データ中に定義された頂点を含む画素のデプス値、デプスマップの位置と向き、及びカメラパラメータに従って三角形の各頂点を3D空間に投影する。これにより、各2D頂点から3D頂点が生成され、多面体生成器3070は生成された3D頂点の各々に固有のIDを割り当て、3D頂点によって定義された平面多角形面を定義するデータを記憶する。こうして、多面体生成器3070は被写体オブジェクト3300を表す複数の平面多角形で構成される多面体を生成する。
【0069】多面体生成器3070によって行われる処理について図9a、9b、及び9cを参照してさらに説明する。
【0070】図9aは2D頂点がデプスマップ内の被写体オブジェクトの画像の内側に位置する点を表す場合の、2D三角形から3D空間への頂点の投影を示す(すなわち、2D頂点はステップS2−8で生成された三角形の境界上にない)。
【0071】図9aにおいて、1例としてデプスマップ3210の2つの2D頂点3510及び3520が示されている。
【0072】入力データに定義されたデプスマップ3210の位置及び向きと固有のカメラパラメータとを用いて、2D頂点3510を3D空間に投影し、2D頂点3510を含む画素に定義されたデプス値に等しい焦点位置3410から離れた位置に3D点3530を定義する。同様に、デプスマップ3210の位置及び向きと固有のカメラパラメータとに基づいて、2D頂点3520を3D空間に投影し、2D頂点3520を含む画素のデプス値に等しい焦点位置3410から離れた位置に3D点3540を定義する。
【0073】2D頂点3510及び3520は2D三角形において連結されているため、多面体生成器3070はこれらから生成された3D点3530及び3540が3D多面体において連結されていることを定義するデータを記憶する。
【0074】図9bは、本実施形態のステップS2−8で、ステップS208で生成された2D三角面の境界上に位置する2D頂点を3D空間に投影する処理を示す。
【0075】前述のように、ステップS2−10で多面体生成器3070が行う処理の目的は、被写体オブジェクト3300の3D多面体画像を処理されているデプスマップから生成することである。結果的に2D三角形の境界上に位置する各2D頂点は3D多面体の側面の終点である3D頂点を定義する。さらに、被写体オブジェクト3300の背の位置を定義するために処理されているデプスマップについて情報が得られないため(デプスマップを生成したとき、これは3Dイメージャにとっては見えない)、本実施形態で多面体生成器3070が生成した3D多面体の各側面は「無限の」範囲(実際には任意の距離までの範囲)にあると定義される。
【0076】具体的には、図9bにおいて、ステップS2−8で生成された2D三角形の境界上に位置する2つの2D頂点3550及び3560はデプスマップ3210に対する1例として示される。
【0077】図9aに示す例で、デプスマップ3210の位置及び向きとデプスマップ画像を生成するのに用いたカメラのパラメータとを用いて2D頂点3550及び3560はそれぞれ3次元に投影される。2D頂点3550は、2D頂点3550を含むデプスマップ3210の画素に定義されたデプス値に等しいカメラの焦点位置3410からの距離を有する3D頂点3570を生成する。同様に、2D頂点3560は、2D頂点3560を含む画素に定義されたデプス値に等しい焦点位置3410からの距離を有する3D頂点3580を生成する。
【0078】2D頂点3550及び3560は2D三角形において連結されているため、多面体生成器3070はこれらから生成された3D点3570及び3580が3D多面体において連結されていることを定義するデータを記憶する。さらに、多面体生成器3070は焦点位置3410から無限の方向(実際には任意の距離)に投影された側面3590を定義する。これは3D頂点3570及び3580を焦点位置3410に向かう方向への終点として有している。
【0079】図9cにおいて、ある2D三角形にステップS8−4の処理を行う全体的な効果は「前」端面3610、無限の側面、及び潜在的な「背」面を無限大に有する3D多面体3600を生成することである。
【0080】前端面3610は、2D頂点に対応する接続とステップS2−8で生成された2D三角形中の接続とを有する3D頂点から成る。
【0081】多面体3600は、デプスマップ3210から見た被写体オブジェクト3300の面画像を定義する。多面体3600は複数の平面多角形、つまり、端面3610の3D頂点によって定義された平面多角形(全ての3D頂点が同一平面上に存在するわけではないので、これらの平面多角形全てが同一平面上に存在するわけではない)及び多面体3600の側面を定義する平面多角形を備える。
【0082】多面体3600の側面をデプスマップ3210の背後に向かって投影した場合、これらは焦点位置3410に収束する。そのため多面体3600は頂点を焦点位置3410に有する円錐台とみなすことができる。
【0083】以下に述べるように、処理装置3002は各デプスマップについて3D多面体を生成し、全ての多面体を形成する多角形の交点を計算し被写体オブジェクト3300の前面を表す多角形メッシュを生成する処理を行う。
【0084】図8において、ステップS8−6からS8−14で、多面体生成器3070はステップS8−4で生成した「複合」多面体を「単一」多面体、すなわち3つの平面多角形面のみが各頂点で接する多面体に変換する処理を行う。以下により詳細に説明するように、この処理は3つの多角形のみが各垂直頂点で接するように付加的な「垂直」頂点を多面体に加えることを含む。
【0085】詳細には、ステップS8−6で、多面体生成器3070はステップS8−4で生成された多面体の次の3D頂点(ステップS8−6が初めて行われる場合は最初の3D頂点)を検討する。
【0086】ステップS8−8で、多面体生成器3070は多面体のどの平面多角形が頂点で接するのかとその隣接する順番を判断する(平面多角形は前端面3610及び/又は無限平面側面における有限の平面である)。
【0087】具体的には、図10に示す例において、3D頂点3620がステップS52−6で検討した頂点である場合、ステップS8−8で、多面体生成器3070はどの平面多角形が頂点3620で接するのか、さらにそれらの平面多角形が連結される順番を判断する処理を行う(図10に示す例では平面多角形A、B、C、D、E、及びFが頂点3620で接し、その隣接する順番はA−B−C−D−E−F−Aである)。
【0088】図11はステップS8−8で多面体生成器3070が行う処理を示す。これらの処理動作について図10に示す例を参照しながら説明する。
【0089】図11において、ステップS11−2で、多面体生成器3070はステップS8−6で選択した頂点を頂点として有する平面多角形面を識別し、その面を面の順番リストに加える。この処理は、平面多角形面を形成する頂点を読取り、検討した頂点に対応する頂点を有することが判明した最初の面を選択することで行われる。
【0090】例えば、ステップS11−2で図10の例の多角形面Aを識別したと仮定する。
【0091】ステップS11−4で、多面体生成器3070は最後に順番リストに加えられた平面多角形の稜線に突き当たる平面多角形面(ステップS11−4が初めて行われる場合はステップS11−2で加えられた面)を検討し、ステップS8−6で選択した頂点を共有する平面多角形面を識別する。
【0092】詳細には、図10に示す例においては、ステップS11−2で順番リストに加えられた多角形面Aのエッジに当接する多角形は多角形面B、F、及びXである。この3つの多角形のうち、多角形B及びFは多角形Aと頂点3620を共有する。しかし多角形Xは頂点3620を含まない。
【0093】ステップS11−6で、多面体生成器3070はステップS11−4で識別した面がすでに順番リストにあるか否かを判断する。ステップS11−4が実行される前に順番リストが面を1つしか含んでいない場合、ステップS11−4で識別した面はいずれもリストにはない。これに対し、ステップS11−4が実行されたときに2つ以上の平面が順番リストに存在した場合、ステップS11−4で識別した面の1つがリストに存在することになる。ステップS11−4で識別したその他の面はリストにはない。また、ステップS11−4が実行されたときにステップS8−6で選択した頂点を有する平面が全て順番リストに存在する場合、ステップS11−4で識別した面はいずれもすでに順番リストに存在しており、頂点を共有する全ての平面の隣接順番が決定される。
【0094】従って、ステップS11−4で識別した少なくとも1つの平面が順番リストに存在しないとステップS11−6で判断した場合、ステップS11−8に進んでリストに存在しない平面をリストに追加する。すなわち、ステップS11−4で識別した2つの平面のいずれもが順番リストになければ、ステップS11−8の処理で、2つの面のいずれかを任意に選択しリストに追加する。ステップS11−4で識別した2つの面の片方だけがリストにない場合には、ステップS11−8でこの面をリストに追加する。
【0095】ステップS11−4で識別した平面が2つともすでにリストに存在するとステップS11−6で判断した場合、処理を終了する。
【0096】図8に戻って、ステップS8−10で、多面体生成器3070はステップS8−8で識別され、ステップS8−6で選択した頂点を共有する平面を検討し、4つ以上の平面がその頂点で接するか否かを判断する。
【0097】ステップS8−10で4つ以上の平面が頂点で接すると判断した場合、ステップS8−12で、多面体生成器3070はステップS8−6で選択した頂点を複数の新たな「仮想」頂点で置換する。ステップS8−8で識別した平面が3つ以上は新たな頂点のそれぞれで接しないようになっている。
【0098】詳細には、本実施形態では、n個の平面多角形面p1、p2、...、pnが頂点で接する場合、多面体生成器3070はその頂点をn−2個の新たな仮想頂点(p1、p2、pn)、(p2、p3、pn)、...、(pn-2、pn-1、pn)で置換する。頂点(p1、p2、pn)は平面p1、p2、及びpnがその頂点で接することを定義する。
【0099】本実施形態では、ステップS8−12で生成された新たな仮想頂点はそれぞれ、それが置換するステップS8−6で選択した元の頂点と同じ3D位置を有する。
【0100】ステップS8−12で多面体生成器3070によって行われる処理について図12を参照の上でより詳細に説明する。図12は図10に示す例に対応する。
【0101】最初に図10において、6つの多角形面A、B、C、D、E、及びFが頂点3620で接している。従って、この例では「n」は6であり、ステップS8−12で多面体生成器3070は頂点3620を4つの新たな仮想頂点で置換する(本例ではn−2=4)。
【0102】次に図12において、多面体生成器3070によって追加された4つの新たな仮想頂点は頂点3630、3640、3650、及び3660である。図12では見やすいよう、新たな頂点を異なる位置に示してある。しかし、上述したように、新たな仮想頂点はそれぞれ、実際には元の頂点3620の同じ位置を有するように定義されている。
【0103】仮想頂点3630は3つの多角形p1、p2、及びpnがこの頂点で接するように定義される。図12の例では多角形A、B、及びFが頂点3630で接する。
【0104】仮想頂点3640は3つの多角形p2、p3、及びpnがこの頂点で接するように定義される。図12の例では多角形B、C、及びFが頂点3640で接する。
【0105】仮想頂点3650は3つの多角形p3、p4、及びpnがこの頂点で接するように定義される。図12の例では多角形C、D、及びFが頂点3650で接する。
【0106】同様に、仮想頂点3660は3つの多角形p4、p5、及びp6がこの頂点で接するように定義される。図12の例では多角形D、E、及びFが頂点3660で接する。
【0107】図8に戻って、ステップS8−12の処理を終えた後(あるいは、その頂点で4つ以上の平面が接することがないため、ステップS8−12の処理が不必要であるとステップS8−10で判断した場合)、ステップS8−14に進む。
【0108】ステップS8−14で、多面体生成器3070は現在検討中の多面体の中に未処理の頂点があるか否かを判断する。多面体の中のそれぞれの頂点が上記の方法で処理されるまでステップS8−6からS8−14を繰り返す。
【0109】この処理を行った結果、多面体生成器3070はステップS8−4で生成した多面体を複合多面体から単一多面体へと変換する。
【0110】ステップS8−16で、多面体生成器3070は処理すべき他の三角デプスマップが存在するか否かを判断する。
【0111】ステップS2−8で生成された三角デプスマップがそれぞれ上記の方法で処理されるまでステップS8−2からS8−16を繰り返す。
【0112】このように、多面体生成器3070は、デプスマップ3210に対する図9cに示す多面体3600のように、各デプスマップに対して多面体を生成する。
【0113】以下に説明するように、処理装置3002はこれらの多面体を形成する平面多角形の交点を計算する。3つの多角形が接する3D点はいずれも(これらの多角形が同じデプスマップ多面体のものか、2つあるいは3つの異なるデプスマップの多面体かにかかわらず)被写体オブジェクト3300の面上の点を潜在的に表す3D点を定義する。それぞれの潜在点を検査し、それが実際に被写体オブジェクト上の点を表すものか否かを判断する。次に実際の面点を連結し、被写体オブジェクト3300の面を表す3D多角形メッシュで構成される3Dコンピュータモデルを生成する処理を行う。
【0114】図2に戻って、ステップS2−12で、3D点計算器3090は被写体オブジェクト3300の面上に存在する3D点を計算する処理を行う。生成された3Dコンピュータモデルが正確に被写体オブジェクト3300の面を表せるように、被写体オブジェクトの面の頂点を形成する多角形のそれぞれの交点を計算する必要がある。第2実施形態で説明するように、これはそれぞれの多角形を他の多角形に対して検査し、3D点の完全な組を生成することで達成される。しかし、このようにして被写体オブジェクト面の頂点を表す3D点を計算するのに必要な計算数は極めて多い。具体的には、全ての多面体中の多角形の総数をnとした場合、O(n3)回の計算が必要となる。加えて、検査された多角形の多くは交差しないため(従って3D点を生成しないため)また被写体オブジェクト210の面上に存在しない3D点を生成しても良いため(従ってどの3D点が実際に被写体オブジェクト210のモデルの頂点を表すかを判断するために3D点の処理が必要となる)計算の多くは不必要である。
【0115】結果的に、この第1実施形態では、被写体オブジェクト面の頂点を表す3D点を計算するのに必要な計算の数を減らすように処理を行う。
【0116】この処理を詳細に説明する前に、処理の原則について説明する。
【0117】本実施形態では、この処理によって、ステップS2−10で生成した多面体を含む3D空間のボリュームを検討し、ボリュームを検査することで以下のことを判断する。すなわち、(1)交差させることで3D点を生成できるだけの数(本実施形態では3つ)の多角形がボリューム中に存在しないか、あるいは、以下に詳細に説明するようにボリューム中の多角形が被写体オブジェクト3300の面の頂点を表す3D点で交差できないといった理由でボリュームを破棄できるか否か。
(2)交差させることで所定数(本実施形態では1つ)より多い、被写体オブジェクト3300の面の頂点を表す3D点を生成できる十分な数の多角形がボリューム中に含まれているので、より小さいボリュームを検討するためにボリュームを再分割するか否か。
(3)交差させることで十分に小さな所定数(本実施形態では1つ)の、被写体オブジェクト3300の面の頂点を表す3D点を生成できる十分な数(本実施形態では3つ)の多角形がボリューム中に含まれているか否か。この場合、これらの点の3D位置を計算し検査することで、それらが実際に被写体オブジェクト3300の頂点を表すか否か。
【0118】こうして、3D点の計算に無関係な不必要な処理を避けながら、デプスマップ多面体の交点によって定義された被写体オブジェクト3300の面の全ての頂点が計算されるようにする。特に、3D空間のボリュームのかなりの部分はさらなる計算なしに破棄できる。
【0119】ボリューム中の多角形が、被写体オブジェクト3300の面の頂点を表す3D点で交差できないためにそのボリュームを破棄できるか否かを判断するには、その3D点で交差する多面体を与えずにその3D点が全ての多面体に存在するか否かを判断する処理を行う。図3及び9cに示す例では、デプスマップ3210、3220、及び3230の多面体からの多角形の交点によって定義された3D点の場合、この3D点がデプスマップ3200、3240、3250、3260及び3270の多面体の全てに存在するか否かを判断する(これはこれらの多面体は3D点で交差する3つの平面のうち1つを含まないためである)。以下に述べるように、3D点が少なくとも1つのデプスマップ多面体の外側に存在することがわかった場合、本実施形態の処理ではこの点を計算、検査せずに、行う処理量を削減する。
【0120】本実施形態では、3D点を計算したとき、引き続いて、それが被写体オブジェクト3300の頂点を表すか否かを判断することを検査する。これは3つの平面多角形を含む3Dボリュームを識別したときに3D点を計算するためである。しかし、ボリューム中では多角形は3D点で実際に交差しない。そのため、本実施形態では検査を行って計算した3D点が識別したボリューム中にあるか否かを判断する。さらに、多角形が存在する3つの平面の交点を計算することで3D点を計算する。計算した3D点は1つ以上の多角形に存在しない可能性がある。本実施形態では検査を行い計算した3D点が識別したボリューム内にあり、3つの平面全てに含まれるか否かを判断する。
【0121】本実施形態で行われる被写体オブジェクト3300の頂点を表す3D点を計算する処理について詳細に説明する。
【0122】図13は、ステップS2−12で3D点計算器3090により実行される処理動作を示す。
【0123】図13のステップS13−2において、3D点計算器3090は、被写体オブジェクト面の頂点を表す全ての3D点が存在する3D空間のボリュームを定義する。
【0124】詳しくは本実施形態において、ステップS13−2で、3D点計算器3090はステップS8−4で生成した3D点の軸整列したバウンディングボリュームであるボリュームを定義する。換言すれば、3D点計算器3090はステップS8−4で生成された多面体の各「前」端面(例えば図9cの例では面3610)を形成する点に対してバウンディングボリュームを定義する。バウンディングボリュームは従来の方法でX軸、Y軸、及びZ軸に平行な稜線を有して定義される。従って、ここでは、この処理については説明を省略する。
【0125】ステップS13−4で3D点計算器3090はステップS13−2で定義された3Dボリュームを複数のより小さい子ボリュームに再分割し、その子ボリュームを格納スタックの最上部に加える。すなわち本実施形態では、ステップS13−4でのボリューム再分割は、ボリュームを二値再分割して8つの新たな子ボリュームを生成することを含むものである。
【0126】ステップS13−6で、3D点計算器3090はステップS13−4で作成したスタックの最上部から次のボリューム(ステップS13−6が初めて行われる場合は最初のボリューム)を取り出し、ステップS13−8でスタックから取り出したボリュームの状態を判断する。
【0127】ステップS13−8の処理において、3D点計算器3090は、ステップS13−6でスタックから取り出されたボリュームが、被写体オブジェクト3300の頂点を表す3D点を含む可能性がない(従って破棄できる)か否か、被写体オブジェクト3300の頂点を表す2つ以上の3D頂点を定義する十分な数の多角形を含むためにボリュームを再分割する必要があるか否か、あるいは、被写体オブジェクトの頂点を表す単一の3D点のみを定義する十分な多角形をボリュームが含むか否かを判定する。この場合、3D点の位置を計算し、検査することができる。
【0128】図14は、ステップS13−8で3D点計算器3090によって行われる処理動作を示す。
【0129】図14において、ステップS14−2からS14−10で、3D点計算器3090はステップS2−10で生成したデプスマップ多面体を定義するどの多角形がステップS13−6でスタックから取り出したボリュームに交差するのかを判断する処理を行う。この処理は親ボリューム(すなわち、現在処理されているボリュームを作成するために分割したボリューム)に交差する多角形のみを検査し、親ボリュームの子ボリュームを処理するときに現在使用中のボリュームに交差する多角形のリストを記憶することで計算上高効率な方法で行われる。
【0130】具体的には、ステップS14−2で、3D点計算器3090は親ボリュームに交差する多角形のリストを検討する(親ボリュームがステップS13−2で定義されたバウンディングボリュームである場合、これらの多角形が全てデプスマップ多面体を定義する)。
【0131】ステップS14−4で、3D点計算器3090はステップS14−2で読み出されたリストの次の多角形(ステップS14−1が初めて行われる場合は最初の多角形)を検討し、ステップS14−6で現在のボリュームにその多角形が交差するか否かを判断する。本実施形態で行われる、多角形が現在のボリュームに交差するか否かを検査する処理は、例えばAlan W Paeth編Graphic Gems V (MorganKaufmann社刊、375〜379ページ、ISBN 0-12-543455-3”に記載されるような従来の方法で行われる。
【0132】ステップS14−6で多角形が現在のボリュームに交差すると判断した場合、ステップS14−8で、3D点計算器3090はその多角形を現在のボリュームに交差する多角形のリストに追加する。
【0133】これに対し、ステップS14−6で多角形が現在のボリュームに交差しないと判断した場合、ステップS14−8を省略する。
【0134】ステップS14−10で、3D点計算器3090はステップS14−2で読み出されたリストに他の多角形があるか否かを判断する。ステップS14−2で読み出されたリストの多角形をそれぞれ上記の方法で処理するまでステップS14−4からS14−10を繰り返す。
【0135】ステップS14−12からS14−26で、3D点計算器3090は、1つ以上のデプスマップ多面体の完全に外側にある(従ってボリューム内の3D点は被写体オブジェクト3300の頂点を表すことができない)ため、ステップS13−6でスタックから取り出したボリュームが破棄可能か否かを判断する処理を行う。本実施形態ではこの処理はボリュームを検査することで、それがステップS2−10で生成されたデプスマップ多面体の全てによって閉じられているか否かを判断することを含む。加えて、この処理は特に計算上高効率な方法で行われる。具体的には、あるボリュームは多角形で閉じられる場合、そのボリュームの子ボリュームも全てその多角形で閉じられる。そこで本実施形態では、3D点計算器3090は親ボリュームを閉じると検証されなかった多面体(以下「アクティブ多面体」という)のみを検査することでそれらが現在のボリュームを閉じるか否かを判断する。ある多面体が現在のボリュームを閉じると検証された場合、現在のボリュームの各子ボリュームに適用されるアクティブ多面体のリストからこの多面体を除去する。
【0136】具体的には、ステップS14−12で、3D点計算器3090は現在のボリュームについてのリストとして親ボリュームに関するアクティブ多面体のリスト(すなわち、上述したように、親ボリュームを閉じると検証されていない多面体のリスト)を複製する。親ボリュームがステップS13−2で定義されたバウンディングボリュームの場合、アクティブ多面体のリストはステップS2−10で生成された全ての多面体を含む。
【0137】ステップS14−14で、3D点計算器3090はステップS14−12で複製されたリストにある多面体の中で現在のボリュームに交差する少なくとも1つの多角形を含まないものがあるか否かを判断する。詳しくは、3D点計算器3090はステップS14−8で生成された現在のボリュームに交差する多角形のリストを読み出すことで、現在のボリュームに交差する少なくとも1つの多角形を有さない、ステップS14−12で複製されたリストの多面体を識別する。
【0138】ある多面体が現在のボリュームに交差しない多角形を有する場合、現在のボリュームは一部は多面体の内側に、一部は外側に位置する。また、全ての多面体が現在のボリュームに交差する多角形を含む場合、現在のボリュームは1部がそれぞれの多面体の内側に、一部が外側に位置する。そのボリュームは少なくとも1つの多面体の外側に完全に位置しているわけではないので破棄できない。従って、ステップS14−14で全ての多面体が現在のボリュームに交差する少なくとも1つの多角形を含むと判断した場合、ステップS14−28に進む。この処理については後述する。
【0139】これに対し、ステップS14−14で、或る多面体が現在のボリュームに交差する多角形を1つも含まないと判断した場合、現在のボリュームは完全にその多面体の内側に位置するか(すなわちボリュームはその多面体によって閉じられる)、あるいは完全にその多面体の外側に位置する。この場合、3D点計算器3090はステップS14−16からS14−26で現在のボリュームに交差する多角形を1つも有さない多面体の各々について現在のボリュームがその内側に存在するか外側に存在するかを判断する処理を行う。
【0140】具体的には、ステップS14−16で、3D点計算器3090は現在のボリュームに交差する多角形を1つも有しない次の多面体(ステップS14−16が初めて行われる場合は最初の多面体)を検討する。
【0141】ステップS14−18で、3D点計算器3090はステップS13−6でスタックから取り出したボリュームがその多面体の内側にあるか外側にあるかを検査する。
【0142】図15はステップS14−18で3D点計算器3090によって行われる処理動作を示す。
【0143】図15において、ステップS15−2で、3D点計算器3090はステップS13−6でスタックから取り出したボリューム中から1点を選択する。ボリューム中のどの点でも良いが、本実施形態では3D点計算器3090はボリュームの第1面の第1頂点を選択する。
【0144】ステップS15−4で、3D点計算器3090はステップS15−2で選択した点から、検査されている多面体を生成したデプスマップ画像に対するカメラの投影の中心の位置に向けて光線を投影する。換言すれば、図9cの例に示す多面体3600を検査している場合、この多面体3600はデプスマップ3210から生成されたものであるため、点3410に向けて光線を投影する。
【0145】光線の投影に加えて、3D点計算器3090は多面体と光線の交差の数を計算し、ステップS15−6で、多面体と光線の交差の数が奇数か偶数かを判断する。
【0146】この検査の理由について図16a及び16bを参照して説明する。
【0147】図16aにおいて、ステップS13−6でスタックから取り出したボリューム3700がある多面体(例えば図9cの例に示す多面体3600)の内側にある場合、ステップS15−4で投影された光線3710は奇数回多面体3600と交差する。図16aの例では、光線3710は点3720において1回多面体3600と交差する。
【0148】多面体3600の形状によっては、光線3710は多面体3600と3回、5回、あるいはそれ以上の奇数回交差する可能性がある。それでもボリューム3700が多面体3600の内側にある限り、光線3710と多面体3600の交差の数は奇数になる。これは光線3710が投影された投影位置3410のカメラ中心が、カメラに対して生成された多面体3600の外側にあるためである。
【0149】これに対し、図16bにおいて、ステップS13−6でスタックから取り出したボリューム3730又は3740が多面体3600の外側に位置する場合、ステップS15−4で投影された光線は多面体3600と偶数箇所で交差する。詳細には、ボリューム3730から投影位置3410のカメラ中心に対して投影された光線3750は多面体3600と2箇所、すなわち点3760(光線が多面体に入射する位置)及び3770(光線が多面体から出射する位置)で交差する。もちろん、多面体3600の形状によっては光線3750はそれ以上の偶数箇所で多面体3600と交差する可能性がある。ボリューム3740から投影位置3410のカメラ中心に対して投影される光線3780の場合、この光線は多面体3600と交差することはない(本実施形態では交差ゼロを偶数個の交差とみなす)。
【0150】図15に戻って、ステップS15−4で投影された光線と多面体の交差の数が奇数であるとステップS15−6で判断した場合、3D点計算器3090はステップS15−8で、ステップS13−6でスタックから取り出したボリュームが多面体の内側に位置することを示すフラグを設定する。
【0151】これに対し、ステップS15−4で投影された光線と多面体の交差の数が偶数であるとステップS15−6で判断した場合、3D点計算器3090はステップS15−10で、ステップS13−6でスタックから取り出したボリュームが多面体の外側に位置することを示すフラグを設定する。
【0152】図14に戻って、ステップS14−20で、3D点計算器3090はステップS15−8あるいはS15−10で設定されたフラグを読取り、現在のボリュームが多面体の内側か外側かを判断する。
【0153】ボリュームが多面体の外側に位置するならば、ステップS14−22で、3D点計算器3090は、ステップS13−6でスタックから取り出したボリュームの状態を「破棄」と判断したことを示すフラグを設定する。これはボリュームが完全にデプスマップ多面体の1つの外側に位置しており、従って被写体オブジェクト3300の頂点を表す3D点を含むことができないからである。
【0154】ステップS14−22を実行した後、処理は図13のステップS13−10に戻る。これは、3D点計算器3090が現在のボリュームが被写体オブジェクト3300の頂点を表す3D点を含むことができないと判断するには、現在のボリュームの外側にある1つの多面体を識別すれば十分であり、現在のボリュームと多面体の関係をこれ以上判断する必要がないからである。
【0155】これに対し、ステップS13−6でスタックから取り出したボリュームが多面体の内側に位置するとステップS14−20で判断した場合、3D点計算器3090はステップS14−24でその多面体を現在のボリュームに対するアクティブ多面体のリストから削除する。そのためその多面体が現在のボリュームの子ボリュームを閉じるか否かを判断するためにその多面体を検査することはない。
【0156】処理はステップS14−26に進み、3D点計算器3090はステップS14−12で複製されたリストの中に現在のボリュームに交差する多角形を1つも含まない多面体が他にも存在するか否かを判断する。上記の方法でこうした多面体をそれぞれ処理するまで、あるいはステップS14−20で現在のボリュームが1つの多面体の外側に位置すると判断されるまで(この場合、ステップS14−22でボリュームの状態は「破棄」と判断され、処理はステップS13−10に戻る)、ステップS14−16からS14−26を繰り返す。
【0157】ステップS14−12で複製されたリストの中に現在のボリュームに交差する多角形を1つも含まない多面体が存在しないとステップS14−14で判断した場合、あるいはこのような多角形が全て処理され、現在のボリュームを閉じるものとステップS14−26で判断した場合、処理はステップS14−28に進む。
【0158】ステップS14−28で、3D点計算器3090はステップS14−8で生成された、現在のボリュームと交差する多角形を定義したリストを読み出す。
【0159】ステップS14−30で、3D点計算器3090はステップS14−28で読み出されたリストの中の多角形の数が3つか、3つより多いかあるいは少ないかを判断する。
【0160】ステップS14−30で現在のボリュームに交差する多角形の数が3つ未満であると判断した場合、ステップS14−32で3D点計算器3090はステップS13−6でスタックから取り出したボリュームの状態が「破棄」と判断されたことを示すフラグを設定する。このボリュームが交差することによって被写体オブジェクト3300の頂点を表す3D点を生成する十分な数の多角形を含まないからである。処理は図13のステップS13−10に進む。
【0161】ステップS14−30で現在のボリュームに交差する多角形の数を3と判断した場合、ステップS14−34で3D点計算器3090はステップS13−6でスタックから取り出したボリュームの状態が「頂点計算」と判断されたことを示すフラグを設定する。このボリュームが交差することによって被写体オブジェクト3300の頂点を表す単一の3D点を定義する適切な数の多角形を含むからである。処理は図13のステップS13−10に進む。
【0162】ステップS14−30で、現在のボリュームに交差する多角形の数を3より大きいと判断した場合、ステップS14−36に進み、3D点計算器3090は現在のボリュームに交差する多角形が全て同じデプスマップ多面体のものであると判断する。これは例えばステップS8−12で生成された仮想頂点で多角形が交差する場合に起こりうる。本実施形態ではある元の頂点に置換する仮想頂点は全て同じ3D位置を有するからである。
【0163】ステップS14−36で現在のボリュームに交差する多角形が全て同じ多面体からのものと判断した場合、ステップS14−38で、3D点計算器3090は、ステップS13−6でスタックから取り出したボリュームの状態が「複数頂点計算」であることを示すフラグを設定する。次に処理は図13のステップS13−10に進む。
【0164】これに対し、ステップS14−36で現在のボリュームに交差する多角形が全て同じ多面体からのものでなはいと判断した場合、ステップS14−40で、3D点計算器3090は、ステップS13−6でスタックから取り出したボリュームの状態が「再分割」であることを示すフラグを設定する。これは交差し単一の、被写体オブジェクト3300の頂点を表す3D点を生成する異なる多面体からの多角形が必要な数(3)より多く含まれているためである。次に処理は図13のステップS13−10に進む。
【0165】図14を参照して説明した処理の結果として、3D点計算器3090は、ステップS13−6でスタックから取り出したボリュームの状態を判断し、そのボリュームに対して行われるべき次の処理を示す判断された状態に従ってフラグを設定する。
【0166】図13に戻って、ボリュームの状態を判断する上述の処理を終えた後、ステップS13−10で3D点計算器3090はボリュームの状態が「頂点計算」であるか否かを判断する。
【0167】ステップS13−10で頂点を計算すると判断した場合、処理はステップS13−12に進み、頂点を計算する。それ以外の場合はステップS13−12を省略する。
【0168】図17はステップS13−12で3D点計算器3090が頂点を計算する処理動作を示す。
【0169】図17において、ステップS17−2で、3D点計算器3090は3つの多角形(すなわち、ステップS13−6でスタックから取り出したボリュームと交差することが判明した3つの多角形)を含む3つの平面が交差する点の3D位置を計算する。この処理は従来の平面交差法を用いて行われる。
【0170】ステップS17−4で、3D点計算器3090はステップS17−2で計算した3D点がステップS13−6で取り出したボリュームと3つの2D多角形全てに存在するか否かを判断する。この検査が必要なのは、この3D点が多角形を含む平面の交点として計算され、従ってこれらの平面は必ずしもボリューム内の1点で、あるいは事実上多角形の一部(すなわち内部)の1点で、互いに交差する必要がないからである。ステップS13−6でスタックから取り出したボリュームは軸整列した直平行六面体であるため、3D点の座標とボリュームのX、Y、及びZ座標の最大及び最小値の間の従来の不など式検査を用いて、その3D点がボリュームの内側にあるかどうかを判断する検査が行われる。3D点がそれぞれの2D多角形の中にあるか否かを判断する処理も、例えば、P.Heckbert編Graphics Gems IV (16〜46ページ、Morgan Kaufmann社刊、ISBN 0-12-336155-9)に記載されるような従来の方法で行われる。
【0171】ステップS17−4で計算した3D点がボリュームと3つの多角形すべての内側にあると判断された場合、処理はステップS17−6に進み、3D点計算器3090は被写体オブジェクト3300の頂点を表す3D点のリストに計算した3D点を追加する。
【0172】これに対し、ステップS17−4で計算した3D点がボリュームあるいは3つの多角形に少なくとも1つの外側にあると判断された場合、ステップS17−6は省略される。
【0173】ステップS17−8で、3D点計算器3090はステップS13−6でスタックから取り出したボリュームは処理済のため次に破棄することを示すフラグを設定する。
【0174】図13に戻って、ステップS13−14で3D点計算器3090はステップS13−6でスタックから取り出したボリュームの状態が「複数頂点計算」であるか否かを判断し、もしもそうならば、ステップS13−16で複数の頂点を計算し検査する処理を行う。
【0175】図18は、ステップS13−16で3D点計算器3090が行う処理動作を示す。
【0176】図18において、ステップS18−2で3D点計算器3090はボリュームに交差する各多角形の全ての頂点を含む頂点の組を頂点の開始組として検討する。
【0177】ステップS18−4で、3D点計算器3090は、そこで接する3つの多角形がボリュームに交差する全ての多角形である組の中の頂点を識別する。
【0178】ステップS18−6で、3D点計算器3090はステップS18−4で識別した次の頂点(ステップS18−6が初めて行われる場合は最初の頂点)を検討する。
【0179】ステップS18−8で、3D点計算器3090はステップS18−6で選択した頂点がステップS18−6でスタックから取り出したボリュームの内側に存在するか否かを検査し、もしそうなら、ステップS18−10で被写体オブジェクトの頂点のリストにその頂点を追加する。これに対し、ステップS18−8で頂点がボリュームの外側にあると判明した場合、ステップS18−10は省略される。この処理の結果、ステップS8−12で生成された仮想頂点が被写体オブジェクトの頂点のリストに追加され、結果的に、同じ位置を有する頂点がリストに含まれることになる。
【0180】ステップS18−12で、3D点計算器3090はステップS18−4で識別した頂点で他に処理すべきものがあるか否かを判断する。上記の方法でそれぞれの頂点が処理されるまでステップS18−6からS18−12を繰り返す。
【0181】こうしてステップS18−4で識別した頂点を全て処理すると、ステップS18−14で3D点計算器3090はステップS13−6でスタックから取り出したボリュームは処理済のためその状態が「破棄」であることを示すフラグを設定する。
【0182】図13に戻って、ステップS13−18で3D点計算器3090はステップS13−6でスタックから取り出したボリュームの状態が「破棄」あるいは「再分割」に設定されているか否かを判断する。
【0183】状態が「破棄」に設定されている場合(ステップS13−8の処理の結果、あるいはステップS17−8かステップS18−24の結果)、ステップS13−20で3D点計算器3090はボリュームを破棄する。
【0184】これに対し、状態が「再分割」に設定されている場合、ステップS13−22で3D点計算器3090はボリュームを再分割し、ステップS13−4で生成されたすタックの最上層に子ボリュームを追加する。本実施形態では、ステップS13−22のボリューム再分割はステップS13−4における再分割と同じ方法で行われる。すなわち、2値再分割を行って8つの新たな子ボリュームを生成することを含む。
【0185】ステップS13−20あるいはステップS13−22に続いて処理はステップS13−24に進み、3D点計算器3090はスタック上に他のボリューム(ステップS13−22で追加した子ボリュームを含む)があるか否かを判断する。
【0186】スタック上の各ボリュームを上記の方法で処理するまでステップS13−6からS13−24を繰り返す。
【0187】こうして処理を行う結果として、3D点計算器3090は被写体オブジェクト3300の頂点を表す3D空間中の点の組を生成する。それぞれの頂点は1つ以上のデプスマップ多面体からの3つの多角形が接する位置を表す。
【0188】図2に戻って、被写体オブジェクト3300の頂点を表す3D点を計算するステップS2−12の処理の後、ステップS2−14で多角形生成器3100は計算した3D点を連結して被写体オブジェクトの面を表す多角形メッシュを生成する処理を行う。
【0189】図19は、ステップS2−14で多角形生成器3100が行う処理動作を示す。
【0190】図19において、ステップS19−2で多角形生成器3100は生成される多角形メッシュの多角形について識別データを生成し、3D点計算器3090によって生成された各3D点についていわゆる「署名」を判断する。
【0191】図20は、ステップS19−2で多角形生成器3100によって行われる多角形IDデータを生成し被写体オブジェクト3300の頂点を表すそれぞれの計算した3D点について「署名」を定義する処理動作を示す。
【0192】図20において、ステップS20−2で多角形生成器3100は被写体オブジェクト3300の頂点として3D点計算器3090が3D点を計算する次の多角形(このステップが初めて行われる場合は最初の多角形)を検討する。
【0193】ステップS20−4で、多角形生成器3100はステップS20−2で選択した多角形に、このステップの以前の繰り返しによりIDが割り当てられていない場合、特有のIDを割り当てる。
【0194】ステップS20−6で、多角形生成器3100は被写体オブジェクト3300の頂点を計算するのに使われたその他の多角形が存在するか否かを判断する。上記の方法により、各多角形を処理するまでステップS20−2からS20−6を繰り返す。
【0195】ステップS20−8で、多角形生成器3100はステップS17−6及びS18−10で多角形生成器3100によって生成されたリストから被写体オブジェクト3300の次の計算した頂点を検討し、ステップS20−10でその3D点で接する多角形のIDを含む頂点の署名を定義する(これらのIDはステップS20−4で多角形に割り当てられる)。
【0196】ステップS20−12で、多角形生成器3100はステップS17−6及びS18−10で生成されたリストに被写体オブジェクト3300の他の計算した頂点が存在するか否かを判断する。上記の方法により、各頂点を処理するまでステップS20−8からS20−12を繰り返す。
【0197】図19に戻って、ステップS19−4で多角形生成器3100は3D点計算器3090によって計算された3D点を、ステップS19−2で定義された署名に従って組にまとめる。
【0198】図21は、ステップS19−4で多角形生成器3100によって行われる処理動作を示す。
【0199】図21において、ステップS21−2で多角形生成器3100はステップS2−12で3D点計算器3090によって計算された次の3D点(ステップS19−2が初めて行われる場合は最初の3D点)を検討する。
【0200】ステップS21−4で、多角形生成器3100はステップS21−2で選択した点の署名(ステップS19−2で割り当てられた署名)を読み取り、ステップS21−6で署名に定義された各多角形に対する点の組にこの3D点を割り当てる。つまり、3D点は3つの異なる組に割り当てられる。3D点の署名には各多角形に対して1つの組が定義されている。
【0201】ステップS21−8で、多角形生成器3100は3D点計算器3090によって計算された、処理を要する3D点が他にもあるか否かを判断する、上記の方法によって各3D点を処理するまでステップS21−2からS21−8を繰り返す。
【0202】図21を参照して説明した処理の結果として、被写体オブジェクト3300の面モデルの中の各多角形に対して点の組を生成する。各組の点は被写体オブジェクト3300の面のある平面上に存在する1つ以上の多角形を定義する。
【0203】図19に戻って、ステップS19−6で多角形生成器3100は被写体オブジェクト3300の面の一部を表す1つの多角形を生成するように各組の3D点を連結する順番を判断する。
【0204】ステップS19−6で多角形生成器3100によって行われる処理ステップを詳細に説明する前に、この処理の原則を説明する。
【0205】図22において、4つの3D点と5つの多角形を例示する。4つの3D点はステップS2−12で3D点計算器3090によって計算されたもので、V1、V2、V3、及びV4とラベル付けする。5つの多角形をa、b、c、d、及びeとラベル付けする。
【0206】ステップS19−6で多角形生成器3100によって計算されるべき各エッジ(連結)は2つの3D点を連結する。どの3D点を連結するかを判断するために、本実施形態では、多角形生成器3100は3D点の署名を使う。より詳しくは、連結されるべき2つの3D点はステップS19−2で割り当てられたその署名の中に双方の署名に共通な2つの多角形IDを有する。例えば、図22の3D点V1の署名は{a、b、e}、3D点V2の署名は{a、b、c}である。従って多角形IDa及びbはこれらの署名に共通であり、3D点V1及びV2の連結を識別する。これらが図22の3D点V1及びV2の間のエッジで接する多角形を定義するためである。
【0207】以下に述べるように、ステップS19−6の処理において、多角形生成器3100は、連結が最初の3D点に戻るまで上記の方法により3D点の署名を使って判断した多角形の周囲の稜線に沿って個々の多角形における3D点の連結を判断する。
【0208】凸型の被写体オブジェクトの場合、3D点を連結するのに必要な処理は1つしかない。というのはステップS19−4で生成された3D点の組(同じ多角形平面上に存在する3D点)にはそれぞれ、同じ2つの多角形IDを署名中に有する3D点は2つしかないためである。例えば、図22において、多角形の3D点のセット(組)は点V1、V2、V3、及びV4を備えるが、点V1及びV2のみは署名中に多角形IDa及びbを有している。
【0209】しかし、凸型ではない被写体オブジェクト面の一部については、署名中に同じ2つの多角形IDを有する3D点が3つ以上存在する可能性がある。従って、3D点の連結は署名のみでは判断できない。
【0210】例えば、図23に示す例では4つの3D点1000、1010、1020、及び1030が2つの多角形910及び1040の交点上に存在する。この例では、4つの3D点1000、1010、1020、及び1030のそれぞれの署名が多角形910及び1040の多角形IDを含む。
【0211】この問題に対処するために、本実施形態では、多角形生成器3100は多角形910及び1040の交点で定義された稜線に沿った順番に基づいた対の点を連結することで3D点間の連結を判断する処理を行う。この処理を以下に詳細に述べる。
【0212】以下に説明するように、本実施形態では、多角形生成器3100は凸型ではない被写体オブジェクト面の一部に関して生じる可能性のある更なる問題、すなわち1つの多角形の同じ平面にオブジェクト面を表す2つ以上の多角形が存在するという問題に対処する処理をも行う。
【0213】こうしたことが生じる第1の例を図28に示す。ここでは被写体オブジェクト面の一部を表す多角形1050及び1060が両方とも多角形910の平面に存在する。
【0214】2つ以上の多角形が同じ平面に存在する第2の例を図24に示す。この例では、多角形1100はオブジェクト面の一部を表し、多角形1110は被写体オブジェクト面の穴を表す。
【0215】ステップS19−6で多角形生成器3100によって行われる処理を以下に詳細に説明する。
【0216】図25は、ステップS19−6で多角形生成器3100が行う処理動作を示す。
【0217】図25において、ステップS25−2で多角形生成器3100は被写体オブジェクト3300の3Dコンピュータモデルに対し空の多角形組(セット)「S」を作成する。被写体オブジェクト3300の面の一部を表す多角形を計算しこの空の多角形に追加していく。
【0218】ステップS25−4で、多角形生成器3100は次の多角形「p」を検討し、その多角形についてステップS19−4で生成した組Vp中の3D点を読み出す。
【0219】ステップS25−6で、多角形生成器3100はステップS25−4で読み出された組Vp中に3D点が存在するか否かを判断する。この処理の第1サイクルでは、組Vp中に3D点は存在し、処理はステップS25−8に進む。しかし以降の処理では、点の連結を計算した後で、3D点を組Vpから削除する。従って、以降のサイクルでは、ステップS25−6において組Vpに3D点はもう存在しないと判断される可能性があり、この場合、処理はステップS25−50に進む。これについては後述する。
【0220】ステップS25−8で、多角形生成器3100は新しい多角形データ構造(structure)「s」をステップS25−2で作成した多角形組「S」に追加する。多角形組「S」には多角形を定義するデータを生成して入力する。ステップS25−8で、多角形生成器3100は多角形データ構造「s」で現在検討されている多角形の法線ベクトルを定義するデータを記憶し、多角形の法線を定義する。
【0221】ステップS25−10で、多角形生成器3100は多角形の開始頂点「u」として組Vpから1つの3D点を選択する(開始頂点「u」としてはどの3D点を選択しても良い)。
【0222】ステップS25−12で、多角形生成器3100は現頂点ポインタ「w」を頂点「u」に設定し、これが現在処理中の頂点であることを表し、ステップS25−14で開始頂点「u」の署名を読み出す。
【0223】ステップS25−16で、多角形生成器3100はステップS30−14で読み出した署名中に定義された多角形「q」を選択する。多角形「q」は(ステップS25−4で選択した)現在検討中の多角形「p」と同じではない。
【0224】多角形生成器3100によって行われる処理の理解を助けるために、図22の例を参照する。図22において、例えば、ステップS30−4で選択した多角形「p」を多角形「a」とする。組Vp中の3D点はV1、V2、V3、及びV4である。
【0225】さらに、3D点V2がステップS25−10で開始頂点(u)として選択されたとする。そこでステップS25−16で、多角形生成器3100は多角形bあるいは多角形cを選択する。これらの多角形はいずれも3D点V2の署名中に多角形aとともに定義されているからである。ステップS25−16で、多角形cが選択されたと仮定する。
【0226】図25に戻って、ステップS25−18で多角形生成器3100は現在の頂点「w」(すなわち検討した例では3D点V2)を組Vpから除去し、ステップS25−20でこの頂点をステップS25−8で生成した多角形データ構造「s」に追加することで、多角形「s」の1つの頂点を定義する。
【0227】ステップS25−22で、多角形生成器3100は組Vpに残った、署名の中にステップS25−16で選択した多角形「q」のIDを有する3D点の組「Vpq」を判断する。
【0228】再び図22の例において、3D点V3は署名{a、c、d}を持ち、組Vpでは署名に(ステップS25−16で選択した)多角形cを有する唯一の点である。
【0229】ステップS25−24で、多角形生成器3100はステップS25−22で判断された組Vp中に3D点が存在するか否かを判断する。
【0230】処理の第1サイクルにおいて、組Vpqには3D点が存在する。しかし、上述したように、ステップS25−18で、処理の後組Vpから各3D点を除去する。そのため、ある多角形の頂点を全て処理すれば、組Vpqには3D点は1つもなくなる。この場合、処理はステップS25−6に戻り、多角形生成器3100は組Vpに3D点が残っているか否かを判断する。
【0231】上述した図23及び図24に示すように、多角形「p」(デプスマップ多面体の多角形)中に存在する被写体オブジェクト3300の多角形は3つ以上あるならば、組Vpに点が残っている可能性はある。多角形「p」に2つ以上の多角形がある場合、ステップS25−24の検査で、1つの多角形を処理すれば、組Vpq中には多角形は1つも残らないと判断される。ステップS25−6の処理では、多角形「p」中の更なる多角形について連結を計算する必要なある場合、組Vp中に3D点が残っていると判断される。この場合、処理はステップS25−6からS25−8に進み、多角形「p」中の更なる多角形について新たな多角形データ構造を生成する。
【0232】ステップS25−24で組Vpqの中に点が存在すると判断した場合、処理はステップS25−26に進み、多角形生成器3100は組Vpq中の点の数が1に等しいか否かを判断する。組Vpq中の3D点はそれぞれ現在の頂点「w」に連結する可能性のある3D点を表している。そこで、組Vpq中に1つの、そして唯一の点があるならば、図22に示す状況が生じる。しかし、組Vpq中に2つ以上の点があるならば、上述の3D点1000、1010、1020、及び1030に関する図23に示す状況が生じる。
【0233】図25−26で組Vpq中に1つの、そして唯一の3D点があると判断した場合、処理はステップS25−28に進み、多角形生成器3100は多角形「s」の次の頂点「x」(現在の頂点に連結する頂点)を組Vpq中の3D点に設定する。
【0234】図22の例では、多角形cをステップS25−16で選択した多角形とすると、ステップS25−28で設定される次の頂点「x」は3D点V3となる。
【0235】処理はステップS25−44に進み、多角形生成器3100は現頂点ポインタ「w」を頂点「x」に設定する。
【0236】ステップS25−46で、多角形生成器3100は現在の頂点の署名を読み出し、ステップS25−48で、ステップS25−4で選択した多角形「p」でもステップS25−16で選択した多角形「q」でもない、署名中に定義された多角形「r」を選択する。図22の例では、3D点V3の署名は{a、c、d}なので、ステップS25−48では多角形dを選択する。
【0237】処理はステップS25−18に戻り、現在の頂点を組Vpから除去する。
【0238】こうして、多角形生成器3100は多角形中の3D点について順次、各頂点に連結する頂点を判断し、処理された頂点を削除していく。ステップS25−24で組Vpqにもはや3D点が存在しておらず、多角形の全ての頂点は連結されたと判断した場合、多角形の処理を終了する。
【0239】ステップS25−26に戻り、組Vpq中に2つ以上の3D点が存在すると判断した場合、図23に示した例のように、いくつかの3D点1000、1010、1020、及び1030が2つの多角形の交点が定義した線の中に存在するという状況が生じる。この場合、多角形生成器3100は、現在検討中の3D点の相対位置と全ての3D点が直線に沿って並ぶ、組Vpq中の3D点に基づいて、現在検討中の3D点に連結されるべき組Vpq中の3D点を判断する。
【0240】特に、ステップS25−30で、多角形生成器3100は組Vpq中の3D点の数は奇数が偶数かを判断する。
【0241】定義では、2つの多角形の交点により定義される稜線上に存在する3D点の数は偶数でなければならない。これは3D点が、第1の3D点と第2の3D点、第3の3D点と第4の3D点といったように対で連結されなければならないためである。従って、図23の例では、3D点1000を3D点1010に、3D点1020を3D点1030に連結する。
【0242】しかし、現在の頂点「w」の処理を終えたために、ステップS25−18で組Vpから2つの多角形の交点によって定義された稜線上に存在する3D点の1つを除去したがために、ステップS25−30で検査した組Vp中の3D点の数が奇数になることもある。
【0243】これに対し、ステップS25−10で選択した開始頂点「u」が3つ以上の頂点が存在する稜線上の頂点の1つからなり、次の処理された頂点が3つ以上の頂点を有する稜線上にある頂点ではない場合(すなわち、開始頂点が3つ以上の頂点を有する稜線上の端頂点の1つであり、多角形が3つ以上の頂点を有する稜線に沿って通過しない方向にわたっている場合)、ステップS25−30で検査した組Vpqの3D点の数は偶数となる。これは開始頂点がステップS25−18で組Vpから除去されており、3つ以上の頂点を有する稜線上に存在する頂点でもある現在の頂点wもまたステップS25−18で組Vpから除去されているからである。
【0244】従って、例えば図23の例で、多角形910をステップS25−4で選択した多角形とし、3D点1000がステップS25−10で開始頂点「u」として選択されたと仮定する。多角形1040がステップS25−16で選択された場合、ステップS25−18で3D点1000が組Vpから除去され、ステップS25−22及びS25−24で組Vpqが3つの3D点、すなわち点1010、1020、及び1030を含むと判断される。これに対し、多角形1080がステップS25−16で多角形1040の代わりに選択された場合、ステップS25−18で3D点1000を組Vpから除去し、ステップS25−28以降で3D点1070を処理する。以降の処理では、3D点1010、1020、及び1030の1つが現在の頂点「w」となる。これらの点の最初のものが現在の頂点「w」になれば、それはステップS25−18で組Vpから除去され、ステップS25−24及びS25−26で検査した組Vpq中には多角形910及び1040の交点に存在する2つの点(すなわち偶数個の点)が残る。
【0245】結果的に、ステップS25−30で組Vpqの点の数は奇数であると判断した場合、多角形生成器3100は多角形「p」及び「q」の交点に存在する3D点の組「Vline」を、それが現在の頂点「w」と組Vpq中の3D点で構成されるように定義する。
【0246】これに対し、ステップS25−30で組Vpq中の点の数が偶数であると判断した場合、多角形生成器3100はステップS25−32で多角形p及びqの交点に存在する3D点の組「Vline」を、それが現在の頂点「w」、開始頂点「u」、及び組Vpq中の3D点で構成されるように定義する。
【0247】ステップS25−32又はS25−34に続いて、処理はステップS25−36に進み、多角形生成器3100は多角形「p」及び「q」の交点で定義された線に沿った相対位置に従って、組Vlineのそれぞれの3D点に0からn−1(nは組Vlineの点の数)のランクをつける。詳細には、交点上の端点の1つ(どれでも良い)をランク0とし、組Vlineの他の点を、ランク0の点から離れる方向にランク1、2、...とする。図23に示す例では、3D点1000をランク0、3D点1010をランク1、3D点1020をランク2、3D点1030をランク3とする。
【0248】ステップS25−38で、多角形生成器3100は現在の頂点「w」のランクが偶数であるか奇数であるかを判断する。
【0249】ステップS25−38で現在の頂点「w」のランクが偶数であると判断した場合、ステップS25−40で多角形生成器3100は多角形「s]の次の頂点「x」(すなわち、現在の頂点に連結する頂点)を組Vpq中の頂点「v」に、rank(v) = rank(w) + 1 … (1)を満たすように設定する。
【0250】これに対し、ステップS25−38で現在の頂点「w」のランクが奇数であると判断した場合、ステップS25−42で多角形生成器3100は多角形「s]の次の頂点「x」を組Vpq中の頂点「v」に、rank(v) = rank(w) - 1 … (2)を満たすように設定する。
【0251】そして、処理はステップS25−44に進む。
【0252】上述したように、ステップS25−44で多角形生成器3100は現頂点ポインタ「w」を頂点「x」に設定し、ステップS25−46で新たな現在の頂点の署名を読み出す。
【0253】ステップS25−48で、多角形生成器3100はステップS25−4で選択した多角形「p」でもステップS25−16で選択した多角形「q」でもない、ステップS25−46で読み出した署名中に定義された多角形「r」を選択する。
【0254】ステップS25−48の後、処理はステップS25−18に戻る。
【0255】再びステップS25−6で、(ステップS25−18の処理の前回のサイクルで全ての3D点を除去したため)組Vp中に3D点がもはや存在しないと判断した場合、ステップS25−4で選択した多角形「p」上に存在する3D点の全てについて連結を判断されており、処理はステップS25−50に進む。
【0256】ステップS25−50で、多角形生成器3100はデプスマップ多面体多角形「p」中に2つ以上の被写体オブジェクト多角形が存在するか否かを判断する。特に本実施形態では、多角形生成器3100は多角形「p」に対して2つ以上の多角形データ構造「s」を生成したか否かを判断する(新たな多角形データ構造「s」はステップS25−8で多角形「p」中に存在する各多角形について生成される)。
【0257】ステップS25−50で、多角形「p」中に2つ以上の多角形が存在すると判断した場合、処理はステップS25−52に進み、多角形生成器3100は多角形「p」中の各多角形を検査することで、それが多角形「p」中に存在する他の多角形のいずれかを含むか否かを判断する。
【0258】ステップS25−54で、多角形生成器3100は多角形「p」中の各多角形が被写体オブジェクト3300の面の一部を表すか、あるいはその中の穴を表すかを判断する。特に、ある多角形が他のどの多角形にも含まれない場合、それは被写体オブジェクト3300の面を表す。1つの、すなわち、唯一の多角形が他の多角形の内側に存在する場合には、大きい方の多角形が被写体オブジェクト3300の面を表し、大きな多角形に含まれる小さい多角形が面の穴を表す。ある多角形中に2つ以上の多角形が含まれている場合、多角形生成器3100は各親多角形が子多角形を含むように階層を作成する。次に多角形生成器3100は階層中の奇数番目の層の各多角形を被写体オブジェクト3300の面として識別し、偶数番目の層の多角形を穴として識別する。
【0259】これに対し、ステップS25−50で多角形「p」中に多角形が1つしかないと判断した場合、ステップS25−52及びS25−54は省略される。
【0260】ステップS25−56で、多角形生成器3100はステップS25−2で識別した多角形の中で他に処理すべきものが残っているか否かと判断する。
【0261】ステップS25−56で処理すべき他の多角形が残っていると判断した場合、処理はステップS25−4に戻る。
【0262】上記の方法で各多角形を処理するまで、ステップS25−4からS25−56を繰り返す。
【0263】この処理の結果として、多角形生成器3100は被写体オブジェクト3300の面を表す多角形メッシュを計算する。
【0264】図19に戻って、ステップS19−8で多角形生成器3100はステップS19−6で生成された多角形中の3D点を連結することで連結された平面三角形のメッシュを生成する。本実施形態では、多角形生成器3100はステップS19−8の処理を例えばOpen GL Programming Guide 2nd edition (ISBN 0-201-46138-2) 11章に記載されたように、Open GL Utility library “glutess”からの従来の方法を用いて行う。
【0265】本実施形態では、ステップS19−8で3D点を連結する際、多角形生成器3100は3D空間において同じ位置を有する点(すなわち、ステップS8−12で生成された仮想頂点)を連結しても良い。
【0266】図2に戻って、ステップS2−16で多角形生成器3100は、多角形メッシュ中のゼロ長さ稜線を削除する処理を行う。この処理は例えばHoppeなどの“Mesh Optimization”(ACM SIGGRAPH 93、Addison-Wesley社刊、ISBN 0-201-58889-7)に記載されるような従来の方法で行われる。
【0267】ステップS2−18で、サーフェステクスチャラ3110は入力デプスマップの画像データを処理して、ステップS19−8で多角形生成器3100が生成した面モデルの各面三角形のテクスチャデータを生成する。
【0268】具体的には、本実施形態では、サーフェステクスチャラ3110は従来の方法で処理を行い、ステップS19−8で生成された面メッシュの各三角形を選択し、選択した三角形の正面に最も近い入力デプスマップ「i」を見つける。つまり、
値が最大の入力画像が見出される。ここで、
は、各三角形法線であり、
は、i番目のデプスマップのビューイング方向である。これにより選択した面三角形が最大の投影領域を有する入力デプスマップを識別する。
【0269】次に選択した面三角形を識別した入力デプスマップに投影し、投影された三角形の頂点をデプスマップの画像データのテクスチャ座標として用いることで画像テクスチャマップを定義する。
【0270】ステップS2−18でテクスチャデータを生成するのにサーフェステクスチャラ3110が用いうる他の技術は同時係属出願の英国特許第0026331.9号、第0026343.4号、第0026347.5号に記述されており、その内容はここに参照として含む。
【0271】上述した処理を行った結果が被写体オブジェクト3300の面のVRML(あるいは同様の形式)のモデルであり、これはモデルにレンダリングされるべき画像データを定義するテクスチャ座標を備えている。
【0272】ステップS2−20で、中央制御装置3020は出力データ記憶装置3130から多角形生成器3100が生成した被写体オブジェクト3300の面モデルを定義するデータ(さらに、サーフェステクスチャラ3110が生成した面モデルのテクスチャデータ)を出力する。このデータは例えばディスク3140などの記憶装置に記憶されたデータあるいは信号3150として出力される。代わりに、中央制御装置3020はディスプレイプロセッサ3120をしてテクスチャデータでレンダリングされた被写体オブジェクト3300の3Dコンピュータモデルの画像を、ユーザが例えばユーザ入力装置3006を使って入力した視点に従って、表示装置3004に表示する。
【0273】第2実施形態本発明の第2実施形態を以下に説明する。
【0274】第2実施形態の構成要素及びそれらによってなされる処理動作は第1実施形態と同様だが、被写体オブジェクト3300の頂点を表す3D点を計算し連結するために、図2bのステップS2−12で3D点計算器3090によって行われる処理動作とステップS2−14で多角形生成器3100によって行われる処理動作が異なる。
【0275】詳しくは、第2実施形態では、図13乃至18を参照して説明した処理を行う代わりに、3D点計算器3090は最初の2つの(ステップS2−10で多面体生成器3070によって生成された)デプスマップ多面体と形成する多角形の交点を計算し、多角形生成器3100は例えばSzilvasi-Nagyの“An Algorithm for Determining the Intersection of Two Simple Polyhedra” (Computer Graphics Forum 3 (1984)、291〜225ページ)、或いは、Martin Lohleinの“A Volumetric Intersection Algorithm for 3D-Reconstruction Using a Boundary-Representation”(http://i31www.ira.uka.de/diplomarbeiten/da_martin_loehlein/Reconstruction.html)に記載されたような従来の方法を用いて、得られた点を連結する。これにより、多角形メッシュを有する被写体オブジェクトの最初の画像が生成される。最初の画像を形成する多角形と次のデプスマップ多面体の交点を3D点計算器3090によって計算し、被写体オブジェクトの第2の多角形メッシュ画像を生成する。この処理もまた、Szilvasi-Nagy又はMartin Lohleinの上記の参考文献に記述した従来の方法で行われる。デプスマップ多面体が全て交差するまでデプスマップ多面体を有する多角形メッシュ画像を交差させる処理を繰り返し、被写体オブジェクト3300の最終的な多角形メッシュ画像を得る。
【0276】第1実施形態で3D点計算器3090によって行われる処理よりも計算上高いコストがかかるものの、第2実施形態で行われる処理は被写体オブジェクト3300の頂点を表す3D点を正確に計算するうえでさらに効果的である。
【0277】第3実施形態本発明の第3実施形態を説明する。
【0278】第3実施形態の構成要素及びそれらによってなされる処理動作は第1実施形態と同様だが、被写体オブジェクト3300の頂点を表す3D点を計算するために、図2のステップS2−12で3D点計算器3090によって行われる処理動作が異なる。
【0279】詳しくは、第1実施形態では、ステップS13−2で被写体オブジェクト3300の面上の計算されるべき点を全て含むように定義された初期ボリュームをより小さなボリュームに再分割することを、各ボリュームがオブジェクト3300の面上の3D点を所定数だけ含むことができるように十分に小さなボリュームを生成するまで繰り返す。再分割プロセスによって小さなボリュームを生成すると、3D点を計算し検査する。
【0280】しかし、これはオブジェクトの面上の点を表す点を計算するのに特に効率的な方法であるが、他の方法も可能である。
【0281】従って、第3実施形態では、多面体を形成する平面多角形の位置を参照することなく、計算した3D点を全て含む初期ボリュームを複数の部分に分割し、これらの部分を再分割することなく3D点計算を行う。
【0282】具体的には、ステップS13−2で定義されたボリュームを複数の部分(例えば同じ形状とボリューム)に分割し、各部分を多面体に対して検査することで、ステップS2−10で生成された多面体の少なくとも1つの多角形の完全に外側に位置するか否かを判断する。
【0283】ボリューム部分が少なくとも1つの多面体の外側にある場合、そのボリューム部分は破棄される。これに対し、ボリュームが少なくとも部分的に全ての多面体の内側にある場合、多面体の平面多角形が交差するボリューム部分の3D点を計算する。このようにして、各ボリューム部分を破棄、又は3D点を計算するが、更なる再分割は生じない。
【0284】ボリューム部分の3D点を計算するには、3つの平面多角形の各組み合わせを検討し、これらの多角形の交点を計算し検査することで、それがボリューム部分の内側にあるか否かを判断する。上述した第1実施形態に比べ、計算し検査すべき交点の数は増加するが、3Dコンピュータモデルを生成するにはより効率的な方法である。というのは、ボリューム部分が全ての多面体の外側に存在すればそれを破棄することができ。従って、多面体を形成する平面多角形の全てのありうる交点を計算し検査する必要なないからである。
【0285】第4実施形態本発明の第4実施形態を説明する。
【0286】第4実施形態の構成要素及びそれらによってなされる処理動作は第1実施形態と同様だが、被写体オブジェクト3300の頂点を表す3D点を計算し連結するために、図2のステップS2−12で3D点計算器3090によって行われる処理動作とステップS2−14で多角形生成器3100によって行われる処理動作が第4実施形態では異なる。
【0287】この相違点を説明する。
【0288】図26は、第4実施形態でステップS2−12で3D点計算器3090によって行われる処理動作を示す。
【0289】図26において、ステップS26−2で3D点計算器3090はステップS2−10で生成した全ての多面体からの平面を全て検討し、3つの平面の次の組を検討する(ステップS26−2が始めて実行される場合は最初の組となる)。
【0290】ステップS26−4で、3D点計算器3090はステップS26−2で検討した3つの平面の交点の点を計算する。より詳細には、本実施形態では従来の平面交点アルゴリズムを用いてそれぞれが3つの平面を含む3つの平面が接する点を計算することで交点の点を計算する。
【0291】ステップS26−6で、3D点計算器3090はステップS26−4で計算した交点の点がステップS2−10で生成した全ての多面体の内側に存在するか否かを判断する。
【0292】ステップS26−6で、点が少なくとも1つの多面体の外側にあると判断した場合、その点は被写体オブジェクト3300の面上の点を表すことはできないので、ステップS26−8でその点を破棄する。
【0293】これに対し、ステップS26−6で点が全ての多面体の内側にあると判断した場合、ステップS26−10で3D点計算器3090はその点がステップS26−2で検討した3つの平面の全ての内側に存在するか否かを判断する(尚、この点は平面自体の交点の点を計算するのではなく、面を含む平面の交点の点を計算することで計算されたので、これらの平面の1つ以上の外側に位置する可能性がある)。
【0294】ステップS26−10で点が少なくとも1つの平面の外側にあると判断した場合、その点は被写体オブジェクト3300の面上の点を表すことはできないので、ステップS26−8でその点を破棄する。
【0295】これに対し、ステップS26−10でその点が3つの平面全ての内側にあると判断した場合、ステップS26−12で被写体オブジェクト3300の面上の1点としてその点を保持する。さらに、その点で接する平面の3つのIDで構成される3つの「署名」を割り当てる。
【0296】ステップS26−14で、3D点計算器3090は3つの平面の他の組があるか否かを判断する。上記の方法で3つの平面のそれぞれの組が処理されるまでステップS26−2からS26−14を繰り返す。
【0297】この処理を行った結果、3D点計算器3090はステップS2−10で生成した多面体からの3つの平面の可能な組み合わせについて交点の点を計算し検査することで、被写体オブジェクト3300の面上の点を表す3D空間の点で構成される被写体オブジェクト3300の3Dコンピュータモデルを生成する。
【0298】ステップS2−14で、多角形生成器3100はステップS26−12で保持した3D点を、どの点を連結すべきかを判断するために割り当てられた署名を用いて連結することで、被写体オブジェクト3300の面を表す多角形メッシュを生成する。これにより、ステップS2−10で生成した多面体全ての交点から生じた3D点を計算し検査した後で3D点を連結して多角形メッシュを生成する処理を行う。
【0299】第4実施形態で、ステップS2−14で多角形生成器3100が行う処理は第1実施形態のものと同じだが、第4実施形態では図19に示すステップS19−2を図26のステップS26−12で代わりに行う。
【0300】上記の実施形態は特許請求の範囲内でさまざまに変形できる。
【0301】例えば、上述した実施形態では、入力データはカメラ固有のパラメータを定義する。しかし、そうではなく、いくつかあるいは全てのカメラパラメータにデフォルト値を割り与えて良い、あるいは例えば、Hartleyの“Euclidean Reconstruction From Uncalibrated Views” (Application of Invariance in Computer Vision、Mundy、Zisserman、及びForsyth編、237〜256ページ、Azores1993)に記載された従来の方法によって、処理装置3002が固有のパラメータ値を計算する処理を行っても良い。
【0302】上記の第1実施形態では、入力データは各デプスマップの各画素についてその画素が被写体オブジェクトあるいは他のもの(背景)を表すのかを定義し、処理装置3002ではこの「分割(segmentation)」処理を行うための処理を行った。しかし、各画素が表すものが被写体オブジェクトか背景かを定義するためのこうした画像データの分割は、第1の実施形態では残りの処理を首尾よく動作させるために必要なものではない。これは被写体オブジェクトとは物理的に分離した背景はデプスマップから生成した多面体が交差するときに除去されるためである。
【0303】上述の実施形態では、ステップS8−12で生成された仮想頂点は全て同じ3D位置を有している。そうではなく、仮想頂点をその3D位置にわずかな差を有して定義しても良い。こうして、第1実施形態では、ステップS14−36及びS14−40の処理をボリュームの状態を「再分割(subdivide)」に設定する処理ステップに代えることができ、ステップS13−14及びS13−16の処理を行う必要がない。しかしながら、第1実施形態のこの変形の不利な点は単一の仮想頂点を含むのに十分なほど小さいボリュームを得るためには3Dボリュームを何度も再分割する必要があることだ。
【0304】第1実施形態で、ステップS13−4及びS13−22でスタックから取り出した3Dボリュームを再分割する際、行われる再分割は新たな8つの子ボリュームを生成するボリュームの2値再分割を有する。しかしながら、異なるタイプの再分割ももちろん可能である。
【0305】上述の実施形態では、コンピュータがプログラミング命令によって定義された処理ルーティンを用いて処理を行う。しかし、処理の1部あるいは全てをハードウェアを用いて行うことも可能である。
【出願人】 【識別番号】000001007
【氏名又は名称】キヤノン株式会社
【出願日】 平成14年6月11日(2002.6.11)
【代理人】 【識別番号】100076428
【弁理士】
【氏名又は名称】大塚 康徳 (外3名)
【公開番号】 特開2003−85584(P2003−85584A)
【公開日】 平成15年3月20日(2003.3.20)
【出願番号】 特願2002−169585(P2002−169585)