(57)【特許請求の範囲】
【請求項１】
画像入力手段によって被写体オブジェクトの画像を入力し、画像処理手段によって少なくとも前記被写体オブジェクトの一部を含む３次元空間中の複数の平面から構成される多面体を定義するデータを処理して連結し、多角形メッシュを形成することにより、前記被写体オブジェクトの３Ｄコンピュータモデルを生成する方法であって、
前記画像処理手段による画像処理は、前記３次元空間中における前記多面体を構成する所定数の平面が相互に交わる点を計算することによって、前記３次元空間中における前記被写体オブジェクトの表面上の複数の点を計算する計算工程と、
前記被写体オブジェクト上の１つの点を表す各計算された点に対し、前記１つの点で交わる複数の平面に従って識別情報を割り当てる工程と、
前記被写体オブジェクト上の複数の点を表す前記複数の点を計算し、各々に識別情報を割り当てた後、前記割り当てられた識別情報に従って前記複数の点を連結し、前記被写体オブジェクトの表面を表す多角形メッシュから構成される３Ｄコンピュータモデルを生成する工程と
を備えることを特徴とする方法。
【請求項２】
前記被写体オブジェクト上の複数の点を計算する工程において、前記３次元空間の複数のボリュームを検査し、前記被写体オブジェクトの部分を全く含まないボリュームを識別することによって、前記被写体オブジェクト上の１つの点で交わる可能性がなく、前記識別されたボリュームと交わるのがどの平面であるかを識別するための検査が実行され、共通部分の複数の点は、前記被写体オブジェクト上の１つの点で交わる可能性がない前記平面に対して計算されないことを特徴とする請求項１記載の３Ｄコンピュータモデルの生成方法。
【請求項３】
前記被写体オブジェクトの表面上の複数の点を計算する工程は、
前記被写体オブジェクト上の全ての点が位置する前記３次元空間のボリュームを定義する工程と、
前記ボリュームを複数のボリューム部分に分割する工程と、
前記多面体に対して各ボリューム部分を検査する工程と、
前記ボリューム部分が全体的に前記多面体のうちの少なくとも１つの外側にある場合、前記ボリューム部分を廃棄し、前記ボリューム部分が少なくとも部分的に前記多面体の全ての内部にある場合、前記ボリューム部分と交わる前記複数の平面を定義する前記データを処理して前記複数の平面のうちの所定数の平面が交わる前記ボリューム部分中の前記３Ｄ点を計算する工程と
を含むことを特徴とする請求項２記載の３Ｄコンピュータモデルの生成方法。
【請求項４】
画像入力手段によって被写体オブジェクトの画像を入力し、画像処理手段によって少なくとも被写体オブジェクトの一部が内部に位置するボリュームを定義する３次元空間中の複数の平面から各々が構成される複数の多面体を定義するデータを処理して、前記被写体オブジェクトの表面上の複数の点を表す前記３次元空間中の複数の点から構成される前記被写体オブジェクトの３Ｄコンピュータモデルを生成する方法であって、
前記画像処理手段による画像処理は、前記３Ｄコンピュータモデル中の全ての点が位置する前記３次元空間のボリュームを定義する工程と、
前記ボリュームを複数のボリューム部分に分割する工程と、
前記多面体に対して各ボリューム部分を検査する工程と、
前記ボリューム部分が全体的に前記多面体のうちの少なくとも１つの外側にある場合、前記ボリューム部分を廃棄し、前記ボリューム部分が少なくとも部分的に前記多面体の全ての内部にある場合、前記ボリューム部分と交わる前記複数の平面を定義する前記データを処理して前記複数の平面のうちの所定数の平面が交わる前記ボリューム部分中の前記複数の点を計算する工程と
を備えることを特徴とする３Ｄコンピュータモデルの生成方法。
【請求項５】
前記分割工程と前記検査工程は、
前記多面体に対して前記複数のボリューム部分を検査する工程と、
前記ボリューム部分が前記多面体のうちの少なくとも１つの外側に全体的にある場合、前記ボリューム部分を廃棄し、前記ボリューム部分が少なくとも部分的に前記多面体の全ての内部にある場合、前記ボリューム部分と交わる前記複数の平面を定義する前記データを処理し、前記ボリューム部分と交わる前記複数の平面の数に従って、前記ボリューム部分を更なる検査を行なうために複数のより小さいボリューム部分に再分割するか、前記複数の平面のうちの所定数の平面が交わる前記ボリューム部分中の前記複数の３Ｄ点を計算するか、或いは、前記ボリューム部分を廃棄する工程
を含むことを特徴とする請求項４記載の３Ｄコンピュータモデルの生成方法。
【請求項６】
前記分割工程と前記検査工程において、ボリューム部分が少なくとも部分的に前記多面体の全ての内部にあり、前記ボリューム部分と交わる複数の平面の数が所定数よりも多い場合、前記ボリューム部分は再分割されることを特徴とする請求項５記載の３Ｄコンピュータモデルの生成方法。
【請求項７】
前記分割工程と前記検査工程において、ボリューム部分が少なくとも部分的に前記多面体の全ての内部にあり、前記ボリューム部分と交わる複数の平面の数が所定数未満の場合、前記ボリューム部分は廃棄されることを特徴とする請求項５又は６記載の３Ｄコンピュータモデルの生成方法。
【請求項８】
前記分割工程と前記検査工程において、ボリューム部分が検査されるときに、前記ボリューム部分と交わる前記複数の平面を定義するデータが格納され、親ボリューム部分の再分割により生成されたより小さいボリューム部分が検査されるときに、前記複数の平面のうちの前記親ボリューム部分と交わる平面のみが検査されて前記より小さいボリューム部分と交わるか否かが判定されることを特徴とする請求項５乃至７のいずれか１項に記載の３Ｄコンピュータの生成方法。
【請求項９】
前記分割工程と前記検査工程は、ボリューム部分が検査されるときに、前記ボリューム部分が全体的に内側に位置すると判定される各多面体を定義するデータが格納され、親ボリューム部分の再分割により生成されたより小さいボリューム部分が検査されるときに、前記より小さいボリューム部分が前記格納されたデータ中で定義されない前記多面体の各々の内側に位置するか否かを判定するための検査は実行されるが、前記格納されたデータ中で定義される前記多面体のうちのいずれかの内側に位置するか否かを判定するための検査は実行されないことを特徴とする請求項５乃至８のいずれか１項に記載の３Ｄコンピュータの生成方法。
【請求項１０】
前記分割工程と前記検査工程において、多面体に対してボリューム部分が検査され、前記多面体の複数の多角形面のいずれかが前記ボリューム部分と交わるか否かを判定することで、そのボリューム部分が多面体全体の外側に存在するかどうかが検査され、
少なくとも１つの多角形面が前記ボリューム部分と交わる場合には、前記ボリューム部分が少なくとも部分的に前記多面体の内部に位置することを判定し、
前記複数の多角形面のいずれも前記ボリューム部分と交わらない場合には、前記ボリューム部分内の点から前記３次元空間中の所定の点に対して光線を投影し、前記光線の前記多面体との共通部分の数に従って、前記ボリューム部分が全体的に前記多面体の内側に位置するか、あるいは、全体的に前記多面体の外側に位置するかを判定することによって前記ボリューム部分が全体的に前記多面体の外側に位置するか否かが判定される
ことを特徴とする請求項３乃至９のいずれか１項に記載の３Ｄコンピュータモデルの生成方法。
【請求項１１】
各多面体は、前記３次元空間中の既知の位置及び向きを有する２次元画像から前記被写体オブジェクトの輪郭の前記３次元空間への投影から構成され、それにより、各多面体は、前記投影を生成する元となった前記画像の平面に平行な平面において前記被写体オブジェクトの形状を表すことを特徴とする請求項１乃至１０のいずれか１項に記載の３Ｄコンピュータモデルの生成方法。
【請求項１２】
更に、前記被写体オブジェクトの複数の画像を定義するデータを処理して各画像中の前記被写体オブジェクトの前記輪郭を複数の直線で近似する工程と、
前記３次元空間中の前記複数の画像の位置及び向きに従って、前記複数の直線を前記３次元空間へと投影し、各々が前記投影を生成する元となった前記画像の平面に平行な平面において前記被写体オブジェクトの形状を表す前記複数の多面体を定義する工程と
を備えることを特徴とする請求項１１に記載の３Ｄコンピュータモデルの生成方法。
【請求項１３】
多面体に対してボリューム部分を検査する前記工程は、
前記ボリューム部分を前記多面体に対応する前記２次元画像へと投影し、前記画像中の前記被写体オブジェクトの前記輪郭に対して前記２次元の投影されたボリューム部分を検査する工程
を備えることを特徴とする請求項１１又は１２に記載の３Ｄコンピュータモデルの生成方法。
【請求項１４】
前記各２次元画像中の前記被写体オブジェクトの前記輪郭は、複数の直線状エッジから構成され、前記ボリューム部分と交わる前記複数の平面を判定するために、前記２次元の投影されたボリューム部分が検査され、前記投影されたボリューム部分と交わる前記複数の輪郭エッジが判定される
ことを特徴とする請求項１３に記載の３Ｄコンピュータモデルの生成方法。
【請求項１５】
前記各２次元画像中の前記輪郭の前記複数の直線状エッジは、複数の頂点で端部と端部をつなぐように連結され、前記ボリューム部分と交わる前記複数の平面を判定するために、前記２次元の投影されたボリューム部分が検査され、その中に位置する複数の輪郭頂点と前記投影されたボリューム部分と交わる前記複数の輪郭エッジとが判定される
ことを特徴とする請求項１４に記載の３Ｄコンピュータモデルの生成方法。
【請求項１６】
投影されたボリューム部分と交わる前記複数の輪郭エッジを判定するため、
前記投影されたボリューム部分を含む前記画像の部分が識別され、
前記画像の複数の領域及び各領域内の前記複数の輪郭エッジを定義する格納されたデータが読み取られ、
前記投影されたボリューム部分を含む前記画像の前記識別された部分と重複する複数の領域に位置するように前記格納されたデータ中で定義された複数の輪郭エッジに対してのみ前記投影されたボリューム部分が検査される
ことを特徴とする請求項１４又は１５に記載の３Ｄコンピュータモデルの生成方法。
【請求項１７】
各多面体は、前記被写体オブジェクトの部分の輪郭の３次元形状を定義する穴を有する多面体であることを特徴とする請求項１乃至１０のいずれか１項に記載の３Ｄコンピュータモデルの生成方法。
【請求項１８】
少なくとも被写体オブジェクトの一部が内部に位置するボリュームを定義する３次元空間中の複数の平面から各々が構成される少なくとも３つの多面体を定義するデータを処理して、多角形メッシュを形成するように連結された前記被写体オブジェクトの表面上の複数の点を表す前記３次元空間中の複数の点から構成される前記被写体オブジェクトの３Ｄコンピュータモデルを生成するための装置であって、
前記多面体の所定数の平面が相互に交わる点を計算することによって、前記被写体オブジェクトの表面上の複数の点を表す前記３次元空間中の複数の点を計算する３Ｄ点計算手段と、
前記被写体オブジェクト上の１つの点を表す各計算された点に対して前記１つの点で交わる前記平面に従って識別情報を割り当てる３Ｄ点識別手段と、
前記割り当てられた識別情報に従って前記複数の点を連結し、前記被写体オブジェクトの表面を表す多角形メッシュから構成される３Ｄコンピュータモデルを生成する手段であって、前記３Ｄ点計算手段によって前記３Ｄコンピュータモデル中の全ての３Ｄ点を計算する処理が終了した後に、前記複数の点を連結するように構成される３Ｄ点連結手段と
を備えることを特徴とする装置。
【請求項１９】
前記３Ｄ点計算手段は、前記３次元空間の複数のボリュームを検査し、前記被写体オブジェクトの部分を全く含まないボリュームを識別することによって、前記被写体オブジェクト上の１つの点で交わる可能性がなく、前記識別されたボリュームと交わるのがどの平面であるかを識別するための検査を実行するように構成され、３Ｄ点計算手段は、前記被写体オブジェクト上の１つの点で交わる可能性がない前記識別された平面に対して共通部分の複数の点を計算しないように構成されることを特徴とする請求項１８に記載の装置。
【請求項２０】
前記３Ｄ点計算手段は、
前記被写体オブジェクト上の全ての点が位置する前記３次元空間のボリュームを定義するボリューム定義手段と、
前記ボリュームを複数のボリューム部分に分割するボリューム分割手段と、
前記多面体に対して各ボリューム部分を検査し、
前記ボリューム部分が全体的に前記多面体のうちの少なくとも１つの外側にある場合、前記ボリューム部分を廃棄し、
前記ボリューム部分が少なくとも部分的に前記多面体の全ての内部にある場合、前記ボリューム部分と交わる前記複数の平面を定義する前記データを処理して前記複数の平面のうちの所定数の平面が交わる前記ボリューム部分中の前記複数の３Ｄ点を計算するボリューム検査手段と
を備えることを特徴とする請求項１９に記載の装置。
【請求項２１】
少なくとも被写体オブジェクトの一部が内部に位置するボリュームを定義する３次元空間中の複数の平面から各々が構成される複数の多面体を定義するデータを処理して、前記被写体オブジェクトの表面上の複数の点を表す前記３次元空間中の複数の点から構成される前記被写体オブジェクトの３Ｄコンピュータモデルを生成するための装置であって、
前記３Ｄコンピュータモデル中の全ての点が位置する前記３次元空間のボリュームを定義するボリューム定義手段と、
前記ボリュームを複数のボリューム部分に分割するボリューム分割手段と、
前記多面体に対して各ボリューム部分を検査するボリューム検査手段であって、当該ボリューム検査手段は、
前記ボリューム部分が全体的に前記多面体のうちの少なくとも１つの外側にある場合、前記ボリューム部分を廃棄し、
前記ボリューム部分が少なくとも部分的に前記多面体の全ての内部にある場合、前記ボリューム部分と交わる前記複数の平面を定義する前記データを処理して前記複数の平面のうちの所定数の平面が交わる前記ボリューム部分中の前記複数の３Ｄ点を計算するように構成される
を備えることを特徴とする装置。
【請求項２２】
前記ボリューム分割手段及び前記ボリューム検査手段は、
ボリューム部分が全体的に前記多面体のうちの少なくとも１つの外側にある場合、前記ボリューム部分を廃棄し、
前記ボリューム部分が少なくとも部分的に前記多面体の全ての内部にある場合、前記ボリューム部分と交わる前記複数の平面を定義する前記データを処理し、前記ボリューム部分と交わる前記複数の平面の数に従って、
前記ボリューム部分を更なる検査を行なうために複数のより小さいボリューム部分に再分割するか、
前記複数の平面のうちの所定数の平面が交わる前記ボリューム部分中の前記複数の３Ｄ点を計算するか、あるいは、
前記ボリューム部分を廃棄するための処理を実行するように構成される
ことを特徴とする請求項２０又は２１に記載の装置。
【請求項２３】
前記ボリューム分割手段及び前記ボリューム検査手段は、ボリューム部分が少なくとも部分的に前記多面体の全ての内部にあり、前記ボリューム部分と交わる複数の平面の数が所定数よりも多い場合、前記ボリューム部分を再分割するように構成されることを特徴とする請求項２２に記載の装置。
【請求項２４】
前記ボリューム分割手段及び前記ボリューム検査手段は、ボリューム部分が少なくとも部分的に前記多面体の全ての内部にあり、前記ボリューム部分と交わる複数の平面の数が所定数未満の場合、前記ボリューム部分を廃棄するように構成される請求項２２又は２３記載の装置。
【請求項２５】
前記ボリューム検査手段は、ボリューム部分が検査されるときに、前記ボリューム部分と交わる前記複数の平面を定義するデータを格納し、親ボリューム部分の再分割により生成されたより小さいボリューム部分が検査されるときに、前記複数の平面のうちの前記親ボリューム部分と交わる平面のみが検査されて前記より小さいボリューム部分と交わるか否かが判定されるよう動作するように構成されることを特徴とする請求項２２乃至２４のいずれか１項に記載の装置。
【請求項２６】
前記ボリューム検査手段は、ボリューム部分が検査されるときに、前記ボリューム部分が全体的に内側に位置すると判定される各多面体を定義するデータを格納し、親ボリューム部分の再分割により生成されたより小さいボリューム部分が検査されるときに、前記より小さいボリューム部分が前記格納されたデータ中で定義されない前記多面体の各々の内側に位置するか否かを判定するための検査は実行されるが、前記格納されたデータ中で定義される前記多面体のうちのいずれかの内側に位置するか否かを判定するための検査は実行されないよう動作するように構成されることを特徴とする請求項２２乃至２５のいずれか１項に記載の装置。
【請求項２７】
前記ボリューム検査手段は、多面体に対してボリューム部分を検査し、前記多面体の複数の多角形面のいずれかが前記ボリューム部分と交わるか否かを判定し、
少なくとも１つの多角形面が前記ボリューム部分と交わる場合には、前記ボリューム部分が少なくとも部分的に前記多面体の内部に位置することを判定し、
前記複数の多角形面のいずれも前記ボリューム部分と交わらない場合には、前記ボリューム部分内の点から前記３次元空間中の所定の点に対して光線を投影し、前記光線の前記多面体との共通部分の数に従って、前記ボリューム部分が全体的に前記多面体の内側に位置するか、あるいは、全体的に前記多面体の外側に位置するかを判定することによって前記ボリューム部分が全体的に前記多面体の外側に位置するか否かを判定するように構成されることを特徴とする請求項２０乃至２６のいずれか１項に記載の装置。
【請求項２８】
各多面体は、前記３次元空間中の既知の位置及び向きを有する２次元画像から前記被写体オブジェクトの輪郭の前記３次元空間への投影から構成され、それにより、各多面体は、前記投影を生成する元となった前記画像の平面に平行な平面において前記被写体オブジェクトの形状を表すことを特徴とする請求項１８乃至２７のいずれか１項に記載の装置。
【請求項２９】
更に、
前記被写体オブジェクトの複数の画像を定義するデータを処理して各画像中の前記被写体オブジェクトの前記輪郭を複数の直線で近似する輪郭近似手段と、
前記３次元空間中の前記複数の画像の位置及び向きに従って、前記複数の直線を前記３次元空間へと投影し、各々が前記投影を生成する元となった前記画像の平面に平行な平面において前記被写体オブジェクトの形状を表す前記複数の多面体を定義する投影手段と
を備えることを特徴とする請求項２８記載の装置。
【請求項３０】
前記ボリューム検査手段は、ボリューム部分を多面体に対応する前記２次元画像へと投影し、前記画像中の前記被写体オブジェクトの前記輪郭に対して前記２次元の投影されたボリューム部分を検査することによって、前記多面体に対して前記ボリューム部分を検査するように構成されることを特徴とする請求項２８又は２９に記載の装置。
【請求項３１】
各２次元画像中の前記被写体オブジェクトの前記輪郭は、複数の直線状のエッジから構成され、前記ボリューム部分と交わる前記複数の平面を判定するために、前記ボリューム検査手段は、前記２次元の投影されたボリューム部分を検査し、前記投影されたボリューム部分と交わる前記複数の輪郭エッジを判定するように構成されることを特徴とする請求項３０に記載の装置。
【請求項３２】
各２次元画像中の前記輪郭の前記複数の直線状のエッジは、複数の頂点で端部と端部をつなぐように連結され、前記ボリューム部分と交わる前記複数の平面を判定するために、前記ボリューム検査手段は、前記２次元の投影されたボリューム部分を検査し、その中に位置する前記複数の輪郭頂点と前記投影されたボリューム部分と交わる前記複数の輪郭エッジとを判定するように構成されることを特徴とする請求項３１に記載の装置。
【請求項３３】
前記ボリューム検査手段は、
投影されたボリューム部分を含む前記画像の部分を識別し、
前記画像の複数の領域及び各領域内の前記複数の輪郭エッジを定義する格納されたデータを読み取り、
前記投影されたボリューム部分を含む前記画像の前記識別された部分と重複する複数の領域に位置するように前記格納されたデータ中で定義された複数の輪郭エッジに対してのみ前記投影されたボリューム部分を検査する
ことによって、投影されたボリューム部分と交わる前記複数の輪郭エッジを判定するための処理を実行するように構成されることを特徴とする請求項３１又は３２に記載の装置。
【請求項３４】
各多面体は、前記被写体オブジェクトの部分の輪郭の３次元形状を定義する穴を有する多面体であることを特徴とする請求項１８乃至２７のいずれか１項に記載の装置。
【発明の詳細な説明】
【０００１】
本発明は、オブジェクトの３次元（３Ｄ）コンピュータモデルを生成するコンピュータ処理に関する。特に、本発明は、オブジェクトの少なくとも一部を含む３Ｄ空間のボリュームを各々が定義する多面体（pplyhedra）の共通部分を計算することによって、３Ｄコンピュータモデルを生成するコンピュータ処理に関する。
【０００２】
オブジェクトの３Ｄコンピュータモデルを生成する方法としては、数多くの方法が知られている。
【０００３】
既知の方法としては、「shape-from-silhouette」法がある。この方法は、既知の位置及び向きで記録したオブジェクトの画像を処理し、各画像中のオブジェクトのシルエットを逆投影し、そのオブジェクトを含むと共に頂点が画像を記録したときのカメラの焦点の位置にある無限の円錐形を生じることによって３Ｄコンピュータモデルを生成する。従って、各円錐形が、オブジェクトが占める３Ｄ空間のボリュームを制限することで、オブジェクトに近似する各円錐形の共通部分が計算される。
【０００４】
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、１９９８年６月、１０３〜１１３ページ）、及び、Niemの“Automatic reconstruction of 3D objects using a mobile camera”（Image and Vision Computing 17、１９９９年、１２５〜１３４ページ）などに記載されている。しかし、これらの論文の双方に記載されている方法では、シルエット円錐形の共通部分を計算して複数のボクセル（直平行六面体）から構成されるオブジェクトの「ボリューム表現」を生成する。具体的には、３Ｄ空間を複数のボクセルに分割し、これらのボクセルを検査してどのボクセルがシルエット円錐形の共通部分により定義されるボリュームの内側に位置するかを判定する。共通部分のボリュームの内側のボクセルは、オブジェクトを表す複数のボクセルのボリュームを定義するために保持される。
【０００５】
しかし、このようなボクセル技術には、幾つかの問題点がある。特に、結果として生じるオブジェクトのボリューム表現の正確さ及び解像度は、３Ｄ空間が分割される各ボクセルの寸法により判定される。このために、ボクセルの寸法を縮小してモデル解像度を向上すると、検査を要するボクセルの数が大幅に増加し、結果的に処理時間が長くなる。加えて、大半のコンピュータグラフィックスレンダリングアルゴリズムは、ボクセルモデルをレンダリングしてユーザに対して表示するための画像を生成することができないので、ボクセル表現は、複数の多角形(ポリゴン)から成るサーフェスモデルへと変換される必要がある。この変換により、更なる処理資源及び処理時間が必要になるだけでなく、結果として生じるコンピュータモデルの解像度及び正確さが低下する可能性がある。
【０００６】
Martin Lohleinの“A Volumetric Intersection Algorithm for 3d-Reconstruction Using a Boundary-Representation”（http:// i31www.ira.uka.de/diplomarbeiten/da_martin_loehlein/Reconstruction.html）では、３Ｄコンピュータモデルを生成するshape-from-silhouette法を開示するが、この方法ではボクセル表現を生成しない。代わりに、複数の画像を元にした各シルエット円錐形の共通部分が直接計算される。具体的には、方法は、まず始めにオブジェクトを含む立方体を用意し、第１のシルエット円錐形と交わらせてオブジェクトの第１の近似を得る。続いて、この近似を次の円錐形と交わらせ、同様の処理を繰り返す。シルエット円錐形を近似と交わらせるために、この円錐形及び近似は、円錐形作成の元となった画像へと投影される。これにより、円錐形は元の２Ｄ多角形（シルエット）へと戻され、近似は３Ｄ多角形から２Ｄ多角形へと戻される。円錐形の多角形は、２Ｄ多角形の交わり用の従来のアルゴリズムを使用して近似の全ての多角形と交わるように仕向けられる。
【０００７】
しかしながら、“A Volumetric Intersection Algorithm for 3d-Reconstruction Using a Boundary-Representation”に記載された方法は、処理資源及び処理時間の観点から見て非効率的である。本発明者等は、この問題が発生する１つの理由が、シルエット円錐形を表現と交わらせることで平面を定義する複数の連結３Ｄ点から構成されるより精度の高い表現を生成し、この表現を別のシルエット円錐形と交わらせ、更に同様の処理を繰り返すインクリメンタル手法にあることを認識した。
【０００８】
M. Szilvasi-Nagyの“An Algorithm for Determining the Intersection of Two Simple Polyhedra”（Computer Graphics Forum 3、１９８４年、２１９〜２２５ページ）では、「plane-sweep アルゴリズム」を使用して各多面体のエッジともう一方の多面体の面との全ての共通部分を見出すことによって、四面体及び角柱などの２つの単純な多面体の共通部分を計算する方法を開示している。この方法は、それぞれの面の数が少ない２つの多面体に対しては有用であるが、３つ以上の多面体及び／又は面の数が多い多面体の場合は、計算資源及び計算時間の観点から見て極めて非効率的であろう。
【０００９】
本発明は、上述の問題点を考慮してなされたものであり、問題点の１つ以上に対処することを目的とする。
【００１０】
本発明によると、少なくとも３つの多面体を交わらせることによって、オブジェクトの非ボクセル表現を生成するコンピュータ処理方法及び装置が提供される。多面体を構成する平面の各々の共通部分の各点が計算／検査され、どの点がオブジェクトの点に対応するかが判定される。各オブジェクト点は、そこで交わる平面と共にラベル付けされる。その後、全てのオブジェクト点の識別が終了すると、ラベルに応じてオブジェクト点間の連結が特定される。
【００１１】
このように、オブジェクト点間の連結を判定する前にオブジェクト点の全てを計算する場合、連結を判定する処理を１度だけ実行すれば良いので、処理資源及び／又は処理時間は必然的に節減される。これは、交差して各オブジェクト点を生成する平面に基づいて各オブジェクト点にラベル付けすると共に、これらのラベルを使用してどのオブジェクト点を相互に連結するべきかを計算することによって可能となる。
【００１２】
また、本発明によると、複数の多面体を交わらせることによって、オブジェクトの非ボクセル表現を生成するコンピュータ処理方法及び装置が提供される。中にオブジェクトが入った初期３Ｄボリュームを複数の部分に分割し、各部分を多面体に対して検査する。ボリュームの一部分が少なくとも１つの多面体の外側にある場合、オブジェクトの表面上の点を含むことができないために廃棄される。多面体の外側にない場合、ボリュームと交わる多面体の面が処理されて共通部分の各点が計算される。従って、共通部分の計算された各点から構成される３Ｄコンピュータモデルが生成される。
【００１３】
このように、オブジェクト上の点を表すことができない共通部分の計算が回避されるために多面体の面の全ての共通部分を計算する必要がないので、処理資源及び処理時間の節減につながる。
【００１４】
処理は、初期ボリュームを繰り返し再分割し、ボリュームの一部分が少数の多面体の面と交わる場合にのみ、その部分に対して多面体の面の共通部分を計算することによって、一層効率的に実行されるのが好ましい。説明すると、一実施形態において、各共通部分は３つの多面体の面の共通部分から成る。従って、ボリュームの一部分と交わる３つの面の組み合わせをそれぞれ検査し、これらが相互に交わるか否かを判定する必要がある。結果として、ボリュームの一部分が多数の多面体の面と交わる場合には相当な回数の計算を行なうことになる。共通部分の点はオブジェクト上の点を表さないので、その計算のうちの多くが無駄になる。しかし、初期ボリュームを繰り返し再分割することによって、共通部分を計算する必要なしに大量のボリュームを廃棄することができると共に、少数の多面体の面と交わる十分に小さいボリュームの一部分が得られたときのみ共通部分を計算することによって、実際に実行する必要のある共通部分の計算の回数が最低限に抑えられる。
【００１５】
また、本発明は、上述の方法を実行するように動作可能に、あるいは、上述の装置として構成されるように、プログラム可能な処理装置を構成させるための命令を含む記憶装置又は信号などとして具現化されたコンピュータプログラム製品を提供する。
【００１６】
添付の図面を参照して、単なる一例としての本発明の実施形態を説明する。
【００１７】
第１実施形態
図１を参照すると、本発明の一実施形態は、従来の通りに１つ以上のプロセッサと、複数のメモリと、グラフィックスカードなどを含むパーソナルコンピュータのような処理装置２と、従来通りのパーソナルコンピュータモニタのような表示装置４と、キーボード、マウスなどのユーザ入力装置６と、プリンタ８と、WACOM社製のPL400などの、制御可能画素を有するフラットパネルから構成される表示パネル１０とを具備する。
【００１８】
処理装置２は、例えば、ディスク１２などのデータ記憶媒体に格納されたデータとして及び／又は遠隔データベース等からインターネットなどの通信ネットワーク（図示せず）を介する伝送、あるいは無線伝送により処理装置２に入力され且つ／又はキーボードなどのユーザ入力装置６を介してユーザにより入力される信号１４として入力されるプログラミング命令に従って動作するようにプログラムされている。
【００１９】
以下に更に詳細に説明するが、それらのプログラミング命令は、入力画像が記録された位置及び向きを計算するために、様々に異なる位置と向きで記録された１つ以上の被写体オブジェクト(subject object)の複数の画像を定義する入力データを処理し且つ計算された位置及び向きを使用して、被写体オブジェクトの３次元コンピュータモデルを定義するデータを生成するように処理装置２を構成させるための命令である。この実施形態では、被写体オブジェクトは、既知の特徴パターンを有する校正オブジェクト（この実施形態においては２次元写真マット）の上で撮影される。入力画像が記録されたときの位置と向きは、画像中の校正オブジェクトパターンの特徴の位置を検出することにより計算される。被写体オブジェクトの３Ｄコンピュータモデルは、新規の創意に富んだ多面体(polyhedra)共通部分技術を使用して生成される。この技術では、各画像中の被写体オブジェクトの輪郭が複数の部分に分割され、輪郭部分の３Ｄ投影により定義される多面体の共通部分を判定することによって被写体オブジェクトの表面の各点を表す３Ｄ点を計算するための処理が実行される。以下に更に詳細に説明するが、この処理では、特に、被写体オブジェクトの表面上に３Ｄ点を生じることができない多面体内の各面の共通部分の計算をしなくても良いので、非常に効率的な方法で実行される。
【００２０】
処理装置２は、プログラミング命令によりプログラミングされたとき、処理動作を実行するための幾つかの機能ユニットとして構成されていると考えることができる。そのような機能ユニットの例及びそれらの相互接続関係を図１に示す。しかし、図１に示すユニット及び相互接続は概念上のものであり、理解を助けるという目的のために一例として示されているにすぎない。従って、それらは、処理装置２のプロセッサ、メモリなどが構成されるユニットや接続を必ずしも表してはいない。
【００２１】
図１に示す機能ユニットを説明すると、中央制御装置２０はユーザ入力装置６からの入力を処理すると共に、その他の機能ユニットの制御及び処理を実行するように構成されている。メモリ２４は、中央制御装置２０及びその他の機能ユニットにより使用されるべく設けられている。
【００２２】
マット発生器３０は、紙などの記録媒体上に校正（キャリブレーション）パターンをプリントしてプリント済の写真マットを形成するため、又は表示パネル１０に校正パターンを表示して写真マットを表示するためにプリンタ８又は表示パネル１０を制御する制御信号を発生する。以下に更に詳細に説明するが、写真マットは所定の特徴の校正パターンを有し、３次元コンピュータモデルを生成すべきオブジェクトは、プリント済写真マット３４、又は、校正パターンが表示されている表示パネル１０の上に配置される。その後、オブジェクトの画像及び校正パターンを記録して、処理装置２に入力する。マット発生器３０は、処理装置２が入力画像記録時の位置及び向きを計算する際に使用するための、写真マット上にプリント又は表示された特徴の校正パターンを定義するデータを格納するように構成される。すなわち、この実施形態では、マット発生器３０は、特徴パターンに対する座標系（実際には校正パターンの基準位置及び基準向きを定義する）と共に特徴パターンを定義するデータを格納するように構成されており、処理装置２は、入力画像が記録されたときの位置及び向きを定義済み座標系において（従って、基準位置及び基準向きに対して）計算するように構成されている。
【００２３】
この実施形態では、写真マットの校正パターンは、例えば、ＰＣＴ特許出願ＧＢ００／０４４６９（これらの内容は全て参考として本明細書に取り入れられている）に記載されているような特徴の空間クラスタ、あるいは、例えば、ＪＰ−Ａ−９−１７０９１４に記載されているような、各々の対応するドットが一意のものであるように各ドットが異なる色相／輝度の組み合わせを有する着色ドットの既知のパターン、例えば、Niemの“Automatic Reconstruction of 3D Objects Using A Mobile Camera”（Image and Vision Computing 17（１９９９年）、１２５〜１３４ページ）に記載されているような、各象限で複数の同心円を寸法がわかっている半径方向線分及び位置マーカで結ぶことにより形成されるパターン、又はGortler他の“The Lumigraph”（Computer Graphics Proceedings, Annual Conference Series、１９９６年、ACM-0-89791-764-4/96/008に記載されているような、それぞれ異なる直径を有する複数の同心リングから構成されるパターンなどを含む。
【００２４】
この実施形態の以下の説明においては、プリント写真マット３４を生成するために、校正パターンはプリンタ８により記録媒体（この実施形態では、シート紙）にプリントされるものと想定するが、先に述べた通り、表示パネル１０に校正パターンを表示することも可能であろう。
【００２５】
入力データ記憶装置４０は、例えば、ディスク４２などの記憶装置に格納されるデータとして、又は処理装置２へ送信される信号４４として、又はユーザ入力装置６を使用して処理装置２に入力される入力データを格納するように構成される。入力データは、様々に異なる位置及び向きで記録された写真マット上の１つ以上の被写体オブジェクトの複数の画像と、写真マットの背景色又は写真マットの背景色と同じ色を有する異なるオブジェクトを示すための写真マットの一部と共に、オブジェクトが撮影された背景を示す入力画像を定義している。加えて、この実施形態では、入力データは、画像を記録したカメラ固有のパラメータ、すなわち、縦横比、焦点距離、主点（光軸が撮影平面と交わる点）、一次半径方向歪み係数及びスキュー角（画素格子の軸が厳密には直交していないことがありえるため、それらの軸が成す角度）を定義するデータも含む。
【００２６】
入力画像を定義する入力データは、例えば、画像を記録したデジタルカメラから画素データをダウンロードするか、又はスキャナ（図示せず）を使用して写真を走査することにより生成されても良い。固有カメラパラメータを定義する入力データはユーザの側からユーザ入力装置６を使用して入力されても良い。
【００２７】
カメラ計算器５０は各入力画像を処理して、画像の中における写真マット上の校正パターンの特徴の位置を検出すると共に、入力画像が記録されたときのカメラの位置と向きを計算するように構成される。
【００２８】
画像データセグメンタ６０は各入力画像を処理して、被写体オブジェクトに対応する画像データを画像中のその他の画像データから分離するように構成される。
【００２９】
画像分割エディタ７０は、ユーザの制御の下に、画像データセグメンタ６０により生成される分割済画像データを編集するように動作可能である。以下に更に詳細に説明するが、これにより、ユーザは画像データセグメンタ６０により生成された画像分割を訂正することができ、特に、例えば、画像データセグメンタ６０により誤って判定された画素を訂正し、被写体オブジェクト２１０に関連付けることができる（例えば、写真マット３４及び被写体オブジェクトが撮影のために配置される面で見える印又はその他の特徴に関連する画素、写真マット３４及び／又はそれが配置される面上の陰影に関連する画素、及び、入力画像中の被写体オブジェクトの輪郭に接する写真マット３４上の校正特徴に関連する画素の全てが、画像データ分割中に誤って分類され、訂正されない場合には、結果として生じる３Ｄコンピュータモデルが不正確になる可能性がある）。
【００３０】
サーフェスモデラ(surface modeller)８０は画像データセグメンタ６０及び画像分割エディタ７０により生成される分割済画像データと、カメラ計算器５０により生成される画像が記録されたときの位置及び向きを定義するデータとを処理して、入力画像におけるオブジェクトの実際の面を表現する３Ｄコンピュータモデルを定義するデータを生成するように構成される。
【００３１】
サーフェスモデラ８０は、シルエットアプロキシメータ８２、３Ｄ点計算器８４及び多角形生成器８６を具備する。
【００３２】
シルエットアプロキシメータ(silhouette approximator)８２は、画像データセグメンタ６０及び画像分割エディタ７０により入力画像ごとに生成される分割済画像データを処理し、各画像中の被写体オブジェクトのシルエットを線分で近似するように構成される。
【００３３】
３Ｄ点計算器８４は、シルエットアプロキシメータ８２により生成された線分を処理し、線分の３次元空間への投影により定義される多角形の共通部分を計算するように構成される。これらの共通部分は、被写体オブジェクトの表面に潜在的に存在する３Ｄ点を定義する。３Ｄ点計算器８４は、計算された３Ｄ点を検査して、どの点が被写体オブジェクト中の実際の点を表すのかを判定するように構成される。
【００３４】
多角形生成器(polygon generator)８６は、３Ｄ点計算器８４により生成された３Ｄ点を連結し、被写体オブジェクトの表面を表す多角形(polygon)のメッシュを形成するように構成される。
【００３５】
具体的には、３Ｄ点計算器８４により計算される多角形の共通部分が、被写体オブジェクトの視覚的な体を定義するので、これらの３Ｄ点は、被写体オブジェクトの表面を表す多角形のメッシュ中の多角形の頂点を形成するように多角形生成器８６により連結される。このため、これ以降、３Ｄ点計算器８４により計算される３Ｄ点を３Ｄ頂点と呼ぶ。
【００３６】
サーフェステクスチャラ９０は、サーフェスモデラ８０により生成されたサーフェスモデルにレンダリングするために、入力画像データからテクスチャデータを生成するように構成される。
【００３７】
ディスプレイプロセッサ１１０は、中央制御装置２０の制御の下に、３Ｄコンピュータモデルを生成する処理中に、表示装置４を介してユーザに対し画像及び命令を表示するように構成される。更に、中央制御装置２０の制御の下に、ディスプレイプロセッサ１１０は、サーフェスモデラ８０により生成されたサーフェスモデルデータを処理し且つサーフェステクスチャラ９０により生成されたテクスチャデータをサーフェスモデル上にレンダリングすることにより、ユーザが選択した視点からオブジェクトの３Ｄコンピュータモデルの画像を表示するように構成される。
【００３８】
出力データ記憶装置１２０は、サーフェスモデラ８０により生成されたサーフェスモデルを定義するデータを格納するのに加え、オプションとしてサーフェステクスチャラ９０により生成されたテクスチャデータも格納するように構成される。中央制御装置２０は、出力データ記憶装置１２０からのデータの出力を、例えば、ディスク１２２などの記憶装置へのデータ及び／又は信号１２４として制御する。
【００３９】
図２を参照すると、プリント済写真マット３４が面２００に配置されており、３Ｄコンピュータモデルを生成すべき被写体オブジェクト２１０は、オブジェクト２１０がマット上の校正パターンを構成する特徴により包囲されるように、写真マット３４上に配置されている。
【００４０】
面２００は、ほぼ一様な色であるのが好ましく、可能であれば、画像データセグメンタ６０による分割処理中、入力画像において、被写体オブジェクト２１０に関連する画像データをその他の画像データから正確に区別することができるように、被写体オブジェクト２１０中のどの色とも異なるようにする。しかし、いずれかの色と同じである場合、例えば、被写体オブジェクト２１０中の色と同じ色を有する印２２０が面２００上に出現する（従って、入力画像中にも出現する）場合、この実施形態では、後程詳細に説明するように、ユーザが画像データセグメンタ６０により生成される分割データを編集できるようにすることによって、これを実現するべく処理を実行することができる。
【００４１】
被写体オブジェクト２１０の様々に異なる部分を示すため、被写体オブジェクト２１０及び写真マット３４の画像はデジタルカメラ２３０を使用して様々に異なる位置と向きで記録される。この実施形態では、カメラ２３０により記録される画像を定義するデータが、ワイヤ２３２を介して信号４４として処理装置２に入力される。
【００４２】
具体的に説明すると、この実施形態では、カメラ２３０の位置は固定されたままであり、被写体オブジェクト２１０を乗せた写真マット３４が面２００上で移動（並進）及び（例えば、矢印２４０の方向に）回転され、カメラ２３０に対して様々に異なる位置と向きで被写体オブジェクト２１０の写真が記録される。面２００上での写真マット３４の回転及び並進中、被写体オブジェクト２１０はマット３４に対して動かない。
【００４３】
図３は、カメラ２３０に対して様々に異なる位置及び向きにある被写体オブジェクト２１０及び写真マット３４の処理装置２へのデータ入力において定義される画像３００、３０２、３０４及び３０６の例を示す。
【００４４】
この実施形態では、被写体オブジェクト２１０及び写真マット３４の画像の記録／入力に続いて、別の画像を記録し、処理装置２に入力する。この別の画像は、面２００と写真マット３４がプリントされている紙と同じ色を有するオブジェクトとの画像である「背景画像」である。そのような背景画像は、写真マット３４が記録されている紙と同じ色を有する何もプリントされていない紙のシートを面２００上に配置するか、あるいは、パターンが画像中で見えないように、写真マット３４を裏返して面２００上に配置することによって記録されても良い。
【００４５】
図４は、この実施形態において入力データを処理するために処理装置２により実行される処理動作を示す。
【００４６】
図４のステップＳ４−２では、中央制御装置２０はディスプレイプロセッサ１１０に対してユーザが処理すべき入力データを入力することを要求するメッセージを表示装置４に表示させる。
【００４７】
ステップＳ４−４では、ステップＳ４−２で要求に応答してユーザにより入力されたデータを入力データ記憶装置４０に格納する。すなわち、この実施形態では、入力データは、カメラ２３０に対して様々に異なる位置及び向きで記録された被写体オブジェクト２１０及び写真マット３４の画像を定義する画像データと、入力画像を記録するために写真マット３４が配置された面２００と、写真マット３４の校正パターンがプリントされている記録材料と同じ色を有するオブジェクトとを共に示す「背景画像」と、入力画像を記録したカメラ２３０の固有パラメータ、すなわち、アスペクト比、焦点距離、主点（光軸が撮影平面と交わる点）、１次半径方向歪み係数及びスキュー角（画素格子の軸が成す角度）を定義するデータとから構成されている。
【００４８】
ステップＳ４−６で、カメラ計算器５０は、ステップＳ４−４で格納された入力データを処理して、入力画像ごとに写真マット３４上の校正パターンに対する（従って、被写体オブジェクト２１０に対する）カメラ２３０の位置と向きを判定する。この処理は、入力画像ごとに、写真マット３４の校正パターンを構成している画像中の特徴を検出し、それらの特徴を格納されている写真マットのパターンと比較して、マットに対するカメラ２３０の位置と向きを判定することから成る。ステップＳ４−６でカメラ計算器５０により実行される処理は、写真マット３４上で使用されている特徴の校正パターンによって決まる。適切な処理は、例えば、同時係属ＰＣＴ出願ＰＣＴ／ＧＢ００／０４４６９、ＪＰ−Ａ−９−１７０９１４、Niemの“Automatic Reconstruction of 3D Objects Using A Mobile Camera”（Image and Vision Computing 17（１９９９年）、１２５〜１３４ページ及びGortler他の“The Lumigraph”（Computer Graphics Proceedings, Annual Conference Series、１９９６年、ACM-0-89791-764-4/96/008）に記載されている。
【００４９】
ステップＳ４−８では、画像データセグメンタ６０は各入力画像を処理し、被写体オブジェクト２１０を表現する画像データを写真マット３４、及び、写真マット３４が配置されている面２００を表現する画像データから分離する（ステップＳ４−８は、この実施形態では、以下に更に詳細に説明するように、後に被写体オブジェクト２１０の面の３Ｄコンピュータモデルを生成するときに使用するためのデータを生成する予備ステップである）。
【００５０】
図５は、ステップＳ４−８で画像データセグメンタ６０により実行される処理動作を示す。
【００５１】
図５を参照すると、ステップＳ５−２からＳ５−１０において、画像データセグメンタ６０は、写真マット３４及び背景２００を表現するが、被写体オブジェクト２１０自体を表現しない入力画像中の色を表す量子化値のハッシュテーブルを作成する。
【００５２】
具体的に、ステップＳ５−２で、画像データセグメンタ６０は、図４のステップＳ４−４で格納された「背景画像」（すなわち、面２００と、写真マット３４がプリントされている材料と同じ色を有するオブジェクトとを示す、処理装置２に入力されるべき最終画像）における次の画素のＲＧＢデータ値を読み取る。
【００５３】
ステップＳ５−４で、画像データセグメンタ６０は下記の式に従って画素の量子化赤色（Ｒ）値、量子化緑色（Ｇ）値及び量子化青色（Ｂ）値を計算する。
ｑ＝（ｐ＋ｔ／２）／ｔ      …  （１）
式中、「ｑ」は量子化値、
「ｐ」はステップＳ５−２で読み取られたＲ、Ｇ又はＢの値、
「ｔ」は被写体オブジェクト２１０を示す入力画像からのＲＧＢ値が背景とラベル付けされるべき背景色にどれほど近くなければならないかを判定する閾値である。この実施形態では、「ｔ」は４に設定されている。
【００５４】
ステップＳ５−６で、画像データセグメンタ６０は、ステップＳ５−４で計算された量子化Ｒ値、Ｇ値及びＢ値を従来と同様に組み合わせて、「三重値（triple value）」を生成する。
【００５５】
ステップＳ５−８では、画像データセグメンタ６０は、ステップＳ５−４で計算された量子化Ｒ値、Ｇ値及びＢ値にハッシング関数を適用して、ハッシュテーブルのビン（bin）を定義し、且つステップＳ５−６で定義された「三重」値を定義されたビンに追加する。すなわち、この実施形態では、画像データセグメンタ６０は、下記のハッシング関数を量子化Ｒ値、Ｇ値及びＢ値に適用し、ハッシュテーブルのビンを定義する。
ｈ(ｑ)＝(ｑred&7)*2^6+(ｑgreen&7)*2^3+(ｑblue&7)      …  （２）
具体的には、ハッシュテーブルのビンは、各色の３つの最下位ビットにより定義される。この関数は、各ビンが少数の「三重」値のみを有するように、データを試行し、ハッシュテーブルの利用可能なビンに分散させるように選択されている。この実施形態では、ステップＳ５−８で、「三重」値がビンに既に存在していない場合に限って「三重」値をそのビンに追加するので、各「三重」値はハッシュテーブルに一度しか追加されない。
【００５６】
ステップＳ５−１０では、画像データセグメンタ６０は、背景画像中に別の画素が存在するか否かを判定する。以上説明したように「背景」画像の各画素を処理し終わるまで、ステップＳ５−２からＳ５−１０を繰り返す。この処理の結果、「背景」画像中の色を表現する値を含むハッシュテーブルが生成される。
【００５７】
ステップＳ５−１２からＳ５−４８では、画像データセグメンタ６０は各入力画素を順に考慮し、ハッシュテーブルを使用して、写真マット３４及び背景に関連する入力画像中のデータを、被写体オブジェクト２１０に関連する入力画像中のデータから分離する。分割処理の結果が表示装置４に表示される。
【００５８】
この実施形態では、ハッシュテーブルを生成するためにステップＳ５−２からＳ５−１０で処理される「背景」画像は、写真マット３４上の校正特徴を示していない。従って、ステップＳ５−１２からＳ５−４８で実行される分割は被写体オブジェクト２１０に関連する画素データと、写真マット３４上の校正特徴に関連する画素データとを区別しない。その代わりに、この実施形態では、以下に更に詳細に説明するように、被写体オブジェクト２１０の面の３Ｄコンピュータモデルを生成するためにサーフェスモデラ８０により実行される処理は、写真マット３４上の校正特徴に関連する画素がサーフェスモデルに寄与することのないように実行される。
【００５９】
ステップＳ５−１２では、画像データセグメンタ６０は次の入力画像を考慮し、ステップＳ５−１４では、入力画像中の次の画素（ステップＳ５−１４が初めて実行される場合、これは最初の画素である）のＲ値、Ｇ値及びＢ値を読み取る。
【００６０】
ステップＳ５−１６では、画像データセグメンタ６０は先の式（１）を使用して、画素の量子化Ｒ値、量子化Ｇ値及び量子化Ｂ値を計算する。
【００６１】
ステップＳ５−１８では、画像データセグメンタ６０はステップＳ５−１６で計算された量子化Ｒ値、Ｇ値及びＢ値を組み合わせて、「三重値」を生成する。
【００６２】
ステップＳ５−２０では、画像データセグメンタ６０は先の式（２）に従ってハッシング関数をステップＳ５−１６で計算された量子化値に適用して、ステップＳ５−２からＳ５−１０で生成されたハッシュテーブルのビンを定義する。
【００６３】
ステップＳ５−２２では、画像データセグメンタ６０は、ステップＳ５−２０で定義されたハッシュテーブルのビンの「三重」値を読み取る。それらの「三重」値は、写真マット３４の材料及び背景の面２００の色を表現している。
【００６４】
ステップＳ５−２４では、画像データセグメンタ６０は、ステップＳ５−１８で生成された、現在考慮すべき入力画像中の画素の「三重」値がハッシュテーブルのビンの背景「三重」値のいずれかと同じであるか否かを判定する。
【００６５】
ステップＳ５−２４で、画素の「三重」値が背景「三重」値と同じであると判定されれば、ステップＳ５−２６で、その画素は背景画素であると判定し、画素の値を「黒色」に設定する。
【００６６】
これに対し、ステップＳ５−２４で、画素の「三重」値が背景のどの「三重」値とも同じでないと判定された場合には、ステップＳ５−２８で、その画素は被写体オブジェクト２１０の一部であると判定し、画像データセグメンタ６０は画素の値を「白色」に設定する。
【００６７】
ステップＳ５−３０では、画像データセグメンタ６０は、入力画像に別の画素が存在するか否かを判定する。入力画像中の各画素を以上説明したように処理し終わるまで、ステップＳ５−１４からＳ５−３０を繰り返す。
【００６８】
ステップＳ５−３２からＳ５−４６では、画像データセグメンタ６０は画像の画素を背景画素又はオブジェクト画素として分類する上での誤りを修正すると共に表示装置４に分割処理の結果を表示するための処理を実行する。
【００６９】
具体的には、ステップＳ５−３２で、画像データセグメンタ６０はメディアンフィルタとして使用すべき円形マスクを定義する。この実施形態では、円形マスクは４画素分の半径を有する。
【００７０】
ステップＳ５−３４では、画像データセグメンタ６０はステップＳ５−３２で定義したマスクの中心をステップＳ５−２６及びＳ５−２８で生成された２値画像の次の画素（ステップＳ５−３４が初めて実行される場合には、これは最初の画素である）の中心に配置するための処理を実行する。
【００７１】
ステップＳ５−３６では、画像データセグメンタ６０はマスク内部の黒色画素の数及び白色画素の数をカウントする。
【００７２】
ステップＳ５−３８では、画像データセグメンタ６０は、マスク内部の白色画素の数がマスク内部の黒色画素の数以上であるか否かを判定する。
【００７３】
ステップＳ５−３８で白色画素の数が黒色画素の数以上であると判定されれば、ステップＳ５−４０で、画像データセグメンタ６０はマスクの中心を位置決めする画素の値を白色に設定する。これに対し、ステップＳ５−３８で黒色画素の数が白色画素の数より多いと判定された場合には、ステップＳ５−４２で、画像データセグメンタ６０はマスクの中心を位置決めする画素の値を黒色に設定する。
【００７４】
ステップＳ５−４４では、ディスプレイプロセッサ１１０は、現在処理中の入力画像の低解像度版（「サムネイル」画像）を表示装置４に表示し、先にステップＳ５−３４からＳ５−４２で画素に対して実行された分割処理の結果をこのサムネイル画像中に表示する。このように、サムネイル画像は、入力画像中の各画素が処理される毎に分割処理の結果を示すためにインクリメンタルに変更される。この実施形態では、ディスプレイプロセッサ１１０は、背景を表すものとして判定された入力画像中の画像データが、サムネイル画像中において青色などの所定の色として提示されるようにサムネイル画像中で分割処理の結果を表示する。
【００７５】
このようにサムネイル画像を表示することにより、ユーザは、入力画像の処理済の部分と分割処理の結果とを確認できるので、修正が必要か否かを判定することができる。
【００７６】
ステップＳ５−４６では、画像データセグメンタ６０は２値画像中に別の画素が存在するか否かを判定し、以上説明したように各画素を処理し終わるまで、ステップＳ５−３４からＳ５−４６を繰り返す。
【００７７】
ステップＳ５−４８では、画像データセグメンタ６０は、処理すべき別の入力画像が存在するか否かを判定する。以上説明したように各入力画像を処理し終わるまで、ステップＳ５−１２からＳ５−４８を繰り返す。
【００７８】
再び図４に戻ると、ステップＳ４−１０では、中央制御装置２０は、ステップＳ４−８で生成された画像分割の修正の希望を示す信号がユーザ入力装置６を介してユーザから受信されたか否かを判定する（この実施形態では、信号は、修正が望まれる分割に対応する表示装置４に表示されたサムネイル画像をユーザが指示／クリックすることによって生成される）。
【００７９】
ステップＳ４−１０において画像分割を変更すべきであると判定される場合、ステップＳ４−１２において、画像分割エディタ７０は、ユーザの入力命令に従ってステップＳ４−１０でユーザにより選択された分割を修正する。
【００８０】
図６は、ステップＳ４−１２での画像分割の対話修正中に、画像分割エディタ７０により実行される処理動作を示す。
【００８１】
図６を参照すると、ステップＳ６−２において、画像分割エディタ７０は、ディスプレイプロセッサ１１０に対して、ステップＳ４−１０でユーザにより（対応するサムネイル画像を指示／クリックすることによって）選択された画像分割を編集のために表示装置４に表示させる。図７を参照して具体的に説明すると、この実施形態では、表示されたサムネイル画像３１０から３２４の全ての中からステップＳ４−１０でユーザにより選択された画像分割３１８が、サムネイル画像よりも大きい形式でウィンドウ４００内に表示される。この実施形態では、ウィンドウ４００に表示される画像分割は、分割を生成するように処理された入力画像と同数の画素を有する。加えて、編集用の拡大形式で表示された分割であることを示すために、ユーザにより選択されたサムネイル画像（図７の例ではサムネイル画像３１８）は、境界が強調表示されたり、あるいは、別の方法で残りのサムネイル画像と区別されたりする。
【００８２】
また、ステップＳ６−２において、画像分割エディタ７０は、ディスプレイプロセッサ１１０に対して、ウィンドウ４００内に表示された画像分割上にユーザによる移動が可能なウィンドウ４０２を表示させる。加えて、画像分割エディタ７０は、どの画素がステップＳ４−８で画像データセグメンタ６０によりオブジェクト２１０又は写真マット３４の特徴に属するものとして判定されたか、及び、どの画素が背景画素であると判定されたかをユーザが見ることができるように、ウィンドウ４０２に含まれる画像分割の一部が拡大形式で示される別のウィンドウ４１０をディスプレイプロセッサ１１０に対して表示させる。
【００８３】
ステップＳ６−４において、画像分割エディタ７０は、ユーザの命令に従って、ウィンドウ４１０に表示された画素を背景画素からオブジェクト画素（すなわち、オブジェクト２１０又は写真マット３４の特徴を表す画素）に変更し、及び／又は、オブジェクト画素を背景画素に変更する。具体的には、編集のために、画像分割エディタ７０は、この実施形態ではブラシの形態を有し、マウスなどのユーザ入力装置６を使用して移動させることでウィンドウ４１０において変更する画素を指定することができるポインタ４１２をディスプレイプロセッサ１１０に対して表示させる。この実施形態では、ポインタ４１２を用いてユーザが指示する各画素は、元が背景画素の場合にはオブジェクト画素に変更され、元がオブジェクト画素の場合には背景画素に変更される。この実施形態では、画像分割エディタ７０は、ユーザ選択ボタン３５０及び３６０をディスプレイプロセッサ１１０に表示させる。ボタン３５０を選択すると、ポインタ４１２の幅が広くなり（同時により多くの画素を指定でき、ウィンドウ４１０中の広い領域を迅速に変更できるようになる）、ボタン３６０を選択すると、ポインタ４１２の幅が狭くなる。
【００８４】
このように処理を実行することによって、ユーザは、例えば、画像データセグメンタ６０により生成された分割を編集し、画像データセグメンタ６０により被写体オブジェクト２１０に関連するものとして誤って判定された画素（例えば、被写体オブジェクト２１０の色と同じ色を有する場合、画像データセグメンタ６０が被写体オブジェクト２１０に関連する画像データから分離しないであろう面２００上の印２２０に関連する画素データ）を背景画素として指定して、及び／又は、訂正されない場合には、サーフェスモデラ８０により後の処理で生成される被写体オブジェクトの３次元コンピュータモデルにおいて誤差を生じることが判明している画像分割（図７の例に示す）中の被写体オブジェクト２１０の輪郭に接する写真マット３４の各校正特徴に関連する画素を背景として指定する。同様に、ユーザは、画像データセグメンタ６０により誤って被写体オブジェクト２１０に関連する画素であると判定された写真マット３４及び／又は面２００上の陰影に関する画素を背景として指定することができる。
【００８５】
ステップＳ６−６において、ユーザが（別のサムネイル画像を指示／クリックするか、あるいは、「処理開始」ボタンを指示／クリックすることによって）現在表示中の分割の編集を終了すると、ディスプレイプロセッサ１１０は、ステップＳ６−４でユーザにより行なわれた画像分割に対する変更を示すために、ステップＳ６−４でユーザにより編集された分割に対応する表示中のサムネイル画像（図７の例ではサムネイル画像３１８）を変更する。
【００８６】
再度、図４を参照すると、ステップＳ４−１４において、画像分割エディタ７０は、ユーザが画像分割に対して更なる変更を行なうことを希望するか否か、すなわち、ユーザが別のサムネイル画像３１０から３２４を指示／クリックしたか否かを判定する。
【００８７】
ステップＳ４−１０又はステップＳ４−１４において、画像分割に対してそれ以上の変更が行なわれない（すなわち、ユーザが「処理開始」ボタン３４０を指示／クリックした）と判定される場合、処理はステップＳ４−１６へと進む。
【００８８】
ステップＳ４−１６において、サーフェスモデラ８０は、被写体オブジェクト２１０の面の３Ｄコンピュータモデルを定義するデータを生成するための処理を実行する。
【００８９】
図８は、ステップＳ４−１６でサーフェスモデラ８０により実行される処理動作を示す。
【００９０】
図８のステップＳ８−２において、シルエットアプロキシメータ８２は、ステップＳ４−８においては画像データセグメンタ６０、ステップＳ４−１２においては画像分割エディタ７０により予め生成された分割済画像データを処理して、各入力画像中の被写体オブジェクトのシルエット（すなわち、輪郭）を直線で近似すると共に、各直線に対して固有のラベルを割り当てる。この実施形態において、各画像の被写体オブジェクトのシルエットを直線で近似するために、シルエットアプロキシメータ８２は、例えば、M.K. Leung及びY.H. Yangの“Dynamic Strip Algorithm in Curve Fitting”（Computer Vision Graphics and Image Processing 51(2)、１４５〜１６５ページ、１９９０年８月）に記載されるような従来の方法で処理を実行する。
【００９１】
ステップＳ８−２で処理を実行した結果、各画像中の被写体オブジェクトのシルエットは、図９に示すように複数の連結された直線により近似される。図９は、図３の入力画像３０２の処理により生じたオブジェクトシルエットの近似を示す。尚、図９の例（及びシルエットを示す図９以降の全ての図面）では、シルエットを近似する図示直線の本数は、ステップＳ８−２でシルエットアプロキシメータ８２により実際に生成されるであろう本数よりもかなり少ない場合もある。
【００９２】
図１０を参照すると、処理のこの段階では、各入力画像中のシルエット５００から５１４は、線分により近似されており、３次元空間における各シルエットの位置及び向きは、各入力画像の位置及び向きを判定するためにステップＳ４−６でカメラ計算器５０により実行された計算の結果、既知である（各シルエット５００から５１４は、入力画像の２次元平面に位置する）。加えて、３次元空間におけるカメラ２３０の焦点の位置も、ステップＳ４−６でカメラ計算器５０により実行された計算の結果、各入力画像に対して既知である。
【００９３】
各シルエットは、シルエットが位置する画像を記録したカメラ２３０の焦点５１５から５１９と共に、３次元空間における各点（この時点では未知）で被写体オブジェクト２１０の表面に接する３次元空間での無限の円錐形を定義する（シルエットは、画像中のオブジェクト表面の輪郭を定義するためである）。これは、図１０において、シルエット５０２に関して示されており、シルエット５０２は、焦点位置５１５と共に円錐形５２０を定義する。円錐形の断面図は、シルエットと同じ形状であるので、各円錐形は、複数の無限の平面三角形から成る。各三角形は、シルエットを近似する線分のうちの１本の端点を通る線とカメラ２３０の焦点とにより定義されている（各平面三角形は、シルエットの線分の３Ｄ空間への投影により定義される）。
【００９４】
従って、各円錐形は、カメラ２３０の焦点で全てが交わる無限の三角形の平面から成る無限の多面体である。
【００９５】
シルエット５００から５１４の全てにより定義される円錐形の共通部分が、３次元空間における被写体オブジェクトの境界面を定義する。従って、被写体オブジェクトの３次元コンピュータモデルは、全円錐形の共通部分、すなわち、視覚的な体を計算することによって生成することができる。
【００９６】
この実施形態では、円錐形の共通部分は、各円錐形を構成する平面三角形の共通部分を計算することによって計算される。少なくとも２つの別々の円錐形（すなわち、少なくとも２つの別々のシルエット）の平面三角形のうちの３つが交わる任意の３Ｄ点により、被写体オブジェクト２１０の表面の頂点が定義されるであろう。別々のシルエットの３つの三角形が交わる場合が、ここでは、３Ｄ点５２８で交わる三角形５２２、５２４及び５２６として図１０に示される。２つのシルエットの３つの三角形が交わる場合、同じシルエットを元にした三角形は、シルエット中の隣接する線分（すなわち、シルエット中の１つの頂点で交わる線分）の３Ｄ投影により定義される。これは、３Ｄ点５３６で交わる平面５３０、５３２及び５３４として図１０に示される（平面５３０及び５３２は、シルエット５１４中の隣接する線分５３１及び５３３により定義され、点５３６は、平面５３０と５３２が交わるエッジに位置する）。
【００９７】
生成される３Ｄコンピュータモデルが被写体オブジェクト２１０の表面を確実に正確に表せるようにするためには、被写体オブジェクトの表面の頂点となる三角形の各共通部分を計算する必要がある。第３実施形態で説明するように、これは、各シルエット中の線分により定義された各三角形を残る全ての三角形のその他の全ての線分により定義された全ての三角形に対して検査し、３Ｄ点の１組（セット）を生成することによって、達成することができると考えられる。しかし、被写体オブジェクトの表面の頂点を表す３Ｄ点をこのような方法で計算するのに必要な計算の回数は膨大である。具体的には、シルエットの総数が「ｍ」個であり、シルエット中の直線の本数が「ｎ」本である場合、Ｏ（ｍｎ３）回の計算が必要になるであろう。加えて、検査される三角形の多くが交わらない（従って、３Ｄ点の生成に至らない）うえに、被写体オブジェクト２１０の表面上に位置しない３Ｄ点は、三角形が偶然に交わることによって生成される可能性がある（このため、被写体オブジェクト２１０のモデルに対してどの３Ｄ点が実際に頂点を表すのかを判定するための処理を３Ｄ点に対して更に行なう必要がある）ので、この計算の大半が不必要なものとなる。
【００９８】
従って、この実施形態では、被写体オブジェクトの表面の頂点を表す３Ｄ点を計算するのに必要な計算の回数を低減するように処理が実行される。
【００９９】
この処理を詳細に説明する前に、処理の原理について説明する。
【０１００】
具体的には、この実施形態において、３Ｄ空間のボリュームを考慮し、このボリュームを検査して以下の点を判定するための処理が実行される：
（１）交わって３Ｄ点を生成するのに十分な平面三角形（すなわち、この実施形態では３つ）がボリューム中に存在しないか、あるいは、ボリューム中の平面三角形が、被写体オブジェクト２１０の表面の頂点を表す３Ｄ点で交わることがないという理由で、ボリュームを廃棄することができるか否か（以下で詳細に後述）、
（２）ボリュームが、相互に交わるのに十分であると共に、被写体オブジェクト２１０の表面の頂点を表すであろう所定数（この実施形態では、１つの３Ｄ点）を超える３Ｄ点を生成するのに十分な平面三角形を含むという理由で、より小さいボリュームを考慮すべくボリュームを再分割すべきか否か、又は、
（３）ボリュームが、相互に交わると共に、被写体オブジェクト２１０の表面の頂点を表す十分に少ない所定数（この実施形態では１つ）の３Ｄ点を生成するのに適切な数（この実施形態では３つ）の平面三角形を含むか否か。この場合、これらの点の３Ｄ位置が計算／検査され、被写体オブジェクト２１０の表面の頂点を実際に表すか否かが判定される。
【０１０１】
このようにして、処理を行なうことによって、３Ｄ点の計算に至らない不必要な処理を回避しながら、シルエットの共通部分により定義される被写体オブジェクト２１０の表面の全ての頂点を確実に計算することができる。特に、更に計算することなく、大きなボリュームの３Ｄ空間を廃棄することができる。
【０１０２】
この実施形態では、３Ｄ空間のボリュームを廃棄又は再分割すべきか、あるいは、３Ｄ点を計算すべきかを判定するための３Ｄ空間のボリュームに対する検査が、３Ｄボリュームを各２次元画像に投影し、３Ｄボリュームの２Ｄ投影を画像中の各シルエットを構成する直線（ステップＳ８−２において生成済）に対して検査することによって実行される。このように２Ｄにおいて検査を実行することによって、ボリュームを検査するのに実行しなければならない処理動作の数が削減される。
【０１０３】
ボリューム中の平面三角形が被写体オブジェクト２１０の表面の頂点を表す３Ｄ点で交わらないという理由でボリュームを廃棄することができるか否かを判定するため、３Ｄ点で交わる平面に寄与しないシルエットにより定義される全ての円錐形（多面体）の内部に３Ｄ点が位置するか否かを判定するための処理が実行される。図１０に示す例を参照すると、平面５３０、５３２及び５３４の場合、シルエット５００、５０２、５０４、５０６、５０８及び５１０により定義される全ての円錐形の内部に３Ｄ点５３６が位置するか否かを判定するための処理が実行される（これらのシルエットは、３Ｄ点５３６で交わる３つの平面のうちのいずれも定義しないためである）。この実施形態では、各画像中のボリュームの２Ｄ投影を検査し、２Ｄ投影が各シルエット内に位置することを確認することによって、この処理が実行される。すなわち、検査は２Ｄで実行されるので、実行すべき処理動作が削減される。
【０１０４】
この実施形態では、３Ｄ点が計算されるとき、被写体オブジェクト２１０の頂点を表すか否かを判定するために、この３Ｄ点の検査が続けて行なわれる。これは、３つの平面三角形を含む３Ｄボリュームが識別されるときに３Ｄ点が計算されるからである。しかし、３つの平面三角形は、ボリューム内の３Ｄ点で実際には交わらないこともある。従って、この実施形態では、計算された３Ｄ点が識別されたボリューム内にあるか否かを判定するための検査が実行される。
【０１０５】
この実施形態での処理は、被写体オブジェクトの表面が単純な多面体である、すなわち、４つ以上の平面が単一の３Ｄ点で交わるような一致が存在しないことを想定している。コンピュータグラフィックスアプリケーションでは、必要に応じて、各シルエットを近似する直線を定義するデータに少量の乱雑音を加えることによって、視覚的な結果に影響することなく、この状態が常に得られるのでこの制限はあまり問題とならない。
【０１０６】
被写体オブジェクト２１０の表面の頂点を表す３Ｄ点を計算するためにこの実施形態で実行される処理について詳細に説明する。
【０１０７】
再度図８を参照すると、ステップＳ８−４において、シルエットアプロキシメータ８２は、シルエットごとにステップＳ８−２で生成されたデータを処理し、内部の各線分に対するバウンディングボックスを計算すると共に、シルエットごとの４分木構造にバウンディングボックスデータに格納する。
【０１０８】
この処理は、被写体オブジェクト２１０の表面の任意の３Ｄ頂点の計算に先立って実行される。これは、後述するように、３Ｄ点を計算する処理中にシルエット中のどの直線を考慮しなくても良いかを判定するのにステップＳ８−４で生成されるデータを使用するからである。考慮しなくても良いと判定される直線は、処理しても被写体オブジェクト２１０の表面の３Ｄ頂点を生成することができない直線である。
【０１０９】
図１１は、ステップＳ８−４でシルエットアプロキシメータ８２により実行される処理動作を示している。
【０１１０】
図１１のステップＳ１１−２において、シルエットアプロキシメータ８２は、処理すべき次のシルエット（ステップＳ１１−２が初めて実行される場合、これは最初のシルエットである）を考慮し、ステップＳ１１−４において、ステップＳ８−２で生成されたシルエットを近似する各直線に対する画像の側面に平行な側面を有するバウンディングボックスを計算する。
【０１１１】
具体的に、図１２を一例として参照すると、シルエットアプロキシメータ８２は、バウンディングボックスの各辺が画像の側面に平行であるように、シルエットを構成する各線分に対してバウンディングボックス（図１２の点線で示す）を計算する。バウンディングボックスが計算されるシルエット中の直線は、バウンディングボックスの対角線である。それ自体が画像の側面に平行であるシルエット中の直線（すなわち、図１２の例では線５５０及び５５２）の場合、バウンディングボックスは、線に垂直な方向の幅が０であるように定義される（図１２の例では、線５５０及び５５２に対するバウンディングボックスは、バウンディングボックスを見ることができるように狭い幅で示される）。
【０１１２】
シルエットアプロキシメータ８２は、従来の４分木のルートノードに各バウンディングボックスの最小／最大ｘ値及び最小／最大ｙ値を格納する（これらの値は、図１２に示す例では、バウンディングボックス５５４において示される）。
【０１１３】
ステップＳ１１−６において、シルエットアプロキシメータ８２は、現在考慮中の４分木に格納されているｘ値の範囲及びｙ値の範囲を判定する（ステップＳ１１−６が初めて実行される場合、これはステップＳ１１−４で生成されたルートノードである）。すなわち、ステップＳ１１−６において、シルエットアプロキシメータ８２は、最小ｘ値と最大ｘ値との間の差分、及び、最小ｙ値と最大ｙ値との間の差分を計算する。
【０１１４】
ステップＳ１１−８において、シルエットアプロキシメータ８２は、現在考慮中のノードをステップＳ１１−６で最大範囲を有するものとして判定された座標中の値の中央値で分割することによって、４分木に２つの子ノードを作成する。すなわち、ステップＳ１１−６においてｙ値の範囲がｘ値の範囲より広いと判定される場合、シルエットアプロキシメータ８２は、ｙ値の中央値でノードを分割し、範囲が狭いと判定される場合には、ｘ値の中央値で分割される。
【０１１５】
従って、図１２に示す例を参照すると、ｙ値の範囲はｘ値の範囲よりも広いので、シルエットアプロキシメータ８２は、ｙ値の中央値（すなわち、シルエットの中央値線分の端点）を通るｙ軸に垂直な線５６４を定義することによって２つの子ノード５６０及び５６２を作成する。図１２の例において、１７個の線の端点が存在するので、線５６４の上方には８つの線分の端点があり、線５６４の下方には８つの線分の端点があるように、線５６４は端点を通るよう定義される。偶数個の値が存在する場合、この実施形態では、シルエットアプロキシメータ８２は、線５６４が中央値にまたがる２つの値の中間点を通るように定義する。
ステップＳ１１−１０において、シルエットアプロキシメータ８２は、ステップＳ１１−４で計算されたバウンディングボックスを親ノードからステップＳ１１−８で作成された子ノードに割り当てる。
【０１１６】
具体的には、シルエットアプロキシメータ８２は、バウンディングボックスの全体又は一部が子ノード内に位置する場合、又は、子ノードに接する場合に、バウンディングボックスをその子ノードに割り当てる。従って、図１２に示す例において、全体が線５６４の上方に位置する各バウンディングボックスは、子ノード５６０に割り当てられ、全体が線５６４の下方に位置する各バウンディングボックスは、子ノード５６２に割り当てられる。バウンディングボックス５７０、５７２及び５７４は、部分的に子ノード５６０及び５６２の双方にあるので、子ノード５６０及び５６２の双方に割り当てられる。バウンディングボックス５７６及び５７８は、それぞれが、子ノード５６０及び５６２の境界を定義する線５６４に接触するので、子ノード５６０及び５６２の双方に割り当てられる。
【０１１７】
ステップＳ１１−１２において、シルエットアプロキシメータ８２は、次の子ノードを考慮し、ステップＳ１１−１４において、子ノード中のバウンディングボックスの数が、親ノード中のバウンディングボックスの数と同数であるか否かを判定する。
【０１１８】
ステップＳ１１−１４において、子ノード中のバウンディングボックスの数と親ノード中のバウンディングボックスの数が同数であると判定される場合、更に下位の子ノード間でのバウンディングボックスの分割が不可能であると考えられる（更に下位の子ノードは、各々、親から割り当てられたバウンディングボックスの全てを含む）ので、子ノードを更に再分割する必要はない。加えて、ステップＳ１１−１２で考慮される現在の子ノードは、親と同じバウンディングボックスを含むのでこれを保持する必要がなく、また、子ノードはバウンディングボックスを含まない（親からのバウンディングボックスの全ては、ステップＳ１１−１２で考慮される現在の子ノード中にある）ので、ステップＳ１１−８で作成されるもう一方の子ノード（すなわち、ステップＳ１１−１２で考慮される子ノードの同胞）を保持する必要もない。
【０１１９】
従って、ステップＳ１１−４で子ノード中のバウンディングボックスの数が親ノード中の数と同数であると判定される場合、処理はステップＳ１１−１６へと進む。ここで、シルエットアプロキシメータ８２は、ステップＳ１１−１２で考慮された子ノードとステップＳ１１−８で作成された兄弟ノードを削除する。続いて、処理はステップＳ１１−２０へと進む。
【０１２０】
これに対し、ステップＳ１１−１４において、子ノード中のバウンディングボックスの数が親ノード中の数と同数でないと判定される場合、処理はステップＳ１１−１８へと進む。ここで、シルエットアプロキシメータ８２は、子ノード中のバウンディングボックスの数が２に等しいか否かを判定する。
【０１２１】
ステップＳ１１−１８において、子ノード中のバウンディングボックスの数が２に等しいと判定される場合、十分に少ない数のバウンディングボックスを有する子ノードが既に取得されているので、この実施形態では、子ノードの更なる再分割は実行されない。従って、処理はステップＳ１１−２０へと進む。
【０１２２】
これに対し、ステップＳ１１−１８において、子ノード中のバウンディングボックスの数が２に等しくないと判定される場合、処理はステップＳ１１−６へと戻る。ステップＳ１１−１４において子ノード中のバウンディングボックスの数と親ノード中のバウンディングボックスの数が等しいと判定されるか、あるいは、ステップＳ１１−１８において２つのバウンディングボックスを含む子ノードが生成されたと判定されるまで、ステップＳ１１−６からＳ１１−８が繰り返され、子ノードの作成／再分割が繰り返し行なわれる。
【０１２３】
ステップＳ１１−２０において、シルエットアプロキシメータ８２は、処理すべき別の子ノードが存在するか否かを判定し、以上説明したように各子ノードを処理し終わるまでステップＳ１１−１２からＳ１１−２０を繰り返す。
【０１２４】
ステップＳ１１−２２において、シルエットアプロキシメータ８２は、処理すべき別のシルエットが存在するか否かを判定し、以上説明したように各シルエットを処理し終わるまでステップＳ１１−１２からＳ１１−２２を繰り返す。
【０１２５】
図８を再度参照すると、ステップＳ８−６において、３Ｄ点計算器８４は、被写体オブジェクト２１０の表面の頂点を表す３Ｄ点を計算するための処理を実行する。
【０１２６】
図１３は、ステップＳ８−６で３Ｄ点計算器８４により実行される処理動作を示す。
【０１２７】
図１３のステップＳ１３−２において、３Ｄ点計算器８４は、被写体オブジェクト２１０が位置し、従って、オブジェクト表面の各点を表す全ての計算された３Ｄ点も位置することになる３Ｄ空間中のボリュームを定義する。
【０１２８】
図１４ａにおいて、この実施形態では、ステップＳ１３−２で３Ｄ点計算器８４により定義された開始ボリュームは、垂直な側面と水平な上面及び底面を有する直平行六面体６００である。垂直な側面は、写真マット３４の特徴の校正パターンの縁部に接するように位置決めされる（従って、被写体オブジェクト２１０の全体を含む）。直平行六面体６００の上面の位置は、カメラ２３０の焦点６１２からステップＳ４−４で格納された入力画像のうちのいずれか１つの上エッジを通る線６１０が写真マット３４の中心を通る垂直線６１４と交わることによって定義される位置に設定される。具体的に説明すると、カメラ２３０の焦点６１２及び画像の上エッジは、ステップＳ４−１６で実行された位置及び向きの計算の結果、既知であり、上面の高さを線６１０が写真マット３４の中心を通る垂直線６１４と交わる点に対応するように設定することによって、上面は常に被写体オブジェクト２１０の最上部より上方に位置することになる（被写体オブジェクト２１０の最上部が各入力画像で見える場合）。直平行六面体６００の水平底面の位置は、ステップＳ４−４で格納された入力画像のうちのいずれか１つの底エッジを通るカメラ２３０の焦点６１２からの線６１６が、写真マット３４の中心を通る垂直線６１４と交わることによって定義される位置に設定される。これにより、直平行六面体６００の底面は、確実に被写体オブジェクト２１０の底面の下方に延伸するようになる（被写体オブジェクト２１０の底面が各入力画像で見える場合）。
【０１２９】
この実施形態において、図２に示すように、カメラ２３０が三脚上の固定位置に設置され、被写体オブジェクト２１０を乗せた写真マット３４がカメラに対して移動させられる状態で被写体オブジェクト２１０を撮影すると、各画像が記録されたとき、カメラ２３０は常に直平行六面体６００の外側に位置することになる。しかし、写真マット３４及び被写体オブジェクト２１０をカメラ２３０に対して移動させる代わりに、写真マット３４及び被写体オブジェクト２１０を固定しておいてカメラ２３０を別の位置及び向きに移動させることもできる。この場合、図１４ｂに示すように、高い視点から被写体オブジェクト２１０の上面を示すように画像が記録されるとき、カメラ２３０の位置は直平行六面体６００内にあっても良い。この実施形態で３Ｄ点計算器８４により実行される処理により、直平行六面体６００はカメラ２３０により記録される画像へと投影され、投影されたボリューム中に含まれるものに関する情報が判定されるので、直平行六面体６００は、全ての記録画像に関して、完全にカメラ２３０の正面に位置する必要がある。従って、この実施形態では、３Ｄ点計算器８４は、ステップＳ４−６で計算されたカメラ位置及びカメラ向きに対して直平行六面体６００を検査し、図１４ｃに示すように、各角（corner）が全ての計算されたカメラ位置の正面にくるように直平行六面体６００を調整する。
【０１３０】
再度図１３を参照すると、ステップＳ１３−４において、３Ｄ点計算器８４は、ステップＳ１３−２で定義された３Ｄボリューム（すなわち、図１４ａ、１４ｂ及び１４ｃの例での直平行六面体６００）を格納スタックの最上部に加え、ステップＳ１３−６において、スタックの最上部から次のボリュームを取り出す（ステップＳ１３−６が初めて実行される場合、これはステップＳ１３−２で定義される最初のボリュームである）。
【０１３１】
ステップＳ１３−８において、３Ｄ点計算器８４は、ステップＳ１３−６でスタックから取り出されたボリュームの状態を判定する。
【０１３２】
この処理において、３Ｄ点計算器８４は、ステップＳ１３−６でスタックから取り出されたボリュームが、被写体オブジェクト２１０の表面のいずれかの３Ｄ頂点を含む可能性がない（従って、廃棄することができる）か否か、被写体オブジェクト２１０の表面の２つ以上の３Ｄ頂点を含む可能性があるためにボリュームを再分割する必要があるか否か、あるいは、被写体オブジェクトの表面の単一の頂点のみを定義する平面をボリュームが含むか否かを判定する。この場合、３Ｄ頂点の位置を計算し、検査することができる。この実施形態において、３Ｄ点計算器８４は、ステップＳ１３−６でスタックから取り出された３Ｄボリュームを各画像へと投影し、ステップＳ８−２で予め計算された各シルエットを近似する直線に対して結果として生じる２Ｄ投影を検査することによってこれらの判定を実行する。
【０１３３】
図１５は、ステップＳ１３−８において３Ｄ点計算器８４により実行される処理動作を示す。
【０１３４】
図１５のステップＳ１５−２において、３Ｄ点計算器８４は、ステップＳ１３−６でスタックから取り出されたボリュームの角をステップＳ４−６で予め計算された各撮影位置及び撮影向きに対してカメラ２３０の２次元撮影平面へと投影し、投影された角の連結性を定義するデータを保持する。
【０１３５】
図１６において１つの画像に関して示されるこの投影の結果は、２次元撮影平面内の６つの包囲された領域（これらの領域は重なる可能性がある）を定義する８つの点６２０から６３４から構成される２Ｄ投影６５０である。図１６の例では、各点により定義される６つの領域は、それぞれ、点のグループ（６２０、６２２、６２４、６２６）、（６２０、６２２、６３０、６２８）、（６２２、６３０、６３２、６２４）、（６２４、６３２、６３４、６２６）、（６２６、６２０、６２８、６３４）及び（６２８、６３０、６３２、６３４）により定義される領域である。
【０１３６】
ステップＳ１５−４において、３Ｄ点計算器８４は、カウンタｎｖの値を０に設定する。以下に説明するように、このカウンタは、少なくとも１つの「検証済頂点」（すなわち、２Ｄ投影されたボリューム６５０内に位置するシルエット中の２つの隣接する直線が交わる点）が検出された「アクティブなカメラ」リスト上のカメラの台数を表す。アクティブなカメラのリストは、ステップＳ８−２で生成された処理中に考慮されるべきシルエットのリストである。最初に、アクティブなカメラリストは、全てのシルエットを含むが、後述するように、シルエットがステップＳ１５−２で生成された２Ｄ投影領域６５０を包囲すると判定される場合、シルエットはリストから削除される。具体的には、シルエットは２Ｄ投影領域６５０を包囲するので、全ての投影された子ボリュームを包囲することになり、子ボリュームが生成／検査されるのを回避するために、シルエットはアクティブなカメラリストから削除される。
【０１３７】
ステップＳ１５−６において、３Ｄ点計算器８４は、カウンタｎｅの値を０に等しく設定する。後述するように、このカウンタの値は、少なくとも１本の「検証済エッジ」（すなわち、２Ｄ投影ボリューム６５０内に位置するシルエットからの直線）が検出された「アクティブなカメラ」リスト上のカメラの台数を表す。
【０１３８】
ステップＳ１５−８において、３Ｄ点計算器８４は、カウンタｎｐの値を０に等しく設定する。後述するように、このカウンタの値は、平面三角形（すなわち、図１０を参照して説明したように、シルエット中の線分−すなわち「エッジ」−及びカメラ２３０の焦点により定義される三角形）の数を表す。この平面三角形は、ステップＳ１３−６でスタックから取り出されたボリュームと交わる。
ステップＳ１５−１０において、３Ｄ点計算器８４は、フラグ「either  SubdivideOrDiscard」の値を「偽」に設定する。
【０１３９】
以降の処理において、３Ｄ点計算器８４は、ステップＳ１５−２で生成された２Ｄ投影ボリューム６５０とステップＳ８−２の処理で生成された各画像中のシルエットの直線（エッジ）との間の関係に基づいて処理を実行し、（被写体オブジェクト２１０の表面のいずれかの３Ｄ頂点を含まないことが理由で）ステップＳ１３−６でスタックから取り出された３Ｄボリュームを廃棄することができるか否かを判定するか、（オブジェクト表面の２つ以上の３Ｄ頂点を含む可能性があるので）より小さいボリュームを考慮するのに再分割を必要とするか、あるいは、オブジェクト表面の単一の頂点を定義する平面を含むか（この場合、頂点の位置が計算／検査される）を判定する。
【０１４０】
３Ｄ点計算器８４により実行される特定の処理ステップを説明する前に、画像中の２Ｄ投影ボリューム６５０とシルエットとの間に存在し、３Ｄ点計算器８４により検査される様々な関係に関して説明する。加えて、３Ｄ点計算器８４が、シルエットと２Ｄ投影ボリューム６５０との間の画像ごとに判定された関係に基づいて、ステップＳ１３−６でスタックから取り出されたボリュームに対してどの処理を実行するべきかを判定する方法についても説明する。
【０１４１】
図１７ａから図１７ｈは、画像中のシルエットと２Ｄ投影ボリューム６５０とが有する可能性があり、３Ｄ点計算器８４により検査される８つの異なる関係を示す。
【０１４２】
図１７ａを参照すると、第１の関係では、シルエットのちょうど１つの頂点７００（すなわち、シルエットを構成する２つの連続する線分が交わるシルエット中の点）が、投影されたボリューム６５０の６つの２次元領域（これらの領域は、先に説明したように、ボリュームの投影された角により定義される）のうちの１つの内部に位置する。
【０１４３】
図１７ｂを参照すると、第２の関係では、ちょうど１つの頂点７０２が、２Ｄ投影ボリューム６５０内に位置すると共に、投影ボリューム中に頂点をもたない少なくとも１本の線分７０４が、２Ｄ投影ボリューム６５０内に位置する。
【０１４４】
図１７ｃを参照すると、第３の関係では、２Ｄ投影ボリューム６５０は、２つ以上のシルエット頂点（図１７ｃの例では、４つのシルエット頂点７０６、７０８、７１０及び７１２が示されるが、２つ以上の任意の数の頂点が２Ｄ投影ボリューム６５０内に位置するときにこの第３の関係が存在すると判定される）を含む。
【０１４５】
図１７ｄを参照すると、第４の関係では、シルエットのちょうど１つの単一の線分７１４が２Ｄ投影ボリューム６５０内に位置し、線分７１４の頂点はいずれも投影ボリューム６５０内に位置しない。
【０１４６】
図１７ｅを参照すると、第５の関係では、２Ｄ投影ボリューム６５０は、その中に位置する頂点を有しないシルエットの少なくとも２本の線分７１６及び７１８を含む。
【０１４７】
図１７ｆを参照すると、第６の関係では、シルエット７２０は、全体的に２Ｄ投影ボリューム６５０の境界の内側に位置する。この第６の関係は、図１７ｃを参照して説明した関係３（２Ｄ投影ボリューム６５０が少なくとも１つのシルエット頂点を含む）の特別な場合であり、関係３及び関係６の双方は、ステップＳ１３−６でスタックから取り出されたボリュームを同様に処理する方法に関する決定に影響する。従って、この実施形態では、関係６は３Ｄ点計算器８４により明示的に識別されず、その代わりに関係３のみが検出される。これには処理が削減されるという効果があるが、それは、シルエットの全ての頂点が検査されて、２Ｄ投影ボリューム６５０中にあるか否かが判定される訳ではないからである（関係６が明示的に識別される場合には必要となるであろう）。
【０１４８】
図１７ｇを参照すると、第７の関係では、２Ｄ投影ボリューム６５０は、全体的にシルエット７２２内に位置する。
【０１４９】
図１７ｈを参照すると、第８の関係では、シルエット７２４及び２Ｄ投影ボリューム６５０は相互に重ならない。
【０１５０】
各画像中の２Ｄ投影ボリューム６５０とシルエットとの間の関係に基づいて、３Ｄ点計算器８４は、ステップＳ１３−６でスタックから取り出されたボリュームの状態を３Ｄ点計算器８４により検査される以下の８つのケースで示されるように設定する（すなわち、ボリュームの処理法を判定する）。８つのケースは、優先順位に従って以下に挙げられるので、リスト中の優先順位の高いケースは、リスト中の優先順位の低いケースに優先し、スタックから取り出されたボリュームに対して実行される処理は、より高い優先順位のケースに基づいて判定される。
【０１５１】
ボリューム状態のケースＡ：  いずれかの画像が、シルエットと２Ｄ投影ボリューム６５０との間で関係８（図１７ｈを参照して説明）を有する場合、状態を「ボリュームの廃棄」に設定する。関係８において、２Ｄ投影ボリューム６５０及びシルエット７２４は重なり合わないので、ステップＳ１３−６でスタックから取り出されたボリューム中の３Ｄ点はいずれも、シルエット７２４上、又は、その内部の点へと投影されない。このため、３Ｄ点は、被写体オブジェクト２１０の表面の頂点を表すことができない。従って、ステップＳ１３−６でスタックから取り出されたボリュームは、廃棄されることになる。
【０１５２】
ボリューム状態のケースＢ：  ちょうど３つの画像がシルエットと２Ｄ投影ボリューム６５０との間で関係４（図１７ｄを参照して説明）を有する場合、状態を「３Ｄ点の計算」に設定する。その他の全ての画像における関係は関係７である（図１７ｇを参照して説明）。
【０１５３】
図１０を参照して先に説明したように、被写体オブジェクト２１０の表面の３Ｄ頂点は、それぞれ別々のシルエットを元にした３つの平面三角形の共通部分によって、あるいは、同じシルエットを元にした２つの三角形と別のシルエットを元にした１つの三角形との共通部分によって定義される。
【０１５４】
図１７ｄを参照して説明した２Ｄ投影ボリューム６５０との関係４を有する３つのシルエットが見出され、その他の全ての画像中のシルエットと２Ｄ投影ボリューム６５０との間の関係が図１７ｇを参照して説明した関係７であるとき、この実施形態では、別々のシルエットを元にした３つの三角形が３Ｄ点で交わる場合が識別される。具体的には、関係４は、２Ｄ投影ボリューム６５０中にシルエットの単一のエッジしかないことを識別するので、２Ｄ投影ボリューム６５０とこの関係を有する３つのシルエットは、ステップＳ１３−６でスタックから取り出されたボリューム中の３Ｄ点で交わる可能性がある３つの平面三角形（２Ｄ投影ボリューム６５０と交わる３つのエッジにより定義される）を識別する。加えて、その他の全ての画像中のシルエットと投影ボリューム６５０との間の関係が関係７であるので、３つの平面三角形の共通部分により定義される３Ｄ点は、全画像中においてシルエット内の点へと投影され、被写体オブジェクト２１０の表面の頂点を表す（３Ｄ点がステップＳ１３−６でスタックから取り出されたボリューム中に実際に位置し、このボリュームの外側には位置しない場合）。
【０１５５】
ボリューム状態のケースＣ：  １つ（１つのみ）の画像がシルエットと２Ｄ投影ボリューム６５０との間で関係１（図１７ａを参照して説明）を有し、１つ（１つのみ）の画像が、関係４（図１７ｄを参照して説明）を有し、その他の全ての画像における関係が関係７である（図１７ｇを参照して説明）場合、状態を「３Ｄ点の計算」に設定する。
【０１５６】
このケースＣは、同じシルエットを元にした２つの平面三角形と別のシルエットを元にした１つの平面三角形とが交わる場合を表す。具体的には、図１７ａを参照して説明した関係、すなわち、２Ｄ投影ボリューム６５０に単一のシルエット頂点しか存在しない関係は、３Ｄ点で交わる同じシルエットを元にした２つの平面三角形（これらの平面三角形は、２Ｄ投影ボリューム６５０中の頂点７００で交わるシルエットエッジにより定義される）を定義する。図１７ｄを参照して説明した関係では、３Ｄ点で交わる第２のシルエットを元にした平面三角形（すなわち、２Ｄ投影ボリューム６５０と交わる直線の端点を通る平面三角形）を定義する。上述のように、その他の全ての画像におけるシルエットと２Ｄ投影ボリューム６５０との間の関係は、図１７ｇを参照して説明した関係７であるので、第１のシルエットを元にした２つの平面三角形と第２のシルエットを元にした平面三角形との共通部分により定義される３Ｄ点は、その他の全ての画像中においてシルエット内の点に投影されるので、被写体オブジェクト２１０の表面の頂点を表すことになる（３Ｄ点がステップＳ１３−６でスタックから取り出されたボリューム内に実際に位置する場合）。
【０１５７】
ボリューム状態のケースＤ：  その全てにおいて、ステップＳ１３−６でスタックから取り出されたボリュームが相互に交わり、被写体オブジェクト２１０の表面に位置する３Ｄ点を定義するのに十分な数の平面三角形（すなわち、３つ）を含まないことを示す（従って、ボリュームが廃棄されることになる）以下の状況のいずれかが起こる場合、状態を「ボリュームの廃棄」に設定する：
（i）  １つ（１つのみ）の画像が、シルエットと２Ｄ投影ボリューム６５０との間で関係１（図１７ａを参照して説明）を有し、その他の全ての画像における関係が関係７である（図１７ｇを参照して説明）。
（ii）  １つ又は２つ（２つ以下）の画像が、シルエットと２Ｄ投影ボリューム６５０との間で関係４（図１７ｄを参照して説明）を有し、その他の全ての画像における関係が関係７である（図１７ｇを参照して説明）。
（iii）  全ての画像が、シルエットと２Ｄ投影ボリューム６５０との間で関係７（図１７ｇを参照して説明）を有する。
【０１５８】
ボリューム状態のケースＥ：  １つ（１つのみ）の画像が、シルエットと２Ｄ投影ボリューム６５０との間で関係３（図１７ｃを参照して説明）又は関係５（図１７ｅを参照して説明）を有し、その他の全ての画像における関係が関係７である（図１７ｇを参照して説明）場合、状態を「ボリュームの廃棄」に設定する。この場合、１つのみの画像が、２Ｄ投影ボリューム６５０内にシルエット頂点又はシルエットエッジを含む。しかし、上述のボリューム状態のケースＢ又はボリューム状態のケースＣが発生する（結果として３Ｄ点の計算を行なう）には、シルエットの頂点又はエッジが２Ｄ投影ボリューム６５０内に位置する画像が少なくとも２つ存在しなければならない。従って、３Ｄ点計算器８４は、ステップＳ１３−６でスタックから取り出されたボリュームを廃棄すべきであると判定するが、それは、ボリュームを再分割により更に処理しても、既にシルエットの一部が２Ｄ投影ボリューム６５０と交わっている１つの画像を除くいずれの画像においても、同様の状況に至る可能性がないからである。
【０１５９】
ボリューム状態のケースＦ：  ３つ以上の画像がシルエットと２Ｄ投影ボリューム６５０との間で関係１、２、３、４又は５（図１７ａから図１７ｅを参照して説明）である場合、状態を「ボリュームの再分割」に設定する（３つ以上の画像における関係は、相互に同じであっても、異なっていても良い）。この場合、３Ｄ点計算器８４は、ステップＳ１３−６でスタックから取り出されたボリュームを再分割により更に処理すべきであると判定するが、それは、再分割により関係１、２、３、４又は５を有する３つ以上の画像においてボリューム状態のケースＢ又はボリューム状態のケースＣが起こる可能性があるからである。
【０１６０】
ボリューム状態のケースＧ：  １つ（１つのみ）の画像がシルエットと２Ｄ投影ボリューム６５０との間で関係５（図１７ｅを参照して説明）を有し、１つ（１つのみ）の画像が、関係４（図１７ｄを参照して説明）又は関係５（図１７ｅを参照して説明）を有し、その他の全ての画像における関係が関係７である（図１７ｇを参照して説明）場合、状態を「ボリュームの廃棄」に設定する。この場合、ステップＳ１３−６でスタックから取り出されたボリュームを更に処理しても、シルエットが必要とされる３つの画像においてではなく、２つの画像においてのみ２Ｄ投影ボリューム６５０と交わるので、上述のボリューム状態のケースＢ（３Ｄ点が計算されることになる）に至る可能性はない。加えて、ステップＳ１３−６でスタックから取り出されたボリュームを更に処理しても、シルエットの頂点が関係４又は関係５を有する画像のいずれにおいても２Ｄ投影ボリューム６５０内に位置せず、ボリュームを再分割し、より小さいボリュームの処理を行なっても、シルエットの頂点が２Ｄ投影ボリューム６５０内にあるようなケースに至ることがないので、結果として上述のボリューム状態のケースＣ（３Ｄ点が計算されるもう１つの場合）になることはない。従って、この場合、３Ｄ点計算器８４は、ステップＳ１３−６でスタックから取り出されたボリュームを廃棄すべきであると判定する。
【０１６１】
ボリューム状態のケースＨ：  １つ（１つのみ）の画像がシルエットと２Ｄ投影ボリューム６５０との間で関係１、２又は３（図１７ａから図１７ｃを参照して説明）を有し、１つ（１つのみ）の画像が関係１、２、３、４又は５（図１７ａから図１７ｅを参照して説明）を有し、その他の全ての画像における関係が関係７である（図１７ｇを参照して説明）場合、状態を「ボリュームの再分割」に設定する。この場合、３Ｄ点計算器８４は、ボリュームのより小さい部分を処理することにより３Ｄ点が計算される上述のボリューム状態のケースＣに至る可能性があるので、ステップＳ１３−６でスタックから取り出されたボリュームを再分割すべきであると判定する。
【０１６２】
この実施形態において、図１７ａから図１７ｈを参照して説明したどのタイプの関係が各シルエットと２Ｄ投影ボリューム６５０との間に存在するか、及び、識別された関係に基づいて、ステップＳ１３−６でスタックから取り出されたボリュームを再分割すべきか、廃棄すべきか、あるいは、３Ｄ点を計算すべきかを定義する上述のボリューム状態のケースのうちのどれが存在するかを判定するために３Ｄ点計算器８４により実行される処理ステップの詳細な説明を行なう。
【０１６３】
図１５を再度参照すると、ステップＳ１５−１２において、３Ｄ点計算器８４は、処理すべき別のカメラ画像（すなわち、ステップＳ１５−２においてボリュームの角が投影される別の画像）が存在するか否かを判定する。ステップＳ１５−１２が初めて実行される場合は、全てのカメラ画像が未処理の状態で残存するので、処理はステップＳ１５−１４へと進む。しかし、その後の反復では、全てのカメラ画像の処理が終了すると、処理は後述のステップＳ１５−６６へと進む。
【０１６４】
ステップＳ１５−１４において、３Ｄ点計算器８４は、処理すべき次のカメラ画像を考慮する。
【０１６５】
後続の処理において、３Ｄ点計算器８４は、現在考慮中の画像中のシルエットとステップＳ１５−２で生成された画像へのボリュームの２Ｄ投影６５０との間の関係を検査し、図１７ａから図１７ｈを参照して説明した８つの異なる予想される関係のうちのいずれをシルエット及び投影ボリュームが有するのかを判定する。先に説明したように、この関係は、単独で、あるいは、その他の画像における投影ボリュームとシルエットとの間の関係と関連させて使用し、ボリュームを廃棄すべきか又は再分割すべきか、あるいは、３Ｄ点を計算／検査して被写体オブジェクト２１０の表面に位置するか否かを判定すべきかを判定する。
【０１６６】
具体的には、ステップＳ１５−１６において、３Ｄ点計算器８４は、現在考慮中の画像中のシルエットの線分のうちのどれが、２Ｄ投影ボリューム６５０と交わるのかを判定し、その線分に「候補エッジ」としてラベル付けする。この処理により、後続の検査を実行する必要がある直線状のエッジの数が削減される。また、この処理では、ステップＳ８−４で予め生成された４分木データが利用される。
【０１６７】
図１８は、ステップＳ１５−１６で３Ｄ点計算器８４により実行される処理動作を示す。
【０１６８】
図１８のステップＳ１８−２において、３Ｄ点計算器８４は、２Ｄ投影ボリュームの周囲の画像の側面に平行な側面を有するバウンディングボックスを定義する。これは、一例として図１９に示されており、点線は２Ｄ投影ボリューム６５０の周囲で定義されるバウンディングボックス８００を表す。
【０１６９】
ステップＳ１８−４からＳ１８−１６において、３Ｄ点計算器８４は、ステップＳ８−４で生成された４分木のノードを考慮し、ステップＳ１８−２で生成された投影ボリュームのバウンディングボックスと交わらないノード中にあるシルエット線分を廃棄し、４分木の残りのノード中のシルエット線分を「候補エッジ」としてラベル付けするための処理を実行する。
【０１７０】
具体的には、ステップＳ１８−４において、３Ｄ点計算器８４は、現在考慮中の画像に対するシルエットエッジのバウンディングボックスデータを格納するステップＳ８−４で生成された４分木の次のノードを考慮する（ステップＳ１８−４が初めて実行される場合、これはルートノードである）。
【０１７１】
ステップＳ１８−６において、３Ｄ点計算器８４は、現在考慮中のノードにより定義される画像の領域が、ステップＳ１８−２で生成された投影ボリュームのバウンディングボックス８００と重なり合うか否かを判定する。すなわち、３Ｄ点計算器８４は、投影ボリュームのバウンディングボックス８００のいずれかの部分がノードにより定義される領域内に位置するか否かを検査する。
【０１７２】
一例として図１９を参照すると、画像の３つの領域８１０、８１２及び８１４が示されている。４分木のルートノードは、画像全体（すなわち、領域８１０、８１２及び８１４）であるので、ルートノードとバウンディングボックス８００との間には重なりが存在する。
【０１７３】
ルートノードの第１の子ノードは領域８１０であり、ルートノードの第２の子ノードは領域８１２＋領域８１４である。双方の場合において、子ノードとバウンディングボックス８００との間には重なりが存在する。しかし、第２の子ノードの各子ノード（すなわち、領域８１２及び８１４）を考慮するとき、投影ボリュームのバウンディングボックス８００とノード８１４との間には重なりが存在するが、バウンディングボックス８００とノード８１２との間には重なりは存在しない。
【０１７４】
ステップＳ１８−６において、現在考慮中のノードが、投影ボリュームのバウンディングボックスと交わらないと判定される場合、ステップＳ１８−８において、３Ｄ点計算器８４は、現在考慮中のノードの子又は更なる子孫を未処理ノードのリストから削除する（子と更なる子孫は全て親の領域内に位置するので、親が投影ボリュームのバウンディングボックスと交わらない場合、これと交わる可能性はない）。従って、図１９の例を参照すると、ノード８１２がステップＳ１８−４で考慮されており、ノードが投影ボリュームのバウンディングボックス８００と重なり合わないことがステップＳ１８−６で判明した場合、ステップＳ１８−８において、ノード８１２の子及び更なる子孫は、未処理ノードから削除され、実行すべき処理量が削減される。
【０１７５】
これに対し、ステップＳ１８−６において現在考慮中のノードが投影ボリュームのバウンディングボックス８００と重なり合うと判定される場合、ステップＳ１８−１０において、３Ｄ点計算器８４は、ノードに子があるか否かを判定する。
【０１７６】
ステップＳ１８−１０においてノードに子があると判定される場合、ステップＳ１８−１２において次の子ノードが考慮され、処理はステップＳ１８−６へと戻る。ここで、子ノードが投影ボリュームのバウンディングボックス８００と重なり合うか否かが判定される。４分木内において、投影ボリュームのバウンディングボックス８００と重なり合い、子ノードをもたないノードに到達するまでステップＳ１８−６、Ｓ１８−１０及びＳ１８−１２が反復的に実行される。このようなノードに到達したとき、処理はステップＳ１８−１４へと進む。ここで、３Ｄ点計算器８４は、ノード中の各エッジのバウンディングボックスを検査し、各エッジが２Ｄ投影ボリューム６５０のバウンディングボックス８００と交わるか否かを判定する。続いて、３Ｄ点計算器８４は、投影ボリューム６５０のバウンディングボックス８００と交わらないバウンディングボックスを有するノード中の各エッジに「候補エッジ」としてラベル付けする。
【０１７７】
ステップＳ１８−１６において、３Ｄ点計算器８４は、４分木に更に別のノードが存在するか否かを判定し、以上のような方法で各ノードを処理し終わるまでステップＳ１８−４からＳ１８−１６が繰り返される。
【０１７８】
このように、３Ｄ点計算器８４は、投影ボリュームのバウンディングボックスと交わらない４分木の全てのノードを廃棄し、残りのノード中のシルエットの線分に「候補エッジ」（すなわち、２Ｄ投影ボリューム６５０自体と交わる可能性があるエッジ）としてラベル付けする。
【０１７９】
図１５を再度参照すると、ステップＳ１５−１８において、３Ｄ点計算器８４は、どの候補エッジの端点（すなわち、ステップＳ１５−１６で識別された第１の候補エッジがシルエット中の第２の候補エッジと交わる点）が２Ｄ投影ボリューム６５０内に位置するかを判定し、このような端点に「検証済頂点」としてラベル付けする。従って、ステップＳ１５−１８の処理では、２Ｄ投影ボリューム６５０内に図１７ａ、１７ｂ及び１７ｃの点７００、７０２、７０６、７０８、７１０及び７１２（これらの点は「検証済頂点」としてラベル付けされる）などの点が存在するか否かが判定される。
【０１８０】
図２０は、ステップＳ１５−１８において３Ｄ点計算器８４により実行される処理動作を示す。
【０１８１】
図２０のステップＳ２０−２において、３Ｄ点計算器８４は、検証済頂点の数を表すカウンタ「ｎｖｖ」を０に等しく設定する。
【０１８２】
ステップＳ２０−４において、３Ｄ点計算器８４は、次の候補エッジの第２の端点を考慮する（ステップＳ２０−４が初めて実行される場合、これは最初の候補エッジである）。後続の処理において、端点が検査され、２Ｄ投影ボリューム６５０内に位置するか否かが判定される。端点は、（閉じている）各シルエットがエッジ（ｐ１，ｐ２），（ｐ２，ｐ３），．．．．．，（ｐｎ，ｐ１）から成る（ｐ１からｐｎは端点）ように順序づけられているので、それぞれの第２の端点を考慮／検査するだけで良い。従って、端点（ｐ，ｑ）間の線分が候補エッジである場合、あるｘに対して同様に候補エッジである端点（ｘ，ｐ）間のエッジが存在するであろう。なぜなら、シルエット中のこれらの線分のバウンディングボックスが点ｐで交わるために、第１の端点を検査する必要がないからである。
【０１８３】
ステップＳ２０−６において、３Ｄ点計算器８４は、現在考慮中の端点が２Ｄ投影ボリューム６５０内に位置するか否かを判定する。この実施形態では、“Graphics Gems”（IV、１６〜４６ページ、ISBN 0-12-336155-9）に記載される各方法のうちの１つのような従来の方法を使用して、各投影面に対して端点を検査することで端点がボリュームの６つの投影面のいずれかの内部にあるか否かを判定することによってこれが実行される。
【０１８４】
ステップＳ２０−６において、端点が２Ｄ投影ボリューム内にあると判定される場合、ステップＳ２０−８において、３Ｄ点計算器８４は、端点に「検証済頂点」としてラベル付けし、ステップＳ２０−１０において、カウンタｎｖｖの値を１だけ増分する。
【０１８５】
これに対し、ステップＳ２０−６で端点が２Ｄ投影ボリューム内に位置しないと判定される場合、ステップＳ２０−８及びＳ２０−１０は省略される。
【０１８６】
ステップＳ２０−１２において、３Ｄ点計算器８４は、カウンタｎｖｖの値が１より大きいか否かを判定する。
【０１８７】
ステップＳ２０−１２において、カウンタｎｖｖの値が１より大きいと判定される場合、投影ボリュームは２つ以上の線分の頂点を含むので、図１７ｃを参照して説明した関係３（又は図１７ｆを参照して説明した関係６）が識別され、ボリューム中に更に別の線分の頂点が存在するか否かを判定する処理を更に実行する必要がなくなる。従って、処理はステップＳ２０−１４へと進み、２つ以上の検証済頂点が識別されたことを示すためのフラグが設定される。
【０１８８】
これに対し、ステップＳ２０−１２においてカウンタｎｖｖの値が１以下であると判定される場合、処理はステップＳ２０−１６へと進み、ここで、３Ｄ点計算器８４は、処理すべき別の候補エッジが存在するか否かを判定する。
【０１８９】
ステップＳ２０−１２においてカウンタｎｖｖの値が１より大きいと判定されるまで、あるいは、ステップＳ２０−１６において全ての候補エッジの処理が終了したと判定されるまで、ステップＳ２０−４からＳ２０−１６が繰り返される。
【０１９０】
ステップＳ２０−１６において、候補エッジの全ての処理が終了したと判定される場合、処理はステップＳ２０−１８へと進み、ここで、３Ｄ点計算器８４は、カウンタｎｖｖの値を読み取り、カウンタｎｖｖにより定義される検証済頂点の数によって、識別された検証済頂点の数が０又は１であることを示すためのフラグを設定する。
【０１９１】
１つの検証済頂点が存在する場合、シルエットと投影ボリュームとの間の関係は、図１７ａを参照して説明した関係１、及び、図１７ｂを参照して説明した関係２のいずれかであり、後述するように、これらの関係のうちのどちらが実際に存在するかを判定するための更なる検査が実行される。
【０１９２】
検証済頂点の数が０である場合、図１７ｄ、１７ｅ、１７ｇ及び１７ｈをそれぞれ参照して説明した関係４、５、７及び８のうちのどれが２Ｄ投影ボリューム６５０と現在考慮中のシルエットとの間の関係であるかを判定するための検査が実行される。
【０１９３】
再度図１５を参照すると、ステップＳ１５−２０において、３Ｄ点計算器８４は、ステップＳ２０−１４又はステップＳ２０−１８で設定されたフラグの値を読み取り、検証済頂点の数を判定する。
【０１９４】
ステップＳ１５−２０において、２つ以上の検証済頂点が存在すると判定される場合、ステップＳ１５−２２において、３Ｄ点計算器８４は、少なくとも１つの検証済頂点が見出されたアクティブなカメラの台数を定義するカウンタｎｖの値を１だけ増分し、フラグeitherSubdivideOrDiscardの値を「真」に設定する。フラグeitherSubdivideOrDiscardが「真」に設定されるのは、先に説明したように、２Ｄ投影ボリューム６５０に２つ以上の検証済頂点が存在する場合、投影ボリュームとシルエットとの間の関係が、図１７ｃを参照して説明した関係３、又は、図１７ｆを参照して説明した関係６であるからである。この場合、ステップＳ１３−６でスタックから取り出されたボリュームは、後続の処理において、その他の画像中における２Ｄ投影ボリューム６５０とシルエットとの間の関係によって、再分割又は廃棄されることになる。
【０１９５】
ステップＳ１５−２６において、３Ｄ点計算器８４は、ステップＳ１３−６でスタックから取り出されたボリュームと交わる平面三角形の数を定義するカウンタｎｐの値が後述の検査で使用される閾値３より大きくなるように、カウンタｎｐの値を４だけ増分する。
【０１９６】
処理はステップＳ１５−２へと戻って残りのシルエットを処理し、ステップＳ１３−６でスタックから取り出されたボリュームを再分割すべきか、あるいは、廃棄すべきかを判定する。
【０１９７】
再度ステップＳ１５−２０に戻ると、１つの検証済頂点が存在すると判定される場合、処理はステップＳ１５−２８へと進み、ここで、３Ｄ点計算器８４は、現在処理中のシルエットが位置するカメラを識別するデータを格納する。
【０１９８】
ステップＳ１５−３０において、３Ｄ点計算器８４は、少なくとも１つの検証済頂点が検出されたアクティブなカメラの台数を定義するカウンタｎｖの値を１だけ増分し、ステップＳ１５−３２において、ステップＳ１３−６でスタックから取り出されたボリュームと交わる平面の数を定義するカウンタｎｐの値を２だけ増分する（検証済頂点で交わる２本の線分がボリュームと交わる平面三角形を定義するためである）。
【０１９９】
ステップＳ１５−３４において、３Ｄ点計算器８４は、カウンタｎｐの値が３以下であるか否かを判定する。
【０２００】
ステップＳ１５−３４において、カウンタｎｐの値が３以下であると判定される場合、３Ｄ点計算器８４は、検証済頂点で交わる２本の候補エッジを定義するデータを格納する。
【０２０１】
これに対し、ステップＳ１５−３４において、カウンタｎｐの値が３より大きいと判定される場合、ステップＳ１５−３６は省略される。ｎｐカウンタの値が３より大きいことは、スタックから取り出されたボリューム内に少なくとも４つの平面三角形が存在することを示すので、上述のボリューム状態のケースＢ又はボリューム状態のケースＣが起こる可能性がなく、３Ｄ点を計算するのに使用されない以上、候補エッジを定義するデータを格納する必要がないからである。
【０２０２】
ステップＳ１５−３６の終了後、あるいは、ステップＳ１５−３４においてカウンタｎｐの値が３より大きいと判定される場合、処理はステップＳ１５−１２へと戻り、次の画像を考慮する。
【０２０３】
再度ステップＳ１５−２０に戻ると、現在処理中の画像中に検証済頂点が存在しないと判定される場合、処理はステップＳ１５−３８へと進む。ここで、３Ｄ点計算器８４は、２Ｄ投影ボリューム６５０と交わる候補エッジがあるとすれば、どのエッジであるかを判定し、投影ボリュームと交わる候補エッジに「検証済エッジ」としてラベル付けする。
【０２０４】
図２１は、ステップＳ１５−３８で３Ｄ点計算器８４により実行される処理動作を示す。
【０２０５】
図２１のステップＳ２１−２において、３Ｄ点計算器８４は、検証済エッジの本数を表すカウンタ「ｎｖｅ」を０に等しく設定する。
【０２０６】
ステップＳ２１−４において、３Ｄ点計算器８４は、ステップＳ１５−１６で先に識別された次の候補エッジを考慮する（ステップＳ２１−４が初めて実行される場合、これは最初の候補エッジである）。
【０２０７】
ステップＳ２１−６において、３Ｄ点計算器８４は、ステップＳ２１−４で選択された候補エッジの一部が２Ｄ投影ボリューム６５０と交わるか否かを判定する。
【０２０８】
具体的に説明すると、この実施形態では、ステップＳ２１−６において、３Ｄ点計算器８４は、“Graphics Gems”（II、７〜９ページ、ISBN 0-12-064481-9）に記載される方法のような従来の共通部分検査方法を使用して、２Ｄ投影ボリューム６５０の１２本のエッジの各々に対して候補エッジを検査する。
【０２０９】
ステップＳ２１−６において、候補エッジが２Ｄ投影ボリューム６５０と交わると判定される場合、ステップＳ２１−８において、３Ｄ点計算器８４は、その候補エッジに「検証済エッジ」としてラベル付けし、ステップＳ２１−１０において、カウンタｎｖｅの値を１だけ増分する。
【０２１０】
これに対し、ステップＳ２１−６において、候補エッジが２Ｄ投影ボリューム６５０と交わらないと判定される場合、ステップＳ２１−８及びＳ２１−１０が省略される。
【０２１１】
ステップＳ２１−１２において、３Ｄ点計算器８４は、カウンタｎｖｅの値が１より大きいか否かを判定する。
【０２１２】
ステップＳ２１−１２において、カウンタｎｖｅの値が１より大きいと判定される場合、処理はステップＳ２１−１４へと進む。ここで、２本以上の検証済エッジが識別されたことを示すフラグが設定される。
【０２１３】
これに対し、ステップＳ２１−１２において、カウンタｎｖｅの値が１以下であると判定される場合、処理はステップＳ２１−１６へと進み、ここで、３Ｄ点計算器８４は、処理すべき別の候補エッジが存在するか否かを判定する。
【０２１４】
ステップＳ２１−１２において、カウンタｎｖｅの値が１より大きいと判定されるまで、あるいは、ステップＳ２１−１６において全ての候補エッジの処理が終了したと判定されるまで、ステップＳ２１−４からＳ２１−１６が繰り返される。
【０２１５】
ステップＳ２１−１６において、全ての候補エッジの処理が終了したと判定される場合、処理はステップＳ２１−１８へと進む。ここで、３Ｄ点計算器８４は、カウンタｎｖｅの値を読み取り、カウンタｎｖｅにより定義される検証済エッジの本数によって、識別される検証済エッジの本数が１又は０であることを示すためのフラグを設定する。
【０２１６】
再度図１５を参照すると、ステップＳ１５−４０において、３Ｄ点計算器８４は、ステップＳ２１−１４又はステップＳ２１−１８で設定されたフラグの値を読み取り、検証済エッジの本数を判定する。
【０２１７】
１本より多い検証済エッジがある場合、シルエットと２Ｄ投影ボリューム６５０との間の関係は、図１７ｅを参照して説明した関係５である（関係が図１７ｂを参照して説明した関係２、図１７ｃを参照して説明した関係３、又は、図１７ｆを参照して説明した関係６でないように、２Ｄ投影ボリューム中にシルエットエッジの頂点が存在しないことが先にステップＳ１５−２０で確立されている）。この場合、処理はステップＳ１５−４２へと進み、ここで、３Ｄ点計算器８４は、少なくとも１本の検証済エッジが検出されたアクティブなカメラの台数を定義するカウンタｎｅの値を１だけ増分する。
【０２１８】
ステップＳ１５−４４において、３Ｄ点計算器８４は、フラグeitherSubdivideOrDiscardを「真」に設定する。これは、任意のシルエットと２Ｄ投影ボリューム６５０との間の関係が、図１７ｅを参照して説明した関係５である場合、上述のボリューム状態のケースＢ又はボリューム状態のケースＣ（３Ｄ点が計算されることになる）は起こり得ないからである。従って、ステップＳ１３−６でスタックから取り出されたボリュームは、その他の画像中における２Ｄ投影ボリューム６５０とシルエットとの間の関係によって、再分割すべきか、あるいは、廃棄すべきかが決まる。
【０２１９】
ステップＳ１５−４６において、３Ｄ点計算器８４は、後述の処理で使用される閾値３よりもカウンタｎｐの値が大きくなるように、ステップＳ１３−６でスタックから取り出されたボリュームと交わる平面の数を定義するカウンタｎｐの値を４だけ増分する。
【０２２０】
再度ステップＳ１５−４０に戻ると、検証済エッジの本数が１であると判定される場合、現在処理中のシルエットと２Ｄ投影ボリューム６５０との間の関係は、図１７ｄを参照して説明した関係４である。この場合、処理はステップＳ１５−４８へと進み、ここで、３Ｄ点計算器８４は、現在のシルエットを定義するデータを格納する。
【０２２１】
ステップＳ１５−５０において、３Ｄ点計算器８４は、少なくとも１つの検証済エッジが検出されたアクティブなカメラの台数を定義するカウンタｎｅの値を１だけ増分し、ステップＳ１５−５２において、ステップＳ１３−６でスタックから取り出されたボリュームと交わる平面の数を定義するカウンタｎｐの値を１だけ増分する。
【０２２２】
ステップＳ１５−５４において、３Ｄ点計算器８４は、カウンタｎｐの値が３以下であるか否かを判定する。
【０２２３】
ステップＳ１５−５４において、カウンタｎｐの値が３以下であると判定される場合、上述のボリューム状態のケースＢ又はボリューム状態のケースＣ（３Ｄ点が計算されることになる）が起こる可能性はまだあり、ステップＳ１５−５６において、３Ｄ点計算器８４は、検証済エッジを定義するデータを格納する。
【０２２４】
これに対し、ステップＳ１５−５４において、カウンタｎｐの値が３より大きいと判定される場合、上述のボリューム状態のケースＢとボリューム状態のケースＣのいずれも起こり得ないので、ステップＳ１５−５６が省略される。
【０２２５】
ステップＳ１５−５６が終了した後、あるいは、ステップＳ１５−５４においてカウンタｎｐの値が３より大きいと判定されるとき、処理はステップＳ１５−１２へと戻り、次のシルエットが存在する場合はそれを考慮する。
【０２２６】
ステップＳ１５−４０に戻ると、検証済エッジの本数が０の場合、現在処理中のシルエットと２Ｄ投影ボリューム６５０との間の関係は、図１７ｇを参照して説明した関係７、及び、図１７ｈを参照して説明した関係８のいずれかである。この場合、処理はステップＳ１５−５８へと進み、ここで、３Ｄ点計算器８４は、２Ｄ投影ボリューム６５０上の任意の点を選択する。具体的には、この実施形態において、３Ｄ点計算器８４は、投影ボリュームの隅の１つに対応する点を選択する。
【０２２７】
ステップＳ１５−６０において、３Ｄ点計算器８４は、ステップＳ１５−５８で選択された２Ｄ投影ボリューム６５０上の点が現在考慮中のシルエットの内側にあるか、あるいは、外側にあるかを判定する。
【０２２８】
ステップＳ１５−６０において、２Ｄ投影ボリューム６５０上の点がシルエットの内側にあると判定される場合、２Ｄ投影ボリューム６５０とシルエットとの間の関係は、図１７ｇを参照して説明した関係７である。この場合、処理はステップＳ１５−６２へと進む。ここで、３Ｄ点計算器８４は、現在のシルエットが位置するカメラをアクティブなカメラのリストから削除する（シルエットは、２Ｄ投影ボリューム６５０を包囲するので、子ボリュームを生成／検査する必要がないためである）。
【０２２９】
これに対し、ステップＳ１５−６０において、２Ｄ投影ボリューム６５０上の選択された点が、シルエットの外側に存在すると判定される場合、シルエットと２Ｄ投影ボリューム６５０との間の関係は、図１７ｈを参照して説明した関係８である。この場合、処理はステップＳ１５−６４へと進み、ここで、３Ｄ点計算器８４は、上述のケースＡが存在すると判明したので、ステップＳ１３−６でスタックから取り出されたボリュームの状態が「廃棄」であると判定されたことを示すためのフラグを設定する。
【０２３０】
ステップＳ１５−６４が実行された後、処理は図１３のステップＳ１３−１０へと戻る。これは、上述のボリューム状態のケースＡが存在することを判定するためには、３Ｄ点計算器８４は、２Ｄ投影ボリューム６５０と関係８を有する１つのシルエットのみを識別すれば良く、更に別の画像中の２Ｄ投影ボリューム６５０とシルエットとの間の関係を判定する必要がないからである。
【０２３１】
ボリューム状態のケースＡは、２Ｄ投影ボリューム６５０に対する全てのシルエットの検査が終了する前に、処理がステップＳ１３−１０へと戻る唯一のケースである。その他の全てのケースでは、次のシルエットがあれば、それを以上説明したように２Ｄ投影ボリューム６５０に対して検査することができるように、処理はステップＳ１５−１２へと戻る。
【０２３２】
具体的に説明すると、現在のシルエットと２Ｄ投影ボリューム６５０との間の関係が、関係８であると判明していない全ての場合において、更に別のシルエットを考慮するためステップＳ１５−１２へと戻るように処理は構成される。なぜなら、後続のシルエットが２Ｄ投影ボリューム６５０と関係８を有することが判明した場合、この関係のもつ優先度により、先に判定された全ての関係は無効になり、ステップＳ１３−６でスタックから取り出されたボリュームは廃棄されるからである。
【０２３３】
ステップＳ１５−１２において、現在のボリュームの２Ｄ投影ボリューム６５０に対する全てのシルエットの検査が終了したと判定される場合、処理はステップＳ１５−６６へと進む。
【０２３４】
ステップＳ１５−６６において、３Ｄ点計算器８４は、ステップＳ１３−６でスタックから取り出されたボリュームと交わる平面の数を定義するカウンタｎｐの値を読み取り、値が３未満か否かを判定する。
【０２３５】
ステップＳ１５−６６において、カウンタｎｐの値が３未満であると判定される場合、上述のボリューム状態のケースＤが識別される。尚、第１に、ボリューム状態のケースＡがステップＳ１５−６４で検出された場合、処理はステップＳ１５−６６には到達しないことと、第２に、ボリューム状態のケースＢ又はＣが存在する場合、カウンタｎｐの値は３に等しくなることと、第３に、画像中で２つ以上の検証済頂点又は２本以上の検証済エッジが検出されるとき、ステップＳ１５−２６又はＳ１５−４６でカウンタｎｐの値を４だけ増分する処理が行なわれるので、ボリューム状態のケースＤからＨのいずれかが存在する場合、カウンタｎｐの値は３より大きくなることとにより、ボリューム状態はケースＤ以外になり得ない。従って、ステップＳ１５−６６において、カウンタｎｐの値が３未満であると判定される場合、処理はステップＳ１５−６８へと進み、ここで、３Ｄ点計算器８４は、ボリュームを廃棄すべきであることを示すためのフラグを設定する。
【０２３６】
これに対し、ステップＳ１５−６６において、カウンタｎｐの値が３以上であると判定される場合、処理はステップＳ１５−７０へと進む。ここで、３Ｄ点計算器８４は、カウンタｎｐの値が３に等しいか否かを判定し、フラグeitherSubdivideOrDiscardを「偽」に設定する。
【０２３７】
ステップＳ１５−７０において、カウンタｎｐの値が３に等しく、フラグeitherSubdivideOrDiscardが「偽」に設定されている場合、ボリューム状態のケースＢ又はボリューム状態のケースＣが識別され、処理はステップＳ１５−７２へと進む。ここで、３Ｄ点計算器８４は、３Ｄ点を計算すべきであることを示すフラグを設定する。
【０２３８】
これに対し、ステップＳ１５−７０において、カウンタｎｐの値が３より大きく、及び／又は、フラグeitherSubdivideOrDiscardが「真」に設定されていると判定される場合、３Ｄ点計算器８４は、ステップＳ１３−６でスタックから取り出されたボリュームの状態が上述のボリューム状態のケースＥ、Ｆ、Ｇ又はＨのうちの１つであることを判定する。３Ｄ点計算器８４により実行される後続の処理により、（少なくとも１つの検証済頂点が検出されたアクティブなカメラの台数、及び、少なくとも１つの検証済エッジが検出されたアクティブなカメラの台数のそれぞれを定義する）カウンタｎｖ及びｎｅの値と以下に示す規則とに基づいて、これらのボリューム状態のケースのうちのどれが実際のボリューム状態のケースであるかが判定される：
（ａ）ｎｖ＋ｎｅの値において、子ボリュームは親ボリュームよりも増加することはない。
（ｂ）ｎｖ＋ｎｅの値において、子ボリュームは親ボリュームよりも増加することはない。
（ｃ）単一の候補頂点を含むボリュームは、カウンタ値（ｎｖ＝０、ｎｅ＝３）又は（ｎｖ＝１、ｎｅ＝１）を有する。
【０２３９】
具体的には、ステップＳ１５−７４において、３Ｄ点計算器８４は、少なくとも１つの検証済頂点が検出されたアクティブなカメラの台数を定義するカウンタｎｖの値と少なくとも１本の検証済エッジが検出されたアクティブなカメラの台数を定義するカウンタｎｅの値との合計が２未満であるか否かを判定する。
【０２４０】
ステップＳ１５−７４において、合計ｎｖ＋ｎｅが２未満であると判定される場合、ボリューム状態のケースＥが識別され、処理はステップＳ１５−７６へと進む。ここで、３Ｄ点計算器８４は、ステップＳ１３−６でスタックから取り出されたボリュームを廃棄すべきであることを示すフラグを設定する。
【０２４１】
これに対し、ステップＳ１５−７４において、合計ｎｖ＋ｎｅが２以上であると判定される場合、処理はステップＳ１５−７８へと進み、ここで、３Ｄ点計算器８４は、合計ｎｖ＋ｎｅが２より大きいか否かを判定する。
【０２４２】
ステップＳ１５−７８において、合計ｎｖ＋ｎｅの値が２より大きい場合、上述のボリューム状態のケースＦが識別され、処理はステップＳ１５−８０へと進む。ここで、３Ｄ点計算器８４は、ステップＳ１３−６でスタックから取り出されたボリュームを再分割すべきであり、再分割されたボリュームを更に処理することを示すためのフラグを設定する。
【０２４３】
これに対し、ステップＳ１５−７８において、合計ｎｖ＋ｎｅが２に等しいと判定される場合、処理はステップＳ１５−８２へと進み、ここで、少なくとも１つの検証済頂点が検出されたアクティブなカメラの台数を定義するカウンタｎｖの値が０に等しいか否かを判定する。
【０２４４】
ステップＳ１５−８２において、カウンタｎｖの値が０に等しいと判定される場合、ボリューム状態のケースＧが識別され、処理はステップＳ１５−８４へと進む。ここで、３Ｄ点計算器８４は、ステップＳ１３−６でスタックから取り出されたボリュームを廃棄すべきであることを示すためのフラグを設定する。
【０２４５】
これに対し、ステップＳ１５−８２において、カウンタｎｖの値が０に等しくないと判定される場合、ボリューム状態のケースＨが識別され、処理はステップＳ１５−８６へと進む。ここで、３Ｄ点計算器８４は、ステップＳ１３−６でスタックから取り出されたボリュームを再分割すべきであり、結果として生じるより小さいボリュームを更に処理することを示すためのフラグを設定する。
【０２４６】
図１５を参照して説明した処理を行なった結果、３Ｄ点計算器８４は、ステップＳ１３−６でスタックから取り出されたボリュームに対して存在するボリューム状態のケースを判定し、どの後続の処理をボリュームに対して実行すべきかを示す判定されたボリューム状態のケースに従ってフラグを設定している。
【０２４７】
図１３を再度参照すると、以上説明したようにボリュームの状態を判定するための処理を実行した後、ステップＳ１３−１０において、３Ｄ点計算器８４は、状態を「頂点を計算する」とすべきか否かを判定する。
【０２４８】
ステップＳ１３−１０において、頂点を計算すべきであると判定される場合、処理はステップＳ１３−１２へと進み、頂点が計算される。計算すべきであると判定されない場合、ステップＳ１３−１２が省略される。
【０２４９】
図２２は、ステップＳ１３−１２で３Ｄ点計算器８４が頂点を計算するのに実行する処理動作を示す。
【０２５０】
図２２のステップＳ２２−２において、３Ｄ点計算器８４は、現在のボリュームと交わる３本のシルエットエッジ（すなわち、ステップＳ１５−３６及び／又はＳ１５−５６で格納されるデータにおいて識別されるエッジ）を考慮し、各々がエッジのうちの１本とそのエッジを含む画像が記録されたときのカメラ２３０の焦点とを含む３つの平面の共通部分の３Ｄ点を計算する。言い換えると、３Ｄ点計算器８４は、カメラ焦点から格納されたシルエットエッジの端点を通って光線を投影することによって定義される平面を含む各平面の共通部分の３Ｄ点を計算する。従って、図１０の例を参照すると、平面５２２、５２４及び５２６を含む３つの平面の共通部分５２８の３Ｄ点が計算される。この処理は、従来の平面共通部分アルゴリズムを使用して実行される。
【０２５１】
ステップＳ２２−４において、３Ｄ点計算器８４は、ステップＳ２２−２で計算された３Ｄ点がステップＳ１３−６でスタックから取り出されたボリュームの内側にあるか否かを検査する。ボリュームと交わる各平面は、必ずしもボリューム中の３Ｄ点で相互に交わる必要がないので、この検査が必要である。
【０２５２】
ステップＳ２２−４において、計算された３Ｄ点がボリュームの内側にあると判定される場合、処理はステップＳ２２−６へと進む。ここで、３Ｄ点計算器８４は、計算された３Ｄ点を被写体オブジェクト２１０の表面の頂点を表す３Ｄ点のリストへと加える。
【０２５３】
これに対し、ステップＳ２２−４において、計算された３Ｄ点がボリュームの外側にあると判定される場合、ステップＳ２２−６は省略される。
ステップＳ２２−８において、３Ｄ点計算器８４は、処理が完了しているのでステップＳ１３−６でスタックから取り出されたボリュームを廃棄すべきであることを示すためにフラグを設定する。
【０２５４】
図１３を再度参照すると、ステップＳ１３−１４において、３Ｄ点計算器８４は、ステップＳ１３−６でスタックから取り出されたボリュームの状態が「廃棄」及び「再分割（subdivide）」のいずれに設定されているかを判定する。
【０２５５】
状態が「廃棄」に設定されている場合（ステップＳ１３−８での処理により、あるいは、ステップＳ１３−１２においてステップＳ２２−８の結果として設定される可能性がある）、ステップＳ１３−６において、３Ｄ点計算器８４は、ボリュームを廃棄する。
【０２５６】
これに対し、ボリュームの状態が「再分割」に設定される場合、ステップＳ１３−１８において、３Ｄ点計算器８４は、ボリュームを再分割し、子ボリュームをステップＳ１３−４で作成されたスタックの最上部に加える。この実施形態では、ステップＳ１３−１８でのボリュームの再分割は、８つの新規の子ボリュームを生成するためのボリュームの２値的な再分割である。
ステップＳ１３−１６又はステップＳ１３−１８に引き続いて、処理はステップＳ１３−２０へと進む。ここで、３Ｄ点計算器８４は、スタックに別のボリューム（ステップＳ１３−１８で加えられた子ボリュームを含む）が存在するか否かを判定する。
【０２５７】
以上説明したようにスタック上の各ボリュームを処理し終わるまで、ステップＳ１３−６からステップＳ１３−２０が繰り返される。
【０２５８】
このように処理を実行した結果、３Ｄ点計算器８４は、被写体オブジェクト２１０の表面の頂点を表す３Ｄ空間中の１組の点を生成している。
【０２５９】
再度図８を参照すると、ステップＳ８−８において、多角形生成器８６は、３Ｄ点計算器８４により生成された３Ｄ点を連結し、被写体オブジェクト２１０の表面を表す多角形メッシュを生成する。
【０２６０】
図２３は、ステップＳ８−８で多角形生成器８６により実行される処理動作を示す。
【０２６１】
図２３のステップＳ２３−２において、多角形生成器８６は、生成すべき多角形メッシュ中の各多角形に対して平面データを生成し、３Ｄ点計算器８４により生成された各３Ｄ点に対していわゆる「シグネチャ」を判定する。
【０２６２】
図２４を参照して説明すると、被写体オブジェクト２１０の表面を近似するために多角形生成器８６により生成される各多角形は、シルエット中の線分の端点とカメラ２３０の焦点（図１０を参照して説明）とを通る線により定義される三角形の平面に位置する。従って、例えば、多角形９００は、オブジェクトシルエット中の線分の端点９２０及び９３０とステップＳ４−６でカメラ計算器５０により計算されたカメラ焦点の位置９４０とを通る線により定義される三角形９１０の平面に位置する。
【０２６３】
ステップＳ２３−２において、多角形生成器８６は、各多角形平面に固有のＩＤを割り当てると共に、各多角形平面に対して法ベクトルｎを計算するための処理を実行する。
【０２６４】
上述のように、図２４の点９５０のようなステップＳ８−６で３Ｄ点計算器８４により計算される各３Ｄ点は、３つの多角形平面の共通部分により定義される。従って、ステップＳ２３−２において、多角形生成器８６は、３Ｄ点計算器８４により計算された各３Ｄ点に対して、３Ｄ点で交わる３つの平面の平面ＩＤから構成される「シグネチャ」を定義する。例えば、図２４において、３Ｄ点９５０のシグネチャは、平面９００、９６０及び９７０のＩＤから構成されるであろう。
【０２６５】
図２５は、ステップＳ２３−２において多角形生成器８６により実行される処理動作を示す。
【０２６６】
図２５のステップＳ２５−２において、多角形生成器８６は、ステップＳ８−６で３Ｄ点計算器８４が被写体オブジェクト２１０の３Ｄ頂点を計算する元となった次のシルエットエッジ（すなわち、ステップＳ８−２で生成されたシルエット中の線分）を考慮する（ステップＳ２５−２が初めて実行される場合、これは最初のシルエットエッジである）。
【０２６７】
ステップＳ２５−４において、多角形生成器８６は、ステップＳ２５−２で選択されたエッジのＩＤをそのエッジにより定義された平面（すなわち、エッジの端点とステップＳ４−６においてそのエッジが位置する画像に対してカメラ計算器５０により予め計算された焦点の位置とを通る線により定義される平面）に割り当てる。この実施形態では、ステップＳ２５−４で割り当てられたシルエットエッジＩＤは、ステップＳ８−２において予めエッジに割り当てられた固有のラベルから構成される。
【０２６８】
ステップＳ２５−６において、多角形生成器８６は、現在考慮中のシルエットエッジにより定義される平面に対する単位法ベクトルの方向を計算する。この実施形態では、単位法ベクトルは、ステップＳ４−６でカメラ計算器５０により計算された平面を定義する撮影パラメータを使用して、従来通りに計算される。
ステップＳ２５−８において、多角形生成器８６は、ステップＳ８−６において３Ｄ点計算器８４が被写体オブジェクト２１０の３Ｄ頂点を計算する元となった別のシルエットエッジが存在するか否かを判定する。以上説明したように各シルエットエッジを処理し終わるまで、ステップＳ２５−２からＳ２５−８が繰り返される。
【０２６９】
ステップＳ２５−１０において、多角形生成器８６は、ステップＳ８−６において３Ｄ点計算器８４により計算された次の３Ｄ点を考慮し（ステップＳ２５−１０が初めて実行される場合、これは最初の３Ｄ点である）、ステップＳ２５−１２において、３Ｄ点に対して３Ｄ点で交わる各平面の３つのＩＤ（ステップＳ２５−４で各平面に割り当てられたＩＤ）から構成されるシグネチャを定義する。
【０２７０】
ステップＳ２５−１４において、多角形生成器８６は、別の計算された３Ｄ点が存在するか否かを判定し、以上説明したように各３Ｄ点を処理し終わるまで、ステップＳ２５−１０からＳ２５−１４が繰り返される。
【０２７１】
再度図２３を参照すると、ステップＳ２３−４において、多角形生成器８６は、３Ｄ点計算器８４により予め計算された３Ｄ点をステップＳ２３−２で定義されたシグネチャに従って幾つかの組へと編成する。
【０２７２】
図２６は、ステップＳ２３−４で多角形生成器８６により実行される処理動作を示す。
【０２７３】
図２６のステップＳ２６−２において、多角形生成器８６は、ステップＳ８−６で３Ｄ点計算器８４により予め計算された次の３Ｄ点（ステップＳ２６−２が初めて実行される場合、これは最初の３Ｄ点である）を考慮する。
【０２７４】
ステップＳ２６−４において、多角形生成器８６は、ステップＳ２６−２で選択された点のシグネチャ（ステップＳ２５−１２で予め割り当てられたシグネチャ）を読み取り、ステップＳ２６−６において、シグネチャ中で定義された平面ごとに３Ｄ点を１組の点に割り当てる。すなわち、３Ｄ点は、３Ｄ点のシグネチャ中に定義された平面ごとに１組の３つの異なる組に割り当てられる。
【０２７５】
ステップＳ２６−８において、多角形生成器８６は、３Ｄ点計算器８４により計算された処理すべき別の３Ｄ点が存在するか否かを判定し、以上説明したように各３Ｄ点を処理し終わるまでステップＳ２６−２からＳ２６−８が繰り返される。
【０２７６】
図２６を参照して説明した処理の結果、被写体オブジェクト２１０のサーフェスモデル中の平面ごとに１組の点が生成される。各グループ中の点は、被写体オブジェクト２１０の表面のある平面上に位置する１つ以上の多角形を定義する。
【０２７７】
図２３を再度参照すると、ステップＳ２３−６において、多角形生成器８６は、被写体オブジェクト２１０の表面の一部を表す多角形を生成するために各組の３Ｄ点が連結される順番を判定する。
【０２７８】
ステップＳ２３−６において多角形生成器８６により実行される処理ステップの詳細を説明する前に、処理の原則を説明する。
【０２７９】
図２７において、図２４の例の４つの３Ｄ点及び５つの平面が拡大形式で示される。ステップＳ８−６で３Ｄ点計算器８４により計算された４つの３Ｄ点は、Ｖ１、Ｖ２、Ｖ３及びＶ４（Ｖ３は、図２４の点９５０に対応）とラベル付けされ、５つの平面は、ａ、ｂ、ｃ、ｄ及びｅ（平面ａ、ｃ及びｄは、図２４の例において平面９００、９６０及び９７０にそれぞれ対応する）とラベル付けされる。
【０２８０】
ステップＳ２３−６において多角形生成器８６により計算される各エッジ（連結）は、２つの３Ｄ点を連結する。どの３Ｄ点が連結されるかを判定するために、この実施形態において、多角形生成器８６は、３Ｄ点のシグネチャを利用する。具体的には、連結される２つの３Ｄ点は、ステップＳ２５−１２で割り当てられたシグネチャ中に、双方のシグネチャに共通する２つの平面ＩＤを有する。例えば、図２７の３Ｄ点Ｖ１のシグネチャは、｛ａ，ｂ，ｅ｝であり、３Ｄ点Ｖ２のシグネチャは、｛ａ，ｂ，ｃ｝である。従って、平面ＩＤのａ及びｂは、双方のシグネチャにおいて共通であり、図２７で示すように３Ｄ点Ｖ１及びＶ２間のエッジで交わる平面を定義するので、３Ｄ点Ｖ１及びＶ２間の連結を識別する。
【０２８１】
後述するように、ステップＳ２３−６の処理では、多角形生成器８６は、連結が開始３Ｄ点に戻るまで、以上説明したように３Ｄ点のシグネチャを使用して判定された多角形の周囲のエッジをたどることによって各多角形中の３Ｄ点間の連結を判定する。
【０２８２】
凸状の被写体オブジェクトの場合、ステップＳ２３−４で生成された３Ｄ点の各組（同じ平面上に位置する３Ｄ点から構成される）において、同じ２つの平面ＩＤをシグネチャ中に有する３Ｄ点は２つだけであると考えられるので、これは３Ｄ点を連結するのに実行しなければならない唯一の処理である。一例として図２７を参照すると、平面Ａに対する１組の３Ｄ点は、点Ｖ１、Ｖ２、Ｖ３及びＶ４から構成されるが、点Ｖ１及びＶ２のみが、シグネチャ中に平面ＩＤａ及びｂを有する。
【０２８３】
しかし、凸状でない被写体オブジェクト表面の各部分に対しては、シグネチャ中に同じ２つの平面ＩＤを有する３Ｄ点は２つより多くあるかもしれない。従って、３Ｄ点間の連結は、シグネチャのみに基づいて判定することはできない。
【０２８４】
一例として、図２８は、４つの３Ｄ点１０００、１０１０、１０２０及び１０３０が２つの平面９１０、１０４０の共通部分上に位置する例を示す。従って、この例では、４つの３Ｄ点１０００、１０１０、１０２０及び１０３０の各々のシグネチャは、平面９１０及び１０４０の平面ＩＤを含む。
【０２８５】
この問題に対処するために、この実施形態では、多角形生成器８６は、平面９１０及び１０４０の共通部分により定義されるエッジに沿って見出される順番に基づいて、対を成すように各点を連結することによって３Ｄ点間の連結を判定するための処理を実行する。この処理について以下で詳細に説明する。
【０２８６】
後述するように、この実施形態では、多角形生成器８６は、凸状でない被写体オブジェクト表面の各部分で発生する可能性のある更なる問題、すなわち、オブジェクト表面を表す２つ以上の多角形が同じ平面に位置するという問題に対処するための処理を実行する。
【０２８７】
この問題が発生する可能性のある第１の状況が、図２８の例で示される。ここでは、被写体オブジェクト表面の別々の部分を表す多角形１０５０及び１０６０が、共に平面９１０に位置する。
【０２８８】
２つ以上の多角形が同じ平面に位置する可能性がある第２の状況が、図２９に示される。この例では、多角形１１００は、オブジェクト表面の一部を表し、多角形１１１０は、被写体オブジェクト表面の穴を表す。
【０２８９】
ステップＳ２３−６で多角形生成器８６により実行される処理を詳細に説明する。
【０２９０】
図３０は、ステップＳ２３−６で多角形生成器８６により実行される処理動作を示す。
【０２９１】
図３０のステップＳ３０−２において、多角形生成器８６は、被写体オブジェクト２１０の３Ｄコンピュータモデルに対して空の多角形の組「Ｓ」を作成する。この組に対して、被写体オブジェクト２１０の表面の各部分を表す多角形が、計算される際に加えられる。
【０２９２】
ステップＳ３０−４において、多角形生成器８６は、ステップＳ２３−２で定義された次の平面「ｐ」を考慮し、ステップＳ２３−４において平面に対して生成された組Ｖｐ中の３Ｄ点を読み取る。
【０２９３】
ステップＳ３０−６において、多角形生成器８６は、ステップＳ３０−４で読み取られた組Ｖｐ中に３Ｄ点が存在するか否かを判定する。処理の反復の１回目では、３Ｄ点が組Ｖｐに存在するので、処理はステップＳ３０−８へと進む。しかし、後続の処理では、点に対する連結が計算された後に３Ｄ点は組Ｖｐから削除されるので、以降の反復では、ステップＳ３０−６において、組Ｖｐ中に３Ｄ点が残存しないと判定される可能性がある。この場合、処理は後述のステップＳ３０−５０へと進む。
【０２９４】
ステップＳ３０−８において、多角形生成器８６は、ステップＳ３０−２で作成された多角形の組「Ｓ」に新規の多角形データ構造（polygon data structure）「ｓ」を加える。多角形を定義するデータが、生成されたときにこれに入力される。また、ステップＳ３０−８において、多角形生成器８６は、多角形に対する法線を定義するために、現在考慮中の平面に対してステップＳ２５−６で予め計算された法ベクトルを定義するデータを多角形データ構造「ｓ」に格納する。
【０２９５】
ステップＳ３０−１０において、多角形生成器８６は、組Ｖｐから多角形の開始頂点「ｕ」として３Ｄ点を選択する（いずれの３Ｄ点を開始頂点「ｕ」として選択しても良い）。
【０２９６】
ステップＳ３０−１２において、多角形生成器８６は、頂点「ｕ」に対して現在処理中の頂点であることを示す現在頂点ポインタ「ｗ」を設定し、ステップＳ３０−１４において、開始頂点「ｕ」のシグネチャを読み取る。
【０２９７】
ステップＳ３０−１６において、多角形生成器８６は、ステップＳ３０−１４で読み取られたシグネチャ中に定義されている平面「ｑ」を選択する。この平面「ｑ」は、現在考慮中（ステップＳ３０−４で選択）の平面「ｐ」とは異なる。
【０２９８】
多角形生成器８６により実行される処理の理解を促進するために、図２７の例を参照する。一例として図２７を参照すると、ステップＳ３０−４で選択された平面「ｐ」が平面「ａ」であると想定する。セットＶｐ中の３Ｄ点は、３Ｄ点Ｖ１、Ｖ２、Ｖ３及びＶ４となる。
【０２９９】
また、３Ｄ点Ｖ２がステップＳ３０−１０において、開始頂点（ｕ）として選択されたとする。このとき、ステップＳ３０−１６において、多角形生成器８６は、平面ｂ及び平面ｃのいずれかを選択するが、それは、これらの平面の双方が、平面ａと共に３Ｄ点Ｖ２のシグネチャ中に定義されているからである。平面ｃがステップＳ３０−１６で選択されるものとする。
【０３００】
図３０を再度参照すると、ステップＳ３０−１８において、多角形生成器８６は、現在頂点「ｗ」（すなわち、現在考慮中の例では３Ｄ点Ｖ２）を組Ｖｐから削除し、ステップＳ３０−２０において、ステップＳ３０−８で生成された多角形データ構造「ｓ」にこの頂点を加え、多角形「ｓ」の頂点を定義する。
【０３０１】
ステップＳ３０−２２において、多角形生成器８６は、組Ｖｐ中に残存し、シグネチャ中にステップＳ３０−１６で選択された平面「ｑ」のＩＤを有する３Ｄ点の組「Ｖｐｑ」を判定する。
【０３０２】
再度図２７の例を参照すると、３Ｄ点Ｖ３は、シグネチャ｛ａ，ｃ，ｄ｝を有し、シグネチャ中に平面ｃ（ステップＳ３０−１６で選択）を有する組Ｖｐ中での唯一の点である。
【０３０３】
ステップＳ３０−２４において、多角形生成器８６は、ステップＳ３０−２２で判定された組Ｖｐｑ中に３Ｄ点が存在するか否かを判定する。
【０３０４】
処理の反復の１回目では、３Ｄ点が組Ｖｐｑに存在する。しかし、上述のように、ステップＳ３０−１８では、各３Ｄ点が処理後に組Ｖｐから削除される。従って、多角形の全ての頂点の処理が終了したとき、組Ｖｐｑには３Ｄ点は存在しなくなる。この場合、処理はステップＳ３０−６へと戻り、ここで、多角形生成器８６は、組Ｖｐに残存する３Ｄ点が存在するか否かを判定する。
【０３０５】
例えば、上述の図２８及び２９に示されるように、平面「ｐ」に位置する多角形が３つ以上存在する場合、点が組Ｖｐに残存している可能性がある。２つ以上の多角形が平面「ｐ」に存在する状況では、ステップＳ３０−２４での検査により、１つの多角形の処理が終了したときに組Ｖｐｑに点は存在しないと判定され、ステップＳ３０−６で実行される処理により、平面「ｐ」に位置する別の多角形に対する連結が計算されずに残存しているときに組Ｖｐに３Ｄ点が残存すると判定されるであろう。この場合、処理がステップＳ３０−６からＳ３０−８へと進むときに、新規の多角形データ構造が、平面「ｐ」に位置する別の多角形に対して生成される。
【０３０６】
ステップＳ３０−２４において、組Ｖｐｑに点が存在すると判定される場合、処理はステップＳ３０−２６へと進み、ここで、多角形生成器８６は、組Ｖｐｑ中の点の数が１に等しいか否かを判定する。組Ｖｐｑの各３Ｄ点は、現在頂点「ｗ」に連結される３Ｄ点を表す。従って、組Ｖｐｑにちょうど１つの点だけが存在する場合、図２７に示す例のような場合が存在する。しかし、組Ｖｐｑに２つ以上の点が存在する場合、上述の３Ｄ点１０００、１０１０、１０２０及び１０３０に対して図２８の例のような場合が存在する。
【０３０７】
ステップＳ３０−２６において、組Ｖｐｑにちょうど１つの３Ｄ点が存在する場合、処理はステップＳ３０−２８へと進む。ここで、多角形生成器８６は、多角形「ｓ」の次の頂点「ｘ」（すなわち、現在頂点に連結された頂点）を組Ｖｐｑ中の３Ｄ点に設定する。
【０３０８】
従って、図２７の例において、平面ｃをステップＳ３０−１６で選択された平面であるとすると、ステップＳ３０−２８で設定される次の頂点「ｘ」は３Ｄ点Ｖ３である。
【０３０９】
続いて、処理は、ステップＳ３０−４４へと進み、ここで、多角形生成器８６は、現在頂点ポインタ「ｗ」を頂点「ｘ」に設定する。
【０３１０】
ステップＳ３０−４６において、多角形生成器８６は、現在頂点のシグネチャを読み取り、ステップＳ３０−４８において、ステップＳ３０−４で選択された平面「ｐ」とは異なり且つステップＳ３０−１６で選択された平面「ｑ」とも異なるシグネチャ中に定義された平面「ｒ」を選択する。従って、図２７の例において、３Ｄ点Ｖ３のシグネチャは｛ａ，ｃ，ｄ｝であり、平面ｄがステップＳ３０−４８で選択される。
【０３１１】
処理は、引き続き、ステップＳ３０−１８へと戻り、ここで、現在頂点は組Ｖｐから削除される。
【０３１２】
このように、多角形生成器８６は、頂点ごとに連結された頂点を判定し、処理が終了したときにこの頂点を削除しながら多角形中の３Ｄ点間を横断する。多角形に対する処理は、ステップＳ３０−２４で組Ｖｐｑに点が存在せず、多角形の全ての頂点の連結が終了したと判定されるときに完了する。
【０３１３】
ステップＳ３０−２６に戻ると、組Ｖｐｑに２つ以上の３Ｄ点が存在すると判定される場合、図２８の例に示すような状況が発生していることになる。この図２８に示す状況では、複数の３Ｄ点１０００、１０１０、１０２０及び１０３０が２つの平面の共通部分により定義される線に位置する。この場合、多角形生成器８６は、現在考慮中の３Ｄ点と各々が位置する直線に沿った組Ｖｐｑ中の各３Ｄ点の相対的な位置に基づいて、組Ｖｐｑ中のどの３Ｄ点が現在考慮中の３Ｄ点に連結されるべきかを判定するための処理を実行する。
【０３１４】
具体的には、ステップＳ３０−３０において、多角形生成器８６は、組Ｖｐｑ中に３Ｄ点は奇数個存在するか、あるいは、偶数個存在するかを判定する。
【０３１５】
２つの平面の共通部分により定義されるエッジ上に位置する３Ｄ点の数は、偶数でなければならない。これは、３Ｄ点が第１と第２、第３と第４のように対を成して連結されなければならないからである。従って、図２８の例を参照すると、３Ｄ点１０００は、３Ｄ点１０１０に連結され、３Ｄ点１０２０は、３Ｄ点１０３０に連結される。
【０３１６】
しかし、ステップＳ３０−３０で検査される組Ｖｐｑ中の３Ｄ点の数は奇数であっても良い。なぜなら、処理中の現在頂点「ｗ」であったために、２つの平面の共通部分により定義されるエッジ上に位置する３Ｄ点のうちの１つが、ステップＳ３０−１８で組Ｖｐから削除されたような場合も起こりうるからである。
【０３１７】
これに対し、ステップＳ３０−１０で選択された開始頂点「ｕ」が、３つ以上の頂点が存在するエッジ上に位置する頂点のうちの１つであり、処理される次の頂点が３つ以上の頂点を有するエッジ上に位置する頂点でない（すなわち、開始頂点が３つ以上の頂点を有するエッジ上の端点のうちの１つであって、多角形が３つ以上の頂点を有するエッジに沿ってそれまで通っていない方向に横断される）場合、開始頂点がステップＳ３０−１８で組Ｖｐから削除されており、３つ以上の頂点を有するエッジ上に位置する頂点である現在頂点ｗも、ステップＳ３０−１８で組Ｖｐから削除されていると考えられるので、ステップＳ３０−３０で検査される組Ｖｐｑ中の３Ｄ点の数は偶数になるであろう。
【０３１８】
従って、一例として図２８を参照すると、平面９１０がステップＳ３０−４で選択される平面であり、３Ｄ点１０００がステップＳ３０−１０で開始頂点「ｕ」として選択されるものとする。平面１０４０がステップＳ３０−１６で選択される場合、ステップＳ３０−１８において、３Ｄ点１０００は、組Ｖｐから削除され、ステップＳ３０−２２及びＳ３０−２４において、組Ｖｐｑは、３つの点１０１０、１０２０及び１０３０を含むものと判定される。これに対し、ステップＳ３０−１６において、平面１０４０の代わりに平面１０８０が選択された場合、ステップＳ３０−１８において、３Ｄ点１０００が組Ｖｐから削除され、ステップＳ３０−２８及び後続のステップにおいて３Ｄ点１０７０が処理されるであろう。後続の処理において、３Ｄ点１０１０、１０２０及び１０３０のうちの１つが現在頂点「ｗ」となる。これらの点のうちの最初のものが現在頂点「ｗ」になるとき、この頂点が、ステップＳ３０−１８において、組Ｖｐから削除され、結果として、ステップＳ３０−２４及びＳ３０−２６で検査された組Ｖｐｑ中に残存する平面９１０及び１０４０の共通部分上に２つの点（すなわち、偶数個の点）が位置するようになる。
【０３１９】
従って、ステップＳ３０−３０において、組Ｖｐｑ中の点の数が奇数であると判定される場合、多角形生成器８６は、組が現在頂点「ｗ」と組Ｖｐｑ中の３Ｄ点とから構成されるように、平面「ｐ」及び「ｑ」の共通部分に位置する３Ｄ点の組「Ｖｌｉｎｅ」を定義する。
【０３２０】
これに対し、ステップＳ３０−３０において、組Ｖｐｑ中の点の数が偶数であると判定される場合、ステップＳ３０−３２において、多角形生成器８６は、組が現在頂点「ｗ」と開始頂点「ｕ」と組Ｖｐｑ中の３Ｄ点とから構成されるように、平面ｐ及びｑの共通部分に位置する３Ｄ点の組「Ｖｌｉｎｅ」を定義する。
【０３２１】
ステップＳ３０−３２又はステップＳ３０−３４に引き続いて、処理はステップＳ３０−３６へと進む。ここで、多角形生成器８６は、平面「ｐ」及び「ｑ」の共通部分により定義される線に沿った相対的な位置に従って、組Ｖｌｉｎｅ中の各３Ｄ点にランク０からランクｎ−１（ｎは組Ｖｌｉｎｅ中の点の数）のランクを割り当てる。具体的には、共通部分上の端点の一方（どちらでも良い）に、ランク０が割り当てられ、組Ｖｌｉｎｅの残りの点にランク０の点からの距離に従ってランク１、２．．．が割り当てられる。従って、図２８に示す例を参照すると、３Ｄ点１０００にランク０が割り当てられる場合、３Ｄ点１０１０にランク１が割り当てられ、３Ｄ点１０２０にランク２が割り当てられ、３Ｄ点１０３０にランク３が割り当てられる。
【０３２２】
ステップＳ３０−３８において、多角形生成器８６は、現在頂点「ｗ」のランクが偶数であるか、又は、奇数であるかを判定する。
【０３２３】
ステップＳ３０−３８において、現在頂点「ｗ」のランクが偶数であると判定される場合、ステップＳ３０−４０において、多角形生成器８６は、以下の式が成立するように、多角形「ｓ」の次の頂点「ｘ」（すなわち、現在頂点に連結された頂点）を組Ｖｐｑ中の頂点「ｖ」に設定する：
rank(v)=rank(w)+1      …  （３）
これに対し、ステップＳ３０−３８において、現在頂点「ｗ」のランクが奇数であると判定される場合、ステップＳ３０−４２において、多角形生成器８６は、以下の式が成立するように、次の頂点「ｘ」及び多角形「ｓ」を組Ｖｐｑ中の頂点「ｖ」に設定する：
rank(v)=rank(w)-1      …  （４）
続いて、処理はステップＳ３０−４４へと進む。
【０３２４】
上述のように、ステップＳ３０−４４において、多角形生成器８６は、現在頂点ポインタ「ｗ」を頂点「ｘ」に設定し、ステップＳ３０−４６において、新規の現在頂点のシグネチャを読み取る。
【０３２５】
ステップＳ３０−４８において、多角形生成器８６は、ステップＳ３０−４で選択された平面「ｐ」と異なり、ステップＳ３０−１６で選択された平面「ｑ」とも異なるステップＳ３０−４６で読み取られたシグネチャ中に定義された平面「ｒ」を選択する。
【０３２６】
ステップＳ３０−４８の終了後、処理はステップＳ３０−１８へと戻る。
【０３２７】
再度ステップＳ３０−６を参照すると、組Ｖｐ中にこれ以上の３Ｄ点が存在しないと判定される（全ての３Ｄ点がステップＳ３０−１８の処理の前回の反復で削除されているため）場合、ステップＳ３０−４で選択された平面「ｐ」上に位置する３Ｄ点の全てに対して連結が判定され、処理はステップＳ３０−５０へと進む。
【０３２８】
ステップＳ３０−５０において、多角形生成器８６は、平面「ｐ」に位置する２つ以上の多角形が存在するか否かを判定する。具体的には、この実施形態において、多角形生成器８６は、２つ以上の多角形データ構造「ｓ」が平面「ｐ」に対して生成されたか否かを判定する（新規の多角形データ構造「ｓ」がステップＳ３０−８で平面「ｐ」に位置する各多角形に対して生成される）。
【０３２９】
ステップＳ３０−５０において、平面「ｐ」に位置する２つ以上の多角形が存在すると判定される場合、処理はステップＳ３０−５２へと進み、ここで、多角形生成器８６は、平面「ｐ」に位置する各多角形を検査し、平面「ｐ」に位置するその他の多角形のうちのいずれかを含むか否かを判定する。
【０３３０】
ステップＳ３０−５４において、多角形生成器８６は、平面「ｐ」に位置する各多角形が被写体オブジェクト２１０の表面の一部又はその中の穴を表すか否かを判定する。具体的には、多角形がその他の多角形と共に含まれない場合、その多角形は、被写体オブジェクト２１０の表面を表す。ちょうど１つの多角形が別の多角形の内部に位置する場合、大きい方の多角形は、被写体オブジェクト２１０の表面を表し、大きい多角形に含まれる小さい方の多角形は、表面の穴を表す。多角形に含まれる多角形が２つ以上存在する場合、多角形生成器８６は、各親多角形が複数の子多角形を含むように階層構造を作成する。多角形生成器８６は、続いて、階層構造の奇数の世代の各多角形を被写体オブジェクト２１０の表面として識別し、偶数の世代の多角形を穴として識別する。
【０３３１】
これに対し、ステップＳ３０−５０において、平面「ｐ」に１つだけ多角形が存在すると判定される場合、ステップＳ３０−５２及びＳ３０−５４は省略される。
【０３３２】
ステップＳ３０−５６において、多角形生成器８６は、ステップＳ２３−２において識別された処理すべき別の平面が存在するか否かを判定する。
【０３３３】
ステップＳ３０−５６において、処理すべき別の平面が残存すると判定される場合、処理はステップＳ３０−４へと戻る。
【０３３４】
以上説明したように各平面を処理し終わるまで、ステップＳ３０−４からＳ３０−５６が繰り返される。
【０３３５】
この処理の結果、多角形生成器８６は、被写体オブジェクト２１０の表面を表す多角形メッシュを計算する。
【０３３６】
図２３を再度参照すると、ステップＳ２３−８において、多角形生成器８６は、ステップＳ２３−６で生成された多角形中の３Ｄ点を連結し、連結された平面三角形のメッシュを生成する。この実施形態では、多角形生成器８６は、“Open GL Programming Guide 2nd edition”（第１１章、ISBN 0-201-46138-2）に記載されるようなＯｐｅｎ ＧＬユーティリティライブラリ“glutess”による従来の方法を使用してステップＳ２３−８での処理を実行する。
【０３３７】
図４を再度参照すると、ステップＳ４−１８において、サーフェステクスチャラ９０は、入力画像データを処理し、ステップＳ４−１６でサーフェスモデラ８０により生成されるサーフェスモデル中の各表面三角形に対してテクスチャデータを生成する。
【０３３８】
具体的には、この実施形態において、サーフェステクスチャラ９０は、ステップＳ４−１６で生成されたサーフェスメッシュ中の各三角形を選択すると共に、選択された三角形に最も真正面に近い状態で直面する入力画像「ｉ」を見出すための処理を従来の方法で実行する。すなわち、
0003793115.tif 000002
値が最大の入力画像が見出される。ここで、
0003793115.tif 000003
は、各三角形が位置する多角形に対してステップＳ３０−１０で割り当てられた三角形の法線であり、
0003793115.tif 000004
は「ｉ」番目の画像に対するビューイング方向である。これにより、選択された三角形が最大投影領域を有する入力画像が識別される。
【０３３９】
選択された表面三角形は、続いて、識別された入力画像へと投影され、投影された三角形の頂点は、画像テクスチャマップを定義するためのテクスチャ座標として使用される。
【０３４０】
ステップＳ４−１８でサーフェステクスチャラ９０がテクスチャデータを生成するのに使用するその他の技術は、同時係属英国特許出願第００２６３３１．９号、第００２６３４３．４号及び第００２６３４７．５号に記載される。その内容は、相互参照により本明細書に取り入れられている。
【０３４１】
上述の処理を実行した結果が、被写体オブジェクト２１０の表面のＶＲＭＬ（又は、類似の形式）モデルであり、モデル上にレンダリングされる画像データを定義するテクスチャ座標を備えている。
【０３４２】
ステップＳ４−２０において、中央制御装置２０は出力データ記憶装置１２０からの、被写体オブジェクト２１０の３Ｄコンピュータモデルを定義するデータを、例えば、ディスク１２２などの記憶装置に格納されるデータ又は信号１２４（図１）として出力する。これに加えて、又はその代わりに、中央制御装置２０は、ディスプレイプロセッサ１１０に、被写体オブジェクト２１０の３Ｄコンピュータモデルの画像を、例えば、ユーザ入力装置６を使用してユーザにより入力された視点に従って、テクスチャデータによってレンダリングして表示させても良い。
【０３４３】
第２実施形態
上述の第１実施形態では、各々が入力画像中の被写体オブジェクト２１０のシルエットとカメラ２３０の焦点とにより定義される円錐形の多面体を定義するデータを処理することによって３Ｄコンピュータモデルを生成するための処理が実行されている。この処理は、多面体を構成する所定数の三角形平面が相互に交わる３Ｄ点を計算するために実行され、その結果、各３Ｄ点は、３Ｄ点で交わる各平面のうちのいずれも含まない多面体の各々の内部にある。従って、第１実施形態では、３Ｄコンピュータモデルは、被写体オブジェクトの画像と画像が記録された位置及び向きを定義するデータとに基づいて生成される。
【０３４４】
しかし、この処理は、その他の状況にある平面から成る多面体から３Ｄコンピュータモデルを生成する場合に対しても適用可能である。
【０３４５】
例として、各々が複数の平面により定義される多面体から成る複数のコンポーネント３Ｄオブジェクトから構成される複合オブジェクトの３Ｄコンピュータモデルが生成される第２実施形態を説明する。
【０３４６】
図３１を参照すると、第２実施形態は、従来の通りに１つ以上のプロセッサと、複数のメモリと、グラフィックスカードなどを含むパーソナルコンピュータのような処理装置２００２と、従来通りのパーソナルコンピュータモニタのような表示装置２００４と、キーボード、マウスなどのユーザ入力装置２００６とを具備する。
【０３４７】
処理装置２００２は、例えば、ディスク２０１２などのデータ記憶媒体に格納されたデータとして及び／又は遠隔データベース等からインターネットなどの通信ネットワーク（図示せず）を介する伝送、あるいは無線伝送により処理装置２００２に入力され且つ／又はキーボードなどのユーザ入力装置２００６を介してユーザにより入力される信号２０１４として入力されるプログラミング命令に従って動作するようにプログラムされている。
【０３４８】
以下で更に詳細に説明するが、それらのプログラミング命令は、各々が複数の平面多面体から成る３Ｄコンピュータモデルを定義するデータを生成し、及び／又は、このような３Ｄコンピュータモデルを定義するデータを入力データとして受け取り、ユーザの入力命令に従って相互に対して３Ｄコンピュータモデルを位置決めし、コンポーネントとしての元のコンピュータモデルとユーザにより定義される相対的な位置とを使用して複合オブジェクトの３Ｄコンピュータモデルを生成するように処理装置２００２を構成させるための命令である。複合オブジェクトの３Ｄコンピュータモデルは、新規の創意に富んだ技術を使用して生成される。この技術では、コンポーネントの３Ｄコンピュータモデルを定義する平面多角形の共通部分を判定することによって、複合オブジェクトの頂点を表す３Ｄ点を計算するための処理が実行される。以下で説明するように、特に、複合オブジェクトの頂点である３Ｄ点を生成する可能性がない多角形の共通部分の計算をしなくても良いので、この処理は非常に効率的な方法で実行される。
【０３４９】
処理装置２００２は、プログラミング命令によりプログラミングされたとき、処理動作を実行するための幾つかの機能ユニットとして構成されたと考えることができる。そのような機能ユニットの例及びそれらの相互接続関係を図３１に示す。しかし、図３１に示すユニット及び相互接続は概念上のものであり、理解を助けるという目的のために一例として示されているにすぎない。従って、それらは、処理装置２００２のプロセッサ、メモリなどが構成されるユニットや接続を必ずしも表してはいない。
【０３５０】
図３１に示す機能ユニットを説明すると、中央制御装置２０２０はユーザ入力装置２００６からの入力を処理すると共に、その他の機能ユニットの制御及び処理を実行するように構成されている。
【０３５１】
メモリ２０３０は、中央制御装置２０２０及びその他の機能ユニットにより使用されるべく設けられている。
【０３５２】
入力データ記憶装置２０４０は、例えば、ディスク２０４２などの記憶装置に格納されるデータとして、又は処理装置２００２へ送信される信号２０４４として、又はユーザ入力装置２００６を使用して処理装置２００２に入力される入力データを格納するように構成される。入力データは、各々が従来の方法で平面多角形から構成される１つ以上の３Ｄコンピュータモデルを定義する。
【０３５３】
コンポーネントオブジェクトモデラ２０５０は、入力データ格納装置２０４０に格納された入力データを処理し、ユーザ命令に従って入力された３Ｄコンピュータモデルを修正して形状、外観などを変更するように構成される。加えて、コンポーネントオブジェクトモデラ２０５０は、ユーザにより入力された命令に従って、平面多角形から成る新規の３Ｄコンピュータモデルを定義するデータを生成するように構成される。
【０３５４】
モデルポジショナ（Model positioner）２０６０は、ユーザがユーザ入力装置２００６を使用して入力した命令を処理し、複合オブジェクトのコンポーネントを定義するように、入力データ記憶装置２０４０に格納された入力データ中で定義され、及び／又は、共通の座標空間で相互に対してコンポーネントオブジェクトモデラ２０５０により生成されたデータにより定義されたオブジェクトを位置決めするように構成される。
【０３５５】
複合オブジェクトモデラ２０７０は、３Ｄ点計算器２０８０及び多角形生成器２０９０を具備する。
【０３５６】
３Ｄ点計算器２０８０は、コンポーネントの３Ｄコンピュータモデルとその相対的な位置を定義するデータを処理し、コンポーネントモデルを構成する平面多角形の共通部分（複合オブジェクトの潜在頂点を定義する共通部分）の３Ｄ位置を計算すると共に、この共通部分を検査して複合オブジェクトの実際の値を表す共通部分がどれであるかを判定するように構成される。
【０３５７】
多角形生成器２０９０は、３Ｄ点計算器２０８０により生成された３Ｄ点を連結して複合オブジェクトの表面を表す多角形メッシュを形成するように構成される。
【０３５８】
ディスプレイプロセッサ２１００は、中央制御装置２０２０の制御の下に、コンポーネントオブジェクトモデラ２０５０、モデルポジショナ２０６０及び複合オブジェクトモデラ２０７０による処理中に、表示装置２００４を介してユーザに対し画像及び命令を表示するように構成される。特に、ディスプレイプロセッサ２１００は、ユーザが選択した視点からのコンポーネントの画像及び複合コンピュータモデルを表示するように構成される。
【０３５９】
出力データ記憶装置２１１０は、複合オブジェクトモデラ２０７０により生成される複合オブジェクトを定義するデータを格納するように構成される。中央制御装置２０２０は、出力データ記憶装置２１１０からのデータの出力を、例えば、ディスク２１２０などの記憶装置へのデータ及び／又は信号２１３０として制御するように構成される。
【０３６０】
図３２は、この実施形態において、処理装置２００２により実行される処理動作を示す。
【０３６１】
図３２のステップＳ３２−２において、コンポーネントオブジェクトモデラ２０５０は、ユーザ入力装置２００６を介してユーザにより入力された命令に基づいて動作し、複数のコンポーネントオブジェクトの各々に対して、３Ｄコンピュータモデルを定義するデータを生成する。この処理は、例えば、計算機支援設計（ＣＡＤ）装置などにおいて従来の方法で実行される。
【０３６２】
また、ステップＳ３２−２において、ディスプレイプロセッサ２１００は、表示装置２００４に表示するための画像データを生成し、ユーザに対してコンポーネントオブジェクトを表示する。この実施形態では、コンポーネントオブジェクトの３Ｄコンピュータモデルは対話方式で生成される。すなわち、ユーザからの各命令の入力による３Ｄコンピュータモデルの形成に対する効果が表示装置２００４に表示され、ユーザは、入力効果の連続表示に応じて更に命令を入力して３Ｄコンピュータモデルを完成させる。
【０３６３】
ステップＳ３２−２での処理の結果の一例が、図３３ａにおいて示される。ここでは、コンポーネントオブジェクトモデラ２０５０により生成されるデータにより定義された３つの３Ｄコンポーネントオブジェクト２２００、２２１０及び２２２０が示されている。
【０３６４】
コンポーネントオブジェクト２２００は、底面多角形２２３０と、上面多角形２２４０と、側面多角形２２５０、２２６０、２２７０及び２２８０とで構成される。
【０３６５】
コンポーネントオブジェクト２２１０は、上面多角形２２９０と、底面多角形２３００と、側面多角形２３１０、２３２０及び２３３０とで構成される。
【０３６６】
コンポーネントオブジェクト２２２０は、多角形２３４０、２３５０、２３６０、２３７０、２３８０、２３９０、２４００及び２４１０から構成される。
【０３６７】
この実施形態で実行される後続の処理を説明するために、図３３ａに示すコンポーネントオブジェクトを以下で参照する。
【０３６８】
ステップＳ３２−２において、コンポーネントオブジェクトモデラ２０５０が全てのコンポーネントオブジェクトを定義するためのデータを生成する代わりに、処理装置２００２に入力され、入力データ記憶装置２０４０に格納されたデータによりコンポーネントオブジェクトのうちの１つ以上を定義しても良い。このような入力データは、例えば、第１実施形態で説明した処理を使用したり、あるいは、１つ以上のオブジェクトをレーザ走査したりすることによって生成しても良い。
【０３６９】
これに加えて、又は、その代わりに、入力データ記憶装置２０４０に格納された１つ以上の３Ｄコンピュータモデルに対するデータを、３Ｄコンピュータモデルを編集し、コンポーネントオブジェクトの形状、外観などを変更するためにユーザ入力装置２００６を介してユーザにより入力された命令に従ってコンポーネントオブジェクトモデラ２０５０により修正しても良い。
【０３７０】
再度図３２を参照すると、ステップＳ３２−４において、モデルポジショナ２０６０は、ユーザ入力装置２００６を介してユーザにより入力された命令に基づいて動作し、ステップＳ３２−２において生成された（あるいは、入力データ記憶装置２０４０に格納されたデータ中に定義された）コンポーネントオブジェクトを複合オブジェクトの各部分として共通座標空間において位置決めする。加えて、ディスプレイプロセッサ２１００は、中央制御装置２０２０の制御の下に、表示装置２００４に表示するための画像データを生成し、共通の座標空間において位置決めされたコンポーネントオブジェクトの画像を表示する。
【０３７１】
図３３ｂは、ステップＳ３２−４での処理の結果の一例を示す。ここで、図３３ａのコンポーネントオブジェクト２２００、２２１０及び２２２０は、複合オブジェクトの各部分として相互に対して位置決めされる。
【０３７２】
図３３ｂにおいて、コンポーネントオブジェクト２２１０は、多角形２２３０を介してコンポーネントオブジェクト２２００に嵌入する（すなわち、コンポーネントオブジェクト２２１０の多角形２２９０を定義する頂点２４２０、２４３０及び２４４０がコンポーネントオブジェクト２２００の内側にある）ように位置決めされる。
【０３７３】
コンポーネントオブジェクト２２２０は、コンポーネントオブジェクト２２１０の多角形２３１０及び２３３０と交わるように位置決めされる。
【０３７４】
再度図３２を参照すると、ステップＳ３２−６において、３Ｄ点計算器２０８０は、複合オブジェクトの頂点を表す３Ｄ点を計算する。
【０３７５】
処理のこの段階では、各々が平面多角形から構成される多面体から成る複数の３Ｄコンポーネントオブジェクトが存在し、コンポーネントオブジェクト（及び平面多角形）の相対的な位置及び向きは既知である。
【０３７６】
従って、複合オブジェクトの３次元コンピュータモデルは、コンポーネントオブジェクトの結合を計算することによって生成することができる。この結合は、コンポーネントオブジェクトが３Ｄ空間において占めるボリュームの結合である。
【０３７７】
この実施形態では、コンポーネントオブジェクトの結合は、各コンポーネントオブジェクトを構成する平面多角形の共通部分を計算することによって計算される。多角形のうちの３つが交わる任意の３Ｄ点（これらの多角形が同じコンポーネントオブジェクトを元にしているか、２つの異なるコンポーネントオブジェクトを元にしているか、あるいは、３つの異なるコンポーネントオブジェクトを元にしているかを問わない）が、潜在的に複合オブジェクトの表面にある点を定義する。各潜在点は検査され、複合オブジェクト上の点を実際に表すのがどの点であるかが判定される。
【０３７８】
複合オブジェクトの生成された３Ｄコンピュータモデル正確さを保証するために、複合オブジェクトの頂点となるコンポーネントオブジェクトを元にした各多角形の共通部分を計算する必要がある。これは、各多角形をそれ以外の全ての多角形に対して検査し、３つの多角形が交わる一揃いの３Ｄ点を生成することによって達成することができるであろう。しかし、このように複合オブジェクト上の３Ｄ点を計算するのに必要な計算の回数は膨大である。具体的には、全てのコンポーネントオブジェクト中の多角形の総数が「ｎ」個である場合、Ｏ（ｎ３）回の計算が必要になると思われる。加えて、検査される多角形の多くが交わらない（従って、３Ｄ点の生成に至らない）うえに、３つの多角形の共通部分を計算するのに計算上最も効率の良い方法は、多角形が位置する３つの平面の共通部分を計算することであるので、計算の大半が不必要なものとなる。このため、複合オブジェクトの表面に位置せず、複合オブジェクトの頂点を実際に表すのはどの３Ｄ点であるかを判定するための処理を行なう必要がある３Ｄ点を計算することとなる。
【０３７９】
図３３ａ及び図３３ｂに示す例の場合、コンポーネントオブジェクト２２００、２２１０、２２２０の各々は少数の多角形から成るので、計算回数は、処理可能な範囲に納まるであろう。しかし、より複雑なケースでは、各コンポーネントオブジェクトは、数千の多角形から成る可能性もあり、計算を実行するのに必要とされる時間は膨大なものとなるであろう。
【０３８０】
従って、この実施形態では、複合オブジェクト上の点を表す３Ｄ点を計算するのに必要な計算の回数を低減するように処理が実行される。
【０３８１】
この処理を詳細に説明する前に、処理の原理について説明する。
【０３８２】
具体的には、この実施形態において、ステップＳ３２−４でコンポーネントオブジェクトが位置決めされた３Ｄ空間のボリュームを考慮し、このボリュームを検査して以下の点を判定するための処理が実行される：
（１）  交わって３Ｄ点を生成するのに十分な多角形（すなわち、この実施形態では３つ）がボリューム中に存在しないか、あるいは、ボリューム中の多角形が、複合オブジェクトの頂点を表す３Ｄ点で交わることがないという理由で、ボリュームを廃棄することができるか否か（以下で詳細に後述）、
（２）  ボリュームが、相互に交わるのに十分であると共に、複合オブジェクトの頂点を表すであろう所定数（この実施形態では、１つの３Ｄ点）を超える３Ｄ点を生成するのに十分な多角形を含むという理由で、より小さいボリュームを考慮すべくボリュームを再分割すべきか否か、又は、
（３）  ボリュームが、相互に交わると共に、複合オブジェクトの頂点を表す十分に少ない所定数（この実施形態では１つ）の３Ｄ点を生成するのに適した数（この実施形態では３つ）の多角形を含むか否か。この場合、これらの点の３Ｄ位置が計算／検査され、複合オブジェクトの頂点を実際に表すか否かが判定される。
【０３８３】
このように、処理を行なうことによって、このような点の計算に至らない不必要な処理を回避しながら、複合オブジェクトの頂点を表す全ての３Ｄ点を確実に計算することができる。特に、これ以上の計算をすることなく、３Ｄ空間のうちの大きなボリュームを廃棄することができる。
【０３８４】
中の多角形が複合オブジェクトの頂点を表す３Ｄ点で交わらないためにボリュームを廃棄することができるか否かを判定するために、この実施形態では、３Ｄ点がコンポーネントオブジェクトのうちの１つの内側に位置し、複合オブジェクトの頂点を表すことができないか否かを判定するための処理が実行される。具体的には、一例として図３３ｂを参照すると、３Ｄ点２４２０、２４３０及び２４４０の各々は、コンポーネントオブジェクト２２００の内側に位置するので、複合オブジェクトの頂点を表すことができない。従って、この実施形態の処理では、これらの点の計算／検査が行なわれないため、実行される処理の量が削減される。
【０３８５】
以下に詳細に説明するように、この実施形態では、３Ｄ点がコンポーネントオブジェクトの内部に位置するか否かを判定するための検査が、各コンポーネントオブジェクトを適切な大きさの多面体の穴と見なし、３Ｄ点が全てのコンポーネントオブジェクトに対して、全ての多面体の内部に位置するか否かを検査する（これは、３Ｄ点が元の３Ｄオブジェクトのうちの少なくとも１つの内側に位置するか否かの検査と同等である）ための処理を実行することによって実際に実行される。
【０３８６】
この実施形態では、３Ｄ点が計算されるのに引き続いて検査が行なわれ、３Ｄ点が複合オブジェクトの頂点を表すか否かが判定される。これは、３つの平面多角形を含む３Ｄボリュームが識別されるときに３Ｄ点が計算されるからである。しかし、多角形は、ボリューム内の３Ｄ点で実際には交わらない可能性がある。加えて、３Ｄ点が、多角形が位置する３つの各平面の共通部分を計算することによって計算される結果、計算された３Ｄ点が２つ以上の多角形の内部に位置しない可能性もある。従って、この実施形態では、計算された３Ｄ点が識別されたボリューム内にあるか否か、及び、３つの多角形全ての内部にあるか否かを判定するための検査が実行される。
【０３８７】
この実施形態において、複合オブジェクトの頂点を表す３Ｄ点を計算するために実行される処理を詳細に説明する。
【０３８８】
図３４は、複合オブジェクトの頂点を定義する３Ｄ点を計算するためにステップＳ３２−６において３Ｄ点計算器２０８０により実行される処理動作を示す。
【０３８９】
図３４のステップＳ３４−２において、３Ｄ点計算器２０８０は、複合オブジェクトの頂点を表す全ての３Ｄ点が位置する３Ｄ空間中のボリュームを定義する。
【０３９０】
図３５を参照して具体的に説明すると、この実施形態では、３Ｄ点計算器２０８０は、ステップＳ３４−２において、複合オブジェクトの頂点を含むボリュームとしてコンポーネントオブジェクト２２００、２２１０及び２２２０の周囲で軸方向に整列したバウンディング直平行六面体２５００を定義する。このバウンディング直平行六面体は従来通りに定義されるので、ここでは説明を行なわない。
【０３９１】
再度図３４を参照すると、ステップＳ３４−４において、３Ｄ点計算器２０８０は、ステップＳ３４−２において定義された３Ｄボリュームを複数のより小さい子ボリュームへと再分割し、子ボリュームをメモリ中に定義された格納スタックの最上部へと加える。
【０３９２】
図３６を参照して具体的に説明すると、この実施形態において、ステップＳ３４−４でのボリュームの再分割は、８つの新規の子ボリューム２５１０、２５２０、２５３０、２５４０、２５５０、２５６０、２５７０及び２５８０を生成するためのバウンディング直平行六面体２５００の２値再分割である。
【０３９３】
再度図３４を参照すると、ステップＳ３４−６において、３Ｄ点計算器２０８０は、コンポーネントオブジェクトを穴として含む多面体を各コンポーネントオブジェクトに対して定義する。
【０３９４】
図３７を参照して被写体オブジェクト２２００に関して、この処理及びその効果を説明する（処理及びその効果は、その他のコンポーネントオブジェクトの各々に関しても同じである）。
【０３９５】
図３７において、ステップＳ３４−６での処理は、元のコンポーネントオブジェクト２２００と同じ座標を有する穴２６１０（以降、「コンポーネントオブジェクト穴」と呼ぶ）を設けた直平行六面体の形態を有する多面体２６００を定義する。
【０３９６】
従って、元のコンポーネントオブジェクトの各多角形は、多面体２６００のコンポーネントオブジェクト穴を定義する。
【０３９７】
具体的には、３Ｄ点計算器２０８０は、各々が先にステップＳ３４−２で定義されたバウンディング直平行六面体２５００の対応する面の外側から多少離間した位置にある複数の面を有するように直平行六面体２６００を定義することによって、ステップＳ３４−６での処理を実行する。このため、直平行六面体２６００は、バウンディング直平行六面体２５００と同じ形状を有するが、寸法がわずかに大きい。このように、直平行六面体２６００は、生成する複合オブジェクト上の全ての点を包囲する。
【０３９８】
ステップＳ３４−６を実行した結果、コンポーネントオブジェクト２２００、２２１０、２２２０が占めるボリュームの結合を計算するための処理は、多面体のコンポーネントオブジェクト穴の結合を計算するための処理となる。
【０３９９】
再度図３４を参照すると、ステップＳ３４−８において、３Ｄ点計算器２０８０は、ステップＳ３４−４で作成されたスタックの最上部から次のボリューム（ステップＳ３４−８が初めて実行される場合、これは最初のボリュームである）を取り出し、ステップＳ３４−１０において、スタックから取り出されたボリュームの状態を判定する。
【０４００】
ステップＳ３４−１０での処理において、３Ｄ点計算器２０８０は、ステップＳ３４−８でスタックから取り出されたボリュームが、複合オブジェクトの頂点を表すいずれかの３Ｄ点を含む可能性がない（従って、ボリュームを廃棄することができる）か否か、複合オブジェクトの頂点を表す２つ以上の３Ｄ点を定義するのに十分な数の多角形を含むためにボリュームを再分割する必要があるか否か、あるいは、ボリュームが複合オブジェクトの頂点を表す単一の３Ｄ点を定義するのに十分な多角形のみを含むか否か（この場合、３Ｄ点の位置を計算／検査することができる）を判定する。
【０４０１】
図３８は、ステップＳ３４−１０で３Ｄ点計算器２０８０により実行される処理動作を示す。
【０４０２】
図３８のステップＳ３８−２からＳ３８−１０において、３Ｄ点計算器２０８０は、コンポーネントオブジェクト穴を定義するどの多角形が、ステップＳ３４−８でスタックから取り出されたボリュームと交わるかを判定するための処理を実行する。
【０４０３】
この処理は、現在のボリュームとの共通部分に対して親ボリューム（すなわち、現在処理中のボリュームを作成するために分割されるボリューム）と交わる多角形のみを検査し、現在のボリュームの子ボリュームの処理を行なう際に使用される現在のボリュームと交わる多角形のリストを格納することによって、計算上効率の良い方法で実行される。
【０４０４】
具体的には、ステップＳ３８−２において、３Ｄ点計算器２０８０は、親ボリュームと交わる多角形（親ボリュームがステップＳ３４−２で定義された直平行六面体２５００である場合、これは、コンポーネントオブジェクト穴を定義する全ての多角形である）のリストを考慮する。
【０４０５】
ステップＳ３８−４において、３Ｄ点計算器２０８０は、ステップＳ３８−２で読み取られたリスト上の次の多角形（ステップＳ３８−４が初めて実行される場合、これは最初の多角形である）を考慮し、ステップＳ３８−６において、多角形が現在のボリュームと交わるか否かを判定する。多角形が現在のボリュームと交わるか否かを検査するためにこの実施形態で実行される処理は、“Graphics Gems”（Ｖ、３７５〜３７９ページ、Alan W. Paeth編集、Morgan Kaufmann出版、ISBN 0-12-543455-3）に記載されるような従来の方法で実施される。
【０４０６】
ステップＳ３８−６において、多角形が現在のボリュームと交わると判定される場合、ステップＳ３８−８において、３Ｄ点計算器２０８０は、多角形を現在のボリュームと交わる多角形のリストに加える。
【０４０７】
これに対し、ステップＳ３８−６において、多角形が現在のボリュームと交わらないと判定される場合、ステップＳ３８−８は省略される。
【０４０８】
ステップＳ３８−１０において、３Ｄ点計算器２０８０は、ステップＳ３８−２で読み取られたリストに別の多角形が存在するか否かを判定する。以上説明したようにステップＳ３８−２で読み取られたリスト上の各多角形を処理し終わるまで、ステップＳ３８−４からＳ３８−１０が繰り返される。
【０４０９】
ステップＳ３８−１２からＳ３８−２６において、３Ｄ点計算器２０８０は、ステップＳ３４−８でスタックから取り出されたボリュームは、全体的に１つ以上のコンポーネントオブジェクト穴の内部に存在する（従って、ボリューム中に位置する３Ｄ点は、複合オブジェクトの頂点を表す可能性がない）ためにこのボリュームを廃棄できるか否かを判定するための処理を実行する。実施形態では、この処理は、ボリュームを検査してステップＳ３４−６で生成された全ての多面体により包囲されるか否かを判定することから成る。加えて、処理は特に計算上効率的な方法で行なわれる。具体的には、ボリュームが多面体により包囲される場合、その子ボリュームの全ても多面体により包囲される。従って、この実施形態では、３Ｄ点計算器２０８０は、親ボリュームを包囲するものとして検証されていない多面体（以降、「アクティブな多面体」と呼ぶ）のみを検査し、現在のボリュームを包囲するか否かを判定する。多面体が現在のボリュームを包囲するものとして検証される場合、この多面体は、現在のボリュームの子ボリュームの各々に渡されるアクティブな多面体のリストから削除される。（従って、アクティブな多面体のリストは、第１実施形態での「アクティブなカメラ」のリストと同等である。）
具体的には、ステップＳ３８−１２において、３Ｄ点計算器２０８０は、親ボリュームに対するアクティブな多面体のリスト（すなわち、上述のように、親ボリュームを包囲するものとして検証されていない多面体のリスト）を現在のボリュームに対するリストとしてコピーする。親ボリュームがステップＳ３４−２で定義されたバウンディング直平行六面体２５００である場合、アクティブな多面体のリストは、ステップＳ３４−６で生成された全ての多面体から構成される。
【０４１０】
ステップＳ３８−１４において、３Ｄ点計算器２０８０は、ステップＳ３８−１２でコピーされたリスト上に現在のボリュームと交わる少なくとも１つの多角形を含まない多面体が存在するか否かを判定する。具体的には、３Ｄ点計算器２０８０は、ステップＳ３８−８で生成された現在のボリュームと交わる多角形のリストを読み取り、ステップＳ３８−１２でコピーされたリスト上において、現在のボリュームと交わる被写体オブジェクト穴を定義する少なくとも１つの多角形を有しない多面体を識別する。
【０４１１】
多面体が、現在のボリュームと交わる多角形を有する場合、現在のボリュームは、部分的に多面体の被写体オブジェクト穴の内側と外側の双方に位置する。更に、全ての多面体が現在のボリュームと交わる多角形を有する場合、現在のボリュームは、少なくとも１つの被写体オブジェクト穴の内側にその全体が位置する訳ではなく、部分的に全ての多面体の内側と外側の双方に位置するので、ボリュームを廃棄することができない。従って、ステップＳ３８−１４において、全ての多面体が現在のボリュームと交わる少なくとも１つの多角形を含むと判定される場合、処理は後述のステップＳ３８−２８へと進む。
【０４１２】
これに対し、ステップＳ３８−１４において、多面体が現在のボリュームと交わる多角形を含まないと判定される場合、現在のボリュームは、全体的に多面体の内側に位置する（すなわち、ボリュームは多面体により包囲される）か、全体的に多面体の被写体オブジェクト穴に位置する（すなわち、ボリュームは多面体から「外れて」いる）かのいずれかである。この場合、３Ｄ点計算器２０８０は、ステップＳ３８−１６からＳ３８−２６において、現在のボリュームが、これと交わる多角形を有しない各多面体により包囲されているか、あるいは、多面体から外れているかを判定するための処理を実行する。
【０４１３】
具体的には、ステップＳ３８−１６において、３Ｄ点計算器２０８０は、現在のボリュームと交わる多角形を有しないリスト上の次の多面体を考慮する（ステップＳ３８−１６が初めて実行される場合、これは最初の多面体である）。
【０４１４】
ステップＳ３８−１８において、３Ｄ点計算器２０８０は、多面体が現在のボリュームを包囲するか、あるいは、これから外れているかを判定する。
【０４１５】
図３９は、ステップＳ３８−１８で３Ｄ点計算器２０８０により実行される処理動作を示す。
【０４１６】
図３９のステップＳ３９−２において、３Ｄ点計算器２０８０は、ステップＳ３４−８でスタックから取り出されたボリュームの表面の点を選択する。ボリュームの表面のどの点でも良く、この実施形態では、３Ｄ点計算器２０８０は、ボリュームの第１の面の第１の頂点を選択する。
【０４１７】
ステップＳ３９−４において、３Ｄ点計算器２０８０は、ステップＳ３９−２で選択された点から、光線が考慮中の多面体の外へ確実に放出されるように十分に離間した地点（この実施形態では、ｘ方向において多角形の寸法の２倍の距離に設定される）に対して、ｘ軸方向（任意の方向で良い）に光線を投影する。加えて、３Ｄ点計算器２０８０は、光線の多面体との共通部分の数をカウントし、ステップＳ３９−６において、光線の多面体との共通部分の数が奇数であるか、あるいは、偶数であるかを判定する。
【０４１８】
この検査を行なう理由を図４０ａ、４０ｂ、４１ａ及び４１ｂを参照して説明する。
【０４１９】
図４０ａ及び４０ｂにおいて、ステップＳ３４−８でスタックから取り出されたボリューム２６５０が被写体オブジェクト穴２６１０の外側にある場合、ステップＳ３９−４で投影された光線２６６０は、被写体オブジェクト穴２６１０を有する多面体２６００と奇数回交わる。図４０ｂに示す例では、光線２６６０は、多面体２６００と点２６７０で１回だけ交わる。光線２６６０は、穴２６１０を通過する場合、穴２６１０の形状によって多面体２６００と３つ、５つ、又はそれ以上の奇数個の点で交わっても良い。しかし、ボリューム２６５０が穴２６１０の外側にある（従って、多面体２６００により包囲される）場合は常に、光線２６６０の多面体２６００との共通部分の数が奇数になる。
【０４２０】
これに対し、図４１ａ及び４１ｂを参照すると、ステップＳ３４−８でスタックから取り出されたボリューム２６８０が全体的に被写体オブジェクト穴２６１０の内側にある場合、ステップＳ３９−４で投影される光線２６９０は、多面体２６００と偶数個の地点で交わることになる。図４１ｂの例では、光線２６９０は、多面体２６００と２つの地点、すなわち、点２７００及び２７１０で交わる。しかし、光線２６９０は、被写体オブジェクト穴２６１０の形状によって多面体２６００とそれより多い偶数個の地点で交わっても良い。
【０４２１】
再度図３９を参照すると、ステップＳ３９−６において、ステップＳ３９−４で投影された光線の多面体との共通部分の数が奇数であると判定される場合、ステップＳ３９−８において、３Ｄ点計算器２０８０は、ステップＳ３４−８でスタックから取り出されたボリュームが多面体により包囲されていることを示すためのフラグを設定する。
【０４２２】
これに対し、ステップＳ３９−６において、ステップＳ３９−４で投影された光線の多面体との共通部分の数が偶数であると判定される場合、ステップＳ３９−１０において、３Ｄ点計算器２０８０は、ステップＳ３９−８でスタックから取り出されたボリュームが多面体から外れている（すなわち、ボリュームが全体的に多面体の被写体オブジェクト穴の内側にある）ことを示すフラグを設定する。
【０４２３】
再度図３８を参照すると、ステップＳ３８−２０において、３Ｄ点計算器２０８０は、ステップＳ３９−８又はステップＳ３９−１０で設定されたフラグを読み取り、現在のボリュームが多面体により包囲されているか、あるいは、多面体から外れているかを判定する。
【０４２４】
ステップＳ３８−２０において、ステップＳ３４−８でスタックから取り出されたボリュームが多面体から外れていると判定される場合、ステップＳ３８−２２において、３Ｄ点計算器２０８０は、ボリュームがコンポーネントオブジェクト穴のうちの１つの完全な内側（従って、元の３Ｄコンポーネントオブジェクトのうちの１つの完全な内側）に位置し、複合オブジェクトの頂点を表す３Ｄ点を含む可能性がないために、ステップＳ３４−８でスタックから取り出されたボリュームの状態が「廃棄」と判定されたことを示すためのフラグを設定する。
【０４２５】
ステップＳ３８−２２が実行された後、処理は図３４のステップＳ３４−１２へと戻る。これは、現在のボリュームが複合オブジェクトの頂点を表す３Ｄ点を含む可能性がないことを判定するには、３Ｄ点計算器２０８０は、現在のボリュームから外れた多面体の１つだけを識別すれば良いので、現在のボリュームと更に別の多面体との間の関係を判定する必要がないからである。
【０４２６】
これに対し、ステップＳ３８−２０において、ステップＳ３４−８でスタックから取り出されたボリュームが多面体により包囲されていると判定される場合、ステップＳ３８−２４において、３Ｄ点計算器２０８０は、現在のボリュームに対するアクティブな多面体のリストからこの多面体を削除する。その結果、この多面体に対して、現在のボリュームのいずれかの子ボリュームを包囲するか否かを判定するための検査が行なわれない。
【０４２７】
処理はステップＳ３８−２６へと進み、ここで、３Ｄ点計算器２０８０は、ステップＳ３８−１２でコピーされたリスト上に現在のボリュームと交わる多角形を含まない別の多面体が存在するか否かを判定する。以上説明したようにこのような多面体の各々を処理し終わるまで、あるいは、ステップＳ３８−２０において、現在のボリュームが多面体のうちの１つから外れていると判定される（この場合、ステップＳ３８−２２においてボリュームの状態が「廃棄」と判定され、処理はステップＳ３４−１２へと戻る）まで、ステップＳ３８−１６からＳ３８−２６が繰り返される。
【０４２８】
ステップＳ３８−１４において、ステップＳ３８−１２でコピーされたリスト上に現在のボリュームと交わる多角形を有しない多面体が存在しないと判定される場合、あるいは、ステップＳ３８−２６において、このような多角形の全ての処理が終了し、これらの多角形が現在のボリュームを包囲することが判明したと判定される場合、処理はステップＳ３８−２８へと進む。
【０４２９】
ステップＳ３８−２８において、３Ｄ点計算器２０８０は、現在のボリュームと交わる多角形を定義するステップＳ３８−８で生成されたリストを読み取る。
【０４３０】
ステップＳ３８−３０において、３Ｄ点計算器２０８０は、ステップＳ３８−２８で読み取られたリスト上の多角形の数が３であるか、３より大きいか、あるいは、３未満であるかを判定する。
【０４３１】
ステップＳ３８−３０において、現在のボリュームと交わる多角形の数が３未満であると判定される場合、ステップＳ３８−３２において、３Ｄ点計算器２０８０は、相互に交わり、複合オブジェクトの頂点を表す３Ｄ点を生成するのに十分な数の多角形をボリュームが含まないために、ステップＳ３４−８でスタックから取り出されたボリュームの状態が「廃棄」と判定されたことを示すためのフラグを設定する。続いて、処理は図３４のステップＳ３４−１２へと戻る。
【０４３２】
ステップＳ３８−３０において、現在のボリュームと交わる多角形の数が３であると判定される場合、ステップＳ３８−３４において、３Ｄ点計算器２０８０は、相互に交わり、複合オブジェクトの頂点を表す単一の３Ｄ点を定義するのに適した数の多角形をボリュームが含むために、ステップＳ３４−８でスタックから取り出されたボリュームの状態が「頂点の計算」と判定されたことを示すためのフラグを設定する。処理は図３４のステップＳ３４−１２へと戻る。
【０４３３】
ステップＳ３８−３０において、現在のボリュームと交わる多角形の数が３より多いと判定される場合、ステップＳ３８−３６において、３Ｄ点計算器２０８０は、相互に交わり、複合オブジェクトの頂点を表す単一の３Ｄ点を定義するのに必要な数（すなわち、３つ）より多い多角形をボリュームが含むために、ステップＳ３４−８でスタックから取り出されたボリュームの状態が「再分割」と判定されたことを示すためのフラグを設定する。処理は図３４のステップＳ３４−１２へと戻る。
【０４３４】
図３８を参照して説明した処理を行なった結果、３Ｄ点計算器２０８０は、ステップＳ３４−８でスタックから取り出されたボリュームの状態の判定を終了し、判定された状態に従って、どの後続の処理をボリュームに対して実行すべきかを示すフラグの設定を終了する。
【０４３５】
再度図３４を参照すると、以上説明したようなボリュームの状態を判定するための処理を実行した後、ステップＳ３４−１２において、３Ｄ点計算器２０８０は、状態が「頂点の計算」であるか否かを判定する。
【０４３６】
ステップＳ３４−１２において、頂点を計算すべきであると判定される場合、処理はステップＳ３４−１４へと進み、ここで、頂点の計算が行なわれる。頂点を計算すべきであると判定されない場合、ステップＳ３４−１４は省略される。
【０４３７】
図４２は、頂点を計算するためにステップＳ３４−１４で３Ｄ点計算器２０８０により実行される処理動作を示す。
【０４３８】
図４２のステップＳ４２−２において、３Ｄ点計算器２０８０は、３つの多角形を含む３つの平面が交わる点の３Ｄ位置を計算する（この処理は、従来の平面共通部分技術を使用して実行される）。
【０４３９】
ステップＳ４２−４において、３Ｄ点計算器２０８０は、ステップＳ４２−２で計算された３Ｄ点が、ステップＳ３４−８でスタックから取り出された３Ｄボリューム内にあると同時に２Ｄ多角形の３つ全ての内部にもあるか否かを判定する。３Ｄ点は多角形を含む各平面の共通部分として計算され、各平面は、必ずしもボリューム中の点、あるいは、実際に各多角形の一部である（すなわち、各多角形の内部にある）点で相互に交わる必要がないので、この検査が必要である。ステップＳ３４−８でスタックから取り出されたボリュームは、軸方向に整列した直平行六面体であるので、３Ｄ点がボリュームの内側にあるか否かを判定するための検査は、３Ｄ点の座標と最小／最大ｘ座標、最小／最大ｙ座標及び最小／最大ｚ座標との間での従来の不等検査を使用して実行される。３Ｄ点が各２Ｄ多角形内にあるか否かを判定するための処理は、“Graphics Gems”（IV、１６〜４６ページ、P. Heckbert編集、Morgan Kaufmann出版、ISBN 0-12-336155-9）に記載されるような従来の方法で実行される。
【０４４０】
ステップＳ４２−４において、計算された３Ｄ点がボリュームの内側にあると同時に３つの多角形全ての内部にもあると判定される場合、処理はステップＳ４２−６へと進み、ここで、３Ｄ点計算器２０８０は、計算された３Ｄ点を複合オブジェクトの頂点を表す３Ｄ点のリストに加える。
【０４４１】
これに対し、ステップＳ４２−４において、計算された３Ｄ点がボリュームの外側、あるいは、３つの多角形のうちの少なくとも１つの外側にあると判定される場合、ステップＳ４２−６は省略される。
【０４４２】
ステップＳ４２−８において、３Ｄ点計算器２０８０は、ステップＳ３４−８でスタックから取り出されたボリュームの処理が終了したのでこのボリュームを廃棄することを示すためのフラグを設定する。
【０４４３】
再度図３４を参照すると、ステップＳ３４−１６において、３Ｄ点計算器２０８０は、ステップＳ３４−８でスタックから取り出されたボリュームの状態が「廃棄」に設定されるのか、あるいは、「再分割」に設定されるのかを判定する。
【０４４４】
状態が「廃棄」（ステップＳ３４−１０での処理により、あるいは、ステップＳ４２−８の結果としてステップＳ３４−１４で設定される可能性がある）に設定される場合、ステップＳ３４−１８において、３Ｄ点計算器２０８０はこのボリュームを廃棄する。
【０４４５】
これに対し、ボリュームの状態が「再分割」に設定される場合、ステップＳ３４−２０において、３Ｄ点計算器２０８０は、ボリュームを再分割し、子ボリュームをステップＳ３４−４で作成されたスタックの最上部に加える。この実施形態では、ステップＳ３４−２０でのボリュームの再分割は、ステップＳ３４−４での再分割と同様に実行される。すなわち、この再分割は、８つの新規の子ボリュームを生成するためのボリュームの２値再分割である。
ステップＳ３４−１８又はステップＳ３４−２０に引き続いて、処理はステップＳ３４−２２へと進む。ここで、３Ｄ点計算器２０８０は、スタック上に別のボリューム（ステップＳ３４−２０で加えられた子ボリュームを含む）が存在するか否かを判定する。
【０４４６】
以上説明したようにスタック上の各ボリュームを処理し終わるまでステップＳ３４−８からＳ３４−２２が繰り返される。
【０４４７】
図４３において、このように処理が実行された結果、３Ｄ点計算器２０８０は、複合オブジェクトの頂点を表す３Ｄ空間中の１組の点（図４３中の各円により示す）を生成する。各頂点は、同じ２つ又は３つのコンポーネントオブジェクトを元にした３つの多角形が交わる位置を表す。
【０４４８】
図３３ｂを再度参照すると、コンポーネントオブジェクト２２１０の頂点２４２０、２４３０及び２４４０は、コンポーネントオブジェクト２２００の内側にある。このため、３Ｄ点計算器２０８０により実行される処理では、これらの頂点は計算されず、複合オブジェクトの一部を形成しない（これらの頂点は、コンポーネントオブジェクト２２００に対してステップＳ３４−６で生成された多面体２６００から「外れた」ボリューム中に位置するためである）。従って、再度図４３を参照すると、複合オブジェクトの頂点２８００、２８０２及び２８０４は、頂点２８０６、２８０８、２８１０及び２８１２と同じ平面に位置する。
【０４４９】
理解を助けるため、図４３において、複合オブジェクトの頂点間の連結は点線により示される。しかし、処理のこの段階では、頂点間の連結はまだ計算されておらず、処理装置２００２は、連結を計算するための処理を実行する。次にこの処理の説明を行なう。
【０４５０】
再度図３２を参照すると、ステップＳ３２−８において、多角形生成器２０９０は、３Ｄ点計算器２０８０により計算された３Ｄ点を連結してこの３Ｄ点間の連結を計算し、複合オブジェクトの表面を表す多角形メッシュを生成する。
【０４５１】
ステップＳ３２−８において多角形生成器２０９０により実行される処理は、ステップＳ２３−２で実行される処理を除き、第１実施形態のステップＳ８−８において多角形生成器８６により実行される処理（図２３を参照して説明）と同じである。従って、この処理における差異のみをここで説明する。
【０４５２】
図４４は、複合オブジェクトの頂点を表す計算された３Ｄ点ごとに、平面データを生成し、「シグネチャ」を定義するために第２実施形態のステップＳ２３−２で多角形生成器２０９０により実行される処理動作を示す。
【０４５３】
図４４のステップＳ４４−２において、多角形生成器２０９０は、ステップＳ４２−２において３Ｄ点が３Ｄ点計算器２０８０により計算され、ステップＳ４２−６において複合オブジェクトの頂点のリストに加えられる元となった次の多角形を考慮する（このステップが初めて実行される場合、これは最初の多角形である）。
【０４５４】
ステップＳ４４−４において、多角形生成器２０９０は、このステップの前回の反復時に固有のＩＤが割り当てられている場合を除き、ステップＳ４４−２で選択された多角形にこのＩＤを割り当てる。
【０４５５】
ステップＳ４４−６において、多角形生成器２０９０は、複合オブジェクトの頂点を計算するのに使用される別の多角形が存在するか否かを判定し、以上説明したように各多角形を処理し終わるまで、ステップＳ４４−２からＳ４４−６が繰り返される。
【０４５６】
ステップＳ４４−８において、多角形生成器２０９０は、ステップＳ４２−６で３Ｄ点計算器２０８０により生成されたリストから複合オブジェクトの次の計算された頂点を考慮し、ステップＳ４４−１０において、３Ｄ点で交わる多角形のＩＤ（ステップＳ４４−４で多角形に割り当てられたＩＤ）から構成される頂点に対するシグネチャを定義する。
【０４５７】
ステップＳ４４−１２において、多角形生成器２０９０は、複合オブジェクトの別の計算された頂点が存在するか否かを判定し、以上説明したように各頂点を処理し終わるまで、ステップＳ４４−８からＳ４４−１２が繰り返される。
【０４５８】
ステップＳ３２−８での処理を実行した結果、多角形生成器２０９０は、複合オブジェクトの表面を表す三角の多角形のメッシュを生成する。
【０４５９】
図３２を再度参照すると、ステップＳ３２−１０において、中央制御装置２０２０は、出力データ記憶装置２１１０から複合オブジェクトの３Ｄコンピュータモデルを定義するデータを、例えば、ディスク２１２０などの記憶装置に格納されるデータとして、又は、信号２１３０（図３１）として出力する。これに加えて、又はその代わりに、中央制御装置２０２０は、ディスプレイプロセッサ２１１０に、複合オブジェクトの３Ｄコンピュータモデルを、例えば、ユーザ入力装置２００６を使用してユーザにより入力された視点に従って表示装置２００４に表示させても良い。
【０４６０】
第３実施形態
本発明の第３実施形態を説明する。
【０４６１】
第３実施形態の構成要素及びそれにより実行される処理動作は、図４のステップＳ４−１６でサーフェスモデラ８０により実行される処理動作を除いて、第１実施形態と同じであり、この処理動作は第３実施形態では異なっている。
【０４６２】
この差異を説明する。
【０４６３】
図４５は、第３実施形態において、図４のステップＳ４−１６でサーフェスモデラ８０により実行される処理動作を示す。
【０４６４】
図４５のステップＳ４５−２において、シルエットアプロキシメータ８２は、図４のステップＳ４−８においては画像データセグメンタ６０、ステップＳ４−１２においては画像分割エディタ７０により予め生成された分割画像データを処理し、各入力画像中の被写体オブジェクトのシルエットを直線で近似する。この処理は、第１実施形態において図８のステップＳ８−２でシルエットアプロキシメータ８２により実行された処理と同じであり、各シルエットは、図９の例で示されるように、連結された直線により近似される。
【０４６５】
ステップＳ４５−４において、３Ｄ点計算器８４は、各シルエットの各直線を３次元空間へと投影し、直線の端点を通り、この直線を含む画像が記録されたときのカメラ２３０の焦点の位置で交わるエッジを有する無限の平面三角形を生成する（各画像の焦点位置は、ステップＳ４−６でカメラ計算器５０により予め計算済である）。
【０４６６】
再度図１０に戻ると、ステップＳ４５−４で実行される処理により、３次元空間における各点（この時点では未知）で被写体オブジェクト２１０の表面に接すると共に、カメラ２３０の焦点位置に頂点を有する複数の三角形の平面（シルエットの線分ごとに１つ）から成る無限の円錐形５２０から構成される多面体を各入力画像に対して生成する。従って、各円錐形の横断面は、円錐形を生成する元となったシルエットと同じ形状である。
【０４６７】
３Ｄ点計算器８４は、各多面体中の平面の各々に対して固有のＩＤを割り当てる。
【０４６８】
ステップＳ４５−６からＳ４５−１８において、３Ｄ点計算器８４は、ステップＳ４５−４で生成された多面体からの平面の共通部分の各点を計算し、共通部分の計算された各点を検査して被写体オブジェクト２１０の表面の各点を表すか否かを判定するための処理を実行する。
【０４６９】
具体的には、ステップＳ４５−６において、３Ｄ点計算器８４は、ステップＳ４５−４で生成された全ての多面体の全ての平面を考慮し、少なくとも２つの多面体の面を含むこれらの平面のうちの３つから成る次の組を考慮する（ステップＳ４５−６が初めて実行される場合、これは最初の組である）。
【０４７０】
ステップＳ４５−８において、３Ｄ点計算器８４は、ステップ４５−６で考慮された３つの平面の共通部分の点を計算する。具体的には、この実施形態において、共通部分の点は、従来の平面共通部分アルゴリズムを使用して、３つの平面を含む３つの平面が交わる点を計算することによって計算される。
【０４７１】
ステップＳ４５−１０において、３Ｄ点計算器８４は、ステップＳ４５−８で計算された共通部分の点が、ステップＳ４５−４で生成された全ての多面体の内部に位置するか否かを判定する。
【０４７２】
ステップＳ４５−１０において、点が少なくとも１つの多面体の外側に位置すると判定される場合、被写体オブジェクト２１０の表面の点を表す可能性がないために、ステップＳ４５−１２においてこの点は廃棄される。
【０４７３】
これに対し、ステップＳ４５−１０において、点が全ての多面体の内部にあると判定される場合、ステップＳ４５−１４において、３Ｄ点計算器８４は、その点がステップＳ４５−６で考慮された３つの平面の全ての内部にあるか否かを判定する（点は、平面自体の共通部分の点を計算することによってではなく、各面を含む平面の共通部分の点を計算することによって計算されるので、点はこれらの平面の１つ以上の外側にあっても良いことに留意すべきである）。
【０４７４】
ステップＳ４５−１４において、点が平面のうちの少なくとも１つの外側に位置する場合、ステップＳ４５−１２において、点は被写体オブジェクト２１０の表面の点を表す可能性がないので廃棄される。
【０４７５】
これに対し、ステップＳ４５−１４において、点が３つの平面の全ての内部にあると判定される場合、ステップＳ４５−１６において、点は被写体オブジェクト２１０の表面の点として保持される。加えて、点には、そこで交わる各平面の３つのＩＤ（これらのＩＤは、ステップＳ４５−４で予め平面に割り当てられたＩＤである）から形成される三重値から構成される「シグネチャ」が割り当てられる。
【０４７６】
ステップＳ４５−１８において、３Ｄ点計算器８４は、少なくとも２つの多面体の面を含む３つの平面から成る別の組が存在するか否かを判定する。以上説明したように少なくとも２つの多面体の３つの平面の各組を処理し終わるまで、ステップＳ４５−６からＳ４５−１８が繰り返される。
【０４７７】
この処理を実行した結果、３Ｄ点計算器８４は、少なくとも２つの多面体の３つの平面の全ての予想可能な組み合わせの共通部分の点を計算／検査し、被写体オブジェクト２１０の表面の点を表す３Ｄ空間中の各点から構成される被写体オブジェクト２１０の３Ｄコンピュータモデルを生成する。
【０４７８】
ステップＳ４５−２０において、多角形生成器８６は、各点に割り当てられたシグネチャを使用して、ステップＳ４５−１６で保持された３Ｄ点を連結し、どの点を相互に連結すべきかを判定し、それにより、被写体オブジェクト２１０の表面を表す多角形メッシュを生成する。従って、３Ｄ点を連結して多角形メッシュを生成するための処理は、ステップＳ４５−４で生成された全ての多面体の共通部分から生成される３Ｄ点が計算／検査された後に実行される。
【０４７９】
第３実施形態のステップＳ４５−２０で多角形生成器８６により実行される処理は、第３実施形態では図２５のステップＳ２５−１０からＳ２５−１４が実行されない点を除いて、第１実施形態においてステップＳ８−８で実行される処理と同じである。ステップＳ２５−１０からＳ２５−１４の処理は代わりに図４５のステップＳ４５−１６で実行される。
【０４８０】
第１実施形態で実行される処理よりも計算上高い費用がかかるが、それでも、被写体オブジェクト２１０の３Ｄコンピュータモデルを生成するために第３実施形態で実行される処理は、３Ｄコンピュータモデルを生成する従来の方法よりも、必要とする処理資源及び／又は処理時間が少なくて済む。
【０４８１】
以上説明した各実施形態に対しては、特許請求の範囲内で多数の変形を行なうことができる。
【０４８２】
例えば、上述の第１実施形態及び第３実施形態では、入力画像データは、カメラ２３０により記録された被写体オブジェクト２１０の「静止」画像であったが、この入力画像は、ビデオカメラにより記録された画像データのフレームであっても良い。
【０４８３】
上述の第１実施形態及び第３実施形態では、ステップＳ４−４において、カメラの固有パラメータを定義するためにユーザにより入力されたデータが格納される。しかし、その代わりに、固有のカメラパラメータの一部又は全部に対してデフォルト値を想定しても、あるいは、Hartleyの“Euclidean Reconstruction From Uncalibrated Views”（Applications of Invariance in Computer Vision、Mundy, Zisserman and Forsyth編集、２３７〜２５６ページ、Azores、１９９３年）に記載されるような従来の方法で、固有のパラメータ値を計算するための処理を実行しても良い。
【０４８４】
上述の第１実施形態及び第３実施形態では、図５を参照して説明したように、被写体オブジェクト２１０に関連する入力画像からの画像データが、背景に関連する画像データから分割される。しかし、他の従来の分割方法を代わりに使用しても良い。例えば、写真マット３４及び背景（又は背景のみ）の色を表す単一のＲＧＢ値が格納され、入力画像中の各画素が処理されてＲＧＢ背景値とＲＧＢ画素値との間のＲＧＢ空間でのユークリッド距離が特定の閾値未満であるか否かが判定される分割方法が使用されても良い。
【０４８５】
上述の第１実施形態及び第３実施形態では、カメラ計算器５０は、写真マット３４に対するカメラ２３０の位置及び向きを入力画像ごとに計算する（ステップＳ４−６を参照して説明済）ことによって、入力画像の相対的な位置及び向きを計算する。しかし、撮影位置及び向きが計算される方法は重要ではない。例えば、写真マット３４を廃棄し、その代わりに、被写体オブジェクト２１０を包囲し、各々が処理装置２に入力される既知で固定の位置及び向きを有する複数のカメラを使用して入力画像を生成しても良い。あるいは、写真マット３４を廃棄し、被写体オブジェクト２１０がその正確な回転を処理装置２に入力する位置符号器を有するターンテーブル上に設置されても良い。カメラ２３０の固定位置及びターンテーブルの角度が分かっているので、処理装置２は、被写体オブジェクト２１０の各画像の相対的な位置及び向きを計算することができる。
【０４８６】
上述の第１実施形態では、ステップＳ１３−８で実行される処理中にフラグ“eitherSubdivideOrDiscard”が設定される。しかし、ステップＳ１５−２６及びＳ１５−４６において「ｎｐ」カウンタをオーバーフローさせる（すなわち、第１実施形態において値が３を超過する）処理を実行した結果、処理は依然として機能するので、このフラグを必ずしも設定する必要はない。
【０４８７】
上述の第１実施形態では、ステップＳ１５−１６において、処理装置２は、投影されたボリュームと交わる１組の「候補エッジ」を生成する。後続の検査は、その１組の候補エッジに位置するエッジに限定される。しかし、ステップＳ１５−１６（及びステップＳ１５−１６の処理を促進するために実行されるステップＳ８−４）が省略され、後続の検査が全てのエッジで行なわれても良い。しかし、これにより、実行しなければならない処理動作の量が大幅に増加する可能性がある。
【０４８８】
第１実施形態では、ステップＳ１３−２を参照して説明したオブジェクト表面の全ての計算された点が位置する３Ｄボリュームを定義するための処理を実行する代わりに、様々な方法で３Ｄボリュームを定義するための処理が実行されても良い。例えば、初期開始ボリュームは、任意の大きな立方体として定義されても良い。立方体が初期ボリュームに加えられるか（全ての隅が全てのカメラの正面にある場合）、廃棄されるか（全ての角がカメラのうちの１台の背面にある場合、又は、立方体がある所定の寸法よりも小さい場合）、あるいは、再分割されるか（これらの条件のいずれにも当てはまらない場合）のいずれかである。再分割された立方体は同様に処理される。このように、ステップＳ１３−２で定義される３Ｄボリュームは、１組の立方体の結合から成ると考えられ、完全に全てのカメラの正面に位置し且つ最小の立方体寸法により求められる許容誤差までの最大範囲になることが保証される。
【０４８９】
上述の第１実施形態では、単一の頂点のみを含むような十分に小さいボリュームが得られるまで、３Ｄ空間のボリュームは繰り返し再分割される。しかし、その代わりに、３Ｄボリュームの再分割は、ボリュームが２つ以上の所定数の頂点を含むときに停止しても良い。複数の頂点の各々が計算／検査され、第１実施形態で各単一の頂点が計算／検査されたのと同様に被写体オブジェクトの実際の頂点を表すか否かが判定されても良い。
【０４９０】
第１実施形態及び第３実施形態に対して説明された処理動作が、ステップＳ８−２で生成されたシルエットが穴（及び穴の内部の島）を表す多角形を含む場合にまで拡張できるのは明白である。
【０４９１】
上述の第２実施形態では、ステップＳ３８−３０及びＳ３８−３６において、現在のボリュームと交わる多角形の数が３より多い場合に、ボリュームの状態は「再分割」に設定される。しかし、その代わりに、現在のボリュームと交わる多角形が３個より多く所定数（例えば５個）以下の個数で存在する場合、ボリュームの状態は「複数の頂点の計算」に設定されても良い。従って、後続の処理において、処理装置２００２は、ボリュームと交わる３つの多角形から成る部分集合により定義される各頂点を計算／検査するであろう。従って、ボリュームは、これと交わる多角形が所定の最大数より多く存在する場合にのみ再分割されると考えられる。このように、ボリュームは２つ以上の頂点を複合オブジェクトのモデルに加えることができ、それにより、（別の候補頂点を計算／検査する手間をかけて）更にボリュームを再分割する処理を行なわなくて済む。
【０４９２】
第１実施形態において、ステップＳ１３−１８でスタックから取り出された３Ｄボリュームを再分割する際、及び、第２実施形態のステップＳ３４−４及びＳ３４−２０において、実行される再分割は、８つの新規の子ボリュームを生成するボリュームの２値再分割である。しかし、言うまでもなく、他の種類の再分割を行なうこともできる。
【０４９３】
上述の第３実施形態では、ステップＳ４５−８において、３つの平面の共通部分の点は、各面を含む３つの無限の平面が交わる点を計算することによって計算される。引き続いて、ステップＳ４５−１０及びＳ４５−１４において、計算された点が全ての多面体の内部にあると同時に、３つの平面全ての内部にあるか否かを判定するための検査が実行される。しかし、その代わりに、ステップＳ４５−８において、３つの平面自体の共通部分の点が（これらが位置する平面の代わりに）計算されても良い。この場合、ステップＳ４５−１０及びＳ４５−１４は省略される。
【０４９４】
上述の第３実施形態では、被写体オブジェクトの表面のコンピュータモデルを生成する第１実施形態での処理に対する変形を説明している。多面体の共通部分を計算／検査し、結果として生じる点を連結してサーフェスモデルを生成するための第２実施形態での処理も、同様に変形することができるであろう。
【０４９５】
上述の第１実施形態及び第２実施形態では、オブジェクトの表面の計算すべき点の全てを含むように定義される（第１実施形態のステップＳ１３−２及び第２実施形態のステップＳ３４−２で定義される）初期ボリュームは、各々がオブジェクトの表面の所定数の３Ｄ点のみを含むように十分に小さいボリュームが生成されるまで、より小さいボリュームへと繰り返し再分割される。再分割プロセスを介してこのような小さいボリュームが得られるようになってから、３Ｄ点が計算／検査される。これは、オブジェクトの表面上の点を表す点を計算するのに特に効率的な方法ではあるが、他の方法を使用しても良い。例えば、計算された３Ｄ点の全てを含むことになる初期ボリュームが、多面体を構成する平面多角形の位置を参照することなく複数の部分へと分割され、その部分を更に再分割することなく３Ｄ点の計算が実行されても良い。具体的には、ボリュームは、（例えば、同じ形状及びボリュームの）複数の部分へと分割され、各部分が多面体に対して検査され、その全体が多面体のうちの少なくとも１つの外側にあるか否かが判定されても良い。ボリューム部分が少なくとも１つの多面体の外側にある場合、そのボリューム部分は廃棄される。これに対し、ボリュームが少なくとも部分的に全ての多面体の内部にある場合、多面体の平面多角形が相互に交わるボリューム部分中の３Ｄ点が計算される。このように、各ボリューム部分が廃棄されるか、あるいは、３Ｄ点が計算されるが、更なる再分割が起こることはない。ボリューム部分の３Ｄ点を計算するために、３つの平面多角形の各組み合わせが考慮され、これらの多角形の共通部分が計算／検査され、ボリューム部分の内部にあるか否かが判定される。これにより、上述の第１実施形態及び第２実施形態と比較して、計算／検査の必要がある共通部分の数は増加するが、依然として、３Ｄコンピュータモデルを生成するには効率的な方法である。なぜなら、ボリューム部分が全ての多面体の外側に位置する場合には、このボリューム部分を廃棄することができ、多面体を構成する平面多角形の全ての予想可能な共通部分を計算／検査する必要がないからである。
【０４９６】
以上説明した全ての実施形態では、プログラミング命令により定義される処理ルーチンを使用してコンピュータにより処理を行なう。しかし、処理の一部又は全部は、言うまでもなく、ハードウェアを使用して実行されても良い。
【図面の簡単な説明】
【図１】本発明の第１実施形態の構成要素を、プログラミング命令によりプログラムされたときに処理装置の構成要素が構成されるものと考えられる概念上の機能処理ユニットと共に概略的に示す図である。
【図２】３Ｄコンピュータモデルを生成すべきオブジェクトの画像の記録を示す図である。
【図３】図１の処理装置に入力されるオブジェクトの画像を示す図である。
【図４ａ】、
【図４ｂ】、図１の処理装置が入力データを処理するために実行する処理動作を示す図である。
【図５ａ】、
【図５ｂ】、
【図５ｃ】図４のステップＳ４−８で実行される処理動作を示す図である。
【図６】図４のステップＳ４−１２で実行される処理動作を示す図である。
【図７】図６のステップＳ６−２及びＳ６−４の処理中における図１の表示装置の画面の一例を示す図である。
【図８】図４のステップＳ４−１６で実行される処理動作を示す図である。
【図９】ステップＳ８−２で実行される処理の結果、直線で近似される被写体オブジェクトのシルエットの一例を示す図である。
【図１０】シルエットにより定義される多面体の一例を示すと共に、様々な多面体を元にした多角形が交わって３Ｄコンピュータモデル中の各点をどのように生成するかを示す図である。
【図１１ａ】、
【図１１ｂ】図８のステップＳ８−４で実行される処理動作を示す図である。
【図１２】図１１のステップＳ１１−４からＳ１１−８で実行される処理動作の一例を示す図である。
【図１３】図８のステップＳ８−６で実行される処理動作を示す図である。
【図１４ａ】、
【図１４ｂ】、
【図１４ｃ】図１３のステップＳ１３−２で３Ｄボリュームがどのように定義されるかを示す図である。
【図１５ａ】、
【図１５ｂ】、
【図１５ｃ】、
【図１５ｄ】図１３のステップＳ１３−８で実行される処理動作を示す図である。
【図１６】図１５のステップＳ１５−２でのボリュームの２Ｄ画像への投影の一例を示す図である。
【図１７ａ】、
【図１７ｂ】、
【図１７ｃ】、
【図１７ｄ】、
【図１７ｅ】、
【図１７ｆ】、
【図１７ｇ】、
【図１７ｈ】２次元画像中のボリュームの投影と画像中のオブジェクトのシルエットのエッジとの間の８つの関係であって、そのうちのどれが存在するかを検査するための処理が第１実施形態において実行される関係を示す図である。
【図１８】図１５のステップＳ１５−１６で実行される処理動作を示す図である。
【図１９】図１８のステップＳ１８−２、Ｓ１８−４及びＳ１８−６で実行される処理動作の一例を示す図である。
【図２０】図１５のステップＳ１５−１８で実行される処理動作を示す図である。
【図２１】図１５のステップＳ１５−３８で実行される処理動作を示す図である。
【図２２】図１３のステップＳ１３−１２で実行される処理動作を示す図である。
【図２３】図８のステップＳ８−８で実行される処理動作を示す図である。
【図２４】図２３のステップＳ２３−２で実行される処理動作の一例を示す図である。
【図２５】図２３のステップＳ２３−２で実行される処理動作を示す図である。
【図２６】図２３のステップＳ２３−４で実行される処理動作を示す図である。
【図２７】図２３のステップＳ２３−６で実行される処理動作の一例を示す図である。
【図２８】図２３のステップＳ２３−６で実行される処理動作の別の例を示す図である。
【図２９】図２３のステップＳ２３−６で実行される処理動作の更なる例を示す図である。
【図３０ａ】、
【図３０ｂ】、
【図３０ｃ】、
【図３０ｄ】図２３のステップＳ２３−６で実行される処理動作を示す図である。
【図３１】本発明の第２実施形態の構成要素を、プログラミング命令によりプログラムされたときに処理装置の構成要素が構成されるものと考えられる概念上の機能処理ユニットと共に概略的に示す図である。
【図３２】図３１の処理装置が入力データを処理するために実行する処理動作を示す図である。
【図３３ａ】図３２のステップＳ３２−２で生成される構成要素オブジェクトの一例を示す図である。
【図３３ｂ】図３３ａからの構成要素オブジェクトが図３２のステップＳ３２−４でどのように配置されるかの一例を示す図である。
【図３４】図３２のステップＳ３２−６で実行される処理動作を示す図である。
【図３５】バウンディングボリュームが図３４のステップＳ３４−２でどのように定義されるかを示す図である。
【図３６】図３４のステップＳ３４−２で定義されたボリュームが、ステップＳ３４−４でどのように再分割されるかを示す図である。
【図３７】構成要素オブジェクトを表す穴を含む多面体が、図３４のステップＳ３４−６でどのように生成されるかを示す図である。
【図３８ａ】、
【図３８ｂ】、
【図３８ｃ】図３４のステップＳ３４−１０で実行される処理動作を示す図である。
【図３９】図３８のステップＳ３８−１８で実行される処理動作を示す図である。
【図４０ａ】、
【図４０ｂ】図３９のステップＳ３９−２、Ｓ３９−４及びＳ３９−６で実行される処理動作の第１の例を示す図である。
【図４１ａ】、
【図４１ｂ】図３９のステップＳ３９−２、Ｓ３９−４及びＳ３９−６で実行される処理動作の第２の例を示す図である。
【図４２】図３４のステップＳ３４−１４で実行される処理動作を示す図である。
【図４３】図３２のステップＳ３２−６で実行される処理の結果を示す図である。
【図４４】図２３のステップＳ２３−２で第２実施形態において実行される処理動作を示す図である。
【図４５ａ】、
【図４５ｂ】図４のステップＳ４−１６で第３実施形態において実行される処理動作を示す図である。
【図１】
0003793115.tif 000005
【図２】
0003793115.tif 000006
【図３】
0003793115.tif 000007
【図４ａ】
0003793115.tif 000008
【図４ｂ】
0003793115.tif 000009
【図５ａ】
0003793115.tif 000010
【図５ｂ】
0003793115.tif 000011
【図５ｃ】
0003793115.tif 000012
【図６】
0003793115.tif 000013
【図７】
0003793115.tif 000014
【図８】
0003793115.tif 000015
【図９】
0003793115.tif 000016
【図１０】
0003793115.tif 000017
【図１１ａ】
0003793115.tif 000018
【図１１ｂ】
0003793115.tif 000019
【図１２】
0003793115.tif 000020
【図１３】
0003793115.tif 000021
【図１４ａ】
0003793115.tif 000022
【図１４ｂ】
0003793115.tif 000023
【図１４ｃ】
0003793115.tif 000024
【図１５ａ】
0003793115.tif 000025
【図１５ｂ】
0003793115.tif 000026
【図１５ｃ】
0003793115.tif 000027
【図１５ｄ】
0003793115.tif 000028
【図１６】
0003793115.tif 000029
【図１７ａ】
0003793115.tif 000030
【図１７ｂ】
0003793115.tif 000031
【図１７ｃ】
0003793115.tif 000032
【図１７ｄ】
0003793115.tif 000033
【図１７ｅ】
0003793115.tif 000034
【図１７ｆ】
0003793115.tif 000035
【図１７ｇ】
0003793115.tif 000036
【図１７ｈ】
0003793115.tif 000037
【図１８】
0003793115.tif 000038
【図１９】
0003793115.tif 000039
【図２０】
0003793115.tif 000040
【図２１】
0003793115.tif 000041
【図２２】
0003793115.tif 000042
【図２３】
0003793115.tif 000043
【図２４】
0003793115.tif 000044
【図２５】
0003793115.tif 000045
【図２６】
0003793115.tif 000046
【図２７】
0003793115.tif 000047
【図２８】
0003793115.tif 000048
【図２９】
0003793115.tif 000049
【図３０ａ】
0003793115.tif 000050
【図３０ｂ】
0003793115.tif 000051
【図３０ｃ】
0003793115.tif 000052
【図３０ｄ】
0003793115.tif 000053
【図３１】
0003793115.tif 000054
【図３２】
0003793115.tif 000055
【図３３ａ】
0003793115.tif 000056
【図３３ｂ】
0003793115.tif 000057
【図３４】
0003793115.tif 000058
【図３５】
0003793115.tif 000059
【図３６】
0003793115.tif 000060
【図３７】
0003793115.tif 000061
【図３８ａ】
0003793115.tif 000062
【図３８ｂ】
0003793115.tif 000063
【図３８ｃ】
0003793115.tif 000064
【図３９】
0003793115.tif 000065
【図４０ａ】
0003793115.tif 000066
【図４０ｂ】
0003793115.tif 000067
【図４１ａ】
0003793115.tif 000068
【図４１ｂ】
0003793115.tif 000069
【図４２】
0003793115.tif 000070
【図４３】
0003793115.tif 000071
【図４４】
0003793115.tif 000072
【図４５ａ】
0003793115.tif 000073
【図４５ｂ】
0003793115.tif 000074