JP3793115B2 - 3dコンピュータモデリング装置 - Google Patents
3dコンピュータモデリング装置 Download PDFInfo
- Publication number
- JP3793115B2 JP3793115B2 JP2002169584A JP2002169584A JP3793115B2 JP 3793115 B2 JP3793115 B2 JP 3793115B2 JP 2002169584 A JP2002169584 A JP 2002169584A JP 2002169584 A JP2002169584 A JP 2002169584A JP 3793115 B2 JP3793115 B2 JP 3793115B2
- Authority
- JP
- Japan
- Prior art keywords
- volume
- polyhedron
- volume portion
- points
- point
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/20—Finite element generation, e.g. wire-frame surface description, tesselation
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Processing Or Creating Images (AREA)
- Image Analysis (AREA)
- Image Processing (AREA)
- Length Measuring Devices By Optical Means (AREA)
Description
本発明は、オブジェクトの3次元(3D)コンピュータモデルを生成するコンピュータ処理に関する。特に、本発明は、オブジェクトの少なくとも一部を含む3D空間のボリュームを各々が定義する多面体(pplyhedra)の共通部分を計算することによって、3Dコンピュータモデルを生成するコンピュータ処理に関する。
【0002】
オブジェクトの3Dコンピュータモデルを生成する方法としては、数多くの方法が知られている。
【0003】
既知の方法としては、「shape-from-silhouette」法がある。この方法は、既知の位置及び向きで記録したオブジェクトの画像を処理し、各画像中のオブジェクトのシルエットを逆投影し、そのオブジェクトを含むと共に頂点が画像を記録したときのカメラの焦点の位置にある無限の円錐形を生じることによって3Dコンピュータモデルを生成する。従って、各円錐形が、オブジェクトが占める3D空間のボリュームを制限することで、オブジェクトに近似する各円錐形の共通部分が計算される。
【0004】
shape-from-silhouette法の例は、例えば、Illingworth及びHiltonの“Looking to build a model world: automatic construction of static object models using computer vision”(Electronics and Communication Engineering Journal、1998年6月、103〜113ページ)、及び、Niemの“Automatic reconstruction of 3D objects using a mobile camera”(Image and Vision Computing 17、1999年、125〜134ページ)などに記載されている。しかし、これらの論文の双方に記載されている方法では、シルエット円錐形の共通部分を計算して複数のボクセル(直平行六面体)から構成されるオブジェクトの「ボリューム表現」を生成する。具体的には、3D空間を複数のボクセルに分割し、これらのボクセルを検査してどのボクセルがシルエット円錐形の共通部分により定義されるボリュームの内側に位置するかを判定する。共通部分のボリュームの内側のボクセルは、オブジェクトを表す複数のボクセルのボリュームを定義するために保持される。
【0005】
しかし、このようなボクセル技術には、幾つかの問題点がある。特に、結果として生じるオブジェクトのボリューム表現の正確さ及び解像度は、3D空間が分割される各ボクセルの寸法により判定される。このために、ボクセルの寸法を縮小してモデル解像度を向上すると、検査を要するボクセルの数が大幅に増加し、結果的に処理時間が長くなる。加えて、大半のコンピュータグラフィックスレンダリングアルゴリズムは、ボクセルモデルをレンダリングしてユーザに対して表示するための画像を生成することができないので、ボクセル表現は、複数の多角形(ポリゴン)から成るサーフェスモデルへと変換される必要がある。この変換により、更なる処理資源及び処理時間が必要になるだけでなく、結果として生じるコンピュータモデルの解像度及び正確さが低下する可能性がある。
【0006】
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コンピュータモデルを生成するshape-from-silhouette法を開示するが、この方法ではボクセル表現を生成しない。代わりに、複数の画像を元にした各シルエット円錐形の共通部分が直接計算される。具体的には、方法は、まず始めにオブジェクトを含む立方体を用意し、第1のシルエット円錐形と交わらせてオブジェクトの第1の近似を得る。続いて、この近似を次の円錐形と交わらせ、同様の処理を繰り返す。シルエット円錐形を近似と交わらせるために、この円錐形及び近似は、円錐形作成の元となった画像へと投影される。これにより、円錐形は元の2D多角形(シルエット)へと戻され、近似は3D多角形から2D多角形へと戻される。円錐形の多角形は、2D多角形の交わり用の従来のアルゴリズムを使用して近似の全ての多角形と交わるように仕向けられる。
【0007】
しかしながら、“A Volumetric Intersection Algorithm for 3d-Reconstruction Using a Boundary-Representation”に記載された方法は、処理資源及び処理時間の観点から見て非効率的である。本発明者等は、この問題が発生する1つの理由が、シルエット円錐形を表現と交わらせることで平面を定義する複数の連結3D点から構成されるより精度の高い表現を生成し、この表現を別のシルエット円錐形と交わらせ、更に同様の処理を繰り返すインクリメンタル手法にあることを認識した。
【0008】
M. Szilvasi-Nagyの“An Algorithm for Determining the Intersection of Two Simple Polyhedra”(Computer Graphics Forum 3、1984年、219〜225ページ)では、「plane-sweep アルゴリズム」を使用して各多面体のエッジともう一方の多面体の面との全ての共通部分を見出すことによって、四面体及び角柱などの2つの単純な多面体の共通部分を計算する方法を開示している。この方法は、それぞれの面の数が少ない2つの多面体に対しては有用であるが、3つ以上の多面体及び/又は面の数が多い多面体の場合は、計算資源及び計算時間の観点から見て極めて非効率的であろう。
【0009】
本発明は、上述の問題点を考慮してなされたものであり、問題点の1つ以上に対処することを目的とする。
【0010】
本発明によると、少なくとも3つの多面体を交わらせることによって、オブジェクトの非ボクセル表現を生成するコンピュータ処理方法及び装置が提供される。多面体を構成する平面の各々の共通部分の各点が計算/検査され、どの点がオブジェクトの点に対応するかが判定される。各オブジェクト点は、そこで交わる平面と共にラベル付けされる。その後、全てのオブジェクト点の識別が終了すると、ラベルに応じてオブジェクト点間の連結が特定される。
【0011】
このように、オブジェクト点間の連結を判定する前にオブジェクト点の全てを計算する場合、連結を判定する処理を1度だけ実行すれば良いので、処理資源及び/又は処理時間は必然的に節減される。これは、交差して各オブジェクト点を生成する平面に基づいて各オブジェクト点にラベル付けすると共に、これらのラベルを使用してどのオブジェクト点を相互に連結するべきかを計算することによって可能となる。
【0012】
また、本発明によると、複数の多面体を交わらせることによって、オブジェクトの非ボクセル表現を生成するコンピュータ処理方法及び装置が提供される。中にオブジェクトが入った初期3Dボリュームを複数の部分に分割し、各部分を多面体に対して検査する。ボリュームの一部分が少なくとも1つの多面体の外側にある場合、オブジェクトの表面上の点を含むことができないために廃棄される。多面体の外側にない場合、ボリュームと交わる多面体の面が処理されて共通部分の各点が計算される。従って、共通部分の計算された各点から構成される3Dコンピュータモデルが生成される。
【0013】
このように、オブジェクト上の点を表すことができない共通部分の計算が回避されるために多面体の面の全ての共通部分を計算する必要がないので、処理資源及び処理時間の節減につながる。
【0014】
処理は、初期ボリュームを繰り返し再分割し、ボリュームの一部分が少数の多面体の面と交わる場合にのみ、その部分に対して多面体の面の共通部分を計算することによって、一層効率的に実行されるのが好ましい。説明すると、一実施形態において、各共通部分は3つの多面体の面の共通部分から成る。従って、ボリュームの一部分と交わる3つの面の組み合わせをそれぞれ検査し、これらが相互に交わるか否かを判定する必要がある。結果として、ボリュームの一部分が多数の多面体の面と交わる場合には相当な回数の計算を行なうことになる。共通部分の点はオブジェクト上の点を表さないので、その計算のうちの多くが無駄になる。しかし、初期ボリュームを繰り返し再分割することによって、共通部分を計算する必要なしに大量のボリュームを廃棄することができると共に、少数の多面体の面と交わる十分に小さいボリュームの一部分が得られたときのみ共通部分を計算することによって、実際に実行する必要のある共通部分の計算の回数が最低限に抑えられる。
【0015】
また、本発明は、上述の方法を実行するように動作可能に、あるいは、上述の装置として構成されるように、プログラム可能な処理装置を構成させるための命令を含む記憶装置又は信号などとして具現化されたコンピュータプログラム製品を提供する。
【0016】
添付の図面を参照して、単なる一例としての本発明の実施形態を説明する。
【0017】
第1実施形態
図1を参照すると、本発明の一実施形態は、従来の通りに1つ以上のプロセッサと、複数のメモリと、グラフィックスカードなどを含むパーソナルコンピュータのような処理装置2と、従来通りのパーソナルコンピュータモニタのような表示装置4と、キーボード、マウスなどのユーザ入力装置6と、プリンタ8と、WACOM社製のPL400などの、制御可能画素を有するフラットパネルから構成される表示パネル10とを具備する。
【0018】
処理装置2は、例えば、ディスク12などのデータ記憶媒体に格納されたデータとして及び/又は遠隔データベース等からインターネットなどの通信ネットワーク(図示せず)を介する伝送、あるいは無線伝送により処理装置2に入力され且つ/又はキーボードなどのユーザ入力装置6を介してユーザにより入力される信号14として入力されるプログラミング命令に従って動作するようにプログラムされている。
【0019】
以下に更に詳細に説明するが、それらのプログラミング命令は、入力画像が記録された位置及び向きを計算するために、様々に異なる位置と向きで記録された1つ以上の被写体オブジェクト(subject object)の複数の画像を定義する入力データを処理し且つ計算された位置及び向きを使用して、被写体オブジェクトの3次元コンピュータモデルを定義するデータを生成するように処理装置2を構成させるための命令である。この実施形態では、被写体オブジェクトは、既知の特徴パターンを有する校正オブジェクト(この実施形態においては2次元写真マット)の上で撮影される。入力画像が記録されたときの位置と向きは、画像中の校正オブジェクトパターンの特徴の位置を検出することにより計算される。被写体オブジェクトの3Dコンピュータモデルは、新規の創意に富んだ多面体(polyhedra)共通部分技術を使用して生成される。この技術では、各画像中の被写体オブジェクトの輪郭が複数の部分に分割され、輪郭部分の3D投影により定義される多面体の共通部分を判定することによって被写体オブジェクトの表面の各点を表す3D点を計算するための処理が実行される。以下に更に詳細に説明するが、この処理では、特に、被写体オブジェクトの表面上に3D点を生じることができない多面体内の各面の共通部分の計算をしなくても良いので、非常に効率的な方法で実行される。
【0020】
処理装置2は、プログラミング命令によりプログラミングされたとき、処理動作を実行するための幾つかの機能ユニットとして構成されていると考えることができる。そのような機能ユニットの例及びそれらの相互接続関係を図1に示す。しかし、図1に示すユニット及び相互接続は概念上のものであり、理解を助けるという目的のために一例として示されているにすぎない。従って、それらは、処理装置2のプロセッサ、メモリなどが構成されるユニットや接続を必ずしも表してはいない。
【0021】
図1に示す機能ユニットを説明すると、中央制御装置20はユーザ入力装置6からの入力を処理すると共に、その他の機能ユニットの制御及び処理を実行するように構成されている。メモリ24は、中央制御装置20及びその他の機能ユニットにより使用されるべく設けられている。
【0022】
マット発生器30は、紙などの記録媒体上に校正(キャリブレーション)パターンをプリントしてプリント済の写真マットを形成するため、又は表示パネル10に校正パターンを表示して写真マットを表示するためにプリンタ8又は表示パネル10を制御する制御信号を発生する。以下に更に詳細に説明するが、写真マットは所定の特徴の校正パターンを有し、3次元コンピュータモデルを生成すべきオブジェクトは、プリント済写真マット34、又は、校正パターンが表示されている表示パネル10の上に配置される。その後、オブジェクトの画像及び校正パターンを記録して、処理装置2に入力する。マット発生器30は、処理装置2が入力画像記録時の位置及び向きを計算する際に使用するための、写真マット上にプリント又は表示された特徴の校正パターンを定義するデータを格納するように構成される。すなわち、この実施形態では、マット発生器30は、特徴パターンに対する座標系(実際には校正パターンの基準位置及び基準向きを定義する)と共に特徴パターンを定義するデータを格納するように構成されており、処理装置2は、入力画像が記録されたときの位置及び向きを定義済み座標系において(従って、基準位置及び基準向きに対して)計算するように構成されている。
【0023】
この実施形態では、写真マットの校正パターンは、例えば、PCT特許出願GB00/04469(これらの内容は全て参考として本明細書に取り入れられている)に記載されているような特徴の空間クラスタ、あるいは、例えば、JP−A−9−170914に記載されているような、各々の対応するドットが一意のものであるように各ドットが異なる色相/輝度の組み合わせを有する着色ドットの既知のパターン、例えば、Niemの“Automatic Reconstruction of 3D Objects Using A Mobile Camera”(Image and Vision Computing 17(1999年)、125〜134ページ)に記載されているような、各象限で複数の同心円を寸法がわかっている半径方向線分及び位置マーカで結ぶことにより形成されるパターン、又はGortler他の“The Lumigraph”(Computer Graphics Proceedings, Annual Conference Series、1996年、ACM-0-89791-764-4/96/008に記載されているような、それぞれ異なる直径を有する複数の同心リングから構成されるパターンなどを含む。
【0024】
この実施形態の以下の説明においては、プリント写真マット34を生成するために、校正パターンはプリンタ8により記録媒体(この実施形態では、シート紙)にプリントされるものと想定するが、先に述べた通り、表示パネル10に校正パターンを表示することも可能であろう。
【0025】
入力データ記憶装置40は、例えば、ディスク42などの記憶装置に格納されるデータとして、又は処理装置2へ送信される信号44として、又はユーザ入力装置6を使用して処理装置2に入力される入力データを格納するように構成される。入力データは、様々に異なる位置及び向きで記録された写真マット上の1つ以上の被写体オブジェクトの複数の画像と、写真マットの背景色又は写真マットの背景色と同じ色を有する異なるオブジェクトを示すための写真マットの一部と共に、オブジェクトが撮影された背景を示す入力画像を定義している。加えて、この実施形態では、入力データは、画像を記録したカメラ固有のパラメータ、すなわち、縦横比、焦点距離、主点(光軸が撮影平面と交わる点)、一次半径方向歪み係数及びスキュー角(画素格子の軸が厳密には直交していないことがありえるため、それらの軸が成す角度)を定義するデータも含む。
【0026】
入力画像を定義する入力データは、例えば、画像を記録したデジタルカメラから画素データをダウンロードするか、又はスキャナ(図示せず)を使用して写真を走査することにより生成されても良い。固有カメラパラメータを定義する入力データはユーザの側からユーザ入力装置6を使用して入力されても良い。
【0027】
カメラ計算器50は各入力画像を処理して、画像の中における写真マット上の校正パターンの特徴の位置を検出すると共に、入力画像が記録されたときのカメラの位置と向きを計算するように構成される。
【0028】
画像データセグメンタ60は各入力画像を処理して、被写体オブジェクトに対応する画像データを画像中のその他の画像データから分離するように構成される。
【0029】
画像分割エディタ70は、ユーザの制御の下に、画像データセグメンタ60により生成される分割済画像データを編集するように動作可能である。以下に更に詳細に説明するが、これにより、ユーザは画像データセグメンタ60により生成された画像分割を訂正することができ、特に、例えば、画像データセグメンタ60により誤って判定された画素を訂正し、被写体オブジェクト210に関連付けることができる(例えば、写真マット34及び被写体オブジェクトが撮影のために配置される面で見える印又はその他の特徴に関連する画素、写真マット34及び/又はそれが配置される面上の陰影に関連する画素、及び、入力画像中の被写体オブジェクトの輪郭に接する写真マット34上の校正特徴に関連する画素の全てが、画像データ分割中に誤って分類され、訂正されない場合には、結果として生じる3Dコンピュータモデルが不正確になる可能性がある)。
【0030】
サーフェスモデラ(surface modeller)80は画像データセグメンタ60及び画像分割エディタ70により生成される分割済画像データと、カメラ計算器50により生成される画像が記録されたときの位置及び向きを定義するデータとを処理して、入力画像におけるオブジェクトの実際の面を表現する3Dコンピュータモデルを定義するデータを生成するように構成される。
【0031】
サーフェスモデラ80は、シルエットアプロキシメータ82、3D点計算器84及び多角形生成器86を具備する。
【0032】
シルエットアプロキシメータ(silhouette approximator)82は、画像データセグメンタ60及び画像分割エディタ70により入力画像ごとに生成される分割済画像データを処理し、各画像中の被写体オブジェクトのシルエットを線分で近似するように構成される。
【0033】
3D点計算器84は、シルエットアプロキシメータ82により生成された線分を処理し、線分の3次元空間への投影により定義される多角形の共通部分を計算するように構成される。これらの共通部分は、被写体オブジェクトの表面に潜在的に存在する3D点を定義する。3D点計算器84は、計算された3D点を検査して、どの点が被写体オブジェクト中の実際の点を表すのかを判定するように構成される。
【0034】
多角形生成器(polygon generator)86は、3D点計算器84により生成された3D点を連結し、被写体オブジェクトの表面を表す多角形(polygon)のメッシュを形成するように構成される。
【0035】
具体的には、3D点計算器84により計算される多角形の共通部分が、被写体オブジェクトの視覚的な体を定義するので、これらの3D点は、被写体オブジェクトの表面を表す多角形のメッシュ中の多角形の頂点を形成するように多角形生成器86により連結される。このため、これ以降、3D点計算器84により計算される3D点を3D頂点と呼ぶ。
【0036】
サーフェステクスチャラ90は、サーフェスモデラ80により生成されたサーフェスモデルにレンダリングするために、入力画像データからテクスチャデータを生成するように構成される。
【0037】
ディスプレイプロセッサ110は、中央制御装置20の制御の下に、3Dコンピュータモデルを生成する処理中に、表示装置4を介してユーザに対し画像及び命令を表示するように構成される。更に、中央制御装置20の制御の下に、ディスプレイプロセッサ110は、サーフェスモデラ80により生成されたサーフェスモデルデータを処理し且つサーフェステクスチャラ90により生成されたテクスチャデータをサーフェスモデル上にレンダリングすることにより、ユーザが選択した視点からオブジェクトの3Dコンピュータモデルの画像を表示するように構成される。
【0038】
出力データ記憶装置120は、サーフェスモデラ80により生成されたサーフェスモデルを定義するデータを格納するのに加え、オプションとしてサーフェステクスチャラ90により生成されたテクスチャデータも格納するように構成される。中央制御装置20は、出力データ記憶装置120からのデータの出力を、例えば、ディスク122などの記憶装置へのデータ及び/又は信号124として制御する。
【0039】
図2を参照すると、プリント済写真マット34が面200に配置されており、3Dコンピュータモデルを生成すべき被写体オブジェクト210は、オブジェクト210がマット上の校正パターンを構成する特徴により包囲されるように、写真マット34上に配置されている。
【0040】
面200は、ほぼ一様な色であるのが好ましく、可能であれば、画像データセグメンタ60による分割処理中、入力画像において、被写体オブジェクト210に関連する画像データをその他の画像データから正確に区別することができるように、被写体オブジェクト210中のどの色とも異なるようにする。しかし、いずれかの色と同じである場合、例えば、被写体オブジェクト210中の色と同じ色を有する印220が面200上に出現する(従って、入力画像中にも出現する)場合、この実施形態では、後程詳細に説明するように、ユーザが画像データセグメンタ60により生成される分割データを編集できるようにすることによって、これを実現するべく処理を実行することができる。
【0041】
被写体オブジェクト210の様々に異なる部分を示すため、被写体オブジェクト210及び写真マット34の画像はデジタルカメラ230を使用して様々に異なる位置と向きで記録される。この実施形態では、カメラ230により記録される画像を定義するデータが、ワイヤ232を介して信号44として処理装置2に入力される。
【0042】
具体的に説明すると、この実施形態では、カメラ230の位置は固定されたままであり、被写体オブジェクト210を乗せた写真マット34が面200上で移動(並進)及び(例えば、矢印240の方向に)回転され、カメラ230に対して様々に異なる位置と向きで被写体オブジェクト210の写真が記録される。面200上での写真マット34の回転及び並進中、被写体オブジェクト210はマット34に対して動かない。
【0043】
図3は、カメラ230に対して様々に異なる位置及び向きにある被写体オブジェクト210及び写真マット34の処理装置2へのデータ入力において定義される画像300、302、304及び306の例を示す。
【0044】
この実施形態では、被写体オブジェクト210及び写真マット34の画像の記録/入力に続いて、別の画像を記録し、処理装置2に入力する。この別の画像は、面200と写真マット34がプリントされている紙と同じ色を有するオブジェクトとの画像である「背景画像」である。そのような背景画像は、写真マット34が記録されている紙と同じ色を有する何もプリントされていない紙のシートを面200上に配置するか、あるいは、パターンが画像中で見えないように、写真マット34を裏返して面200上に配置することによって記録されても良い。
【0045】
図4は、この実施形態において入力データを処理するために処理装置2により実行される処理動作を示す。
【0046】
図4のステップS4−2では、中央制御装置20はディスプレイプロセッサ110に対してユーザが処理すべき入力データを入力することを要求するメッセージを表示装置4に表示させる。
【0047】
ステップS4−4では、ステップS4−2で要求に応答してユーザにより入力されたデータを入力データ記憶装置40に格納する。すなわち、この実施形態では、入力データは、カメラ230に対して様々に異なる位置及び向きで記録された被写体オブジェクト210及び写真マット34の画像を定義する画像データと、入力画像を記録するために写真マット34が配置された面200と、写真マット34の校正パターンがプリントされている記録材料と同じ色を有するオブジェクトとを共に示す「背景画像」と、入力画像を記録したカメラ230の固有パラメータ、すなわち、アスペクト比、焦点距離、主点(光軸が撮影平面と交わる点)、1次半径方向歪み係数及びスキュー角(画素格子の軸が成す角度)を定義するデータとから構成されている。
【0048】
ステップS4−6で、カメラ計算器50は、ステップS4−4で格納された入力データを処理して、入力画像ごとに写真マット34上の校正パターンに対する(従って、被写体オブジェクト210に対する)カメラ230の位置と向きを判定する。この処理は、入力画像ごとに、写真マット34の校正パターンを構成している画像中の特徴を検出し、それらの特徴を格納されている写真マットのパターンと比較して、マットに対するカメラ230の位置と向きを判定することから成る。ステップS4−6でカメラ計算器50により実行される処理は、写真マット34上で使用されている特徴の校正パターンによって決まる。適切な処理は、例えば、同時係属PCT出願PCT/GB00/04469、JP−A−9−170914、Niemの“Automatic Reconstruction of 3D Objects Using A Mobile Camera”(Image and Vision Computing 17(1999年)、125〜134ページ及びGortler他の“The Lumigraph”(Computer Graphics Proceedings, Annual Conference Series、1996年、ACM-0-89791-764-4/96/008)に記載されている。
【0049】
ステップS4−8では、画像データセグメンタ60は各入力画像を処理し、被写体オブジェクト210を表現する画像データを写真マット34、及び、写真マット34が配置されている面200を表現する画像データから分離する(ステップS4−8は、この実施形態では、以下に更に詳細に説明するように、後に被写体オブジェクト210の面の3Dコンピュータモデルを生成するときに使用するためのデータを生成する予備ステップである)。
【0050】
図5は、ステップS4−8で画像データセグメンタ60により実行される処理動作を示す。
【0051】
図5を参照すると、ステップS5−2からS5−10において、画像データセグメンタ60は、写真マット34及び背景200を表現するが、被写体オブジェクト210自体を表現しない入力画像中の色を表す量子化値のハッシュテーブルを作成する。
【0052】
具体的に、ステップS5−2で、画像データセグメンタ60は、図4のステップS4−4で格納された「背景画像」(すなわち、面200と、写真マット34がプリントされている材料と同じ色を有するオブジェクトとを示す、処理装置2に入力されるべき最終画像)における次の画素のRGBデータ値を読み取る。
【0053】
ステップS5−4で、画像データセグメンタ60は下記の式に従って画素の量子化赤色(R)値、量子化緑色(G)値及び量子化青色(B)値を計算する。
q=(p+t/2)/t … (1)
式中、「q」は量子化値、
「p」はステップS5−2で読み取られたR、G又はBの値、
「t」は被写体オブジェクト210を示す入力画像からのRGB値が背景とラベル付けされるべき背景色にどれほど近くなければならないかを判定する閾値である。この実施形態では、「t」は4に設定されている。
【0054】
ステップS5−6で、画像データセグメンタ60は、ステップS5−4で計算された量子化R値、G値及びB値を従来と同様に組み合わせて、「三重値(triple value)」を生成する。
【0055】
ステップS5−8では、画像データセグメンタ60は、ステップS5−4で計算された量子化R値、G値及びB値にハッシング関数を適用して、ハッシュテーブルのビン(bin)を定義し、且つステップS5−6で定義された「三重」値を定義されたビンに追加する。すなわち、この実施形態では、画像データセグメンタ60は、下記のハッシング関数を量子化R値、G値及びB値に適用し、ハッシュテーブルのビンを定義する。
h(q)=(qred&7)*2^6+(qgreen&7)*2^3+(qblue&7) … (2)
具体的には、ハッシュテーブルのビンは、各色の3つの最下位ビットにより定義される。この関数は、各ビンが少数の「三重」値のみを有するように、データを試行し、ハッシュテーブルの利用可能なビンに分散させるように選択されている。この実施形態では、ステップS5−8で、「三重」値がビンに既に存在していない場合に限って「三重」値をそのビンに追加するので、各「三重」値はハッシュテーブルに一度しか追加されない。
【0056】
ステップS5−10では、画像データセグメンタ60は、背景画像中に別の画素が存在するか否かを判定する。以上説明したように「背景」画像の各画素を処理し終わるまで、ステップS5−2からS5−10を繰り返す。この処理の結果、「背景」画像中の色を表現する値を含むハッシュテーブルが生成される。
【0057】
ステップS5−12からS5−48では、画像データセグメンタ60は各入力画素を順に考慮し、ハッシュテーブルを使用して、写真マット34及び背景に関連する入力画像中のデータを、被写体オブジェクト210に関連する入力画像中のデータから分離する。分割処理の結果が表示装置4に表示される。
【0058】
この実施形態では、ハッシュテーブルを生成するためにステップS5−2からS5−10で処理される「背景」画像は、写真マット34上の校正特徴を示していない。従って、ステップS5−12からS5−48で実行される分割は被写体オブジェクト210に関連する画素データと、写真マット34上の校正特徴に関連する画素データとを区別しない。その代わりに、この実施形態では、以下に更に詳細に説明するように、被写体オブジェクト210の面の3Dコンピュータモデルを生成するためにサーフェスモデラ80により実行される処理は、写真マット34上の校正特徴に関連する画素がサーフェスモデルに寄与することのないように実行される。
【0059】
ステップS5−12では、画像データセグメンタ60は次の入力画像を考慮し、ステップS5−14では、入力画像中の次の画素(ステップS5−14が初めて実行される場合、これは最初の画素である)のR値、G値及びB値を読み取る。
【0060】
ステップS5−16では、画像データセグメンタ60は先の式(1)を使用して、画素の量子化R値、量子化G値及び量子化B値を計算する。
【0061】
ステップS5−18では、画像データセグメンタ60はステップS5−16で計算された量子化R値、G値及びB値を組み合わせて、「三重値」を生成する。
【0062】
ステップS5−20では、画像データセグメンタ60は先の式(2)に従ってハッシング関数をステップS5−16で計算された量子化値に適用して、ステップS5−2からS5−10で生成されたハッシュテーブルのビンを定義する。
【0063】
ステップS5−22では、画像データセグメンタ60は、ステップS5−20で定義されたハッシュテーブルのビンの「三重」値を読み取る。それらの「三重」値は、写真マット34の材料及び背景の面200の色を表現している。
【0064】
ステップS5−24では、画像データセグメンタ60は、ステップS5−18で生成された、現在考慮すべき入力画像中の画素の「三重」値がハッシュテーブルのビンの背景「三重」値のいずれかと同じであるか否かを判定する。
【0065】
ステップS5−24で、画素の「三重」値が背景「三重」値と同じであると判定されれば、ステップS5−26で、その画素は背景画素であると判定し、画素の値を「黒色」に設定する。
【0066】
これに対し、ステップS5−24で、画素の「三重」値が背景のどの「三重」値とも同じでないと判定された場合には、ステップS5−28で、その画素は被写体オブジェクト210の一部であると判定し、画像データセグメンタ60は画素の値を「白色」に設定する。
【0067】
ステップS5−30では、画像データセグメンタ60は、入力画像に別の画素が存在するか否かを判定する。入力画像中の各画素を以上説明したように処理し終わるまで、ステップS5−14からS5−30を繰り返す。
【0068】
ステップS5−32からS5−46では、画像データセグメンタ60は画像の画素を背景画素又はオブジェクト画素として分類する上での誤りを修正すると共に表示装置4に分割処理の結果を表示するための処理を実行する。
【0069】
具体的には、ステップS5−32で、画像データセグメンタ60はメディアンフィルタとして使用すべき円形マスクを定義する。この実施形態では、円形マスクは4画素分の半径を有する。
【0070】
ステップS5−34では、画像データセグメンタ60はステップS5−32で定義したマスクの中心をステップS5−26及びS5−28で生成された2値画像の次の画素(ステップS5−34が初めて実行される場合には、これは最初の画素である)の中心に配置するための処理を実行する。
【0071】
ステップS5−36では、画像データセグメンタ60はマスク内部の黒色画素の数及び白色画素の数をカウントする。
【0072】
ステップS5−38では、画像データセグメンタ60は、マスク内部の白色画素の数がマスク内部の黒色画素の数以上であるか否かを判定する。
【0073】
ステップS5−38で白色画素の数が黒色画素の数以上であると判定されれば、ステップS5−40で、画像データセグメンタ60はマスクの中心を位置決めする画素の値を白色に設定する。これに対し、ステップS5−38で黒色画素の数が白色画素の数より多いと判定された場合には、ステップS5−42で、画像データセグメンタ60はマスクの中心を位置決めする画素の値を黒色に設定する。
【0074】
ステップS5−44では、ディスプレイプロセッサ110は、現在処理中の入力画像の低解像度版(「サムネイル」画像)を表示装置4に表示し、先にステップS5−34からS5−42で画素に対して実行された分割処理の結果をこのサムネイル画像中に表示する。このように、サムネイル画像は、入力画像中の各画素が処理される毎に分割処理の結果を示すためにインクリメンタルに変更される。この実施形態では、ディスプレイプロセッサ110は、背景を表すものとして判定された入力画像中の画像データが、サムネイル画像中において青色などの所定の色として提示されるようにサムネイル画像中で分割処理の結果を表示する。
【0075】
このようにサムネイル画像を表示することにより、ユーザは、入力画像の処理済の部分と分割処理の結果とを確認できるので、修正が必要か否かを判定することができる。
【0076】
ステップS5−46では、画像データセグメンタ60は2値画像中に別の画素が存在するか否かを判定し、以上説明したように各画素を処理し終わるまで、ステップS5−34からS5−46を繰り返す。
【0077】
ステップS5−48では、画像データセグメンタ60は、処理すべき別の入力画像が存在するか否かを判定する。以上説明したように各入力画像を処理し終わるまで、ステップS5−12からS5−48を繰り返す。
【0078】
再び図4に戻ると、ステップS4−10では、中央制御装置20は、ステップS4−8で生成された画像分割の修正の希望を示す信号がユーザ入力装置6を介してユーザから受信されたか否かを判定する(この実施形態では、信号は、修正が望まれる分割に対応する表示装置4に表示されたサムネイル画像をユーザが指示/クリックすることによって生成される)。
【0079】
ステップS4−10において画像分割を変更すべきであると判定される場合、ステップS4−12において、画像分割エディタ70は、ユーザの入力命令に従ってステップS4−10でユーザにより選択された分割を修正する。
【0080】
図6は、ステップS4−12での画像分割の対話修正中に、画像分割エディタ70により実行される処理動作を示す。
【0081】
図6を参照すると、ステップS6−2において、画像分割エディタ70は、ディスプレイプロセッサ110に対して、ステップS4−10でユーザにより(対応するサムネイル画像を指示/クリックすることによって)選択された画像分割を編集のために表示装置4に表示させる。図7を参照して具体的に説明すると、この実施形態では、表示されたサムネイル画像310から324の全ての中からステップS4−10でユーザにより選択された画像分割318が、サムネイル画像よりも大きい形式でウィンドウ400内に表示される。この実施形態では、ウィンドウ400に表示される画像分割は、分割を生成するように処理された入力画像と同数の画素を有する。加えて、編集用の拡大形式で表示された分割であることを示すために、ユーザにより選択されたサムネイル画像(図7の例ではサムネイル画像318)は、境界が強調表示されたり、あるいは、別の方法で残りのサムネイル画像と区別されたりする。
【0082】
また、ステップS6−2において、画像分割エディタ70は、ディスプレイプロセッサ110に対して、ウィンドウ400内に表示された画像分割上にユーザによる移動が可能なウィンドウ402を表示させる。加えて、画像分割エディタ70は、どの画素がステップS4−8で画像データセグメンタ60によりオブジェクト210又は写真マット34の特徴に属するものとして判定されたか、及び、どの画素が背景画素であると判定されたかをユーザが見ることができるように、ウィンドウ402に含まれる画像分割の一部が拡大形式で示される別のウィンドウ410をディスプレイプロセッサ110に対して表示させる。
【0083】
ステップS6−4において、画像分割エディタ70は、ユーザの命令に従って、ウィンドウ410に表示された画素を背景画素からオブジェクト画素(すなわち、オブジェクト210又は写真マット34の特徴を表す画素)に変更し、及び/又は、オブジェクト画素を背景画素に変更する。具体的には、編集のために、画像分割エディタ70は、この実施形態ではブラシの形態を有し、マウスなどのユーザ入力装置6を使用して移動させることでウィンドウ410において変更する画素を指定することができるポインタ412をディスプレイプロセッサ110に対して表示させる。この実施形態では、ポインタ412を用いてユーザが指示する各画素は、元が背景画素の場合にはオブジェクト画素に変更され、元がオブジェクト画素の場合には背景画素に変更される。この実施形態では、画像分割エディタ70は、ユーザ選択ボタン350及び360をディスプレイプロセッサ110に表示させる。ボタン350を選択すると、ポインタ412の幅が広くなり(同時により多くの画素を指定でき、ウィンドウ410中の広い領域を迅速に変更できるようになる)、ボタン360を選択すると、ポインタ412の幅が狭くなる。
【0084】
このように処理を実行することによって、ユーザは、例えば、画像データセグメンタ60により生成された分割を編集し、画像データセグメンタ60により被写体オブジェクト210に関連するものとして誤って判定された画素(例えば、被写体オブジェクト210の色と同じ色を有する場合、画像データセグメンタ60が被写体オブジェクト210に関連する画像データから分離しないであろう面200上の印220に関連する画素データ)を背景画素として指定して、及び/又は、訂正されない場合には、サーフェスモデラ80により後の処理で生成される被写体オブジェクトの3次元コンピュータモデルにおいて誤差を生じることが判明している画像分割(図7の例に示す)中の被写体オブジェクト210の輪郭に接する写真マット34の各校正特徴に関連する画素を背景として指定する。同様に、ユーザは、画像データセグメンタ60により誤って被写体オブジェクト210に関連する画素であると判定された写真マット34及び/又は面200上の陰影に関する画素を背景として指定することができる。
【0085】
ステップS6−6において、ユーザが(別のサムネイル画像を指示/クリックするか、あるいは、「処理開始」ボタンを指示/クリックすることによって)現在表示中の分割の編集を終了すると、ディスプレイプロセッサ110は、ステップS6−4でユーザにより行なわれた画像分割に対する変更を示すために、ステップS6−4でユーザにより編集された分割に対応する表示中のサムネイル画像(図7の例ではサムネイル画像318)を変更する。
【0086】
再度、図4を参照すると、ステップS4−14において、画像分割エディタ70は、ユーザが画像分割に対して更なる変更を行なうことを希望するか否か、すなわち、ユーザが別のサムネイル画像310から324を指示/クリックしたか否かを判定する。
【0087】
ステップS4−10又はステップS4−14において、画像分割に対してそれ以上の変更が行なわれない(すなわち、ユーザが「処理開始」ボタン340を指示/クリックした)と判定される場合、処理はステップS4−16へと進む。
【0088】
ステップS4−16において、サーフェスモデラ80は、被写体オブジェクト210の面の3Dコンピュータモデルを定義するデータを生成するための処理を実行する。
【0089】
図8は、ステップS4−16でサーフェスモデラ80により実行される処理動作を示す。
【0090】
図8のステップS8−2において、シルエットアプロキシメータ82は、ステップS4−8においては画像データセグメンタ60、ステップS4−12においては画像分割エディタ70により予め生成された分割済画像データを処理して、各入力画像中の被写体オブジェクトのシルエット(すなわち、輪郭)を直線で近似すると共に、各直線に対して固有のラベルを割り当てる。この実施形態において、各画像の被写体オブジェクトのシルエットを直線で近似するために、シルエットアプロキシメータ82は、例えば、M.K. Leung及びY.H. Yangの“Dynamic Strip Algorithm in Curve Fitting”(Computer Vision Graphics and Image Processing 51(2)、145〜165ページ、1990年8月)に記載されるような従来の方法で処理を実行する。
【0091】
ステップS8−2で処理を実行した結果、各画像中の被写体オブジェクトのシルエットは、図9に示すように複数の連結された直線により近似される。図9は、図3の入力画像302の処理により生じたオブジェクトシルエットの近似を示す。尚、図9の例(及びシルエットを示す図9以降の全ての図面)では、シルエットを近似する図示直線の本数は、ステップS8−2でシルエットアプロキシメータ82により実際に生成されるであろう本数よりもかなり少ない場合もある。
【0092】
図10を参照すると、処理のこの段階では、各入力画像中のシルエット500から514は、線分により近似されており、3次元空間における各シルエットの位置及び向きは、各入力画像の位置及び向きを判定するためにステップS4−6でカメラ計算器50により実行された計算の結果、既知である(各シルエット500から514は、入力画像の2次元平面に位置する)。加えて、3次元空間におけるカメラ230の焦点の位置も、ステップS4−6でカメラ計算器50により実行された計算の結果、各入力画像に対して既知である。
【0093】
各シルエットは、シルエットが位置する画像を記録したカメラ230の焦点515から519と共に、3次元空間における各点(この時点では未知)で被写体オブジェクト210の表面に接する3次元空間での無限の円錐形を定義する(シルエットは、画像中のオブジェクト表面の輪郭を定義するためである)。これは、図10において、シルエット502に関して示されており、シルエット502は、焦点位置515と共に円錐形520を定義する。円錐形の断面図は、シルエットと同じ形状であるので、各円錐形は、複数の無限の平面三角形から成る。各三角形は、シルエットを近似する線分のうちの1本の端点を通る線とカメラ230の焦点とにより定義されている(各平面三角形は、シルエットの線分の3D空間への投影により定義される)。
【0094】
従って、各円錐形は、カメラ230の焦点で全てが交わる無限の三角形の平面から成る無限の多面体である。
【0095】
シルエット500から514の全てにより定義される円錐形の共通部分が、3次元空間における被写体オブジェクトの境界面を定義する。従って、被写体オブジェクトの3次元コンピュータモデルは、全円錐形の共通部分、すなわち、視覚的な体を計算することによって生成することができる。
【0096】
この実施形態では、円錐形の共通部分は、各円錐形を構成する平面三角形の共通部分を計算することによって計算される。少なくとも2つの別々の円錐形(すなわち、少なくとも2つの別々のシルエット)の平面三角形のうちの3つが交わる任意の3D点により、被写体オブジェクト210の表面の頂点が定義されるであろう。別々のシルエットの3つの三角形が交わる場合が、ここでは、3D点528で交わる三角形522、524及び526として図10に示される。2つのシルエットの3つの三角形が交わる場合、同じシルエットを元にした三角形は、シルエット中の隣接する線分(すなわち、シルエット中の1つの頂点で交わる線分)の3D投影により定義される。これは、3D点536で交わる平面530、532及び534として図10に示される(平面530及び532は、シルエット514中の隣接する線分531及び533により定義され、点536は、平面530と532が交わるエッジに位置する)。
【0097】
生成される3Dコンピュータモデルが被写体オブジェクト210の表面を確実に正確に表せるようにするためには、被写体オブジェクトの表面の頂点となる三角形の各共通部分を計算する必要がある。第3実施形態で説明するように、これは、各シルエット中の線分により定義された各三角形を残る全ての三角形のその他の全ての線分により定義された全ての三角形に対して検査し、3D点の1組(セット)を生成することによって、達成することができると考えられる。しかし、被写体オブジェクトの表面の頂点を表す3D点をこのような方法で計算するのに必要な計算の回数は膨大である。具体的には、シルエットの総数が「m」個であり、シルエット中の直線の本数が「n」本である場合、O(mn3)回の計算が必要になるであろう。加えて、検査される三角形の多くが交わらない(従って、3D点の生成に至らない)うえに、被写体オブジェクト210の表面上に位置しない3D点は、三角形が偶然に交わることによって生成される可能性がある(このため、被写体オブジェクト210のモデルに対してどの3D点が実際に頂点を表すのかを判定するための処理を3D点に対して更に行なう必要がある)ので、この計算の大半が不必要なものとなる。
【0098】
従って、この実施形態では、被写体オブジェクトの表面の頂点を表す3D点を計算するのに必要な計算の回数を低減するように処理が実行される。
【0099】
この処理を詳細に説明する前に、処理の原理について説明する。
【0100】
具体的には、この実施形態において、3D空間のボリュームを考慮し、このボリュームを検査して以下の点を判定するための処理が実行される:
(1)交わって3D点を生成するのに十分な平面三角形(すなわち、この実施形態では3つ)がボリューム中に存在しないか、あるいは、ボリューム中の平面三角形が、被写体オブジェクト210の表面の頂点を表す3D点で交わることがないという理由で、ボリュームを廃棄することができるか否か(以下で詳細に後述)、
(2)ボリュームが、相互に交わるのに十分であると共に、被写体オブジェクト210の表面の頂点を表すであろう所定数(この実施形態では、1つの3D点)を超える3D点を生成するのに十分な平面三角形を含むという理由で、より小さいボリュームを考慮すべくボリュームを再分割すべきか否か、又は、
(3)ボリュームが、相互に交わると共に、被写体オブジェクト210の表面の頂点を表す十分に少ない所定数(この実施形態では1つ)の3D点を生成するのに適切な数(この実施形態では3つ)の平面三角形を含むか否か。この場合、これらの点の3D位置が計算/検査され、被写体オブジェクト210の表面の頂点を実際に表すか否かが判定される。
【0101】
このようにして、処理を行なうことによって、3D点の計算に至らない不必要な処理を回避しながら、シルエットの共通部分により定義される被写体オブジェクト210の表面の全ての頂点を確実に計算することができる。特に、更に計算することなく、大きなボリュームの3D空間を廃棄することができる。
【0102】
この実施形態では、3D空間のボリュームを廃棄又は再分割すべきか、あるいは、3D点を計算すべきかを判定するための3D空間のボリュームに対する検査が、3Dボリュームを各2次元画像に投影し、3Dボリュームの2D投影を画像中の各シルエットを構成する直線(ステップS8−2において生成済)に対して検査することによって実行される。このように2Dにおいて検査を実行することによって、ボリュームを検査するのに実行しなければならない処理動作の数が削減される。
【0103】
ボリューム中の平面三角形が被写体オブジェクト210の表面の頂点を表す3D点で交わらないという理由でボリュームを廃棄することができるか否かを判定するため、3D点で交わる平面に寄与しないシルエットにより定義される全ての円錐形(多面体)の内部に3D点が位置するか否かを判定するための処理が実行される。図10に示す例を参照すると、平面530、532及び534の場合、シルエット500、502、504、506、508及び510により定義される全ての円錐形の内部に3D点536が位置するか否かを判定するための処理が実行される(これらのシルエットは、3D点536で交わる3つの平面のうちのいずれも定義しないためである)。この実施形態では、各画像中のボリュームの2D投影を検査し、2D投影が各シルエット内に位置することを確認することによって、この処理が実行される。すなわち、検査は2Dで実行されるので、実行すべき処理動作が削減される。
【0104】
この実施形態では、3D点が計算されるとき、被写体オブジェクト210の頂点を表すか否かを判定するために、この3D点の検査が続けて行なわれる。これは、3つの平面三角形を含む3Dボリュームが識別されるときに3D点が計算されるからである。しかし、3つの平面三角形は、ボリューム内の3D点で実際には交わらないこともある。従って、この実施形態では、計算された3D点が識別されたボリューム内にあるか否かを判定するための検査が実行される。
【0105】
この実施形態での処理は、被写体オブジェクトの表面が単純な多面体である、すなわち、4つ以上の平面が単一の3D点で交わるような一致が存在しないことを想定している。コンピュータグラフィックスアプリケーションでは、必要に応じて、各シルエットを近似する直線を定義するデータに少量の乱雑音を加えることによって、視覚的な結果に影響することなく、この状態が常に得られるのでこの制限はあまり問題とならない。
【0106】
被写体オブジェクト210の表面の頂点を表す3D点を計算するためにこの実施形態で実行される処理について詳細に説明する。
【0107】
再度図8を参照すると、ステップS8−4において、シルエットアプロキシメータ82は、シルエットごとにステップS8−2で生成されたデータを処理し、内部の各線分に対するバウンディングボックスを計算すると共に、シルエットごとの4分木構造にバウンディングボックスデータに格納する。
【0108】
この処理は、被写体オブジェクト210の表面の任意の3D頂点の計算に先立って実行される。これは、後述するように、3D点を計算する処理中にシルエット中のどの直線を考慮しなくても良いかを判定するのにステップS8−4で生成されるデータを使用するからである。考慮しなくても良いと判定される直線は、処理しても被写体オブジェクト210の表面の3D頂点を生成することができない直線である。
【0109】
図11は、ステップS8−4でシルエットアプロキシメータ82により実行される処理動作を示している。
【0110】
図11のステップS11−2において、シルエットアプロキシメータ82は、処理すべき次のシルエット(ステップS11−2が初めて実行される場合、これは最初のシルエットである)を考慮し、ステップS11−4において、ステップS8−2で生成されたシルエットを近似する各直線に対する画像の側面に平行な側面を有するバウンディングボックスを計算する。
【0111】
具体的に、図12を一例として参照すると、シルエットアプロキシメータ82は、バウンディングボックスの各辺が画像の側面に平行であるように、シルエットを構成する各線分に対してバウンディングボックス(図12の点線で示す)を計算する。バウンディングボックスが計算されるシルエット中の直線は、バウンディングボックスの対角線である。それ自体が画像の側面に平行であるシルエット中の直線(すなわち、図12の例では線550及び552)の場合、バウンディングボックスは、線に垂直な方向の幅が0であるように定義される(図12の例では、線550及び552に対するバウンディングボックスは、バウンディングボックスを見ることができるように狭い幅で示される)。
【0112】
シルエットアプロキシメータ82は、従来の4分木のルートノードに各バウンディングボックスの最小/最大x値及び最小/最大y値を格納する(これらの値は、図12に示す例では、バウンディングボックス554において示される)。
【0113】
ステップS11−6において、シルエットアプロキシメータ82は、現在考慮中の4分木に格納されているx値の範囲及びy値の範囲を判定する(ステップS11−6が初めて実行される場合、これはステップS11−4で生成されたルートノードである)。すなわち、ステップS11−6において、シルエットアプロキシメータ82は、最小x値と最大x値との間の差分、及び、最小y値と最大y値との間の差分を計算する。
【0114】
ステップS11−8において、シルエットアプロキシメータ82は、現在考慮中のノードをステップS11−6で最大範囲を有するものとして判定された座標中の値の中央値で分割することによって、4分木に2つの子ノードを作成する。すなわち、ステップS11−6においてy値の範囲がx値の範囲より広いと判定される場合、シルエットアプロキシメータ82は、y値の中央値でノードを分割し、範囲が狭いと判定される場合には、x値の中央値で分割される。
【0115】
従って、図12に示す例を参照すると、y値の範囲はx値の範囲よりも広いので、シルエットアプロキシメータ82は、y値の中央値(すなわち、シルエットの中央値線分の端点)を通るy軸に垂直な線564を定義することによって2つの子ノード560及び562を作成する。図12の例において、17個の線の端点が存在するので、線564の上方には8つの線分の端点があり、線564の下方には8つの線分の端点があるように、線564は端点を通るよう定義される。偶数個の値が存在する場合、この実施形態では、シルエットアプロキシメータ82は、線564が中央値にまたがる2つの値の中間点を通るように定義する。
ステップS11−10において、シルエットアプロキシメータ82は、ステップS11−4で計算されたバウンディングボックスを親ノードからステップS11−8で作成された子ノードに割り当てる。
【0116】
具体的には、シルエットアプロキシメータ82は、バウンディングボックスの全体又は一部が子ノード内に位置する場合、又は、子ノードに接する場合に、バウンディングボックスをその子ノードに割り当てる。従って、図12に示す例において、全体が線564の上方に位置する各バウンディングボックスは、子ノード560に割り当てられ、全体が線564の下方に位置する各バウンディングボックスは、子ノード562に割り当てられる。バウンディングボックス570、572及び574は、部分的に子ノード560及び562の双方にあるので、子ノード560及び562の双方に割り当てられる。バウンディングボックス576及び578は、それぞれが、子ノード560及び562の境界を定義する線564に接触するので、子ノード560及び562の双方に割り当てられる。
【0117】
ステップS11−12において、シルエットアプロキシメータ82は、次の子ノードを考慮し、ステップS11−14において、子ノード中のバウンディングボックスの数が、親ノード中のバウンディングボックスの数と同数であるか否かを判定する。
【0118】
ステップS11−14において、子ノード中のバウンディングボックスの数と親ノード中のバウンディングボックスの数が同数であると判定される場合、更に下位の子ノード間でのバウンディングボックスの分割が不可能であると考えられる(更に下位の子ノードは、各々、親から割り当てられたバウンディングボックスの全てを含む)ので、子ノードを更に再分割する必要はない。加えて、ステップS11−12で考慮される現在の子ノードは、親と同じバウンディングボックスを含むのでこれを保持する必要がなく、また、子ノードはバウンディングボックスを含まない(親からのバウンディングボックスの全ては、ステップS11−12で考慮される現在の子ノード中にある)ので、ステップS11−8で作成されるもう一方の子ノード(すなわち、ステップS11−12で考慮される子ノードの同胞)を保持する必要もない。
【0119】
従って、ステップS11−4で子ノード中のバウンディングボックスの数が親ノード中の数と同数であると判定される場合、処理はステップS11−16へと進む。ここで、シルエットアプロキシメータ82は、ステップS11−12で考慮された子ノードとステップS11−8で作成された兄弟ノードを削除する。続いて、処理はステップS11−20へと進む。
【0120】
これに対し、ステップS11−14において、子ノード中のバウンディングボックスの数が親ノード中の数と同数でないと判定される場合、処理はステップS11−18へと進む。ここで、シルエットアプロキシメータ82は、子ノード中のバウンディングボックスの数が2に等しいか否かを判定する。
【0121】
ステップS11−18において、子ノード中のバウンディングボックスの数が2に等しいと判定される場合、十分に少ない数のバウンディングボックスを有する子ノードが既に取得されているので、この実施形態では、子ノードの更なる再分割は実行されない。従って、処理はステップS11−20へと進む。
【0122】
これに対し、ステップS11−18において、子ノード中のバウンディングボックスの数が2に等しくないと判定される場合、処理はステップS11−6へと戻る。ステップS11−14において子ノード中のバウンディングボックスの数と親ノード中のバウンディングボックスの数が等しいと判定されるか、あるいは、ステップS11−18において2つのバウンディングボックスを含む子ノードが生成されたと判定されるまで、ステップS11−6からS11−8が繰り返され、子ノードの作成/再分割が繰り返し行なわれる。
【0123】
ステップS11−20において、シルエットアプロキシメータ82は、処理すべき別の子ノードが存在するか否かを判定し、以上説明したように各子ノードを処理し終わるまでステップS11−12からS11−20を繰り返す。
【0124】
ステップS11−22において、シルエットアプロキシメータ82は、処理すべき別のシルエットが存在するか否かを判定し、以上説明したように各シルエットを処理し終わるまでステップS11−12からS11−22を繰り返す。
【0125】
図8を再度参照すると、ステップS8−6において、3D点計算器84は、被写体オブジェクト210の表面の頂点を表す3D点を計算するための処理を実行する。
【0126】
図13は、ステップS8−6で3D点計算器84により実行される処理動作を示す。
【0127】
図13のステップS13−2において、3D点計算器84は、被写体オブジェクト210が位置し、従って、オブジェクト表面の各点を表す全ての計算された3D点も位置することになる3D空間中のボリュームを定義する。
【0128】
図14aにおいて、この実施形態では、ステップS13−2で3D点計算器84により定義された開始ボリュームは、垂直な側面と水平な上面及び底面を有する直平行六面体600である。垂直な側面は、写真マット34の特徴の校正パターンの縁部に接するように位置決めされる(従って、被写体オブジェクト210の全体を含む)。直平行六面体600の上面の位置は、カメラ230の焦点612からステップS4−4で格納された入力画像のうちのいずれか1つの上エッジを通る線610が写真マット34の中心を通る垂直線614と交わることによって定義される位置に設定される。具体的に説明すると、カメラ230の焦点612及び画像の上エッジは、ステップS4−16で実行された位置及び向きの計算の結果、既知であり、上面の高さを線610が写真マット34の中心を通る垂直線614と交わる点に対応するように設定することによって、上面は常に被写体オブジェクト210の最上部より上方に位置することになる(被写体オブジェクト210の最上部が各入力画像で見える場合)。直平行六面体600の水平底面の位置は、ステップS4−4で格納された入力画像のうちのいずれか1つの底エッジを通るカメラ230の焦点612からの線616が、写真マット34の中心を通る垂直線614と交わることによって定義される位置に設定される。これにより、直平行六面体600の底面は、確実に被写体オブジェクト210の底面の下方に延伸するようになる(被写体オブジェクト210の底面が各入力画像で見える場合)。
【0129】
この実施形態において、図2に示すように、カメラ230が三脚上の固定位置に設置され、被写体オブジェクト210を乗せた写真マット34がカメラに対して移動させられる状態で被写体オブジェクト210を撮影すると、各画像が記録されたとき、カメラ230は常に直平行六面体600の外側に位置することになる。しかし、写真マット34及び被写体オブジェクト210をカメラ230に対して移動させる代わりに、写真マット34及び被写体オブジェクト210を固定しておいてカメラ230を別の位置及び向きに移動させることもできる。この場合、図14bに示すように、高い視点から被写体オブジェクト210の上面を示すように画像が記録されるとき、カメラ230の位置は直平行六面体600内にあっても良い。この実施形態で3D点計算器84により実行される処理により、直平行六面体600はカメラ230により記録される画像へと投影され、投影されたボリューム中に含まれるものに関する情報が判定されるので、直平行六面体600は、全ての記録画像に関して、完全にカメラ230の正面に位置する必要がある。従って、この実施形態では、3D点計算器84は、ステップS4−6で計算されたカメラ位置及びカメラ向きに対して直平行六面体600を検査し、図14cに示すように、各角(corner)が全ての計算されたカメラ位置の正面にくるように直平行六面体600を調整する。
【0130】
再度図13を参照すると、ステップS13−4において、3D点計算器84は、ステップS13−2で定義された3Dボリューム(すなわち、図14a、14b及び14cの例での直平行六面体600)を格納スタックの最上部に加え、ステップS13−6において、スタックの最上部から次のボリュームを取り出す(ステップS13−6が初めて実行される場合、これはステップS13−2で定義される最初のボリュームである)。
【0131】
ステップS13−8において、3D点計算器84は、ステップS13−6でスタックから取り出されたボリュームの状態を判定する。
【0132】
この処理において、3D点計算器84は、ステップS13−6でスタックから取り出されたボリュームが、被写体オブジェクト210の表面のいずれかの3D頂点を含む可能性がない(従って、廃棄することができる)か否か、被写体オブジェクト210の表面の2つ以上の3D頂点を含む可能性があるためにボリュームを再分割する必要があるか否か、あるいは、被写体オブジェクトの表面の単一の頂点のみを定義する平面をボリュームが含むか否かを判定する。この場合、3D頂点の位置を計算し、検査することができる。この実施形態において、3D点計算器84は、ステップS13−6でスタックから取り出された3Dボリュームを各画像へと投影し、ステップS8−2で予め計算された各シルエットを近似する直線に対して結果として生じる2D投影を検査することによってこれらの判定を実行する。
【0133】
図15は、ステップS13−8において3D点計算器84により実行される処理動作を示す。
【0134】
図15のステップS15−2において、3D点計算器84は、ステップS13−6でスタックから取り出されたボリュームの角をステップS4−6で予め計算された各撮影位置及び撮影向きに対してカメラ230の2次元撮影平面へと投影し、投影された角の連結性を定義するデータを保持する。
【0135】
図16において1つの画像に関して示されるこの投影の結果は、2次元撮影平面内の6つの包囲された領域(これらの領域は重なる可能性がある)を定義する8つの点620から634から構成される2D投影650である。図16の例では、各点により定義される6つの領域は、それぞれ、点のグループ(620、622、624、626)、(620、622、630、628)、(622、630、632、624)、(624、632、634、626)、(626、620、628、634)及び(628、630、632、634)により定義される領域である。
【0136】
ステップS15−4において、3D点計算器84は、カウンタnvの値を0に設定する。以下に説明するように、このカウンタは、少なくとも1つの「検証済頂点」(すなわち、2D投影されたボリューム650内に位置するシルエット中の2つの隣接する直線が交わる点)が検出された「アクティブなカメラ」リスト上のカメラの台数を表す。アクティブなカメラのリストは、ステップS8−2で生成された処理中に考慮されるべきシルエットのリストである。最初に、アクティブなカメラリストは、全てのシルエットを含むが、後述するように、シルエットがステップS15−2で生成された2D投影領域650を包囲すると判定される場合、シルエットはリストから削除される。具体的には、シルエットは2D投影領域650を包囲するので、全ての投影された子ボリュームを包囲することになり、子ボリュームが生成/検査されるのを回避するために、シルエットはアクティブなカメラリストから削除される。
【0137】
ステップS15−6において、3D点計算器84は、カウンタneの値を0に等しく設定する。後述するように、このカウンタの値は、少なくとも1本の「検証済エッジ」(すなわち、2D投影ボリューム650内に位置するシルエットからの直線)が検出された「アクティブなカメラ」リスト上のカメラの台数を表す。
【0138】
ステップS15−8において、3D点計算器84は、カウンタnpの値を0に等しく設定する。後述するように、このカウンタの値は、平面三角形(すなわち、図10を参照して説明したように、シルエット中の線分−すなわち「エッジ」−及びカメラ230の焦点により定義される三角形)の数を表す。この平面三角形は、ステップS13−6でスタックから取り出されたボリュームと交わる。
ステップS15−10において、3D点計算器84は、フラグ「either SubdivideOrDiscard」の値を「偽」に設定する。
【0139】
以降の処理において、3D点計算器84は、ステップS15−2で生成された2D投影ボリューム650とステップS8−2の処理で生成された各画像中のシルエットの直線(エッジ)との間の関係に基づいて処理を実行し、(被写体オブジェクト210の表面のいずれかの3D頂点を含まないことが理由で)ステップS13−6でスタックから取り出された3Dボリュームを廃棄することができるか否かを判定するか、(オブジェクト表面の2つ以上の3D頂点を含む可能性があるので)より小さいボリュームを考慮するのに再分割を必要とするか、あるいは、オブジェクト表面の単一の頂点を定義する平面を含むか(この場合、頂点の位置が計算/検査される)を判定する。
【0140】
3D点計算器84により実行される特定の処理ステップを説明する前に、画像中の2D投影ボリューム650とシルエットとの間に存在し、3D点計算器84により検査される様々な関係に関して説明する。加えて、3D点計算器84が、シルエットと2D投影ボリューム650との間の画像ごとに判定された関係に基づいて、ステップS13−6でスタックから取り出されたボリュームに対してどの処理を実行するべきかを判定する方法についても説明する。
【0141】
図17aから図17hは、画像中のシルエットと2D投影ボリューム650とが有する可能性があり、3D点計算器84により検査される8つの異なる関係を示す。
【0142】
図17aを参照すると、第1の関係では、シルエットのちょうど1つの頂点700(すなわち、シルエットを構成する2つの連続する線分が交わるシルエット中の点)が、投影されたボリューム650の6つの2次元領域(これらの領域は、先に説明したように、ボリュームの投影された角により定義される)のうちの1つの内部に位置する。
【0143】
図17bを参照すると、第2の関係では、ちょうど1つの頂点702が、2D投影ボリューム650内に位置すると共に、投影ボリューム中に頂点をもたない少なくとも1本の線分704が、2D投影ボリューム650内に位置する。
【0144】
図17cを参照すると、第3の関係では、2D投影ボリューム650は、2つ以上のシルエット頂点(図17cの例では、4つのシルエット頂点706、708、710及び712が示されるが、2つ以上の任意の数の頂点が2D投影ボリューム650内に位置するときにこの第3の関係が存在すると判定される)を含む。
【0145】
図17dを参照すると、第4の関係では、シルエットのちょうど1つの単一の線分714が2D投影ボリューム650内に位置し、線分714の頂点はいずれも投影ボリューム650内に位置しない。
【0146】
図17eを参照すると、第5の関係では、2D投影ボリューム650は、その中に位置する頂点を有しないシルエットの少なくとも2本の線分716及び718を含む。
【0147】
図17fを参照すると、第6の関係では、シルエット720は、全体的に2D投影ボリューム650の境界の内側に位置する。この第6の関係は、図17cを参照して説明した関係3(2D投影ボリューム650が少なくとも1つのシルエット頂点を含む)の特別な場合であり、関係3及び関係6の双方は、ステップS13−6でスタックから取り出されたボリュームを同様に処理する方法に関する決定に影響する。従って、この実施形態では、関係6は3D点計算器84により明示的に識別されず、その代わりに関係3のみが検出される。これには処理が削減されるという効果があるが、それは、シルエットの全ての頂点が検査されて、2D投影ボリューム650中にあるか否かが判定される訳ではないからである(関係6が明示的に識別される場合には必要となるであろう)。
【0148】
図17gを参照すると、第7の関係では、2D投影ボリューム650は、全体的にシルエット722内に位置する。
【0149】
図17hを参照すると、第8の関係では、シルエット724及び2D投影ボリューム650は相互に重ならない。
【0150】
各画像中の2D投影ボリューム650とシルエットとの間の関係に基づいて、3D点計算器84は、ステップS13−6でスタックから取り出されたボリュームの状態を3D点計算器84により検査される以下の8つのケースで示されるように設定する(すなわち、ボリュームの処理法を判定する)。8つのケースは、優先順位に従って以下に挙げられるので、リスト中の優先順位の高いケースは、リスト中の優先順位の低いケースに優先し、スタックから取り出されたボリュームに対して実行される処理は、より高い優先順位のケースに基づいて判定される。
【0151】
ボリューム状態のケースA: いずれかの画像が、シルエットと2D投影ボリューム650との間で関係8(図17hを参照して説明)を有する場合、状態を「ボリュームの廃棄」に設定する。関係8において、2D投影ボリューム650及びシルエット724は重なり合わないので、ステップS13−6でスタックから取り出されたボリューム中の3D点はいずれも、シルエット724上、又は、その内部の点へと投影されない。このため、3D点は、被写体オブジェクト210の表面の頂点を表すことができない。従って、ステップS13−6でスタックから取り出されたボリュームは、廃棄されることになる。
【0152】
ボリューム状態のケースB: ちょうど3つの画像がシルエットと2D投影ボリューム650との間で関係4(図17dを参照して説明)を有する場合、状態を「3D点の計算」に設定する。その他の全ての画像における関係は関係7である(図17gを参照して説明)。
【0153】
図10を参照して先に説明したように、被写体オブジェクト210の表面の3D頂点は、それぞれ別々のシルエットを元にした3つの平面三角形の共通部分によって、あるいは、同じシルエットを元にした2つの三角形と別のシルエットを元にした1つの三角形との共通部分によって定義される。
【0154】
図17dを参照して説明した2D投影ボリューム650との関係4を有する3つのシルエットが見出され、その他の全ての画像中のシルエットと2D投影ボリューム650との間の関係が図17gを参照して説明した関係7であるとき、この実施形態では、別々のシルエットを元にした3つの三角形が3D点で交わる場合が識別される。具体的には、関係4は、2D投影ボリューム650中にシルエットの単一のエッジしかないことを識別するので、2D投影ボリューム650とこの関係を有する3つのシルエットは、ステップS13−6でスタックから取り出されたボリューム中の3D点で交わる可能性がある3つの平面三角形(2D投影ボリューム650と交わる3つのエッジにより定義される)を識別する。加えて、その他の全ての画像中のシルエットと投影ボリューム650との間の関係が関係7であるので、3つの平面三角形の共通部分により定義される3D点は、全画像中においてシルエット内の点へと投影され、被写体オブジェクト210の表面の頂点を表す(3D点がステップS13−6でスタックから取り出されたボリューム中に実際に位置し、このボリュームの外側には位置しない場合)。
【0155】
ボリューム状態のケースC: 1つ(1つのみ)の画像がシルエットと2D投影ボリューム650との間で関係1(図17aを参照して説明)を有し、1つ(1つのみ)の画像が、関係4(図17dを参照して説明)を有し、その他の全ての画像における関係が関係7である(図17gを参照して説明)場合、状態を「3D点の計算」に設定する。
【0156】
このケースCは、同じシルエットを元にした2つの平面三角形と別のシルエットを元にした1つの平面三角形とが交わる場合を表す。具体的には、図17aを参照して説明した関係、すなわち、2D投影ボリューム650に単一のシルエット頂点しか存在しない関係は、3D点で交わる同じシルエットを元にした2つの平面三角形(これらの平面三角形は、2D投影ボリューム650中の頂点700で交わるシルエットエッジにより定義される)を定義する。図17dを参照して説明した関係では、3D点で交わる第2のシルエットを元にした平面三角形(すなわち、2D投影ボリューム650と交わる直線の端点を通る平面三角形)を定義する。上述のように、その他の全ての画像におけるシルエットと2D投影ボリューム650との間の関係は、図17gを参照して説明した関係7であるので、第1のシルエットを元にした2つの平面三角形と第2のシルエットを元にした平面三角形との共通部分により定義される3D点は、その他の全ての画像中においてシルエット内の点に投影されるので、被写体オブジェクト210の表面の頂点を表すことになる(3D点がステップS13−6でスタックから取り出されたボリューム内に実際に位置する場合)。
【0157】
ボリューム状態のケースD: その全てにおいて、ステップS13−6でスタックから取り出されたボリュームが相互に交わり、被写体オブジェクト210の表面に位置する3D点を定義するのに十分な数の平面三角形(すなわち、3つ)を含まないことを示す(従って、ボリュームが廃棄されることになる)以下の状況のいずれかが起こる場合、状態を「ボリュームの廃棄」に設定する:
(i) 1つ(1つのみ)の画像が、シルエットと2D投影ボリューム650との間で関係1(図17aを参照して説明)を有し、その他の全ての画像における関係が関係7である(図17gを参照して説明)。
(ii) 1つ又は2つ(2つ以下)の画像が、シルエットと2D投影ボリューム650との間で関係4(図17dを参照して説明)を有し、その他の全ての画像における関係が関係7である(図17gを参照して説明)。
(iii) 全ての画像が、シルエットと2D投影ボリューム650との間で関係7(図17gを参照して説明)を有する。
【0158】
ボリューム状態のケースE: 1つ(1つのみ)の画像が、シルエットと2D投影ボリューム650との間で関係3(図17cを参照して説明)又は関係5(図17eを参照して説明)を有し、その他の全ての画像における関係が関係7である(図17gを参照して説明)場合、状態を「ボリュームの廃棄」に設定する。この場合、1つのみの画像が、2D投影ボリューム650内にシルエット頂点又はシルエットエッジを含む。しかし、上述のボリューム状態のケースB又はボリューム状態のケースCが発生する(結果として3D点の計算を行なう)には、シルエットの頂点又はエッジが2D投影ボリューム650内に位置する画像が少なくとも2つ存在しなければならない。従って、3D点計算器84は、ステップS13−6でスタックから取り出されたボリュームを廃棄すべきであると判定するが、それは、ボリュームを再分割により更に処理しても、既にシルエットの一部が2D投影ボリューム650と交わっている1つの画像を除くいずれの画像においても、同様の状況に至る可能性がないからである。
【0159】
ボリューム状態のケースF: 3つ以上の画像がシルエットと2D投影ボリューム650との間で関係1、2、3、4又は5(図17aから図17eを参照して説明)である場合、状態を「ボリュームの再分割」に設定する(3つ以上の画像における関係は、相互に同じであっても、異なっていても良い)。この場合、3D点計算器84は、ステップS13−6でスタックから取り出されたボリュームを再分割により更に処理すべきであると判定するが、それは、再分割により関係1、2、3、4又は5を有する3つ以上の画像においてボリューム状態のケースB又はボリューム状態のケースCが起こる可能性があるからである。
【0160】
ボリューム状態のケースG: 1つ(1つのみ)の画像がシルエットと2D投影ボリューム650との間で関係5(図17eを参照して説明)を有し、1つ(1つのみ)の画像が、関係4(図17dを参照して説明)又は関係5(図17eを参照して説明)を有し、その他の全ての画像における関係が関係7である(図17gを参照して説明)場合、状態を「ボリュームの廃棄」に設定する。この場合、ステップS13−6でスタックから取り出されたボリュームを更に処理しても、シルエットが必要とされる3つの画像においてではなく、2つの画像においてのみ2D投影ボリューム650と交わるので、上述のボリューム状態のケースB(3D点が計算されることになる)に至る可能性はない。加えて、ステップS13−6でスタックから取り出されたボリュームを更に処理しても、シルエットの頂点が関係4又は関係5を有する画像のいずれにおいても2D投影ボリューム650内に位置せず、ボリュームを再分割し、より小さいボリュームの処理を行なっても、シルエットの頂点が2D投影ボリューム650内にあるようなケースに至ることがないので、結果として上述のボリューム状態のケースC(3D点が計算されるもう1つの場合)になることはない。従って、この場合、3D点計算器84は、ステップS13−6でスタックから取り出されたボリュームを廃棄すべきであると判定する。
【0161】
ボリューム状態のケースH: 1つ(1つのみ)の画像がシルエットと2D投影ボリューム650との間で関係1、2又は3(図17aから図17cを参照して説明)を有し、1つ(1つのみ)の画像が関係1、2、3、4又は5(図17aから図17eを参照して説明)を有し、その他の全ての画像における関係が関係7である(図17gを参照して説明)場合、状態を「ボリュームの再分割」に設定する。この場合、3D点計算器84は、ボリュームのより小さい部分を処理することにより3D点が計算される上述のボリューム状態のケースCに至る可能性があるので、ステップS13−6でスタックから取り出されたボリュームを再分割すべきであると判定する。
【0162】
この実施形態において、図17aから図17hを参照して説明したどのタイプの関係が各シルエットと2D投影ボリューム650との間に存在するか、及び、識別された関係に基づいて、ステップS13−6でスタックから取り出されたボリュームを再分割すべきか、廃棄すべきか、あるいは、3D点を計算すべきかを定義する上述のボリューム状態のケースのうちのどれが存在するかを判定するために3D点計算器84により実行される処理ステップの詳細な説明を行なう。
【0163】
図15を再度参照すると、ステップS15−12において、3D点計算器84は、処理すべき別のカメラ画像(すなわち、ステップS15−2においてボリュームの角が投影される別の画像)が存在するか否かを判定する。ステップS15−12が初めて実行される場合は、全てのカメラ画像が未処理の状態で残存するので、処理はステップS15−14へと進む。しかし、その後の反復では、全てのカメラ画像の処理が終了すると、処理は後述のステップS15−66へと進む。
【0164】
ステップS15−14において、3D点計算器84は、処理すべき次のカメラ画像を考慮する。
【0165】
後続の処理において、3D点計算器84は、現在考慮中の画像中のシルエットとステップS15−2で生成された画像へのボリュームの2D投影650との間の関係を検査し、図17aから図17hを参照して説明した8つの異なる予想される関係のうちのいずれをシルエット及び投影ボリュームが有するのかを判定する。先に説明したように、この関係は、単独で、あるいは、その他の画像における投影ボリュームとシルエットとの間の関係と関連させて使用し、ボリュームを廃棄すべきか又は再分割すべきか、あるいは、3D点を計算/検査して被写体オブジェクト210の表面に位置するか否かを判定すべきかを判定する。
【0166】
具体的には、ステップS15−16において、3D点計算器84は、現在考慮中の画像中のシルエットの線分のうちのどれが、2D投影ボリューム650と交わるのかを判定し、その線分に「候補エッジ」としてラベル付けする。この処理により、後続の検査を実行する必要がある直線状のエッジの数が削減される。また、この処理では、ステップS8−4で予め生成された4分木データが利用される。
【0167】
図18は、ステップS15−16で3D点計算器84により実行される処理動作を示す。
【0168】
図18のステップS18−2において、3D点計算器84は、2D投影ボリュームの周囲の画像の側面に平行な側面を有するバウンディングボックスを定義する。これは、一例として図19に示されており、点線は2D投影ボリューム650の周囲で定義されるバウンディングボックス800を表す。
【0169】
ステップS18−4からS18−16において、3D点計算器84は、ステップS8−4で生成された4分木のノードを考慮し、ステップS18−2で生成された投影ボリュームのバウンディングボックスと交わらないノード中にあるシルエット線分を廃棄し、4分木の残りのノード中のシルエット線分を「候補エッジ」としてラベル付けするための処理を実行する。
【0170】
具体的には、ステップS18−4において、3D点計算器84は、現在考慮中の画像に対するシルエットエッジのバウンディングボックスデータを格納するステップS8−4で生成された4分木の次のノードを考慮する(ステップS18−4が初めて実行される場合、これはルートノードである)。
【0171】
ステップS18−6において、3D点計算器84は、現在考慮中のノードにより定義される画像の領域が、ステップS18−2で生成された投影ボリュームのバウンディングボックス800と重なり合うか否かを判定する。すなわち、3D点計算器84は、投影ボリュームのバウンディングボックス800のいずれかの部分がノードにより定義される領域内に位置するか否かを検査する。
【0172】
一例として図19を参照すると、画像の3つの領域810、812及び814が示されている。4分木のルートノードは、画像全体(すなわち、領域810、812及び814)であるので、ルートノードとバウンディングボックス800との間には重なりが存在する。
【0173】
ルートノードの第1の子ノードは領域810であり、ルートノードの第2の子ノードは領域812+領域814である。双方の場合において、子ノードとバウンディングボックス800との間には重なりが存在する。しかし、第2の子ノードの各子ノード(すなわち、領域812及び814)を考慮するとき、投影ボリュームのバウンディングボックス800とノード814との間には重なりが存在するが、バウンディングボックス800とノード812との間には重なりは存在しない。
【0174】
ステップS18−6において、現在考慮中のノードが、投影ボリュームのバウンディングボックスと交わらないと判定される場合、ステップS18−8において、3D点計算器84は、現在考慮中のノードの子又は更なる子孫を未処理ノードのリストから削除する(子と更なる子孫は全て親の領域内に位置するので、親が投影ボリュームのバウンディングボックスと交わらない場合、これと交わる可能性はない)。従って、図19の例を参照すると、ノード812がステップS18−4で考慮されており、ノードが投影ボリュームのバウンディングボックス800と重なり合わないことがステップS18−6で判明した場合、ステップS18−8において、ノード812の子及び更なる子孫は、未処理ノードから削除され、実行すべき処理量が削減される。
【0175】
これに対し、ステップS18−6において現在考慮中のノードが投影ボリュームのバウンディングボックス800と重なり合うと判定される場合、ステップS18−10において、3D点計算器84は、ノードに子があるか否かを判定する。
【0176】
ステップS18−10においてノードに子があると判定される場合、ステップS18−12において次の子ノードが考慮され、処理はステップS18−6へと戻る。ここで、子ノードが投影ボリュームのバウンディングボックス800と重なり合うか否かが判定される。4分木内において、投影ボリュームのバウンディングボックス800と重なり合い、子ノードをもたないノードに到達するまでステップS18−6、S18−10及びS18−12が反復的に実行される。このようなノードに到達したとき、処理はステップS18−14へと進む。ここで、3D点計算器84は、ノード中の各エッジのバウンディングボックスを検査し、各エッジが2D投影ボリューム650のバウンディングボックス800と交わるか否かを判定する。続いて、3D点計算器84は、投影ボリューム650のバウンディングボックス800と交わらないバウンディングボックスを有するノード中の各エッジに「候補エッジ」としてラベル付けする。
【0177】
ステップS18−16において、3D点計算器84は、4分木に更に別のノードが存在するか否かを判定し、以上のような方法で各ノードを処理し終わるまでステップS18−4からS18−16が繰り返される。
【0178】
このように、3D点計算器84は、投影ボリュームのバウンディングボックスと交わらない4分木の全てのノードを廃棄し、残りのノード中のシルエットの線分に「候補エッジ」(すなわち、2D投影ボリューム650自体と交わる可能性があるエッジ)としてラベル付けする。
【0179】
図15を再度参照すると、ステップS15−18において、3D点計算器84は、どの候補エッジの端点(すなわち、ステップS15−16で識別された第1の候補エッジがシルエット中の第2の候補エッジと交わる点)が2D投影ボリューム650内に位置するかを判定し、このような端点に「検証済頂点」としてラベル付けする。従って、ステップS15−18の処理では、2D投影ボリューム650内に図17a、17b及び17cの点700、702、706、708、710及び712(これらの点は「検証済頂点」としてラベル付けされる)などの点が存在するか否かが判定される。
【0180】
図20は、ステップS15−18において3D点計算器84により実行される処理動作を示す。
【0181】
図20のステップS20−2において、3D点計算器84は、検証済頂点の数を表すカウンタ「nvv」を0に等しく設定する。
【0182】
ステップS20−4において、3D点計算器84は、次の候補エッジの第2の端点を考慮する(ステップS20−4が初めて実行される場合、これは最初の候補エッジである)。後続の処理において、端点が検査され、2D投影ボリューム650内に位置するか否かが判定される。端点は、(閉じている)各シルエットがエッジ(p1,p2),(p2,p3),.....,(pn,p1)から成る(p1からpnは端点)ように順序づけられているので、それぞれの第2の端点を考慮/検査するだけで良い。従って、端点(p,q)間の線分が候補エッジである場合、あるxに対して同様に候補エッジである端点(x,p)間のエッジが存在するであろう。なぜなら、シルエット中のこれらの線分のバウンディングボックスが点pで交わるために、第1の端点を検査する必要がないからである。
【0183】
ステップS20−6において、3D点計算器84は、現在考慮中の端点が2D投影ボリューム650内に位置するか否かを判定する。この実施形態では、“Graphics Gems”(IV、16〜46ページ、ISBN 0-12-336155-9)に記載される各方法のうちの1つのような従来の方法を使用して、各投影面に対して端点を検査することで端点がボリュームの6つの投影面のいずれかの内部にあるか否かを判定することによってこれが実行される。
【0184】
ステップS20−6において、端点が2D投影ボリューム内にあると判定される場合、ステップS20−8において、3D点計算器84は、端点に「検証済頂点」としてラベル付けし、ステップS20−10において、カウンタnvvの値を1だけ増分する。
【0185】
これに対し、ステップS20−6で端点が2D投影ボリューム内に位置しないと判定される場合、ステップS20−8及びS20−10は省略される。
【0186】
ステップS20−12において、3D点計算器84は、カウンタnvvの値が1より大きいか否かを判定する。
【0187】
ステップS20−12において、カウンタnvvの値が1より大きいと判定される場合、投影ボリュームは2つ以上の線分の頂点を含むので、図17cを参照して説明した関係3(又は図17fを参照して説明した関係6)が識別され、ボリューム中に更に別の線分の頂点が存在するか否かを判定する処理を更に実行する必要がなくなる。従って、処理はステップS20−14へと進み、2つ以上の検証済頂点が識別されたことを示すためのフラグが設定される。
【0188】
これに対し、ステップS20−12においてカウンタnvvの値が1以下であると判定される場合、処理はステップS20−16へと進み、ここで、3D点計算器84は、処理すべき別の候補エッジが存在するか否かを判定する。
【0189】
ステップS20−12においてカウンタnvvの値が1より大きいと判定されるまで、あるいは、ステップS20−16において全ての候補エッジの処理が終了したと判定されるまで、ステップS20−4からS20−16が繰り返される。
【0190】
ステップS20−16において、候補エッジの全ての処理が終了したと判定される場合、処理はステップS20−18へと進み、ここで、3D点計算器84は、カウンタnvvの値を読み取り、カウンタnvvにより定義される検証済頂点の数によって、識別された検証済頂点の数が0又は1であることを示すためのフラグを設定する。
【0191】
1つの検証済頂点が存在する場合、シルエットと投影ボリュームとの間の関係は、図17aを参照して説明した関係1、及び、図17bを参照して説明した関係2のいずれかであり、後述するように、これらの関係のうちのどちらが実際に存在するかを判定するための更なる検査が実行される。
【0192】
検証済頂点の数が0である場合、図17d、17e、17g及び17hをそれぞれ参照して説明した関係4、5、7及び8のうちのどれが2D投影ボリューム650と現在考慮中のシルエットとの間の関係であるかを判定するための検査が実行される。
【0193】
再度図15を参照すると、ステップS15−20において、3D点計算器84は、ステップS20−14又はステップS20−18で設定されたフラグの値を読み取り、検証済頂点の数を判定する。
【0194】
ステップS15−20において、2つ以上の検証済頂点が存在すると判定される場合、ステップS15−22において、3D点計算器84は、少なくとも1つの検証済頂点が見出されたアクティブなカメラの台数を定義するカウンタnvの値を1だけ増分し、フラグeitherSubdivideOrDiscardの値を「真」に設定する。フラグeitherSubdivideOrDiscardが「真」に設定されるのは、先に説明したように、2D投影ボリューム650に2つ以上の検証済頂点が存在する場合、投影ボリュームとシルエットとの間の関係が、図17cを参照して説明した関係3、又は、図17fを参照して説明した関係6であるからである。この場合、ステップS13−6でスタックから取り出されたボリュームは、後続の処理において、その他の画像中における2D投影ボリューム650とシルエットとの間の関係によって、再分割又は廃棄されることになる。
【0195】
ステップS15−26において、3D点計算器84は、ステップS13−6でスタックから取り出されたボリュームと交わる平面三角形の数を定義するカウンタnpの値が後述の検査で使用される閾値3より大きくなるように、カウンタnpの値を4だけ増分する。
【0196】
処理はステップS15−2へと戻って残りのシルエットを処理し、ステップS13−6でスタックから取り出されたボリュームを再分割すべきか、あるいは、廃棄すべきかを判定する。
【0197】
再度ステップS15−20に戻ると、1つの検証済頂点が存在すると判定される場合、処理はステップS15−28へと進み、ここで、3D点計算器84は、現在処理中のシルエットが位置するカメラを識別するデータを格納する。
【0198】
ステップS15−30において、3D点計算器84は、少なくとも1つの検証済頂点が検出されたアクティブなカメラの台数を定義するカウンタnvの値を1だけ増分し、ステップS15−32において、ステップS13−6でスタックから取り出されたボリュームと交わる平面の数を定義するカウンタnpの値を2だけ増分する(検証済頂点で交わる2本の線分がボリュームと交わる平面三角形を定義するためである)。
【0199】
ステップS15−34において、3D点計算器84は、カウンタnpの値が3以下であるか否かを判定する。
【0200】
ステップS15−34において、カウンタnpの値が3以下であると判定される場合、3D点計算器84は、検証済頂点で交わる2本の候補エッジを定義するデータを格納する。
【0201】
これに対し、ステップS15−34において、カウンタnpの値が3より大きいと判定される場合、ステップS15−36は省略される。npカウンタの値が3より大きいことは、スタックから取り出されたボリューム内に少なくとも4つの平面三角形が存在することを示すので、上述のボリューム状態のケースB又はボリューム状態のケースCが起こる可能性がなく、3D点を計算するのに使用されない以上、候補エッジを定義するデータを格納する必要がないからである。
【0202】
ステップS15−36の終了後、あるいは、ステップS15−34においてカウンタnpの値が3より大きいと判定される場合、処理はステップS15−12へと戻り、次の画像を考慮する。
【0203】
再度ステップS15−20に戻ると、現在処理中の画像中に検証済頂点が存在しないと判定される場合、処理はステップS15−38へと進む。ここで、3D点計算器84は、2D投影ボリューム650と交わる候補エッジがあるとすれば、どのエッジであるかを判定し、投影ボリュームと交わる候補エッジに「検証済エッジ」としてラベル付けする。
【0204】
図21は、ステップS15−38で3D点計算器84により実行される処理動作を示す。
【0205】
図21のステップS21−2において、3D点計算器84は、検証済エッジの本数を表すカウンタ「nve」を0に等しく設定する。
【0206】
ステップS21−4において、3D点計算器84は、ステップS15−16で先に識別された次の候補エッジを考慮する(ステップS21−4が初めて実行される場合、これは最初の候補エッジである)。
【0207】
ステップS21−6において、3D点計算器84は、ステップS21−4で選択された候補エッジの一部が2D投影ボリューム650と交わるか否かを判定する。
【0208】
具体的に説明すると、この実施形態では、ステップS21−6において、3D点計算器84は、“Graphics Gems”(II、7〜9ページ、ISBN 0-12-064481-9)に記載される方法のような従来の共通部分検査方法を使用して、2D投影ボリューム650の12本のエッジの各々に対して候補エッジを検査する。
【0209】
ステップS21−6において、候補エッジが2D投影ボリューム650と交わると判定される場合、ステップS21−8において、3D点計算器84は、その候補エッジに「検証済エッジ」としてラベル付けし、ステップS21−10において、カウンタnveの値を1だけ増分する。
【0210】
これに対し、ステップS21−6において、候補エッジが2D投影ボリューム650と交わらないと判定される場合、ステップS21−8及びS21−10が省略される。
【0211】
ステップS21−12において、3D点計算器84は、カウンタnveの値が1より大きいか否かを判定する。
【0212】
ステップS21−12において、カウンタnveの値が1より大きいと判定される場合、処理はステップS21−14へと進む。ここで、2本以上の検証済エッジが識別されたことを示すフラグが設定される。
【0213】
これに対し、ステップS21−12において、カウンタnveの値が1以下であると判定される場合、処理はステップS21−16へと進み、ここで、3D点計算器84は、処理すべき別の候補エッジが存在するか否かを判定する。
【0214】
ステップS21−12において、カウンタnveの値が1より大きいと判定されるまで、あるいは、ステップS21−16において全ての候補エッジの処理が終了したと判定されるまで、ステップS21−4からS21−16が繰り返される。
【0215】
ステップS21−16において、全ての候補エッジの処理が終了したと判定される場合、処理はステップS21−18へと進む。ここで、3D点計算器84は、カウンタnveの値を読み取り、カウンタnveにより定義される検証済エッジの本数によって、識別される検証済エッジの本数が1又は0であることを示すためのフラグを設定する。
【0216】
再度図15を参照すると、ステップS15−40において、3D点計算器84は、ステップS21−14又はステップS21−18で設定されたフラグの値を読み取り、検証済エッジの本数を判定する。
【0217】
1本より多い検証済エッジがある場合、シルエットと2D投影ボリューム650との間の関係は、図17eを参照して説明した関係5である(関係が図17bを参照して説明した関係2、図17cを参照して説明した関係3、又は、図17fを参照して説明した関係6でないように、2D投影ボリューム中にシルエットエッジの頂点が存在しないことが先にステップS15−20で確立されている)。この場合、処理はステップS15−42へと進み、ここで、3D点計算器84は、少なくとも1本の検証済エッジが検出されたアクティブなカメラの台数を定義するカウンタneの値を1だけ増分する。
【0218】
ステップS15−44において、3D点計算器84は、フラグeitherSubdivideOrDiscardを「真」に設定する。これは、任意のシルエットと2D投影ボリューム650との間の関係が、図17eを参照して説明した関係5である場合、上述のボリューム状態のケースB又はボリューム状態のケースC(3D点が計算されることになる)は起こり得ないからである。従って、ステップS13−6でスタックから取り出されたボリュームは、その他の画像中における2D投影ボリューム650とシルエットとの間の関係によって、再分割すべきか、あるいは、廃棄すべきかが決まる。
【0219】
ステップS15−46において、3D点計算器84は、後述の処理で使用される閾値3よりもカウンタnpの値が大きくなるように、ステップS13−6でスタックから取り出されたボリュームと交わる平面の数を定義するカウンタnpの値を4だけ増分する。
【0220】
再度ステップS15−40に戻ると、検証済エッジの本数が1であると判定される場合、現在処理中のシルエットと2D投影ボリューム650との間の関係は、図17dを参照して説明した関係4である。この場合、処理はステップS15−48へと進み、ここで、3D点計算器84は、現在のシルエットを定義するデータを格納する。
【0221】
ステップS15−50において、3D点計算器84は、少なくとも1つの検証済エッジが検出されたアクティブなカメラの台数を定義するカウンタneの値を1だけ増分し、ステップS15−52において、ステップS13−6でスタックから取り出されたボリュームと交わる平面の数を定義するカウンタnpの値を1だけ増分する。
【0222】
ステップS15−54において、3D点計算器84は、カウンタnpの値が3以下であるか否かを判定する。
【0223】
ステップS15−54において、カウンタnpの値が3以下であると判定される場合、上述のボリューム状態のケースB又はボリューム状態のケースC(3D点が計算されることになる)が起こる可能性はまだあり、ステップS15−56において、3D点計算器84は、検証済エッジを定義するデータを格納する。
【0224】
これに対し、ステップS15−54において、カウンタnpの値が3より大きいと判定される場合、上述のボリューム状態のケースBとボリューム状態のケースCのいずれも起こり得ないので、ステップS15−56が省略される。
【0225】
ステップS15−56が終了した後、あるいは、ステップS15−54においてカウンタnpの値が3より大きいと判定されるとき、処理はステップS15−12へと戻り、次のシルエットが存在する場合はそれを考慮する。
【0226】
ステップS15−40に戻ると、検証済エッジの本数が0の場合、現在処理中のシルエットと2D投影ボリューム650との間の関係は、図17gを参照して説明した関係7、及び、図17hを参照して説明した関係8のいずれかである。この場合、処理はステップS15−58へと進み、ここで、3D点計算器84は、2D投影ボリューム650上の任意の点を選択する。具体的には、この実施形態において、3D点計算器84は、投影ボリュームの隅の1つに対応する点を選択する。
【0227】
ステップS15−60において、3D点計算器84は、ステップS15−58で選択された2D投影ボリューム650上の点が現在考慮中のシルエットの内側にあるか、あるいは、外側にあるかを判定する。
【0228】
ステップS15−60において、2D投影ボリューム650上の点がシルエットの内側にあると判定される場合、2D投影ボリューム650とシルエットとの間の関係は、図17gを参照して説明した関係7である。この場合、処理はステップS15−62へと進む。ここで、3D点計算器84は、現在のシルエットが位置するカメラをアクティブなカメラのリストから削除する(シルエットは、2D投影ボリューム650を包囲するので、子ボリュームを生成/検査する必要がないためである)。
【0229】
これに対し、ステップS15−60において、2D投影ボリューム650上の選択された点が、シルエットの外側に存在すると判定される場合、シルエットと2D投影ボリューム650との間の関係は、図17hを参照して説明した関係8である。この場合、処理はステップS15−64へと進み、ここで、3D点計算器84は、上述のケースAが存在すると判明したので、ステップS13−6でスタックから取り出されたボリュームの状態が「廃棄」であると判定されたことを示すためのフラグを設定する。
【0230】
ステップS15−64が実行された後、処理は図13のステップS13−10へと戻る。これは、上述のボリューム状態のケースAが存在することを判定するためには、3D点計算器84は、2D投影ボリューム650と関係8を有する1つのシルエットのみを識別すれば良く、更に別の画像中の2D投影ボリューム650とシルエットとの間の関係を判定する必要がないからである。
【0231】
ボリューム状態のケースAは、2D投影ボリューム650に対する全てのシルエットの検査が終了する前に、処理がステップS13−10へと戻る唯一のケースである。その他の全てのケースでは、次のシルエットがあれば、それを以上説明したように2D投影ボリューム650に対して検査することができるように、処理はステップS15−12へと戻る。
【0232】
具体的に説明すると、現在のシルエットと2D投影ボリューム650との間の関係が、関係8であると判明していない全ての場合において、更に別のシルエットを考慮するためステップS15−12へと戻るように処理は構成される。なぜなら、後続のシルエットが2D投影ボリューム650と関係8を有することが判明した場合、この関係のもつ優先度により、先に判定された全ての関係は無効になり、ステップS13−6でスタックから取り出されたボリュームは廃棄されるからである。
【0233】
ステップS15−12において、現在のボリュームの2D投影ボリューム650に対する全てのシルエットの検査が終了したと判定される場合、処理はステップS15−66へと進む。
【0234】
ステップS15−66において、3D点計算器84は、ステップS13−6でスタックから取り出されたボリュームと交わる平面の数を定義するカウンタnpの値を読み取り、値が3未満か否かを判定する。
【0235】
ステップS15−66において、カウンタnpの値が3未満であると判定される場合、上述のボリューム状態のケースDが識別される。尚、第1に、ボリューム状態のケースAがステップS15−64で検出された場合、処理はステップS15−66には到達しないことと、第2に、ボリューム状態のケースB又はCが存在する場合、カウンタnpの値は3に等しくなることと、第3に、画像中で2つ以上の検証済頂点又は2本以上の検証済エッジが検出されるとき、ステップS15−26又はS15−46でカウンタnpの値を4だけ増分する処理が行なわれるので、ボリューム状態のケースDからHのいずれかが存在する場合、カウンタnpの値は3より大きくなることとにより、ボリューム状態はケースD以外になり得ない。従って、ステップS15−66において、カウンタnpの値が3未満であると判定される場合、処理はステップS15−68へと進み、ここで、3D点計算器84は、ボリュームを廃棄すべきであることを示すためのフラグを設定する。
【0236】
これに対し、ステップS15−66において、カウンタnpの値が3以上であると判定される場合、処理はステップS15−70へと進む。ここで、3D点計算器84は、カウンタnpの値が3に等しいか否かを判定し、フラグeitherSubdivideOrDiscardを「偽」に設定する。
【0237】
ステップS15−70において、カウンタnpの値が3に等しく、フラグeitherSubdivideOrDiscardが「偽」に設定されている場合、ボリューム状態のケースB又はボリューム状態のケースCが識別され、処理はステップS15−72へと進む。ここで、3D点計算器84は、3D点を計算すべきであることを示すフラグを設定する。
【0238】
これに対し、ステップS15−70において、カウンタnpの値が3より大きく、及び/又は、フラグeitherSubdivideOrDiscardが「真」に設定されていると判定される場合、3D点計算器84は、ステップS13−6でスタックから取り出されたボリュームの状態が上述のボリューム状態のケースE、F、G又はHのうちの1つであることを判定する。3D点計算器84により実行される後続の処理により、(少なくとも1つの検証済頂点が検出されたアクティブなカメラの台数、及び、少なくとも1つの検証済エッジが検出されたアクティブなカメラの台数のそれぞれを定義する)カウンタnv及びneの値と以下に示す規則とに基づいて、これらのボリューム状態のケースのうちのどれが実際のボリューム状態のケースであるかが判定される:
(a)nv+neの値において、子ボリュームは親ボリュームよりも増加することはない。
(b)nv+neの値において、子ボリュームは親ボリュームよりも増加することはない。
(c)単一の候補頂点を含むボリュームは、カウンタ値(nv=0、ne=3)又は(nv=1、ne=1)を有する。
【0239】
具体的には、ステップS15−74において、3D点計算器84は、少なくとも1つの検証済頂点が検出されたアクティブなカメラの台数を定義するカウンタnvの値と少なくとも1本の検証済エッジが検出されたアクティブなカメラの台数を定義するカウンタneの値との合計が2未満であるか否かを判定する。
【0240】
ステップS15−74において、合計nv+neが2未満であると判定される場合、ボリューム状態のケースEが識別され、処理はステップS15−76へと進む。ここで、3D点計算器84は、ステップS13−6でスタックから取り出されたボリュームを廃棄すべきであることを示すフラグを設定する。
【0241】
これに対し、ステップS15−74において、合計nv+neが2以上であると判定される場合、処理はステップS15−78へと進み、ここで、3D点計算器84は、合計nv+neが2より大きいか否かを判定する。
【0242】
ステップS15−78において、合計nv+neの値が2より大きい場合、上述のボリューム状態のケースFが識別され、処理はステップS15−80へと進む。ここで、3D点計算器84は、ステップS13−6でスタックから取り出されたボリュームを再分割すべきであり、再分割されたボリュームを更に処理することを示すためのフラグを設定する。
【0243】
これに対し、ステップS15−78において、合計nv+neが2に等しいと判定される場合、処理はステップS15−82へと進み、ここで、少なくとも1つの検証済頂点が検出されたアクティブなカメラの台数を定義するカウンタnvの値が0に等しいか否かを判定する。
【0244】
ステップS15−82において、カウンタnvの値が0に等しいと判定される場合、ボリューム状態のケースGが識別され、処理はステップS15−84へと進む。ここで、3D点計算器84は、ステップS13−6でスタックから取り出されたボリュームを廃棄すべきであることを示すためのフラグを設定する。
【0245】
これに対し、ステップS15−82において、カウンタnvの値が0に等しくないと判定される場合、ボリューム状態のケースHが識別され、処理はステップS15−86へと進む。ここで、3D点計算器84は、ステップS13−6でスタックから取り出されたボリュームを再分割すべきであり、結果として生じるより小さいボリュームを更に処理することを示すためのフラグを設定する。
【0246】
図15を参照して説明した処理を行なった結果、3D点計算器84は、ステップS13−6でスタックから取り出されたボリュームに対して存在するボリューム状態のケースを判定し、どの後続の処理をボリュームに対して実行すべきかを示す判定されたボリューム状態のケースに従ってフラグを設定している。
【0247】
図13を再度参照すると、以上説明したようにボリュームの状態を判定するための処理を実行した後、ステップS13−10において、3D点計算器84は、状態を「頂点を計算する」とすべきか否かを判定する。
【0248】
ステップS13−10において、頂点を計算すべきであると判定される場合、処理はステップS13−12へと進み、頂点が計算される。計算すべきであると判定されない場合、ステップS13−12が省略される。
【0249】
図22は、ステップS13−12で3D点計算器84が頂点を計算するのに実行する処理動作を示す。
【0250】
図22のステップS22−2において、3D点計算器84は、現在のボリュームと交わる3本のシルエットエッジ(すなわち、ステップS15−36及び/又はS15−56で格納されるデータにおいて識別されるエッジ)を考慮し、各々がエッジのうちの1本とそのエッジを含む画像が記録されたときのカメラ230の焦点とを含む3つの平面の共通部分の3D点を計算する。言い換えると、3D点計算器84は、カメラ焦点から格納されたシルエットエッジの端点を通って光線を投影することによって定義される平面を含む各平面の共通部分の3D点を計算する。従って、図10の例を参照すると、平面522、524及び526を含む3つの平面の共通部分528の3D点が計算される。この処理は、従来の平面共通部分アルゴリズムを使用して実行される。
【0251】
ステップS22−4において、3D点計算器84は、ステップS22−2で計算された3D点がステップS13−6でスタックから取り出されたボリュームの内側にあるか否かを検査する。ボリュームと交わる各平面は、必ずしもボリューム中の3D点で相互に交わる必要がないので、この検査が必要である。
【0252】
ステップS22−4において、計算された3D点がボリュームの内側にあると判定される場合、処理はステップS22−6へと進む。ここで、3D点計算器84は、計算された3D点を被写体オブジェクト210の表面の頂点を表す3D点のリストへと加える。
【0253】
これに対し、ステップS22−4において、計算された3D点がボリュームの外側にあると判定される場合、ステップS22−6は省略される。
ステップS22−8において、3D点計算器84は、処理が完了しているのでステップS13−6でスタックから取り出されたボリュームを廃棄すべきであることを示すためにフラグを設定する。
【0254】
図13を再度参照すると、ステップS13−14において、3D点計算器84は、ステップS13−6でスタックから取り出されたボリュームの状態が「廃棄」及び「再分割(subdivide)」のいずれに設定されているかを判定する。
【0255】
状態が「廃棄」に設定されている場合(ステップS13−8での処理により、あるいは、ステップS13−12においてステップS22−8の結果として設定される可能性がある)、ステップS13−6において、3D点計算器84は、ボリュームを廃棄する。
【0256】
これに対し、ボリュームの状態が「再分割」に設定される場合、ステップS13−18において、3D点計算器84は、ボリュームを再分割し、子ボリュームをステップS13−4で作成されたスタックの最上部に加える。この実施形態では、ステップS13−18でのボリュームの再分割は、8つの新規の子ボリュームを生成するためのボリュームの2値的な再分割である。
ステップS13−16又はステップS13−18に引き続いて、処理はステップS13−20へと進む。ここで、3D点計算器84は、スタックに別のボリューム(ステップS13−18で加えられた子ボリュームを含む)が存在するか否かを判定する。
【0257】
以上説明したようにスタック上の各ボリュームを処理し終わるまで、ステップS13−6からステップS13−20が繰り返される。
【0258】
このように処理を実行した結果、3D点計算器84は、被写体オブジェクト210の表面の頂点を表す3D空間中の1組の点を生成している。
【0259】
再度図8を参照すると、ステップS8−8において、多角形生成器86は、3D点計算器84により生成された3D点を連結し、被写体オブジェクト210の表面を表す多角形メッシュを生成する。
【0260】
図23は、ステップS8−8で多角形生成器86により実行される処理動作を示す。
【0261】
図23のステップS23−2において、多角形生成器86は、生成すべき多角形メッシュ中の各多角形に対して平面データを生成し、3D点計算器84により生成された各3D点に対していわゆる「シグネチャ」を判定する。
【0262】
図24を参照して説明すると、被写体オブジェクト210の表面を近似するために多角形生成器86により生成される各多角形は、シルエット中の線分の端点とカメラ230の焦点(図10を参照して説明)とを通る線により定義される三角形の平面に位置する。従って、例えば、多角形900は、オブジェクトシルエット中の線分の端点920及び930とステップS4−6でカメラ計算器50により計算されたカメラ焦点の位置940とを通る線により定義される三角形910の平面に位置する。
【0263】
ステップS23−2において、多角形生成器86は、各多角形平面に固有のIDを割り当てると共に、各多角形平面に対して法ベクトルnを計算するための処理を実行する。
【0264】
上述のように、図24の点950のようなステップS8−6で3D点計算器84により計算される各3D点は、3つの多角形平面の共通部分により定義される。従って、ステップS23−2において、多角形生成器86は、3D点計算器84により計算された各3D点に対して、3D点で交わる3つの平面の平面IDから構成される「シグネチャ」を定義する。例えば、図24において、3D点950のシグネチャは、平面900、960及び970のIDから構成されるであろう。
【0265】
図25は、ステップS23−2において多角形生成器86により実行される処理動作を示す。
【0266】
図25のステップS25−2において、多角形生成器86は、ステップS8−6で3D点計算器84が被写体オブジェクト210の3D頂点を計算する元となった次のシルエットエッジ(すなわち、ステップS8−2で生成されたシルエット中の線分)を考慮する(ステップS25−2が初めて実行される場合、これは最初のシルエットエッジである)。
【0267】
ステップS25−4において、多角形生成器86は、ステップS25−2で選択されたエッジのIDをそのエッジにより定義された平面(すなわち、エッジの端点とステップS4−6においてそのエッジが位置する画像に対してカメラ計算器50により予め計算された焦点の位置とを通る線により定義される平面)に割り当てる。この実施形態では、ステップS25−4で割り当てられたシルエットエッジIDは、ステップS8−2において予めエッジに割り当てられた固有のラベルから構成される。
【0268】
ステップS25−6において、多角形生成器86は、現在考慮中のシルエットエッジにより定義される平面に対する単位法ベクトルの方向を計算する。この実施形態では、単位法ベクトルは、ステップS4−6でカメラ計算器50により計算された平面を定義する撮影パラメータを使用して、従来通りに計算される。
ステップS25−8において、多角形生成器86は、ステップS8−6において3D点計算器84が被写体オブジェクト210の3D頂点を計算する元となった別のシルエットエッジが存在するか否かを判定する。以上説明したように各シルエットエッジを処理し終わるまで、ステップS25−2からS25−8が繰り返される。
【0269】
ステップS25−10において、多角形生成器86は、ステップS8−6において3D点計算器84により計算された次の3D点を考慮し(ステップS25−10が初めて実行される場合、これは最初の3D点である)、ステップS25−12において、3D点に対して3D点で交わる各平面の3つのID(ステップS25−4で各平面に割り当てられたID)から構成されるシグネチャを定義する。
【0270】
ステップS25−14において、多角形生成器86は、別の計算された3D点が存在するか否かを判定し、以上説明したように各3D点を処理し終わるまで、ステップS25−10からS25−14が繰り返される。
【0271】
再度図23を参照すると、ステップS23−4において、多角形生成器86は、3D点計算器84により予め計算された3D点をステップS23−2で定義されたシグネチャに従って幾つかの組へと編成する。
【0272】
図26は、ステップS23−4で多角形生成器86により実行される処理動作を示す。
【0273】
図26のステップS26−2において、多角形生成器86は、ステップS8−6で3D点計算器84により予め計算された次の3D点(ステップS26−2が初めて実行される場合、これは最初の3D点である)を考慮する。
【0274】
ステップS26−4において、多角形生成器86は、ステップS26−2で選択された点のシグネチャ(ステップS25−12で予め割り当てられたシグネチャ)を読み取り、ステップS26−6において、シグネチャ中で定義された平面ごとに3D点を1組の点に割り当てる。すなわち、3D点は、3D点のシグネチャ中に定義された平面ごとに1組の3つの異なる組に割り当てられる。
【0275】
ステップS26−8において、多角形生成器86は、3D点計算器84により計算された処理すべき別の3D点が存在するか否かを判定し、以上説明したように各3D点を処理し終わるまでステップS26−2からS26−8が繰り返される。
【0276】
図26を参照して説明した処理の結果、被写体オブジェクト210のサーフェスモデル中の平面ごとに1組の点が生成される。各グループ中の点は、被写体オブジェクト210の表面のある平面上に位置する1つ以上の多角形を定義する。
【0277】
図23を再度参照すると、ステップS23−6において、多角形生成器86は、被写体オブジェクト210の表面の一部を表す多角形を生成するために各組の3D点が連結される順番を判定する。
【0278】
ステップS23−6において多角形生成器86により実行される処理ステップの詳細を説明する前に、処理の原則を説明する。
【0279】
図27において、図24の例の4つの3D点及び5つの平面が拡大形式で示される。ステップS8−6で3D点計算器84により計算された4つの3D点は、V1、V2、V3及びV4(V3は、図24の点950に対応)とラベル付けされ、5つの平面は、a、b、c、d及びe(平面a、c及びdは、図24の例において平面900、960及び970にそれぞれ対応する)とラベル付けされる。
【0280】
ステップS23−6において多角形生成器86により計算される各エッジ(連結)は、2つの3D点を連結する。どの3D点が連結されるかを判定するために、この実施形態において、多角形生成器86は、3D点のシグネチャを利用する。具体的には、連結される2つの3D点は、ステップS25−12で割り当てられたシグネチャ中に、双方のシグネチャに共通する2つの平面IDを有する。例えば、図27の3D点V1のシグネチャは、{a,b,e}であり、3D点V2のシグネチャは、{a,b,c}である。従って、平面IDのa及びbは、双方のシグネチャにおいて共通であり、図27で示すように3D点V1及びV2間のエッジで交わる平面を定義するので、3D点V1及びV2間の連結を識別する。
【0281】
後述するように、ステップS23−6の処理では、多角形生成器86は、連結が開始3D点に戻るまで、以上説明したように3D点のシグネチャを使用して判定された多角形の周囲のエッジをたどることによって各多角形中の3D点間の連結を判定する。
【0282】
凸状の被写体オブジェクトの場合、ステップS23−4で生成された3D点の各組(同じ平面上に位置する3D点から構成される)において、同じ2つの平面IDをシグネチャ中に有する3D点は2つだけであると考えられるので、これは3D点を連結するのに実行しなければならない唯一の処理である。一例として図27を参照すると、平面Aに対する1組の3D点は、点V1、V2、V3及びV4から構成されるが、点V1及びV2のみが、シグネチャ中に平面IDa及びbを有する。
【0283】
しかし、凸状でない被写体オブジェクト表面の各部分に対しては、シグネチャ中に同じ2つの平面IDを有する3D点は2つより多くあるかもしれない。従って、3D点間の連結は、シグネチャのみに基づいて判定することはできない。
【0284】
一例として、図28は、4つの3D点1000、1010、1020及び1030が2つの平面910、1040の共通部分上に位置する例を示す。従って、この例では、4つの3D点1000、1010、1020及び1030の各々のシグネチャは、平面910及び1040の平面IDを含む。
【0285】
この問題に対処するために、この実施形態では、多角形生成器86は、平面910及び1040の共通部分により定義されるエッジに沿って見出される順番に基づいて、対を成すように各点を連結することによって3D点間の連結を判定するための処理を実行する。この処理について以下で詳細に説明する。
【0286】
後述するように、この実施形態では、多角形生成器86は、凸状でない被写体オブジェクト表面の各部分で発生する可能性のある更なる問題、すなわち、オブジェクト表面を表す2つ以上の多角形が同じ平面に位置するという問題に対処するための処理を実行する。
【0287】
この問題が発生する可能性のある第1の状況が、図28の例で示される。ここでは、被写体オブジェクト表面の別々の部分を表す多角形1050及び1060が、共に平面910に位置する。
【0288】
2つ以上の多角形が同じ平面に位置する可能性がある第2の状況が、図29に示される。この例では、多角形1100は、オブジェクト表面の一部を表し、多角形1110は、被写体オブジェクト表面の穴を表す。
【0289】
ステップS23−6で多角形生成器86により実行される処理を詳細に説明する。
【0290】
図30は、ステップS23−6で多角形生成器86により実行される処理動作を示す。
【0291】
図30のステップS30−2において、多角形生成器86は、被写体オブジェクト210の3Dコンピュータモデルに対して空の多角形の組「S」を作成する。この組に対して、被写体オブジェクト210の表面の各部分を表す多角形が、計算される際に加えられる。
【0292】
ステップS30−4において、多角形生成器86は、ステップS23−2で定義された次の平面「p」を考慮し、ステップS23−4において平面に対して生成された組Vp中の3D点を読み取る。
【0293】
ステップS30−6において、多角形生成器86は、ステップS30−4で読み取られた組Vp中に3D点が存在するか否かを判定する。処理の反復の1回目では、3D点が組Vpに存在するので、処理はステップS30−8へと進む。しかし、後続の処理では、点に対する連結が計算された後に3D点は組Vpから削除されるので、以降の反復では、ステップS30−6において、組Vp中に3D点が残存しないと判定される可能性がある。この場合、処理は後述のステップS30−50へと進む。
【0294】
ステップS30−8において、多角形生成器86は、ステップS30−2で作成された多角形の組「S」に新規の多角形データ構造(polygon data structure)「s」を加える。多角形を定義するデータが、生成されたときにこれに入力される。また、ステップS30−8において、多角形生成器86は、多角形に対する法線を定義するために、現在考慮中の平面に対してステップS25−6で予め計算された法ベクトルを定義するデータを多角形データ構造「s」に格納する。
【0295】
ステップS30−10において、多角形生成器86は、組Vpから多角形の開始頂点「u」として3D点を選択する(いずれの3D点を開始頂点「u」として選択しても良い)。
【0296】
ステップS30−12において、多角形生成器86は、頂点「u」に対して現在処理中の頂点であることを示す現在頂点ポインタ「w」を設定し、ステップS30−14において、開始頂点「u」のシグネチャを読み取る。
【0297】
ステップS30−16において、多角形生成器86は、ステップS30−14で読み取られたシグネチャ中に定義されている平面「q」を選択する。この平面「q」は、現在考慮中(ステップS30−4で選択)の平面「p」とは異なる。
【0298】
多角形生成器86により実行される処理の理解を促進するために、図27の例を参照する。一例として図27を参照すると、ステップS30−4で選択された平面「p」が平面「a」であると想定する。セットVp中の3D点は、3D点V1、V2、V3及びV4となる。
【0299】
また、3D点V2がステップS30−10において、開始頂点(u)として選択されたとする。このとき、ステップS30−16において、多角形生成器86は、平面b及び平面cのいずれかを選択するが、それは、これらの平面の双方が、平面aと共に3D点V2のシグネチャ中に定義されているからである。平面cがステップS30−16で選択されるものとする。
【0300】
図30を再度参照すると、ステップS30−18において、多角形生成器86は、現在頂点「w」(すなわち、現在考慮中の例では3D点V2)を組Vpから削除し、ステップS30−20において、ステップS30−8で生成された多角形データ構造「s」にこの頂点を加え、多角形「s」の頂点を定義する。
【0301】
ステップS30−22において、多角形生成器86は、組Vp中に残存し、シグネチャ中にステップS30−16で選択された平面「q」のIDを有する3D点の組「Vpq」を判定する。
【0302】
再度図27の例を参照すると、3D点V3は、シグネチャ{a,c,d}を有し、シグネチャ中に平面c(ステップS30−16で選択)を有する組Vp中での唯一の点である。
【0303】
ステップS30−24において、多角形生成器86は、ステップS30−22で判定された組Vpq中に3D点が存在するか否かを判定する。
【0304】
処理の反復の1回目では、3D点が組Vpqに存在する。しかし、上述のように、ステップS30−18では、各3D点が処理後に組Vpから削除される。従って、多角形の全ての頂点の処理が終了したとき、組Vpqには3D点は存在しなくなる。この場合、処理はステップS30−6へと戻り、ここで、多角形生成器86は、組Vpに残存する3D点が存在するか否かを判定する。
【0305】
例えば、上述の図28及び29に示されるように、平面「p」に位置する多角形が3つ以上存在する場合、点が組Vpに残存している可能性がある。2つ以上の多角形が平面「p」に存在する状況では、ステップS30−24での検査により、1つの多角形の処理が終了したときに組Vpqに点は存在しないと判定され、ステップS30−6で実行される処理により、平面「p」に位置する別の多角形に対する連結が計算されずに残存しているときに組Vpに3D点が残存すると判定されるであろう。この場合、処理がステップS30−6からS30−8へと進むときに、新規の多角形データ構造が、平面「p」に位置する別の多角形に対して生成される。
【0306】
ステップS30−24において、組Vpqに点が存在すると判定される場合、処理はステップS30−26へと進み、ここで、多角形生成器86は、組Vpq中の点の数が1に等しいか否かを判定する。組Vpqの各3D点は、現在頂点「w」に連結される3D点を表す。従って、組Vpqにちょうど1つの点だけが存在する場合、図27に示す例のような場合が存在する。しかし、組Vpqに2つ以上の点が存在する場合、上述の3D点1000、1010、1020及び1030に対して図28の例のような場合が存在する。
【0307】
ステップS30−26において、組Vpqにちょうど1つの3D点が存在する場合、処理はステップS30−28へと進む。ここで、多角形生成器86は、多角形「s」の次の頂点「x」(すなわち、現在頂点に連結された頂点)を組Vpq中の3D点に設定する。
【0308】
従って、図27の例において、平面cをステップS30−16で選択された平面であるとすると、ステップS30−28で設定される次の頂点「x」は3D点V3である。
【0309】
続いて、処理は、ステップS30−44へと進み、ここで、多角形生成器86は、現在頂点ポインタ「w」を頂点「x」に設定する。
【0310】
ステップS30−46において、多角形生成器86は、現在頂点のシグネチャを読み取り、ステップS30−48において、ステップS30−4で選択された平面「p」とは異なり且つステップS30−16で選択された平面「q」とも異なるシグネチャ中に定義された平面「r」を選択する。従って、図27の例において、3D点V3のシグネチャは{a,c,d}であり、平面dがステップS30−48で選択される。
【0311】
処理は、引き続き、ステップS30−18へと戻り、ここで、現在頂点は組Vpから削除される。
【0312】
このように、多角形生成器86は、頂点ごとに連結された頂点を判定し、処理が終了したときにこの頂点を削除しながら多角形中の3D点間を横断する。多角形に対する処理は、ステップS30−24で組Vpqに点が存在せず、多角形の全ての頂点の連結が終了したと判定されるときに完了する。
【0313】
ステップS30−26に戻ると、組Vpqに2つ以上の3D点が存在すると判定される場合、図28の例に示すような状況が発生していることになる。この図28に示す状況では、複数の3D点1000、1010、1020及び1030が2つの平面の共通部分により定義される線に位置する。この場合、多角形生成器86は、現在考慮中の3D点と各々が位置する直線に沿った組Vpq中の各3D点の相対的な位置に基づいて、組Vpq中のどの3D点が現在考慮中の3D点に連結されるべきかを判定するための処理を実行する。
【0314】
具体的には、ステップS30−30において、多角形生成器86は、組Vpq中に3D点は奇数個存在するか、あるいは、偶数個存在するかを判定する。
【0315】
2つの平面の共通部分により定義されるエッジ上に位置する3D点の数は、偶数でなければならない。これは、3D点が第1と第2、第3と第4のように対を成して連結されなければならないからである。従って、図28の例を参照すると、3D点1000は、3D点1010に連結され、3D点1020は、3D点1030に連結される。
【0316】
しかし、ステップS30−30で検査される組Vpq中の3D点の数は奇数であっても良い。なぜなら、処理中の現在頂点「w」であったために、2つの平面の共通部分により定義されるエッジ上に位置する3D点のうちの1つが、ステップS30−18で組Vpから削除されたような場合も起こりうるからである。
【0317】
これに対し、ステップS30−10で選択された開始頂点「u」が、3つ以上の頂点が存在するエッジ上に位置する頂点のうちの1つであり、処理される次の頂点が3つ以上の頂点を有するエッジ上に位置する頂点でない(すなわち、開始頂点が3つ以上の頂点を有するエッジ上の端点のうちの1つであって、多角形が3つ以上の頂点を有するエッジに沿ってそれまで通っていない方向に横断される)場合、開始頂点がステップS30−18で組Vpから削除されており、3つ以上の頂点を有するエッジ上に位置する頂点である現在頂点wも、ステップS30−18で組Vpから削除されていると考えられるので、ステップS30−30で検査される組Vpq中の3D点の数は偶数になるであろう。
【0318】
従って、一例として図28を参照すると、平面910がステップS30−4で選択される平面であり、3D点1000がステップS30−10で開始頂点「u」として選択されるものとする。平面1040がステップS30−16で選択される場合、ステップS30−18において、3D点1000は、組Vpから削除され、ステップS30−22及びS30−24において、組Vpqは、3つの点1010、1020及び1030を含むものと判定される。これに対し、ステップS30−16において、平面1040の代わりに平面1080が選択された場合、ステップS30−18において、3D点1000が組Vpから削除され、ステップS30−28及び後続のステップにおいて3D点1070が処理されるであろう。後続の処理において、3D点1010、1020及び1030のうちの1つが現在頂点「w」となる。これらの点のうちの最初のものが現在頂点「w」になるとき、この頂点が、ステップS30−18において、組Vpから削除され、結果として、ステップS30−24及びS30−26で検査された組Vpq中に残存する平面910及び1040の共通部分上に2つの点(すなわち、偶数個の点)が位置するようになる。
【0319】
従って、ステップS30−30において、組Vpq中の点の数が奇数であると判定される場合、多角形生成器86は、組が現在頂点「w」と組Vpq中の3D点とから構成されるように、平面「p」及び「q」の共通部分に位置する3D点の組「Vline」を定義する。
【0320】
これに対し、ステップS30−30において、組Vpq中の点の数が偶数であると判定される場合、ステップS30−32において、多角形生成器86は、組が現在頂点「w」と開始頂点「u」と組Vpq中の3D点とから構成されるように、平面p及びqの共通部分に位置する3D点の組「Vline」を定義する。
【0321】
ステップS30−32又はステップS30−34に引き続いて、処理はステップS30−36へと進む。ここで、多角形生成器86は、平面「p」及び「q」の共通部分により定義される線に沿った相対的な位置に従って、組Vline中の各3D点にランク0からランクn−1(nは組Vline中の点の数)のランクを割り当てる。具体的には、共通部分上の端点の一方(どちらでも良い)に、ランク0が割り当てられ、組Vlineの残りの点にランク0の点からの距離に従ってランク1、2...が割り当てられる。従って、図28に示す例を参照すると、3D点1000にランク0が割り当てられる場合、3D点1010にランク1が割り当てられ、3D点1020にランク2が割り当てられ、3D点1030にランク3が割り当てられる。
【0322】
ステップS30−38において、多角形生成器86は、現在頂点「w」のランクが偶数であるか、又は、奇数であるかを判定する。
【0323】
ステップS30−38において、現在頂点「w」のランクが偶数であると判定される場合、ステップS30−40において、多角形生成器86は、以下の式が成立するように、多角形「s」の次の頂点「x」(すなわち、現在頂点に連結された頂点)を組Vpq中の頂点「v」に設定する:
rank(v)=rank(w)+1 … (3)
これに対し、ステップS30−38において、現在頂点「w」のランクが奇数であると判定される場合、ステップS30−42において、多角形生成器86は、以下の式が成立するように、次の頂点「x」及び多角形「s」を組Vpq中の頂点「v」に設定する:
rank(v)=rank(w)-1 … (4)
続いて、処理はステップS30−44へと進む。
【0324】
上述のように、ステップS30−44において、多角形生成器86は、現在頂点ポインタ「w」を頂点「x」に設定し、ステップS30−46において、新規の現在頂点のシグネチャを読み取る。
【0325】
ステップS30−48において、多角形生成器86は、ステップS30−4で選択された平面「p」と異なり、ステップS30−16で選択された平面「q」とも異なるステップS30−46で読み取られたシグネチャ中に定義された平面「r」を選択する。
【0326】
ステップS30−48の終了後、処理はステップS30−18へと戻る。
【0327】
再度ステップS30−6を参照すると、組Vp中にこれ以上の3D点が存在しないと判定される(全ての3D点がステップS30−18の処理の前回の反復で削除されているため)場合、ステップS30−4で選択された平面「p」上に位置する3D点の全てに対して連結が判定され、処理はステップS30−50へと進む。
【0328】
ステップS30−50において、多角形生成器86は、平面「p」に位置する2つ以上の多角形が存在するか否かを判定する。具体的には、この実施形態において、多角形生成器86は、2つ以上の多角形データ構造「s」が平面「p」に対して生成されたか否かを判定する(新規の多角形データ構造「s」がステップS30−8で平面「p」に位置する各多角形に対して生成される)。
【0329】
ステップS30−50において、平面「p」に位置する2つ以上の多角形が存在すると判定される場合、処理はステップS30−52へと進み、ここで、多角形生成器86は、平面「p」に位置する各多角形を検査し、平面「p」に位置するその他の多角形のうちのいずれかを含むか否かを判定する。
【0330】
ステップS30−54において、多角形生成器86は、平面「p」に位置する各多角形が被写体オブジェクト210の表面の一部又はその中の穴を表すか否かを判定する。具体的には、多角形がその他の多角形と共に含まれない場合、その多角形は、被写体オブジェクト210の表面を表す。ちょうど1つの多角形が別の多角形の内部に位置する場合、大きい方の多角形は、被写体オブジェクト210の表面を表し、大きい多角形に含まれる小さい方の多角形は、表面の穴を表す。多角形に含まれる多角形が2つ以上存在する場合、多角形生成器86は、各親多角形が複数の子多角形を含むように階層構造を作成する。多角形生成器86は、続いて、階層構造の奇数の世代の各多角形を被写体オブジェクト210の表面として識別し、偶数の世代の多角形を穴として識別する。
【0331】
これに対し、ステップS30−50において、平面「p」に1つだけ多角形が存在すると判定される場合、ステップS30−52及びS30−54は省略される。
【0332】
ステップS30−56において、多角形生成器86は、ステップS23−2において識別された処理すべき別の平面が存在するか否かを判定する。
【0333】
ステップS30−56において、処理すべき別の平面が残存すると判定される場合、処理はステップS30−4へと戻る。
【0334】
以上説明したように各平面を処理し終わるまで、ステップS30−4からS30−56が繰り返される。
【0335】
この処理の結果、多角形生成器86は、被写体オブジェクト210の表面を表す多角形メッシュを計算する。
【0336】
図23を再度参照すると、ステップS23−8において、多角形生成器86は、ステップS23−6で生成された多角形中の3D点を連結し、連結された平面三角形のメッシュを生成する。この実施形態では、多角形生成器86は、“Open GL Programming Guide 2nd edition”(第11章、ISBN 0-201-46138-2)に記載されるようなOpen GLユーティリティライブラリ“glutess”による従来の方法を使用してステップS23−8での処理を実行する。
【0337】
図4を再度参照すると、ステップS4−18において、サーフェステクスチャラ90は、入力画像データを処理し、ステップS4−16でサーフェスモデラ80により生成されるサーフェスモデル中の各表面三角形に対してテクスチャデータを生成する。
【0338】
具体的には、この実施形態において、サーフェステクスチャラ90は、ステップS4−16で生成されたサーフェスメッシュ中の各三角形を選択すると共に、選択された三角形に最も真正面に近い状態で直面する入力画像「i」を見出すための処理を従来の方法で実行する。すなわち、
値が最大の入力画像が見出される。ここで、
は、各三角形が位置する多角形に対してステップS30−10で割り当てられた三角形の法線であり、
は「i」番目の画像に対するビューイング方向である。これにより、選択された三角形が最大投影領域を有する入力画像が識別される。
【0339】
選択された表面三角形は、続いて、識別された入力画像へと投影され、投影された三角形の頂点は、画像テクスチャマップを定義するためのテクスチャ座標として使用される。
【0340】
ステップS4−18でサーフェステクスチャラ90がテクスチャデータを生成するのに使用するその他の技術は、同時係属英国特許出願第0026331.9号、第0026343.4号及び第0026347.5号に記載される。その内容は、相互参照により本明細書に取り入れられている。
【0341】
上述の処理を実行した結果が、被写体オブジェクト210の表面のVRML(又は、類似の形式)モデルであり、モデル上にレンダリングされる画像データを定義するテクスチャ座標を備えている。
【0342】
ステップS4−20において、中央制御装置20は出力データ記憶装置120からの、被写体オブジェクト210の3Dコンピュータモデルを定義するデータを、例えば、ディスク122などの記憶装置に格納されるデータ又は信号124(図1)として出力する。これに加えて、又はその代わりに、中央制御装置20は、ディスプレイプロセッサ110に、被写体オブジェクト210の3Dコンピュータモデルの画像を、例えば、ユーザ入力装置6を使用してユーザにより入力された視点に従って、テクスチャデータによってレンダリングして表示させても良い。
【0343】
第2実施形態
上述の第1実施形態では、各々が入力画像中の被写体オブジェクト210のシルエットとカメラ230の焦点とにより定義される円錐形の多面体を定義するデータを処理することによって3Dコンピュータモデルを生成するための処理が実行されている。この処理は、多面体を構成する所定数の三角形平面が相互に交わる3D点を計算するために実行され、その結果、各3D点は、3D点で交わる各平面のうちのいずれも含まない多面体の各々の内部にある。従って、第1実施形態では、3Dコンピュータモデルは、被写体オブジェクトの画像と画像が記録された位置及び向きを定義するデータとに基づいて生成される。
【0344】
しかし、この処理は、その他の状況にある平面から成る多面体から3Dコンピュータモデルを生成する場合に対しても適用可能である。
【0345】
例として、各々が複数の平面により定義される多面体から成る複数のコンポーネント3Dオブジェクトから構成される複合オブジェクトの3Dコンピュータモデルが生成される第2実施形態を説明する。
【0346】
図31を参照すると、第2実施形態は、従来の通りに1つ以上のプロセッサと、複数のメモリと、グラフィックスカードなどを含むパーソナルコンピュータのような処理装置2002と、従来通りのパーソナルコンピュータモニタのような表示装置2004と、キーボード、マウスなどのユーザ入力装置2006とを具備する。
【0347】
処理装置2002は、例えば、ディスク2012などのデータ記憶媒体に格納されたデータとして及び/又は遠隔データベース等からインターネットなどの通信ネットワーク(図示せず)を介する伝送、あるいは無線伝送により処理装置2002に入力され且つ/又はキーボードなどのユーザ入力装置2006を介してユーザにより入力される信号2014として入力されるプログラミング命令に従って動作するようにプログラムされている。
【0348】
以下で更に詳細に説明するが、それらのプログラミング命令は、各々が複数の平面多面体から成る3Dコンピュータモデルを定義するデータを生成し、及び/又は、このような3Dコンピュータモデルを定義するデータを入力データとして受け取り、ユーザの入力命令に従って相互に対して3Dコンピュータモデルを位置決めし、コンポーネントとしての元のコンピュータモデルとユーザにより定義される相対的な位置とを使用して複合オブジェクトの3Dコンピュータモデルを生成するように処理装置2002を構成させるための命令である。複合オブジェクトの3Dコンピュータモデルは、新規の創意に富んだ技術を使用して生成される。この技術では、コンポーネントの3Dコンピュータモデルを定義する平面多角形の共通部分を判定することによって、複合オブジェクトの頂点を表す3D点を計算するための処理が実行される。以下で説明するように、特に、複合オブジェクトの頂点である3D点を生成する可能性がない多角形の共通部分の計算をしなくても良いので、この処理は非常に効率的な方法で実行される。
【0349】
処理装置2002は、プログラミング命令によりプログラミングされたとき、処理動作を実行するための幾つかの機能ユニットとして構成されたと考えることができる。そのような機能ユニットの例及びそれらの相互接続関係を図31に示す。しかし、図31に示すユニット及び相互接続は概念上のものであり、理解を助けるという目的のために一例として示されているにすぎない。従って、それらは、処理装置2002のプロセッサ、メモリなどが構成されるユニットや接続を必ずしも表してはいない。
【0350】
図31に示す機能ユニットを説明すると、中央制御装置2020はユーザ入力装置2006からの入力を処理すると共に、その他の機能ユニットの制御及び処理を実行するように構成されている。
【0351】
メモリ2030は、中央制御装置2020及びその他の機能ユニットにより使用されるべく設けられている。
【0352】
入力データ記憶装置2040は、例えば、ディスク2042などの記憶装置に格納されるデータとして、又は処理装置2002へ送信される信号2044として、又はユーザ入力装置2006を使用して処理装置2002に入力される入力データを格納するように構成される。入力データは、各々が従来の方法で平面多角形から構成される1つ以上の3Dコンピュータモデルを定義する。
【0353】
コンポーネントオブジェクトモデラ2050は、入力データ格納装置2040に格納された入力データを処理し、ユーザ命令に従って入力された3Dコンピュータモデルを修正して形状、外観などを変更するように構成される。加えて、コンポーネントオブジェクトモデラ2050は、ユーザにより入力された命令に従って、平面多角形から成る新規の3Dコンピュータモデルを定義するデータを生成するように構成される。
【0354】
モデルポジショナ(Model positioner)2060は、ユーザがユーザ入力装置2006を使用して入力した命令を処理し、複合オブジェクトのコンポーネントを定義するように、入力データ記憶装置2040に格納された入力データ中で定義され、及び/又は、共通の座標空間で相互に対してコンポーネントオブジェクトモデラ2050により生成されたデータにより定義されたオブジェクトを位置決めするように構成される。
【0355】
複合オブジェクトモデラ2070は、3D点計算器2080及び多角形生成器2090を具備する。
【0356】
3D点計算器2080は、コンポーネントの3Dコンピュータモデルとその相対的な位置を定義するデータを処理し、コンポーネントモデルを構成する平面多角形の共通部分(複合オブジェクトの潜在頂点を定義する共通部分)の3D位置を計算すると共に、この共通部分を検査して複合オブジェクトの実際の値を表す共通部分がどれであるかを判定するように構成される。
【0357】
多角形生成器2090は、3D点計算器2080により生成された3D点を連結して複合オブジェクトの表面を表す多角形メッシュを形成するように構成される。
【0358】
ディスプレイプロセッサ2100は、中央制御装置2020の制御の下に、コンポーネントオブジェクトモデラ2050、モデルポジショナ2060及び複合オブジェクトモデラ2070による処理中に、表示装置2004を介してユーザに対し画像及び命令を表示するように構成される。特に、ディスプレイプロセッサ2100は、ユーザが選択した視点からのコンポーネントの画像及び複合コンピュータモデルを表示するように構成される。
【0359】
出力データ記憶装置2110は、複合オブジェクトモデラ2070により生成される複合オブジェクトを定義するデータを格納するように構成される。中央制御装置2020は、出力データ記憶装置2110からのデータの出力を、例えば、ディスク2120などの記憶装置へのデータ及び/又は信号2130として制御するように構成される。
【0360】
図32は、この実施形態において、処理装置2002により実行される処理動作を示す。
【0361】
図32のステップS32−2において、コンポーネントオブジェクトモデラ2050は、ユーザ入力装置2006を介してユーザにより入力された命令に基づいて動作し、複数のコンポーネントオブジェクトの各々に対して、3Dコンピュータモデルを定義するデータを生成する。この処理は、例えば、計算機支援設計(CAD)装置などにおいて従来の方法で実行される。
【0362】
また、ステップS32−2において、ディスプレイプロセッサ2100は、表示装置2004に表示するための画像データを生成し、ユーザに対してコンポーネントオブジェクトを表示する。この実施形態では、コンポーネントオブジェクトの3Dコンピュータモデルは対話方式で生成される。すなわち、ユーザからの各命令の入力による3Dコンピュータモデルの形成に対する効果が表示装置2004に表示され、ユーザは、入力効果の連続表示に応じて更に命令を入力して3Dコンピュータモデルを完成させる。
【0363】
ステップS32−2での処理の結果の一例が、図33aにおいて示される。ここでは、コンポーネントオブジェクトモデラ2050により生成されるデータにより定義された3つの3Dコンポーネントオブジェクト2200、2210及び2220が示されている。
【0364】
コンポーネントオブジェクト2200は、底面多角形2230と、上面多角形2240と、側面多角形2250、2260、2270及び2280とで構成される。
【0365】
コンポーネントオブジェクト2210は、上面多角形2290と、底面多角形2300と、側面多角形2310、2320及び2330とで構成される。
【0366】
コンポーネントオブジェクト2220は、多角形2340、2350、2360、2370、2380、2390、2400及び2410から構成される。
【0367】
この実施形態で実行される後続の処理を説明するために、図33aに示すコンポーネントオブジェクトを以下で参照する。
【0368】
ステップS32−2において、コンポーネントオブジェクトモデラ2050が全てのコンポーネントオブジェクトを定義するためのデータを生成する代わりに、処理装置2002に入力され、入力データ記憶装置2040に格納されたデータによりコンポーネントオブジェクトのうちの1つ以上を定義しても良い。このような入力データは、例えば、第1実施形態で説明した処理を使用したり、あるいは、1つ以上のオブジェクトをレーザ走査したりすることによって生成しても良い。
【0369】
これに加えて、又は、その代わりに、入力データ記憶装置2040に格納された1つ以上の3Dコンピュータモデルに対するデータを、3Dコンピュータモデルを編集し、コンポーネントオブジェクトの形状、外観などを変更するためにユーザ入力装置2006を介してユーザにより入力された命令に従ってコンポーネントオブジェクトモデラ2050により修正しても良い。
【0370】
再度図32を参照すると、ステップS32−4において、モデルポジショナ2060は、ユーザ入力装置2006を介してユーザにより入力された命令に基づいて動作し、ステップS32−2において生成された(あるいは、入力データ記憶装置2040に格納されたデータ中に定義された)コンポーネントオブジェクトを複合オブジェクトの各部分として共通座標空間において位置決めする。加えて、ディスプレイプロセッサ2100は、中央制御装置2020の制御の下に、表示装置2004に表示するための画像データを生成し、共通の座標空間において位置決めされたコンポーネントオブジェクトの画像を表示する。
【0371】
図33bは、ステップS32−4での処理の結果の一例を示す。ここで、図33aのコンポーネントオブジェクト2200、2210及び2220は、複合オブジェクトの各部分として相互に対して位置決めされる。
【0372】
図33bにおいて、コンポーネントオブジェクト2210は、多角形2230を介してコンポーネントオブジェクト2200に嵌入する(すなわち、コンポーネントオブジェクト2210の多角形2290を定義する頂点2420、2430及び2440がコンポーネントオブジェクト2200の内側にある)ように位置決めされる。
【0373】
コンポーネントオブジェクト2220は、コンポーネントオブジェクト2210の多角形2310及び2330と交わるように位置決めされる。
【0374】
再度図32を参照すると、ステップS32−6において、3D点計算器2080は、複合オブジェクトの頂点を表す3D点を計算する。
【0375】
処理のこの段階では、各々が平面多角形から構成される多面体から成る複数の3Dコンポーネントオブジェクトが存在し、コンポーネントオブジェクト(及び平面多角形)の相対的な位置及び向きは既知である。
【0376】
従って、複合オブジェクトの3次元コンピュータモデルは、コンポーネントオブジェクトの結合を計算することによって生成することができる。この結合は、コンポーネントオブジェクトが3D空間において占めるボリュームの結合である。
【0377】
この実施形態では、コンポーネントオブジェクトの結合は、各コンポーネントオブジェクトを構成する平面多角形の共通部分を計算することによって計算される。多角形のうちの3つが交わる任意の3D点(これらの多角形が同じコンポーネントオブジェクトを元にしているか、2つの異なるコンポーネントオブジェクトを元にしているか、あるいは、3つの異なるコンポーネントオブジェクトを元にしているかを問わない)が、潜在的に複合オブジェクトの表面にある点を定義する。各潜在点は検査され、複合オブジェクト上の点を実際に表すのがどの点であるかが判定される。
【0378】
複合オブジェクトの生成された3Dコンピュータモデル正確さを保証するために、複合オブジェクトの頂点となるコンポーネントオブジェクトを元にした各多角形の共通部分を計算する必要がある。これは、各多角形をそれ以外の全ての多角形に対して検査し、3つの多角形が交わる一揃いの3D点を生成することによって達成することができるであろう。しかし、このように複合オブジェクト上の3D点を計算するのに必要な計算の回数は膨大である。具体的には、全てのコンポーネントオブジェクト中の多角形の総数が「n」個である場合、O(n3)回の計算が必要になると思われる。加えて、検査される多角形の多くが交わらない(従って、3D点の生成に至らない)うえに、3つの多角形の共通部分を計算するのに計算上最も効率の良い方法は、多角形が位置する3つの平面の共通部分を計算することであるので、計算の大半が不必要なものとなる。このため、複合オブジェクトの表面に位置せず、複合オブジェクトの頂点を実際に表すのはどの3D点であるかを判定するための処理を行なう必要がある3D点を計算することとなる。
【0379】
図33a及び図33bに示す例の場合、コンポーネントオブジェクト2200、2210、2220の各々は少数の多角形から成るので、計算回数は、処理可能な範囲に納まるであろう。しかし、より複雑なケースでは、各コンポーネントオブジェクトは、数千の多角形から成る可能性もあり、計算を実行するのに必要とされる時間は膨大なものとなるであろう。
【0380】
従って、この実施形態では、複合オブジェクト上の点を表す3D点を計算するのに必要な計算の回数を低減するように処理が実行される。
【0381】
この処理を詳細に説明する前に、処理の原理について説明する。
【0382】
具体的には、この実施形態において、ステップS32−4でコンポーネントオブジェクトが位置決めされた3D空間のボリュームを考慮し、このボリュームを検査して以下の点を判定するための処理が実行される:
(1) 交わって3D点を生成するのに十分な多角形(すなわち、この実施形態では3つ)がボリューム中に存在しないか、あるいは、ボリューム中の多角形が、複合オブジェクトの頂点を表す3D点で交わることがないという理由で、ボリュームを廃棄することができるか否か(以下で詳細に後述)、
(2) ボリュームが、相互に交わるのに十分であると共に、複合オブジェクトの頂点を表すであろう所定数(この実施形態では、1つの3D点)を超える3D点を生成するのに十分な多角形を含むという理由で、より小さいボリュームを考慮すべくボリュームを再分割すべきか否か、又は、
(3) ボリュームが、相互に交わると共に、複合オブジェクトの頂点を表す十分に少ない所定数(この実施形態では1つ)の3D点を生成するのに適した数(この実施形態では3つ)の多角形を含むか否か。この場合、これらの点の3D位置が計算/検査され、複合オブジェクトの頂点を実際に表すか否かが判定される。
【0383】
このように、処理を行なうことによって、このような点の計算に至らない不必要な処理を回避しながら、複合オブジェクトの頂点を表す全ての3D点を確実に計算することができる。特に、これ以上の計算をすることなく、3D空間のうちの大きなボリュームを廃棄することができる。
【0384】
中の多角形が複合オブジェクトの頂点を表す3D点で交わらないためにボリュームを廃棄することができるか否かを判定するために、この実施形態では、3D点がコンポーネントオブジェクトのうちの1つの内側に位置し、複合オブジェクトの頂点を表すことができないか否かを判定するための処理が実行される。具体的には、一例として図33bを参照すると、3D点2420、2430及び2440の各々は、コンポーネントオブジェクト2200の内側に位置するので、複合オブジェクトの頂点を表すことができない。従って、この実施形態の処理では、これらの点の計算/検査が行なわれないため、実行される処理の量が削減される。
【0385】
以下に詳細に説明するように、この実施形態では、3D点がコンポーネントオブジェクトの内部に位置するか否かを判定するための検査が、各コンポーネントオブジェクトを適切な大きさの多面体の穴と見なし、3D点が全てのコンポーネントオブジェクトに対して、全ての多面体の内部に位置するか否かを検査する(これは、3D点が元の3Dオブジェクトのうちの少なくとも1つの内側に位置するか否かの検査と同等である)ための処理を実行することによって実際に実行される。
【0386】
この実施形態では、3D点が計算されるのに引き続いて検査が行なわれ、3D点が複合オブジェクトの頂点を表すか否かが判定される。これは、3つの平面多角形を含む3Dボリュームが識別されるときに3D点が計算されるからである。しかし、多角形は、ボリューム内の3D点で実際には交わらない可能性がある。加えて、3D点が、多角形が位置する3つの各平面の共通部分を計算することによって計算される結果、計算された3D点が2つ以上の多角形の内部に位置しない可能性もある。従って、この実施形態では、計算された3D点が識別されたボリューム内にあるか否か、及び、3つの多角形全ての内部にあるか否かを判定するための検査が実行される。
【0387】
この実施形態において、複合オブジェクトの頂点を表す3D点を計算するために実行される処理を詳細に説明する。
【0388】
図34は、複合オブジェクトの頂点を定義する3D点を計算するためにステップS32−6において3D点計算器2080により実行される処理動作を示す。
【0389】
図34のステップS34−2において、3D点計算器2080は、複合オブジェクトの頂点を表す全ての3D点が位置する3D空間中のボリュームを定義する。
【0390】
図35を参照して具体的に説明すると、この実施形態では、3D点計算器2080は、ステップS34−2において、複合オブジェクトの頂点を含むボリュームとしてコンポーネントオブジェクト2200、2210及び2220の周囲で軸方向に整列したバウンディング直平行六面体2500を定義する。このバウンディング直平行六面体は従来通りに定義されるので、ここでは説明を行なわない。
【0391】
再度図34を参照すると、ステップS34−4において、3D点計算器2080は、ステップS34−2において定義された3Dボリュームを複数のより小さい子ボリュームへと再分割し、子ボリュームをメモリ中に定義された格納スタックの最上部へと加える。
【0392】
図36を参照して具体的に説明すると、この実施形態において、ステップS34−4でのボリュームの再分割は、8つの新規の子ボリューム2510、2520、2530、2540、2550、2560、2570及び2580を生成するためのバウンディング直平行六面体2500の2値再分割である。
【0393】
再度図34を参照すると、ステップS34−6において、3D点計算器2080は、コンポーネントオブジェクトを穴として含む多面体を各コンポーネントオブジェクトに対して定義する。
【0394】
図37を参照して被写体オブジェクト2200に関して、この処理及びその効果を説明する(処理及びその効果は、その他のコンポーネントオブジェクトの各々に関しても同じである)。
【0395】
図37において、ステップS34−6での処理は、元のコンポーネントオブジェクト2200と同じ座標を有する穴2610(以降、「コンポーネントオブジェクト穴」と呼ぶ)を設けた直平行六面体の形態を有する多面体2600を定義する。
【0396】
従って、元のコンポーネントオブジェクトの各多角形は、多面体2600のコンポーネントオブジェクト穴を定義する。
【0397】
具体的には、3D点計算器2080は、各々が先にステップS34−2で定義されたバウンディング直平行六面体2500の対応する面の外側から多少離間した位置にある複数の面を有するように直平行六面体2600を定義することによって、ステップS34−6での処理を実行する。このため、直平行六面体2600は、バウンディング直平行六面体2500と同じ形状を有するが、寸法がわずかに大きい。このように、直平行六面体2600は、生成する複合オブジェクト上の全ての点を包囲する。
【0398】
ステップS34−6を実行した結果、コンポーネントオブジェクト2200、2210、2220が占めるボリュームの結合を計算するための処理は、多面体のコンポーネントオブジェクト穴の結合を計算するための処理となる。
【0399】
再度図34を参照すると、ステップS34−8において、3D点計算器2080は、ステップS34−4で作成されたスタックの最上部から次のボリューム(ステップS34−8が初めて実行される場合、これは最初のボリュームである)を取り出し、ステップS34−10において、スタックから取り出されたボリュームの状態を判定する。
【0400】
ステップS34−10での処理において、3D点計算器2080は、ステップS34−8でスタックから取り出されたボリュームが、複合オブジェクトの頂点を表すいずれかの3D点を含む可能性がない(従って、ボリュームを廃棄することができる)か否か、複合オブジェクトの頂点を表す2つ以上の3D点を定義するのに十分な数の多角形を含むためにボリュームを再分割する必要があるか否か、あるいは、ボリュームが複合オブジェクトの頂点を表す単一の3D点を定義するのに十分な多角形のみを含むか否か(この場合、3D点の位置を計算/検査することができる)を判定する。
【0401】
図38は、ステップS34−10で3D点計算器2080により実行される処理動作を示す。
【0402】
図38のステップS38−2からS38−10において、3D点計算器2080は、コンポーネントオブジェクト穴を定義するどの多角形が、ステップS34−8でスタックから取り出されたボリュームと交わるかを判定するための処理を実行する。
【0403】
この処理は、現在のボリュームとの共通部分に対して親ボリューム(すなわち、現在処理中のボリュームを作成するために分割されるボリューム)と交わる多角形のみを検査し、現在のボリュームの子ボリュームの処理を行なう際に使用される現在のボリュームと交わる多角形のリストを格納することによって、計算上効率の良い方法で実行される。
【0404】
具体的には、ステップS38−2において、3D点計算器2080は、親ボリュームと交わる多角形(親ボリュームがステップS34−2で定義された直平行六面体2500である場合、これは、コンポーネントオブジェクト穴を定義する全ての多角形である)のリストを考慮する。
【0405】
ステップS38−4において、3D点計算器2080は、ステップS38−2で読み取られたリスト上の次の多角形(ステップS38−4が初めて実行される場合、これは最初の多角形である)を考慮し、ステップS38−6において、多角形が現在のボリュームと交わるか否かを判定する。多角形が現在のボリュームと交わるか否かを検査するためにこの実施形態で実行される処理は、“Graphics Gems”(V、375〜379ページ、Alan W. Paeth編集、Morgan Kaufmann出版、ISBN 0-12-543455-3)に記載されるような従来の方法で実施される。
【0406】
ステップS38−6において、多角形が現在のボリュームと交わると判定される場合、ステップS38−8において、3D点計算器2080は、多角形を現在のボリュームと交わる多角形のリストに加える。
【0407】
これに対し、ステップS38−6において、多角形が現在のボリュームと交わらないと判定される場合、ステップS38−8は省略される。
【0408】
ステップS38−10において、3D点計算器2080は、ステップS38−2で読み取られたリストに別の多角形が存在するか否かを判定する。以上説明したようにステップS38−2で読み取られたリスト上の各多角形を処理し終わるまで、ステップS38−4からS38−10が繰り返される。
【0409】
ステップS38−12からS38−26において、3D点計算器2080は、ステップS34−8でスタックから取り出されたボリュームは、全体的に1つ以上のコンポーネントオブジェクト穴の内部に存在する(従って、ボリューム中に位置する3D点は、複合オブジェクトの頂点を表す可能性がない)ためにこのボリュームを廃棄できるか否かを判定するための処理を実行する。実施形態では、この処理は、ボリュームを検査してステップS34−6で生成された全ての多面体により包囲されるか否かを判定することから成る。加えて、処理は特に計算上効率的な方法で行なわれる。具体的には、ボリュームが多面体により包囲される場合、その子ボリュームの全ても多面体により包囲される。従って、この実施形態では、3D点計算器2080は、親ボリュームを包囲するものとして検証されていない多面体(以降、「アクティブな多面体」と呼ぶ)のみを検査し、現在のボリュームを包囲するか否かを判定する。多面体が現在のボリュームを包囲するものとして検証される場合、この多面体は、現在のボリュームの子ボリュームの各々に渡されるアクティブな多面体のリストから削除される。(従って、アクティブな多面体のリストは、第1実施形態での「アクティブなカメラ」のリストと同等である。)
具体的には、ステップS38−12において、3D点計算器2080は、親ボリュームに対するアクティブな多面体のリスト(すなわち、上述のように、親ボリュームを包囲するものとして検証されていない多面体のリスト)を現在のボリュームに対するリストとしてコピーする。親ボリュームがステップS34−2で定義されたバウンディング直平行六面体2500である場合、アクティブな多面体のリストは、ステップS34−6で生成された全ての多面体から構成される。
【0410】
ステップS38−14において、3D点計算器2080は、ステップS38−12でコピーされたリスト上に現在のボリュームと交わる少なくとも1つの多角形を含まない多面体が存在するか否かを判定する。具体的には、3D点計算器2080は、ステップS38−8で生成された現在のボリュームと交わる多角形のリストを読み取り、ステップS38−12でコピーされたリスト上において、現在のボリュームと交わる被写体オブジェクト穴を定義する少なくとも1つの多角形を有しない多面体を識別する。
【0411】
多面体が、現在のボリュームと交わる多角形を有する場合、現在のボリュームは、部分的に多面体の被写体オブジェクト穴の内側と外側の双方に位置する。更に、全ての多面体が現在のボリュームと交わる多角形を有する場合、現在のボリュームは、少なくとも1つの被写体オブジェクト穴の内側にその全体が位置する訳ではなく、部分的に全ての多面体の内側と外側の双方に位置するので、ボリュームを廃棄することができない。従って、ステップS38−14において、全ての多面体が現在のボリュームと交わる少なくとも1つの多角形を含むと判定される場合、処理は後述のステップS38−28へと進む。
【0412】
これに対し、ステップS38−14において、多面体が現在のボリュームと交わる多角形を含まないと判定される場合、現在のボリュームは、全体的に多面体の内側に位置する(すなわち、ボリュームは多面体により包囲される)か、全体的に多面体の被写体オブジェクト穴に位置する(すなわち、ボリュームは多面体から「外れて」いる)かのいずれかである。この場合、3D点計算器2080は、ステップS38−16からS38−26において、現在のボリュームが、これと交わる多角形を有しない各多面体により包囲されているか、あるいは、多面体から外れているかを判定するための処理を実行する。
【0413】
具体的には、ステップS38−16において、3D点計算器2080は、現在のボリュームと交わる多角形を有しないリスト上の次の多面体を考慮する(ステップS38−16が初めて実行される場合、これは最初の多面体である)。
【0414】
ステップS38−18において、3D点計算器2080は、多面体が現在のボリュームを包囲するか、あるいは、これから外れているかを判定する。
【0415】
図39は、ステップS38−18で3D点計算器2080により実行される処理動作を示す。
【0416】
図39のステップS39−2において、3D点計算器2080は、ステップS34−8でスタックから取り出されたボリュームの表面の点を選択する。ボリュームの表面のどの点でも良く、この実施形態では、3D点計算器2080は、ボリュームの第1の面の第1の頂点を選択する。
【0417】
ステップS39−4において、3D点計算器2080は、ステップS39−2で選択された点から、光線が考慮中の多面体の外へ確実に放出されるように十分に離間した地点(この実施形態では、x方向において多角形の寸法の2倍の距離に設定される)に対して、x軸方向(任意の方向で良い)に光線を投影する。加えて、3D点計算器2080は、光線の多面体との共通部分の数をカウントし、ステップS39−6において、光線の多面体との共通部分の数が奇数であるか、あるいは、偶数であるかを判定する。
【0418】
この検査を行なう理由を図40a、40b、41a及び41bを参照して説明する。
【0419】
図40a及び40bにおいて、ステップS34−8でスタックから取り出されたボリューム2650が被写体オブジェクト穴2610の外側にある場合、ステップS39−4で投影された光線2660は、被写体オブジェクト穴2610を有する多面体2600と奇数回交わる。図40bに示す例では、光線2660は、多面体2600と点2670で1回だけ交わる。光線2660は、穴2610を通過する場合、穴2610の形状によって多面体2600と3つ、5つ、又はそれ以上の奇数個の点で交わっても良い。しかし、ボリューム2650が穴2610の外側にある(従って、多面体2600により包囲される)場合は常に、光線2660の多面体2600との共通部分の数が奇数になる。
【0420】
これに対し、図41a及び41bを参照すると、ステップS34−8でスタックから取り出されたボリューム2680が全体的に被写体オブジェクト穴2610の内側にある場合、ステップS39−4で投影される光線2690は、多面体2600と偶数個の地点で交わることになる。図41bの例では、光線2690は、多面体2600と2つの地点、すなわち、点2700及び2710で交わる。しかし、光線2690は、被写体オブジェクト穴2610の形状によって多面体2600とそれより多い偶数個の地点で交わっても良い。
【0421】
再度図39を参照すると、ステップS39−6において、ステップS39−4で投影された光線の多面体との共通部分の数が奇数であると判定される場合、ステップS39−8において、3D点計算器2080は、ステップS34−8でスタックから取り出されたボリュームが多面体により包囲されていることを示すためのフラグを設定する。
【0422】
これに対し、ステップS39−6において、ステップS39−4で投影された光線の多面体との共通部分の数が偶数であると判定される場合、ステップS39−10において、3D点計算器2080は、ステップS39−8でスタックから取り出されたボリュームが多面体から外れている(すなわち、ボリュームが全体的に多面体の被写体オブジェクト穴の内側にある)ことを示すフラグを設定する。
【0423】
再度図38を参照すると、ステップS38−20において、3D点計算器2080は、ステップS39−8又はステップS39−10で設定されたフラグを読み取り、現在のボリュームが多面体により包囲されているか、あるいは、多面体から外れているかを判定する。
【0424】
ステップS38−20において、ステップS34−8でスタックから取り出されたボリュームが多面体から外れていると判定される場合、ステップS38−22において、3D点計算器2080は、ボリュームがコンポーネントオブジェクト穴のうちの1つの完全な内側(従って、元の3Dコンポーネントオブジェクトのうちの1つの完全な内側)に位置し、複合オブジェクトの頂点を表す3D点を含む可能性がないために、ステップS34−8でスタックから取り出されたボリュームの状態が「廃棄」と判定されたことを示すためのフラグを設定する。
【0425】
ステップS38−22が実行された後、処理は図34のステップS34−12へと戻る。これは、現在のボリュームが複合オブジェクトの頂点を表す3D点を含む可能性がないことを判定するには、3D点計算器2080は、現在のボリュームから外れた多面体の1つだけを識別すれば良いので、現在のボリュームと更に別の多面体との間の関係を判定する必要がないからである。
【0426】
これに対し、ステップS38−20において、ステップS34−8でスタックから取り出されたボリュームが多面体により包囲されていると判定される場合、ステップS38−24において、3D点計算器2080は、現在のボリュームに対するアクティブな多面体のリストからこの多面体を削除する。その結果、この多面体に対して、現在のボリュームのいずれかの子ボリュームを包囲するか否かを判定するための検査が行なわれない。
【0427】
処理はステップS38−26へと進み、ここで、3D点計算器2080は、ステップS38−12でコピーされたリスト上に現在のボリュームと交わる多角形を含まない別の多面体が存在するか否かを判定する。以上説明したようにこのような多面体の各々を処理し終わるまで、あるいは、ステップS38−20において、現在のボリュームが多面体のうちの1つから外れていると判定される(この場合、ステップS38−22においてボリュームの状態が「廃棄」と判定され、処理はステップS34−12へと戻る)まで、ステップS38−16からS38−26が繰り返される。
【0428】
ステップS38−14において、ステップS38−12でコピーされたリスト上に現在のボリュームと交わる多角形を有しない多面体が存在しないと判定される場合、あるいは、ステップS38−26において、このような多角形の全ての処理が終了し、これらの多角形が現在のボリュームを包囲することが判明したと判定される場合、処理はステップS38−28へと進む。
【0429】
ステップS38−28において、3D点計算器2080は、現在のボリュームと交わる多角形を定義するステップS38−8で生成されたリストを読み取る。
【0430】
ステップS38−30において、3D点計算器2080は、ステップS38−28で読み取られたリスト上の多角形の数が3であるか、3より大きいか、あるいは、3未満であるかを判定する。
【0431】
ステップS38−30において、現在のボリュームと交わる多角形の数が3未満であると判定される場合、ステップS38−32において、3D点計算器2080は、相互に交わり、複合オブジェクトの頂点を表す3D点を生成するのに十分な数の多角形をボリュームが含まないために、ステップS34−8でスタックから取り出されたボリュームの状態が「廃棄」と判定されたことを示すためのフラグを設定する。続いて、処理は図34のステップS34−12へと戻る。
【0432】
ステップS38−30において、現在のボリュームと交わる多角形の数が3であると判定される場合、ステップS38−34において、3D点計算器2080は、相互に交わり、複合オブジェクトの頂点を表す単一の3D点を定義するのに適した数の多角形をボリュームが含むために、ステップS34−8でスタックから取り出されたボリュームの状態が「頂点の計算」と判定されたことを示すためのフラグを設定する。処理は図34のステップS34−12へと戻る。
【0433】
ステップS38−30において、現在のボリュームと交わる多角形の数が3より多いと判定される場合、ステップS38−36において、3D点計算器2080は、相互に交わり、複合オブジェクトの頂点を表す単一の3D点を定義するのに必要な数(すなわち、3つ)より多い多角形をボリュームが含むために、ステップS34−8でスタックから取り出されたボリュームの状態が「再分割」と判定されたことを示すためのフラグを設定する。処理は図34のステップS34−12へと戻る。
【0434】
図38を参照して説明した処理を行なった結果、3D点計算器2080は、ステップS34−8でスタックから取り出されたボリュームの状態の判定を終了し、判定された状態に従って、どの後続の処理をボリュームに対して実行すべきかを示すフラグの設定を終了する。
【0435】
再度図34を参照すると、以上説明したようなボリュームの状態を判定するための処理を実行した後、ステップS34−12において、3D点計算器2080は、状態が「頂点の計算」であるか否かを判定する。
【0436】
ステップS34−12において、頂点を計算すべきであると判定される場合、処理はステップS34−14へと進み、ここで、頂点の計算が行なわれる。頂点を計算すべきであると判定されない場合、ステップS34−14は省略される。
【0437】
図42は、頂点を計算するためにステップS34−14で3D点計算器2080により実行される処理動作を示す。
【0438】
図42のステップS42−2において、3D点計算器2080は、3つの多角形を含む3つの平面が交わる点の3D位置を計算する(この処理は、従来の平面共通部分技術を使用して実行される)。
【0439】
ステップS42−4において、3D点計算器2080は、ステップS42−2で計算された3D点が、ステップS34−8でスタックから取り出された3Dボリューム内にあると同時に2D多角形の3つ全ての内部にもあるか否かを判定する。3D点は多角形を含む各平面の共通部分として計算され、各平面は、必ずしもボリューム中の点、あるいは、実際に各多角形の一部である(すなわち、各多角形の内部にある)点で相互に交わる必要がないので、この検査が必要である。ステップS34−8でスタックから取り出されたボリュームは、軸方向に整列した直平行六面体であるので、3D点がボリュームの内側にあるか否かを判定するための検査は、3D点の座標と最小/最大x座標、最小/最大y座標及び最小/最大z座標との間での従来の不等検査を使用して実行される。3D点が各2D多角形内にあるか否かを判定するための処理は、“Graphics Gems”(IV、16〜46ページ、P. Heckbert編集、Morgan Kaufmann出版、ISBN 0-12-336155-9)に記載されるような従来の方法で実行される。
【0440】
ステップS42−4において、計算された3D点がボリュームの内側にあると同時に3つの多角形全ての内部にもあると判定される場合、処理はステップS42−6へと進み、ここで、3D点計算器2080は、計算された3D点を複合オブジェクトの頂点を表す3D点のリストに加える。
【0441】
これに対し、ステップS42−4において、計算された3D点がボリュームの外側、あるいは、3つの多角形のうちの少なくとも1つの外側にあると判定される場合、ステップS42−6は省略される。
【0442】
ステップS42−8において、3D点計算器2080は、ステップS34−8でスタックから取り出されたボリュームの処理が終了したのでこのボリュームを廃棄することを示すためのフラグを設定する。
【0443】
再度図34を参照すると、ステップS34−16において、3D点計算器2080は、ステップS34−8でスタックから取り出されたボリュームの状態が「廃棄」に設定されるのか、あるいは、「再分割」に設定されるのかを判定する。
【0444】
状態が「廃棄」(ステップS34−10での処理により、あるいは、ステップS42−8の結果としてステップS34−14で設定される可能性がある)に設定される場合、ステップS34−18において、3D点計算器2080はこのボリュームを廃棄する。
【0445】
これに対し、ボリュームの状態が「再分割」に設定される場合、ステップS34−20において、3D点計算器2080は、ボリュームを再分割し、子ボリュームをステップS34−4で作成されたスタックの最上部に加える。この実施形態では、ステップS34−20でのボリュームの再分割は、ステップS34−4での再分割と同様に実行される。すなわち、この再分割は、8つの新規の子ボリュームを生成するためのボリュームの2値再分割である。
ステップS34−18又はステップS34−20に引き続いて、処理はステップS34−22へと進む。ここで、3D点計算器2080は、スタック上に別のボリューム(ステップS34−20で加えられた子ボリュームを含む)が存在するか否かを判定する。
【0446】
以上説明したようにスタック上の各ボリュームを処理し終わるまでステップS34−8からS34−22が繰り返される。
【0447】
図43において、このように処理が実行された結果、3D点計算器2080は、複合オブジェクトの頂点を表す3D空間中の1組の点(図43中の各円により示す)を生成する。各頂点は、同じ2つ又は3つのコンポーネントオブジェクトを元にした3つの多角形が交わる位置を表す。
【0448】
図33bを再度参照すると、コンポーネントオブジェクト2210の頂点2420、2430及び2440は、コンポーネントオブジェクト2200の内側にある。このため、3D点計算器2080により実行される処理では、これらの頂点は計算されず、複合オブジェクトの一部を形成しない(これらの頂点は、コンポーネントオブジェクト2200に対してステップS34−6で生成された多面体2600から「外れた」ボリューム中に位置するためである)。従って、再度図43を参照すると、複合オブジェクトの頂点2800、2802及び2804は、頂点2806、2808、2810及び2812と同じ平面に位置する。
【0449】
理解を助けるため、図43において、複合オブジェクトの頂点間の連結は点線により示される。しかし、処理のこの段階では、頂点間の連結はまだ計算されておらず、処理装置2002は、連結を計算するための処理を実行する。次にこの処理の説明を行なう。
【0450】
再度図32を参照すると、ステップS32−8において、多角形生成器2090は、3D点計算器2080により計算された3D点を連結してこの3D点間の連結を計算し、複合オブジェクトの表面を表す多角形メッシュを生成する。
【0451】
ステップS32−8において多角形生成器2090により実行される処理は、ステップS23−2で実行される処理を除き、第1実施形態のステップS8−8において多角形生成器86により実行される処理(図23を参照して説明)と同じである。従って、この処理における差異のみをここで説明する。
【0452】
図44は、複合オブジェクトの頂点を表す計算された3D点ごとに、平面データを生成し、「シグネチャ」を定義するために第2実施形態のステップS23−2で多角形生成器2090により実行される処理動作を示す。
【0453】
図44のステップS44−2において、多角形生成器2090は、ステップS42−2において3D点が3D点計算器2080により計算され、ステップS42−6において複合オブジェクトの頂点のリストに加えられる元となった次の多角形を考慮する(このステップが初めて実行される場合、これは最初の多角形である)。
【0454】
ステップS44−4において、多角形生成器2090は、このステップの前回の反復時に固有のIDが割り当てられている場合を除き、ステップS44−2で選択された多角形にこのIDを割り当てる。
【0455】
ステップS44−6において、多角形生成器2090は、複合オブジェクトの頂点を計算するのに使用される別の多角形が存在するか否かを判定し、以上説明したように各多角形を処理し終わるまで、ステップS44−2からS44−6が繰り返される。
【0456】
ステップS44−8において、多角形生成器2090は、ステップS42−6で3D点計算器2080により生成されたリストから複合オブジェクトの次の計算された頂点を考慮し、ステップS44−10において、3D点で交わる多角形のID(ステップS44−4で多角形に割り当てられたID)から構成される頂点に対するシグネチャを定義する。
【0457】
ステップS44−12において、多角形生成器2090は、複合オブジェクトの別の計算された頂点が存在するか否かを判定し、以上説明したように各頂点を処理し終わるまで、ステップS44−8からS44−12が繰り返される。
【0458】
ステップS32−8での処理を実行した結果、多角形生成器2090は、複合オブジェクトの表面を表す三角の多角形のメッシュを生成する。
【0459】
図32を再度参照すると、ステップS32−10において、中央制御装置2020は、出力データ記憶装置2110から複合オブジェクトの3Dコンピュータモデルを定義するデータを、例えば、ディスク2120などの記憶装置に格納されるデータとして、又は、信号2130(図31)として出力する。これに加えて、又はその代わりに、中央制御装置2020は、ディスプレイプロセッサ2110に、複合オブジェクトの3Dコンピュータモデルを、例えば、ユーザ入力装置2006を使用してユーザにより入力された視点に従って表示装置2004に表示させても良い。
【0460】
第3実施形態
本発明の第3実施形態を説明する。
【0461】
第3実施形態の構成要素及びそれにより実行される処理動作は、図4のステップS4−16でサーフェスモデラ80により実行される処理動作を除いて、第1実施形態と同じであり、この処理動作は第3実施形態では異なっている。
【0462】
この差異を説明する。
【0463】
図45は、第3実施形態において、図4のステップS4−16でサーフェスモデラ80により実行される処理動作を示す。
【0464】
図45のステップS45−2において、シルエットアプロキシメータ82は、図4のステップS4−8においては画像データセグメンタ60、ステップS4−12においては画像分割エディタ70により予め生成された分割画像データを処理し、各入力画像中の被写体オブジェクトのシルエットを直線で近似する。この処理は、第1実施形態において図8のステップS8−2でシルエットアプロキシメータ82により実行された処理と同じであり、各シルエットは、図9の例で示されるように、連結された直線により近似される。
【0465】
ステップS45−4において、3D点計算器84は、各シルエットの各直線を3次元空間へと投影し、直線の端点を通り、この直線を含む画像が記録されたときのカメラ230の焦点の位置で交わるエッジを有する無限の平面三角形を生成する(各画像の焦点位置は、ステップS4−6でカメラ計算器50により予め計算済である)。
【0466】
再度図10に戻ると、ステップS45−4で実行される処理により、3次元空間における各点(この時点では未知)で被写体オブジェクト210の表面に接すると共に、カメラ230の焦点位置に頂点を有する複数の三角形の平面(シルエットの線分ごとに1つ)から成る無限の円錐形520から構成される多面体を各入力画像に対して生成する。従って、各円錐形の横断面は、円錐形を生成する元となったシルエットと同じ形状である。
【0467】
3D点計算器84は、各多面体中の平面の各々に対して固有のIDを割り当てる。
【0468】
ステップS45−6からS45−18において、3D点計算器84は、ステップS45−4で生成された多面体からの平面の共通部分の各点を計算し、共通部分の計算された各点を検査して被写体オブジェクト210の表面の各点を表すか否かを判定するための処理を実行する。
【0469】
具体的には、ステップS45−6において、3D点計算器84は、ステップS45−4で生成された全ての多面体の全ての平面を考慮し、少なくとも2つの多面体の面を含むこれらの平面のうちの3つから成る次の組を考慮する(ステップS45−6が初めて実行される場合、これは最初の組である)。
【0470】
ステップS45−8において、3D点計算器84は、ステップ45−6で考慮された3つの平面の共通部分の点を計算する。具体的には、この実施形態において、共通部分の点は、従来の平面共通部分アルゴリズムを使用して、3つの平面を含む3つの平面が交わる点を計算することによって計算される。
【0471】
ステップS45−10において、3D点計算器84は、ステップS45−8で計算された共通部分の点が、ステップS45−4で生成された全ての多面体の内部に位置するか否かを判定する。
【0472】
ステップS45−10において、点が少なくとも1つの多面体の外側に位置すると判定される場合、被写体オブジェクト210の表面の点を表す可能性がないために、ステップS45−12においてこの点は廃棄される。
【0473】
これに対し、ステップS45−10において、点が全ての多面体の内部にあると判定される場合、ステップS45−14において、3D点計算器84は、その点がステップS45−6で考慮された3つの平面の全ての内部にあるか否かを判定する(点は、平面自体の共通部分の点を計算することによってではなく、各面を含む平面の共通部分の点を計算することによって計算されるので、点はこれらの平面の1つ以上の外側にあっても良いことに留意すべきである)。
【0474】
ステップS45−14において、点が平面のうちの少なくとも1つの外側に位置する場合、ステップS45−12において、点は被写体オブジェクト210の表面の点を表す可能性がないので廃棄される。
【0475】
これに対し、ステップS45−14において、点が3つの平面の全ての内部にあると判定される場合、ステップS45−16において、点は被写体オブジェクト210の表面の点として保持される。加えて、点には、そこで交わる各平面の3つのID(これらのIDは、ステップS45−4で予め平面に割り当てられたIDである)から形成される三重値から構成される「シグネチャ」が割り当てられる。
【0476】
ステップS45−18において、3D点計算器84は、少なくとも2つの多面体の面を含む3つの平面から成る別の組が存在するか否かを判定する。以上説明したように少なくとも2つの多面体の3つの平面の各組を処理し終わるまで、ステップS45−6からS45−18が繰り返される。
【0477】
この処理を実行した結果、3D点計算器84は、少なくとも2つの多面体の3つの平面の全ての予想可能な組み合わせの共通部分の点を計算/検査し、被写体オブジェクト210の表面の点を表す3D空間中の各点から構成される被写体オブジェクト210の3Dコンピュータモデルを生成する。
【0478】
ステップS45−20において、多角形生成器86は、各点に割り当てられたシグネチャを使用して、ステップS45−16で保持された3D点を連結し、どの点を相互に連結すべきかを判定し、それにより、被写体オブジェクト210の表面を表す多角形メッシュを生成する。従って、3D点を連結して多角形メッシュを生成するための処理は、ステップS45−4で生成された全ての多面体の共通部分から生成される3D点が計算/検査された後に実行される。
【0479】
第3実施形態のステップS45−20で多角形生成器86により実行される処理は、第3実施形態では図25のステップS25−10からS25−14が実行されない点を除いて、第1実施形態においてステップS8−8で実行される処理と同じである。ステップS25−10からS25−14の処理は代わりに図45のステップS45−16で実行される。
【0480】
第1実施形態で実行される処理よりも計算上高い費用がかかるが、それでも、被写体オブジェクト210の3Dコンピュータモデルを生成するために第3実施形態で実行される処理は、3Dコンピュータモデルを生成する従来の方法よりも、必要とする処理資源及び/又は処理時間が少なくて済む。
【0481】
以上説明した各実施形態に対しては、特許請求の範囲内で多数の変形を行なうことができる。
【0482】
例えば、上述の第1実施形態及び第3実施形態では、入力画像データは、カメラ230により記録された被写体オブジェクト210の「静止」画像であったが、この入力画像は、ビデオカメラにより記録された画像データのフレームであっても良い。
【0483】
上述の第1実施形態及び第3実施形態では、ステップS4−4において、カメラの固有パラメータを定義するためにユーザにより入力されたデータが格納される。しかし、その代わりに、固有のカメラパラメータの一部又は全部に対してデフォルト値を想定しても、あるいは、Hartleyの“Euclidean Reconstruction From Uncalibrated Views”(Applications of Invariance in Computer Vision、Mundy, Zisserman and Forsyth編集、237〜256ページ、Azores、1993年)に記載されるような従来の方法で、固有のパラメータ値を計算するための処理を実行しても良い。
【0484】
上述の第1実施形態及び第3実施形態では、図5を参照して説明したように、被写体オブジェクト210に関連する入力画像からの画像データが、背景に関連する画像データから分割される。しかし、他の従来の分割方法を代わりに使用しても良い。例えば、写真マット34及び背景(又は背景のみ)の色を表す単一のRGB値が格納され、入力画像中の各画素が処理されてRGB背景値とRGB画素値との間のRGB空間でのユークリッド距離が特定の閾値未満であるか否かが判定される分割方法が使用されても良い。
【0485】
上述の第1実施形態及び第3実施形態では、カメラ計算器50は、写真マット34に対するカメラ230の位置及び向きを入力画像ごとに計算する(ステップS4−6を参照して説明済)ことによって、入力画像の相対的な位置及び向きを計算する。しかし、撮影位置及び向きが計算される方法は重要ではない。例えば、写真マット34を廃棄し、その代わりに、被写体オブジェクト210を包囲し、各々が処理装置2に入力される既知で固定の位置及び向きを有する複数のカメラを使用して入力画像を生成しても良い。あるいは、写真マット34を廃棄し、被写体オブジェクト210がその正確な回転を処理装置2に入力する位置符号器を有するターンテーブル上に設置されても良い。カメラ230の固定位置及びターンテーブルの角度が分かっているので、処理装置2は、被写体オブジェクト210の各画像の相対的な位置及び向きを計算することができる。
【0486】
上述の第1実施形態では、ステップS13−8で実行される処理中にフラグ“eitherSubdivideOrDiscard”が設定される。しかし、ステップS15−26及びS15−46において「np」カウンタをオーバーフローさせる(すなわち、第1実施形態において値が3を超過する)処理を実行した結果、処理は依然として機能するので、このフラグを必ずしも設定する必要はない。
【0487】
上述の第1実施形態では、ステップS15−16において、処理装置2は、投影されたボリュームと交わる1組の「候補エッジ」を生成する。後続の検査は、その1組の候補エッジに位置するエッジに限定される。しかし、ステップS15−16(及びステップS15−16の処理を促進するために実行されるステップS8−4)が省略され、後続の検査が全てのエッジで行なわれても良い。しかし、これにより、実行しなければならない処理動作の量が大幅に増加する可能性がある。
【0488】
第1実施形態では、ステップS13−2を参照して説明したオブジェクト表面の全ての計算された点が位置する3Dボリュームを定義するための処理を実行する代わりに、様々な方法で3Dボリュームを定義するための処理が実行されても良い。例えば、初期開始ボリュームは、任意の大きな立方体として定義されても良い。立方体が初期ボリュームに加えられるか(全ての隅が全てのカメラの正面にある場合)、廃棄されるか(全ての角がカメラのうちの1台の背面にある場合、又は、立方体がある所定の寸法よりも小さい場合)、あるいは、再分割されるか(これらの条件のいずれにも当てはまらない場合)のいずれかである。再分割された立方体は同様に処理される。このように、ステップS13−2で定義される3Dボリュームは、1組の立方体の結合から成ると考えられ、完全に全てのカメラの正面に位置し且つ最小の立方体寸法により求められる許容誤差までの最大範囲になることが保証される。
【0489】
上述の第1実施形態では、単一の頂点のみを含むような十分に小さいボリュームが得られるまで、3D空間のボリュームは繰り返し再分割される。しかし、その代わりに、3Dボリュームの再分割は、ボリュームが2つ以上の所定数の頂点を含むときに停止しても良い。複数の頂点の各々が計算/検査され、第1実施形態で各単一の頂点が計算/検査されたのと同様に被写体オブジェクトの実際の頂点を表すか否かが判定されても良い。
【0490】
第1実施形態及び第3実施形態に対して説明された処理動作が、ステップS8−2で生成されたシルエットが穴(及び穴の内部の島)を表す多角形を含む場合にまで拡張できるのは明白である。
【0491】
上述の第2実施形態では、ステップS38−30及びS38−36において、現在のボリュームと交わる多角形の数が3より多い場合に、ボリュームの状態は「再分割」に設定される。しかし、その代わりに、現在のボリュームと交わる多角形が3個より多く所定数(例えば5個)以下の個数で存在する場合、ボリュームの状態は「複数の頂点の計算」に設定されても良い。従って、後続の処理において、処理装置2002は、ボリュームと交わる3つの多角形から成る部分集合により定義される各頂点を計算/検査するであろう。従って、ボリュームは、これと交わる多角形が所定の最大数より多く存在する場合にのみ再分割されると考えられる。このように、ボリュームは2つ以上の頂点を複合オブジェクトのモデルに加えることができ、それにより、(別の候補頂点を計算/検査する手間をかけて)更にボリュームを再分割する処理を行なわなくて済む。
【0492】
第1実施形態において、ステップS13−18でスタックから取り出された3Dボリュームを再分割する際、及び、第2実施形態のステップS34−4及びS34−20において、実行される再分割は、8つの新規の子ボリュームを生成するボリュームの2値再分割である。しかし、言うまでもなく、他の種類の再分割を行なうこともできる。
【0493】
上述の第3実施形態では、ステップS45−8において、3つの平面の共通部分の点は、各面を含む3つの無限の平面が交わる点を計算することによって計算される。引き続いて、ステップS45−10及びS45−14において、計算された点が全ての多面体の内部にあると同時に、3つの平面全ての内部にあるか否かを判定するための検査が実行される。しかし、その代わりに、ステップS45−8において、3つの平面自体の共通部分の点が(これらが位置する平面の代わりに)計算されても良い。この場合、ステップS45−10及びS45−14は省略される。
【0494】
上述の第3実施形態では、被写体オブジェクトの表面のコンピュータモデルを生成する第1実施形態での処理に対する変形を説明している。多面体の共通部分を計算/検査し、結果として生じる点を連結してサーフェスモデルを生成するための第2実施形態での処理も、同様に変形することができるであろう。
【0495】
上述の第1実施形態及び第2実施形態では、オブジェクトの表面の計算すべき点の全てを含むように定義される(第1実施形態のステップS13−2及び第2実施形態のステップS34−2で定義される)初期ボリュームは、各々がオブジェクトの表面の所定数の3D点のみを含むように十分に小さいボリュームが生成されるまで、より小さいボリュームへと繰り返し再分割される。再分割プロセスを介してこのような小さいボリュームが得られるようになってから、3D点が計算/検査される。これは、オブジェクトの表面上の点を表す点を計算するのに特に効率的な方法ではあるが、他の方法を使用しても良い。例えば、計算された3D点の全てを含むことになる初期ボリュームが、多面体を構成する平面多角形の位置を参照することなく複数の部分へと分割され、その部分を更に再分割することなく3D点の計算が実行されても良い。具体的には、ボリュームは、(例えば、同じ形状及びボリュームの)複数の部分へと分割され、各部分が多面体に対して検査され、その全体が多面体のうちの少なくとも1つの外側にあるか否かが判定されても良い。ボリューム部分が少なくとも1つの多面体の外側にある場合、そのボリューム部分は廃棄される。これに対し、ボリュームが少なくとも部分的に全ての多面体の内部にある場合、多面体の平面多角形が相互に交わるボリューム部分中の3D点が計算される。このように、各ボリューム部分が廃棄されるか、あるいは、3D点が計算されるが、更なる再分割が起こることはない。ボリューム部分の3D点を計算するために、3つの平面多角形の各組み合わせが考慮され、これらの多角形の共通部分が計算/検査され、ボリューム部分の内部にあるか否かが判定される。これにより、上述の第1実施形態及び第2実施形態と比較して、計算/検査の必要がある共通部分の数は増加するが、依然として、3Dコンピュータモデルを生成するには効率的な方法である。なぜなら、ボリューム部分が全ての多面体の外側に位置する場合には、このボリューム部分を廃棄することができ、多面体を構成する平面多角形の全ての予想可能な共通部分を計算/検査する必要がないからである。
【0496】
以上説明した全ての実施形態では、プログラミング命令により定義される処理ルーチンを使用してコンピュータにより処理を行なう。しかし、処理の一部又は全部は、言うまでもなく、ハードウェアを使用して実行されても良い。
【図面の簡単な説明】
【図1】本発明の第1実施形態の構成要素を、プログラミング命令によりプログラムされたときに処理装置の構成要素が構成されるものと考えられる概念上の機能処理ユニットと共に概略的に示す図である。
【図2】3Dコンピュータモデルを生成すべきオブジェクトの画像の記録を示す図である。
【図3】図1の処理装置に入力されるオブジェクトの画像を示す図である。
【図4a】、
【図4b】、図1の処理装置が入力データを処理するために実行する処理動作を示す図である。
【図5a】、
【図5b】、
【図5c】図4のステップS4−8で実行される処理動作を示す図である。
【図6】図4のステップS4−12で実行される処理動作を示す図である。
【図7】図6のステップS6−2及びS6−4の処理中における図1の表示装置の画面の一例を示す図である。
【図8】図4のステップS4−16で実行される処理動作を示す図である。
【図9】ステップS8−2で実行される処理の結果、直線で近似される被写体オブジェクトのシルエットの一例を示す図である。
【図10】シルエットにより定義される多面体の一例を示すと共に、様々な多面体を元にした多角形が交わって3Dコンピュータモデル中の各点をどのように生成するかを示す図である。
【図11a】、
【図11b】図8のステップS8−4で実行される処理動作を示す図である。
【図12】図11のステップS11−4からS11−8で実行される処理動作の一例を示す図である。
【図13】図8のステップS8−6で実行される処理動作を示す図である。
【図14a】、
【図14b】、
【図14c】図13のステップS13−2で3Dボリュームがどのように定義されるかを示す図である。
【図15a】、
【図15b】、
【図15c】、
【図15d】図13のステップS13−8で実行される処理動作を示す図である。
【図16】図15のステップS15−2でのボリュームの2D画像への投影の一例を示す図である。
【図17a】、
【図17b】、
【図17c】、
【図17d】、
【図17e】、
【図17f】、
【図17g】、
【図17h】2次元画像中のボリュームの投影と画像中のオブジェクトのシルエットのエッジとの間の8つの関係であって、そのうちのどれが存在するかを検査するための処理が第1実施形態において実行される関係を示す図である。
【図18】図15のステップS15−16で実行される処理動作を示す図である。
【図19】図18のステップS18−2、S18−4及びS18−6で実行される処理動作の一例を示す図である。
【図20】図15のステップS15−18で実行される処理動作を示す図である。
【図21】図15のステップS15−38で実行される処理動作を示す図である。
【図22】図13のステップS13−12で実行される処理動作を示す図である。
【図23】図8のステップS8−8で実行される処理動作を示す図である。
【図24】図23のステップS23−2で実行される処理動作の一例を示す図である。
【図25】図23のステップS23−2で実行される処理動作を示す図である。
【図26】図23のステップS23−4で実行される処理動作を示す図である。
【図27】図23のステップS23−6で実行される処理動作の一例を示す図である。
【図28】図23のステップS23−6で実行される処理動作の別の例を示す図である。
【図29】図23のステップS23−6で実行される処理動作の更なる例を示す図である。
【図30a】、
【図30b】、
【図30c】、
【図30d】図23のステップS23−6で実行される処理動作を示す図である。
【図31】本発明の第2実施形態の構成要素を、プログラミング命令によりプログラムされたときに処理装置の構成要素が構成されるものと考えられる概念上の機能処理ユニットと共に概略的に示す図である。
【図32】図31の処理装置が入力データを処理するために実行する処理動作を示す図である。
【図33a】図32のステップS32−2で生成される構成要素オブジェクトの一例を示す図である。
【図33b】図33aからの構成要素オブジェクトが図32のステップS32−4でどのように配置されるかの一例を示す図である。
【図34】図32のステップS32−6で実行される処理動作を示す図である。
【図35】バウンディングボリュームが図34のステップS34−2でどのように定義されるかを示す図である。
【図36】図34のステップS34−2で定義されたボリュームが、ステップS34−4でどのように再分割されるかを示す図である。
【図37】構成要素オブジェクトを表す穴を含む多面体が、図34のステップS34−6でどのように生成されるかを示す図である。
【図38a】、
【図38b】、
【図38c】図34のステップS34−10で実行される処理動作を示す図である。
【図39】図38のステップS38−18で実行される処理動作を示す図である。
【図40a】、
【図40b】図39のステップS39−2、S39−4及びS39−6で実行される処理動作の第1の例を示す図である。
【図41a】、
【図41b】図39のステップS39−2、S39−4及びS39−6で実行される処理動作の第2の例を示す図である。
【図42】図34のステップS34−14で実行される処理動作を示す図である。
【図43】図32のステップS32−6で実行される処理の結果を示す図である。
【図44】図23のステップS23−2で第2実施形態において実行される処理動作を示す図である。
【図45a】、
【図45b】図4のステップS4−16で第3実施形態において実行される処理動作を示す図である。
Claims (34)
- 画像入力手段によって被写体オブジェクトの画像を入力し、画像処理手段によって少なくとも前記被写体オブジェクトの一部を含む3次元空間中の複数の平面から構成される多面体を定義するデータを処理して連結し、多角形メッシュを形成することにより、前記被写体オブジェクトの3Dコンピュータモデルを生成する方法であって、
前記画像処理手段による画像処理は、前記3次元空間中における前記多面体を構成する所定数の平面が相互に交わる点を計算することによって、前記3次元空間中における前記被写体オブジェクトの表面上の複数の点を計算する計算工程と、
前記被写体オブジェクト上の1つの点を表す各計算された点に対し、前記1つの点で交わる複数の平面に従って識別情報を割り当てる工程と、
前記被写体オブジェクト上の複数の点を表す前記複数の点を計算し、各々に識別情報を割り当てた後、前記割り当てられた識別情報に従って前記複数の点を連結し、前記被写体オブジェクトの表面を表す多角形メッシュから構成される3Dコンピュータモデルを生成する工程と
を備えることを特徴とする方法。 - 前記被写体オブジェクト上の複数の点を計算する工程において、前記3次元空間の複数のボリュームを検査し、前記被写体オブジェクトの部分を全く含まないボリュームを識別することによって、前記被写体オブジェクト上の1つの点で交わる可能性がなく、前記識別されたボリュームと交わるのがどの平面であるかを識別するための検査が実行され、共通部分の複数の点は、前記被写体オブジェクト上の1つの点で交わる可能性がない前記平面に対して計算されないことを特徴とする請求項1記載の3Dコンピュータモデルの生成方法。
- 前記被写体オブジェクトの表面上の複数の点を計算する工程は、
前記被写体オブジェクト上の全ての点が位置する前記3次元空間のボリュームを定義する工程と、
前記ボリュームを複数のボリューム部分に分割する工程と、
前記多面体に対して各ボリューム部分を検査する工程と、
前記ボリューム部分が全体的に前記多面体のうちの少なくとも1つの外側にある場合、前記ボリューム部分を廃棄し、前記ボリューム部分が少なくとも部分的に前記多面体の全ての内部にある場合、前記ボリューム部分と交わる前記複数の平面を定義する前記データを処理して前記複数の平面のうちの所定数の平面が交わる前記ボリューム部分中の前記3D点を計算する工程と
を含むことを特徴とする請求項2記載の3Dコンピュータモデルの生成方法。 - 画像入力手段によって被写体オブジェクトの画像を入力し、画像処理手段によって少なくとも被写体オブジェクトの一部が内部に位置するボリュームを定義する3次元空間中の複数の平面から各々が構成される複数の多面体を定義するデータを処理して、前記被写体オブジェクトの表面上の複数の点を表す前記3次元空間中の複数の点から構成される前記被写体オブジェクトの3Dコンピュータモデルを生成する方法であって、
前記画像処理手段による画像処理は、前記3Dコンピュータモデル中の全ての点が位置する前記3次元空間のボリュームを定義する工程と、
前記ボリュームを複数のボリューム部分に分割する工程と、
前記多面体に対して各ボリューム部分を検査する工程と、
前記ボリューム部分が全体的に前記多面体のうちの少なくとも1つの外側にある場合、前記ボリューム部分を廃棄し、前記ボリューム部分が少なくとも部分的に前記多面体の全ての内部にある場合、前記ボリューム部分と交わる前記複数の平面を定義する前記データを処理して前記複数の平面のうちの所定数の平面が交わる前記ボリューム部分中の前記複数の点を計算する工程と
を備えることを特徴とする3Dコンピュータモデルの生成方法。 - 前記分割工程と前記検査工程は、
前記多面体に対して前記複数のボリューム部分を検査する工程と、
前記ボリューム部分が前記多面体のうちの少なくとも1つの外側に全体的にある場合、前記ボリューム部分を廃棄し、前記ボリューム部分が少なくとも部分的に前記多面体の全ての内部にある場合、前記ボリューム部分と交わる前記複数の平面を定義する前記データを処理し、前記ボリューム部分と交わる前記複数の平面の数に従って、前記ボリューム部分を更なる検査を行なうために複数のより小さいボリューム部分に再分割するか、前記複数の平面のうちの所定数の平面が交わる前記ボリューム部分中の前記複数の3D点を計算するか、或いは、前記ボリューム部分を廃棄する工程
を含むことを特徴とする請求項4記載の3Dコンピュータモデルの生成方法。 - 前記分割工程と前記検査工程において、ボリューム部分が少なくとも部分的に前記多面体の全ての内部にあり、前記ボリューム部分と交わる複数の平面の数が所定数よりも多い場合、前記ボリューム部分は再分割されることを特徴とする請求項5記載の3Dコンピュータモデルの生成方法。
- 前記分割工程と前記検査工程において、ボリューム部分が少なくとも部分的に前記多面体の全ての内部にあり、前記ボリューム部分と交わる複数の平面の数が所定数未満の場合、前記ボリューム部分は廃棄されることを特徴とする請求項5又は6記載の3Dコンピュータモデルの生成方法。
- 前記分割工程と前記検査工程において、ボリューム部分が検査されるときに、前記ボリューム部分と交わる前記複数の平面を定義するデータが格納され、親ボリューム部分の再分割により生成されたより小さいボリューム部分が検査されるときに、前記複数の平面のうちの前記親ボリューム部分と交わる平面のみが検査されて前記より小さいボリューム部分と交わるか否かが判定されることを特徴とする請求項5乃至7のいずれか1項に記載の3Dコンピュータの生成方法。
- 前記分割工程と前記検査工程は、ボリューム部分が検査されるときに、前記ボリューム部分が全体的に内側に位置すると判定される各多面体を定義するデータが格納され、親ボリューム部分の再分割により生成されたより小さいボリューム部分が検査されるときに、前記より小さいボリューム部分が前記格納されたデータ中で定義されない前記多面体の各々の内側に位置するか否かを判定するための検査は実行されるが、前記格納されたデータ中で定義される前記多面体のうちのいずれかの内側に位置するか否かを判定するための検査は実行されないことを特徴とする請求項5乃至8のいずれか1項に記載の3Dコンピュータの生成方法。
- 前記分割工程と前記検査工程において、多面体に対してボリューム部分が検査され、前記多面体の複数の多角形面のいずれかが前記ボリューム部分と交わるか否かを判定することで、そのボリューム部分が多面体全体の外側に存在するかどうかが検査され、
少なくとも1つの多角形面が前記ボリューム部分と交わる場合には、前記ボリューム部分が少なくとも部分的に前記多面体の内部に位置することを判定し、
前記複数の多角形面のいずれも前記ボリューム部分と交わらない場合には、前記ボリューム部分内の点から前記3次元空間中の所定の点に対して光線を投影し、前記光線の前記多面体との共通部分の数に従って、前記ボリューム部分が全体的に前記多面体の内側に位置するか、あるいは、全体的に前記多面体の外側に位置するかを判定することによって前記ボリューム部分が全体的に前記多面体の外側に位置するか否かが判定される
ことを特徴とする請求項3乃至9のいずれか1項に記載の3Dコンピュータモデルの生成方法。 - 各多面体は、前記3次元空間中の既知の位置及び向きを有する2次元画像から前記被写体オブジェクトの輪郭の前記3次元空間への投影から構成され、それにより、各多面体は、前記投影を生成する元となった前記画像の平面に平行な平面において前記被写体オブジェクトの形状を表すことを特徴とする請求項1乃至10のいずれか1項に記載の3Dコンピュータモデルの生成方法。
- 更に、前記被写体オブジェクトの複数の画像を定義するデータを処理して各画像中の前記被写体オブジェクトの前記輪郭を複数の直線で近似する工程と、
前記3次元空間中の前記複数の画像の位置及び向きに従って、前記複数の直線を前記3次元空間へと投影し、各々が前記投影を生成する元となった前記画像の平面に平行な平面において前記被写体オブジェクトの形状を表す前記複数の多面体を定義する工程と
を備えることを特徴とする請求項11に記載の3Dコンピュータモデルの生成方法。 - 多面体に対してボリューム部分を検査する前記工程は、
前記ボリューム部分を前記多面体に対応する前記2次元画像へと投影し、前記画像中の前記被写体オブジェクトの前記輪郭に対して前記2次元の投影されたボリューム部分を検査する工程
を備えることを特徴とする請求項11又は12に記載の3Dコンピュータモデルの生成方法。 - 前記各2次元画像中の前記被写体オブジェクトの前記輪郭は、複数の直線状エッジから構成され、前記ボリューム部分と交わる前記複数の平面を判定するために、前記2次元の投影されたボリューム部分が検査され、前記投影されたボリューム部分と交わる前記複数の輪郭エッジが判定される
ことを特徴とする請求項13に記載の3Dコンピュータモデルの生成方法。 - 前記各2次元画像中の前記輪郭の前記複数の直線状エッジは、複数の頂点で端部と端部をつなぐように連結され、前記ボリューム部分と交わる前記複数の平面を判定するために、前記2次元の投影されたボリューム部分が検査され、その中に位置する複数の輪郭頂点と前記投影されたボリューム部分と交わる前記複数の輪郭エッジとが判定される
ことを特徴とする請求項14に記載の3Dコンピュータモデルの生成方法。 - 投影されたボリューム部分と交わる前記複数の輪郭エッジを判定するため、
前記投影されたボリューム部分を含む前記画像の部分が識別され、
前記画像の複数の領域及び各領域内の前記複数の輪郭エッジを定義する格納されたデータが読み取られ、
前記投影されたボリューム部分を含む前記画像の前記識別された部分と重複する複数の領域に位置するように前記格納されたデータ中で定義された複数の輪郭エッジに対してのみ前記投影されたボリューム部分が検査される
ことを特徴とする請求項14又は15に記載の3Dコンピュータモデルの生成方法。 - 各多面体は、前記被写体オブジェクトの部分の輪郭の3次元形状を定義する穴を有する多面体であることを特徴とする請求項1乃至10のいずれか1項に記載の3Dコンピュータモデルの生成方法。
- 少なくとも被写体オブジェクトの一部が内部に位置するボリュームを定義する3次元空間中の複数の平面から各々が構成される少なくとも3つの多面体を定義するデータを処理して、多角形メッシュを形成するように連結された前記被写体オブジェクトの表面上の複数の点を表す前記3次元空間中の複数の点から構成される前記被写体オブジェクトの3Dコンピュータモデルを生成するための装置であって、
前記多面体の所定数の平面が相互に交わる点を計算することによって、前記被写体オブジェクトの表面上の複数の点を表す前記3次元空間中の複数の点を計算する3D点計算手段と、
前記被写体オブジェクト上の1つの点を表す各計算された点に対して前記1つの点で交わる前記平面に従って識別情報を割り当てる3D点識別手段と、
前記割り当てられた識別情報に従って前記複数の点を連結し、前記被写体オブジェクトの表面を表す多角形メッシュから構成される3Dコンピュータモデルを生成する手段であって、前記3D点計算手段によって前記3Dコンピュータモデル中の全ての3D点を計算する処理が終了した後に、前記複数の点を連結するように構成される3D点連結手段と
を備えることを特徴とする装置。 - 前記3D点計算手段は、前記3次元空間の複数のボリュームを検査し、前記被写体オブジェクトの部分を全く含まないボリュームを識別することによって、前記被写体オブジェクト上の1つの点で交わる可能性がなく、前記識別されたボリュームと交わるのがどの平面であるかを識別するための検査を実行するように構成され、3D点計算手段は、前記被写体オブジェクト上の1つの点で交わる可能性がない前記識別された平面に対して共通部分の複数の点を計算しないように構成されることを特徴とする請求項18に記載の装置。
- 前記3D点計算手段は、
前記被写体オブジェクト上の全ての点が位置する前記3次元空間のボリュームを定義するボリューム定義手段と、
前記ボリュームを複数のボリューム部分に分割するボリューム分割手段と、
前記多面体に対して各ボリューム部分を検査し、
前記ボリューム部分が全体的に前記多面体のうちの少なくとも1つの外側にある場合、前記ボリューム部分を廃棄し、
前記ボリューム部分が少なくとも部分的に前記多面体の全ての内部にある場合、前記ボリューム部分と交わる前記複数の平面を定義する前記データを処理して前記複数の平面のうちの所定数の平面が交わる前記ボリューム部分中の前記複数の3D点を計算するボリューム検査手段と
を備えることを特徴とする請求項19に記載の装置。 - 少なくとも被写体オブジェクトの一部が内部に位置するボリュームを定義する3次元空間中の複数の平面から各々が構成される複数の多面体を定義するデータを処理して、前記被写体オブジェクトの表面上の複数の点を表す前記3次元空間中の複数の点から構成される前記被写体オブジェクトの3Dコンピュータモデルを生成するための装置であって、
前記3Dコンピュータモデル中の全ての点が位置する前記3次元空間のボリュームを定義するボリューム定義手段と、
前記ボリュームを複数のボリューム部分に分割するボリューム分割手段と、
前記多面体に対して各ボリューム部分を検査するボリューム検査手段であって、当該ボリューム検査手段は、
前記ボリューム部分が全体的に前記多面体のうちの少なくとも1つの外側にある場合、前記ボリューム部分を廃棄し、
前記ボリューム部分が少なくとも部分的に前記多面体の全ての内部にある場合、前記ボリューム部分と交わる前記複数の平面を定義する前記データを処理して前記複数の平面のうちの所定数の平面が交わる前記ボリューム部分中の前記複数の3D点を計算するように構成される
を備えることを特徴とする装置。 - 前記ボリューム分割手段及び前記ボリューム検査手段は、
ボリューム部分が全体的に前記多面体のうちの少なくとも1つの外側にある場合、前記ボリューム部分を廃棄し、
前記ボリューム部分が少なくとも部分的に前記多面体の全ての内部にある場合、前記ボリューム部分と交わる前記複数の平面を定義する前記データを処理し、前記ボリューム部分と交わる前記複数の平面の数に従って、
前記ボリューム部分を更なる検査を行なうために複数のより小さいボリューム部分に再分割するか、
前記複数の平面のうちの所定数の平面が交わる前記ボリューム部分中の前記複数の3D点を計算するか、あるいは、
前記ボリューム部分を廃棄するための処理を実行するように構成される
ことを特徴とする請求項20又は21に記載の装置。 - 前記ボリューム分割手段及び前記ボリューム検査手段は、ボリューム部分が少なくとも部分的に前記多面体の全ての内部にあり、前記ボリューム部分と交わる複数の平面の数が所定数よりも多い場合、前記ボリューム部分を再分割するように構成されることを特徴とする請求項22に記載の装置。
- 前記ボリューム分割手段及び前記ボリューム検査手段は、ボリューム部分が少なくとも部分的に前記多面体の全ての内部にあり、前記ボリューム部分と交わる複数の平面の数が所定数未満の場合、前記ボリューム部分を廃棄するように構成される請求項22又は23記載の装置。
- 前記ボリューム検査手段は、ボリューム部分が検査されるときに、前記ボリューム部分と交わる前記複数の平面を定義するデータを格納し、親ボリューム部分の再分割により生成されたより小さいボリューム部分が検査されるときに、前記複数の平面のうちの前記親ボリューム部分と交わる平面のみが検査されて前記より小さいボリューム部分と交わるか否かが判定されるよう動作するように構成されることを特徴とする請求項22乃至24のいずれか1項に記載の装置。
- 前記ボリューム検査手段は、ボリューム部分が検査されるときに、前記ボリューム部分が全体的に内側に位置すると判定される各多面体を定義するデータを格納し、親ボリューム部分の再分割により生成されたより小さいボリューム部分が検査されるときに、前記より小さいボリューム部分が前記格納されたデータ中で定義されない前記多面体の各々の内側に位置するか否かを判定するための検査は実行されるが、前記格納されたデータ中で定義される前記多面体のうちのいずれかの内側に位置するか否かを判定するための検査は実行されないよう動作するように構成されることを特徴とする請求項22乃至25のいずれか1項に記載の装置。
- 前記ボリューム検査手段は、多面体に対してボリューム部分を検査し、前記多面体の複数の多角形面のいずれかが前記ボリューム部分と交わるか否かを判定し、
少なくとも1つの多角形面が前記ボリューム部分と交わる場合には、前記ボリューム部分が少なくとも部分的に前記多面体の内部に位置することを判定し、
前記複数の多角形面のいずれも前記ボリューム部分と交わらない場合には、前記ボリューム部分内の点から前記3次元空間中の所定の点に対して光線を投影し、前記光線の前記多面体との共通部分の数に従って、前記ボリューム部分が全体的に前記多面体の内側に位置するか、あるいは、全体的に前記多面体の外側に位置するかを判定することによって前記ボリューム部分が全体的に前記多面体の外側に位置するか否かを判定するように構成されることを特徴とする請求項20乃至26のいずれか1項に記載の装置。 - 各多面体は、前記3次元空間中の既知の位置及び向きを有する2次元画像から前記被写体オブジェクトの輪郭の前記3次元空間への投影から構成され、それにより、各多面体は、前記投影を生成する元となった前記画像の平面に平行な平面において前記被写体オブジェクトの形状を表すことを特徴とする請求項18乃至27のいずれか1項に記載の装置。
- 更に、
前記被写体オブジェクトの複数の画像を定義するデータを処理して各画像中の前記被写体オブジェクトの前記輪郭を複数の直線で近似する輪郭近似手段と、
前記3次元空間中の前記複数の画像の位置及び向きに従って、前記複数の直線を前記3次元空間へと投影し、各々が前記投影を生成する元となった前記画像の平面に平行な平面において前記被写体オブジェクトの形状を表す前記複数の多面体を定義する投影手段と
を備えることを特徴とする請求項28記載の装置。 - 前記ボリューム検査手段は、ボリューム部分を多面体に対応する前記2次元画像へと投影し、前記画像中の前記被写体オブジェクトの前記輪郭に対して前記2次元の投影されたボリューム部分を検査することによって、前記多面体に対して前記ボリューム部分を検査するように構成されることを特徴とする請求項28又は29に記載の装置。
- 各2次元画像中の前記被写体オブジェクトの前記輪郭は、複数の直線状のエッジから構成され、前記ボリューム部分と交わる前記複数の平面を判定するために、前記ボリューム検査手段は、前記2次元の投影されたボリューム部分を検査し、前記投影されたボリューム部分と交わる前記複数の輪郭エッジを判定するように構成されることを特徴とする請求項30に記載の装置。
- 各2次元画像中の前記輪郭の前記複数の直線状のエッジは、複数の頂点で端部と端部をつなぐように連結され、前記ボリューム部分と交わる前記複数の平面を判定するために、前記ボリューム検査手段は、前記2次元の投影されたボリューム部分を検査し、その中に位置する前記複数の輪郭頂点と前記投影されたボリューム部分と交わる前記複数の輪郭エッジとを判定するように構成されることを特徴とする請求項31に記載の装置。
- 前記ボリューム検査手段は、
投影されたボリューム部分を含む前記画像の部分を識別し、
前記画像の複数の領域及び各領域内の前記複数の輪郭エッジを定義する格納されたデータを読み取り、
前記投影されたボリューム部分を含む前記画像の前記識別された部分と重複する複数の領域に位置するように前記格納されたデータ中で定義された複数の輪郭エッジに対してのみ前記投影されたボリューム部分を検査する
ことによって、投影されたボリューム部分と交わる前記複数の輪郭エッジを判定するための処理を実行するように構成されることを特徴とする請求項31又は32に記載の装置。 - 各多面体は、前記被写体オブジェクトの部分の輪郭の3次元形状を定義する穴を有する多面体であることを特徴とする請求項18乃至27のいずれか1項に記載の装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB0114157.1 | 2001-06-11 | ||
GBGB0114157.1A GB0114157D0 (en) | 2001-06-11 | 2001-06-11 | 3D Computer modelling apparatus |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2003216979A JP2003216979A (ja) | 2003-07-31 |
JP3793115B2 true JP3793115B2 (ja) | 2006-07-05 |
Family
ID=9916316
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002169584A Expired - Fee Related JP3793115B2 (ja) | 2001-06-11 | 2002-06-11 | 3dコンピュータモデリング装置 |
Country Status (5)
Country | Link |
---|---|
US (1) | US6867772B2 (ja) |
EP (1) | EP1267309B1 (ja) |
JP (1) | JP3793115B2 (ja) |
DE (1) | DE60219242D1 (ja) |
GB (1) | GB0114157D0 (ja) |
Families Citing this family (63)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB0126526D0 (en) * | 2001-11-05 | 2002-01-02 | Canon Europa Nv | Three-dimensional computer modelling |
GB2383245B (en) | 2001-11-05 | 2005-05-18 | Canon Europa Nv | Image processing apparatus |
GB2383915B (en) * | 2001-11-23 | 2005-09-28 | Canon Kk | Method and apparatus for generating models of individuals |
EP1347418A3 (en) | 2002-02-28 | 2005-11-23 | Canon Europa N.V. | Texture map editing |
GB2387519B (en) * | 2002-04-08 | 2005-06-22 | Canon Europa Nv | Viewing controller for three-dimensional computer graphics |
GB0208909D0 (en) | 2002-04-18 | 2002-05-29 | Canon Europa Nv | Three-dimensional computer modelling |
GB0224449D0 (en) * | 2002-10-21 | 2002-11-27 | Canon Europa Nv | Apparatus and method for generating texture maps for use in 3D computer graphics |
GB2394873B (en) * | 2002-10-29 | 2005-12-28 | Canon Europa Nv | Apparatus and method for generating texture maps for use in 3D computer graphics |
GB2398469B (en) * | 2003-02-12 | 2005-10-26 | Canon Europa Nv | Image processing apparatus |
GB2400288B (en) * | 2003-04-02 | 2005-12-28 | Canon Europa Nv | Generating texture maps for use in 3D computer graphics |
GB2405776B (en) * | 2003-09-05 | 2008-04-02 | Canon Europa Nv | 3d computer surface model generation |
GB2406252B (en) | 2003-09-18 | 2008-04-02 | Canon Europa Nv | Generation of texture maps for use in 3d computer graphics |
GB2407953A (en) * | 2003-11-07 | 2005-05-11 | Canon Europa Nv | Texture data editing for three-dimensional computer graphics |
GB2415344B (en) | 2004-06-14 | 2010-10-06 | Canon Europa Nv | Texture data compression and rendering in 3D computer graphics |
US7955081B2 (en) * | 2004-11-22 | 2011-06-07 | Basimah Khulusi Md, Llc | Methods and systems for producing faces of N-dimensional forms |
US7479012B1 (en) * | 2004-11-22 | 2009-01-20 | Basimah Khulusi Md, Llc | Method for producing polyhedral nets |
US7629985B2 (en) * | 2006-01-26 | 2009-12-08 | Autodesk, Inc. | Method for creation of architectural space objects for area and volume calculation |
US7639249B2 (en) * | 2006-05-05 | 2009-12-29 | Microsoft Corporation | Direct inset beveling of geometric figures |
US8224065B2 (en) * | 2007-01-09 | 2012-07-17 | Purdue Research Foundation | Reconstruction of shapes of objects from images |
US7877210B2 (en) * | 2007-01-11 | 2011-01-25 | Siemens Industry, Inc. | System and method for projecting b-rep outlines to detect collisions along a translational path |
DE102007043836B3 (de) * | 2007-09-14 | 2009-01-02 | Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. | Vorrichtung und Verfahren zum Ausrichten eines 3D-Objekts in einem einem Gesichtsfeld einer Aufnahmevorrichtung entsprechenden Bild |
US8671350B2 (en) * | 2007-10-22 | 2014-03-11 | 3D Data Llc | System and method for creating gateway between an analytical database and a virtual world |
KR100915574B1 (ko) * | 2007-12-17 | 2009-09-07 | 한국전자통신연구원 | 충분히 매끄럽게 만들어진 메쉬의 각진 부분을 복원하는메쉬 재구성 방법 및 장치 |
TWI346309B (en) * | 2007-12-21 | 2011-08-01 | Ind Tech Res Inst | Method for reconstructing three dimension model |
ATE538442T1 (de) * | 2008-04-24 | 2012-01-15 | Siemens Ag | Verfahren und system zur erkennung von gruppierungseigenschaften |
US8731313B2 (en) * | 2009-03-23 | 2014-05-20 | Level Set Systems, Inc. | Method and apparatus for accurate compression and decompression of three-dimensional point cloud data |
US9595108B2 (en) * | 2009-08-04 | 2017-03-14 | Eyecue Vision Technologies Ltd. | System and method for object extraction |
EP2462537A1 (en) | 2009-08-04 | 2012-06-13 | Eyecue Vision Technologies Ltd. | System and method for object extraction |
WO2011058618A1 (ja) * | 2009-11-10 | 2011-05-19 | 三菱重工業株式会社 | ワーク計測装置、衝突防止装置および工作機械 |
US10152198B2 (en) * | 2009-12-15 | 2018-12-11 | Dassault Systèmes | Method and system for editing a product assembly |
US8665266B2 (en) * | 2010-06-23 | 2014-03-04 | The United States Of America, As Represented By The Secretary Of The Navy | Global visualization process terrain database builder |
JP5652097B2 (ja) * | 2010-10-01 | 2015-01-14 | ソニー株式会社 | 画像処理装置、プログラム及び画像処理方法 |
KR101638173B1 (ko) * | 2011-09-06 | 2016-07-12 | 한국전자통신연구원 | 캘리브레이션을 위한 자동 피처 탐지용 기구물 및 그 탐지 방법 |
US8730264B1 (en) | 2011-09-26 | 2014-05-20 | Google Inc. | Determining when image elements intersect |
US8958901B2 (en) | 2011-11-18 | 2015-02-17 | Nike, Inc. | Automated manufacturing of shoe parts |
US10552551B2 (en) | 2011-11-18 | 2020-02-04 | Nike, Inc. | Generation of tool paths for shore assembly |
US8755925B2 (en) | 2011-11-18 | 2014-06-17 | Nike, Inc. | Automated identification and assembly of shoe parts |
US8849620B2 (en) | 2011-11-18 | 2014-09-30 | Nike, Inc. | Automated 3-D modeling of shoe parts |
US9451810B2 (en) | 2011-11-18 | 2016-09-27 | Nike, Inc. | Automated identification of shoe parts |
EP2783353B1 (en) * | 2011-11-25 | 2017-03-22 | Thomson Licensing | Position coding based on spatial tree with duplicate points |
WO2013082539A1 (en) | 2011-12-01 | 2013-06-06 | Lightcraft Technology Llc | Automatic tracking matte system |
US8854362B1 (en) * | 2012-07-23 | 2014-10-07 | Google Inc. | Systems and methods for collecting data |
US9196084B2 (en) | 2013-03-15 | 2015-11-24 | Urc Ventures Inc. | Determining object volume from mobile device images |
WO2014209806A1 (en) * | 2013-06-24 | 2014-12-31 | Theranova, Llc | Devices and methods for determining menstrual blood loss |
EP3192237A4 (en) | 2014-09-10 | 2018-07-25 | Hasbro, Inc. | Toy system with manually operated scanner |
US20170124726A1 (en) * | 2015-11-02 | 2017-05-04 | Canon Kabushiki Kaisha | System and method for determining wall thickness |
US10169665B1 (en) * | 2016-02-28 | 2019-01-01 | Alarm.Com Incorporated | Virtual inductance loop |
US10403037B1 (en) | 2016-03-21 | 2019-09-03 | URC Ventures, Inc. | Verifying object measurements determined from mobile device images |
US9495764B1 (en) | 2016-03-21 | 2016-11-15 | URC Ventures, Inc. | Verifying object measurements determined from mobile device images |
US9947102B2 (en) * | 2016-08-26 | 2018-04-17 | Elekta, Inc. | Image segmentation using neural network method |
US9965863B2 (en) * | 2016-08-26 | 2018-05-08 | Elekta, Inc. | System and methods for image segmentation using convolutional neural network |
US10186049B1 (en) | 2017-03-06 | 2019-01-22 | URC Ventures, Inc. | Determining changes in object structure over time using mobile device images |
US20180357819A1 (en) * | 2017-06-13 | 2018-12-13 | Fotonation Limited | Method for generating a set of annotated images |
US11087536B2 (en) * | 2017-08-31 | 2021-08-10 | Sony Group Corporation | Methods, devices and computer program products for generation of mesh in constructed 3D images |
EP3514757A1 (en) * | 2018-01-18 | 2019-07-24 | Koninklijke Philips N.V. | Spectral matching for assessing image segmentation |
US10679367B2 (en) * | 2018-08-13 | 2020-06-09 | Hand Held Products, Inc. | Methods, systems, and apparatuses for computing dimensions of an object using angular estimates |
WO2020123469A1 (en) * | 2018-12-11 | 2020-06-18 | Futurewei Technologies, Inc. | Hierarchical tree attribute coding by median points in point cloud coding |
US11335021B1 (en) | 2019-06-11 | 2022-05-17 | Cognex Corporation | System and method for refining dimensions of a generally cuboidal 3D object imaged by 3D vision system and controls for the same |
US11605177B2 (en) | 2019-06-11 | 2023-03-14 | Cognex Corporation | System and method for refining dimensions of a generally cuboidal 3D object imaged by 3D vision system and controls for the same |
EP3809314A1 (en) * | 2019-10-15 | 2021-04-21 | Bentley Systems, Incorporated | 3d object detection from calibrated 2d images background |
US11989899B2 (en) | 2021-02-09 | 2024-05-21 | Everypoint, Inc. | Determining object structure using physically mounted devices with only partial view of object |
US11282291B1 (en) | 2021-02-09 | 2022-03-22 | URC Ventures, Inc. | Determining object structure using fixed-location cameras with only partial view of object |
US11741618B2 (en) | 2021-03-22 | 2023-08-29 | Everypoint, Inc. | Performing object modeling by combining visual data from images with motion data of the image acquisition device |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3869876B2 (ja) | 1995-12-19 | 2007-01-17 | キヤノン株式会社 | 画像計測方法及び画像計測装置 |
CN1480903A (zh) * | 1996-08-29 | 2004-03-10 | ������������ʽ���� | 特征信息赋予、物体抽取和立体模型生成方法及其装置 |
DE69823116D1 (de) | 1997-08-05 | 2004-05-19 | Canon Kk | Bildverarbeitungsverfahren und -gerät |
US6563499B1 (en) | 1998-07-20 | 2003-05-13 | Geometrix, Inc. | Method and apparatus for generating a 3D region from a surrounding imagery |
JP2003515829A (ja) | 1999-11-23 | 2003-05-07 | キヤノン株式会社 | 画像処理装置 |
US7065242B2 (en) * | 2000-03-28 | 2006-06-20 | Viewpoint Corporation | System and method of three-dimensional image capture and modeling |
US7728848B2 (en) * | 2000-03-28 | 2010-06-01 | DG FastChannel, Inc. | Tools for 3D mesh and texture manipulation |
JP3364654B2 (ja) * | 2000-05-31 | 2003-01-08 | 独立行政法人産業技術総合研究所 | 仮想形態生成装置及び生成方法 |
JP4474743B2 (ja) * | 2000-07-03 | 2010-06-09 | ソニー株式会社 | 三次元画像生成装置および三次元画像生成方法、並びにプログラム記録媒体 |
US6765572B2 (en) * | 2001-04-23 | 2004-07-20 | Koninklijke Philips Electronics N.V. | Virtual modeling by voxel-clipping shadow-cast |
US6762769B2 (en) * | 2002-01-23 | 2004-07-13 | Microsoft Corporation | System and method for real-time texture synthesis using patch-based sampling |
-
2001
- 2001-06-11 GB GBGB0114157.1A patent/GB0114157D0/en not_active Ceased
-
2002
- 2002-06-10 US US10/164,435 patent/US6867772B2/en not_active Expired - Fee Related
- 2002-06-10 DE DE60219242T patent/DE60219242D1/de not_active Expired - Lifetime
- 2002-06-10 EP EP02254027A patent/EP1267309B1/en not_active Expired - Lifetime
- 2002-06-11 JP JP2002169584A patent/JP3793115B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
DE60219242D1 (de) | 2007-05-16 |
US6867772B2 (en) | 2005-03-15 |
EP1267309A3 (en) | 2004-01-02 |
US20020190982A1 (en) | 2002-12-19 |
GB0114157D0 (en) | 2001-08-01 |
JP2003216979A (ja) | 2003-07-31 |
EP1267309B1 (en) | 2007-04-04 |
EP1267309A2 (en) | 2002-12-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3793115B2 (ja) | 3dコンピュータモデリング装置 | |
JP3768923B2 (ja) | 3dコンピュータモデリング装置 | |
US5751852A (en) | Image structure map data structure for spatially indexing an imgage | |
US5809179A (en) | Producing a rendered image version of an original image using an image structure map representation of the image | |
US6483518B1 (en) | Representing a color gamut with a hierarchical distance field | |
US6396492B1 (en) | Detail-directed hierarchical distance fields | |
JP4563554B2 (ja) | モデルとして表現されるオブジェクトを彫塑する方法 | |
US7453456B2 (en) | System and method of three-dimensional image capture and modeling | |
Fabio | From point cloud to surface: the modeling and visualization problem | |
US6999073B1 (en) | Method and system for generating fully-textured 3D | |
US20040155877A1 (en) | Image processing apparatus | |
JP2004157968A (ja) | 3次元コンピュータモデリング | |
JP2002520749A (ja) | 完全にテクスチャリングされた3次元モデルを発生する方法及びシステム | |
JP4035978B2 (ja) | 3次元形状モデルの評価方法および生成方法並びに装置 | |
JP2002202838A (ja) | 画像処理装置 | |
US10853990B2 (en) | System and method for processing a graphic object | |
JP4349562B2 (ja) | 空間の識別方法とそのプログラム | |
JP3647407B2 (ja) | 画像処理装置 | |
JP4175536B2 (ja) | 境界データの内外判定方法とそのプログラム | |
Santos et al. | Integration of CAD Models into Game Engines. | |
JPH0644346A (ja) | 距離画像処理方法及び装置 | |
US20230107740A1 (en) | Methods and systems for automated three-dimensional object detection and extraction | |
Jankó et al. | Creating entirely textured 3d models of real objects using surface flattening | |
GB2387093A (en) | Image processing apparatus with segmentation testing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20051028 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20051227 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060203 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060224 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20060320 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060406 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090414 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100414 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110414 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120414 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130414 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130414 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140414 Year of fee payment: 8 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |