(57)【特許請求の範囲】
【請求項１】
異なる視点で撮影された複数の入力画像から被写体の三次元位置を求める三次元位置検出手段と、
前記被写体の三次元位置と、前記複数の入力画像から、被写体画像を作成する被写体画像作成手段と、
前記三次元位置及び前記被写体画像から、台紙上に前記被写体画像を配置し、前記台紙を開閉することによって被写体画像が起き上がる展開図を作り出す展開図算出手段とを有することを特徴とする、立体物形成装置。
【請求項２】
前記展開図算出手段は、透視変換による前記被写体の画像上の大きさ変化を補正して展開図を作ることを特徴とする、請求項１に記載の立体物形成装置。
【請求項３】
異なる視点で撮影された複数の入力画像から被写体の三次元位置を求める三次元位置検出手段と、
前記被写体の三次元位置と、前記複数の入力画像から、背景画像と被写体画像を作成する背景・被写体画像作成手段と、
前記三次元位置及び前記背景画像と被写体画像から、台紙上に背景画像と被写体画像を配置し、前記台紙を開閉することによって背景画像と被写体画像が起き上がる展開図を作り出す展開図算出手段とを有することを特徴とする、立体物形成装置。
【請求項４】
前記背景・被写体画像作成手段は、被写体で隠れて抜け落ちている背景部分を周囲の画像を使って埋めることを特徴とする、請求項３に記載の立体物形成装置。
【請求項５】
前記展開図算出手段は、透視変換による背景や被写体の画像上の大きさ変化を補正して展開図を作ることを特徴とする、請求項３に記載の立体物形成装置。
【請求項６】
前記展開図算出手段は、台紙部分が前記背景画像中の地面部分となるようにし、前記背景画像と前記被写体画像が地面に直接接する展開図を作ることを特徴とする、請求項３に記載の立体物形成装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、文字や図・写真を含む画像を画像処理を用いて動きのある立体模型を実現するのに適する立体物形成装置に関する。
【０００２】
【従来の技術】
Ｚ．Ｚｈａｎｇ，‘‘Ｅｓｔｉｍａｔｉｎｇ  Ｍｏｔｉｏｎ  ａｎｄ  Ｓｔｒｕｃｔｕｒｅ  ｆｒｏｍ  Ｃｏｒｒｅｓｐｏｎｄｅｎｃｅｓ  ｏｆ  Ｌｉｎｅ  Ｓｅｇｍｅｎｔｓ  ｂｅｔｗｅｅｎ  Ｔｗｏ  Ｐｅｒｓｐｅｃｔｉｖｅ  Ｉｍａｇｅｓ’’：ＩＥＥＥ  Ｔｒａｎ．  Ｐａｔｔｅｒｎ  ａｎａｌｙｓｙｓ  ａｎｄ  ｍａｃｈｉｎｅ  ｉｎｔｅｌｌｉｇｅｎｃｅ，ｖｏｌ．１７，Ｎｏ．１２，ｐｐ．１１２９−１１３９，Ｄｅｃ  １９９５にあるように、左右から撮影した画像に対し、対応点を探し、三次元情報を取り出す技術は従来からある。
【０００３】
また、特開平８−６３５０３号公報に示されているように、立体データの断層画面を印刷し重ねることで、立体模型を作成する技術がある。
【０００４】
【発明が解決しようとする課題】
しかしながら、画像から三次元情報を得られたとしても、ＶＲＭＬ（Ｖｉｒｔｕａｌ  Ｒｅａｌｉｔｙ  Ｍｏｄｅｌｉｎｇ  Ｌａｎｇｕａｇｅ）などのようにコンピュータ上で利用されることが主であり、立体模型として扱うことはなされていない。
【０００５】
また、立体模型を作る為に断層画面を重ねる方法は、印刷や工作に手間がかかるという欠点がある。また、立体模型はたたむことが難しいため、保存するのに模型と同じだけのスペースが必要となる欠点がある。さらに、立体模型は動きがなく、静的な表現しかできないという欠点がある。
【０００６】
本発明は、保存スペースが少なくて済み、処理が簡便で、処理時間が短く、画像処理を用いて立体模型を扱うことのできる立体物形成装置を実現することを目的とする。
【０００７】
【課題を解決するための手段】
請求項１に記載の立体物形成装置は、異なる視点で撮影された複数の入力画像から被写体の三次元位置を求める三次元位置検出手段と、前記被写体の三次元位置と、前記複数の入力画像から、被写体画像を作成する被写体画像作成手段と、前記三次元位置及び前記背景画像と被写体画像から、台紙上に前記被写体画像を配置し、前記台紙を開閉することによって被写体画像が起き上がる展開図を作り出す展開図算出手段と、前記展開図算出手段から得られた展開図を印刷する印刷手段とを有することを特徴とする。
【０００８】
請求項２に記載の立体物形成装置は、請求項１に記載の立体物形成装置において、前記展開図算出手段は、透視変換による前記被写体の画像上の大きさ変化を補正して展開図を作ることを特徴とする。
【０００９】
請求項３に記載の立体物形成装置は、異なる視点で撮影された複数の入力画像から被写体の三次元位置を求める三次元位置検出手段と、前記被写体の三次元位置と、前記複数の入力画像から、背景画像と被写体画像を作成する背景・被写体画像作成手段と、前記三次元位置及び前記背景画像と被写体画像から、台紙上に背景画像と被写体画像を配置し、前記台紙を開閉することによって背景画像と被写体画像が起き上がる展開図を作り出す展開図算出手段とを有することを特徴とする。
【００１０】
請求項４に記載の立体物形成装置は、請求項３に記載の立体物形成装置において、前記背景・被写体画像作成手段は、被写体で隠れて抜け落ちている背景部分を周囲の画像を使って埋めることを特徴とする。
請求項５に記載の立体物形成装置は、請求項３に記載の立体物形成装置において、前記展開図算出手段は、透視変換による背景や被写体の画像上の大きさ変化を補正して展開図を作ることを特徴とする。
請求項６に記載の立体物形成装置は、請求項３に記載の立体物形成装置において、前記展開図算出手段は、台紙部分が前記背景画像中の地面部分となるようにし、前記背景画像と前記被写体画像が地面に直接接する展開図を作ることを特徴とする。
【００１１】
【発明の実施の形態】
以下、本発明の実施の形態について図面を参照して説明する。図１は本願の発明の実施の形態を示すブロックである。
【００１２】
図１において、入力画像格納手段１は入力画像を格納しておくもので、実際には画像を格納しているＩＣメモリであったり、磁気メモリなどの記憶手段である。あるいは、画像を引き出すことができるという意味でビデオキャプチャー装置などでも実現することができる。
【００１３】
格納されている画像は被写体を異なる位置から撮影したもので、背景や被写体がほとんど動いていない場合は一つのカメラで位置を変えて撮影したもので良い。背景や被写体が動いている場合は、異なる位置に置いた複数のカメラで撮影したものや、ミラーやプリズムを使ったステレオアダプターを使い、一つのカメラの撮像内で左右あるいは上下に視差のある画像を同時に得るものであっても良い。
【００１４】
図１の三次元位置検出手段２は、入力画像格納手段１から得た複数の画像から、背景と被写体の三次元位置を計算する。ここではまず、２枚の入力画像の場合で説明する。以降、これら２枚の入力画像を左画像、右画像と呼ぶ。
【００１５】
三次元位置を計算するには、２枚の入力画像間の画素もしくはブロックの対応関係を検出し、その対応画素もしくは対応ブロックの画像上の位置からカメラとの三次元相対位置を計算する。
【００１６】
なお、厳密に計算するには、カメラのレンズパラメータ、ＣＣＤなどの撮像面のパラメータ、撮影時のカメラの三次元位置、レンズの光軸方向などの情報が必要であり、これらを全て考慮して計算するには、前記Ｚ．Ｚｈａｎｇ氏の論文にあるような方法が必要である。
【００１７】
ここでは説明を簡単にする為に、同じカメラを使ってレンズのズーム率などをいじらずに２箇所で撮影し、カメラの光軸は互いに並行でかつ地面に平行であり、撮影した位置は光軸に対して垂直に移動した２箇所で撮影した場合の図２と図３で説明する。なお、ＣＣＤは正方ピクセルで、光軸に対する傾きや回転はないものとする。
【００１８】
図２は、物体（被写体）とカメラの位置関係を上から示した図である。図２の６は物体（被写体）であり、７は左側位置で撮影したカメラのレンズ中心位置であり、９は左側カメラの撮像面であり、１１は左側カメラの左側光軸方向であり、８は右側位置で撮影したカメラのレンズ中心位置であり、１０は右側カメラの撮像面であり、１２は右側カメラの右側光軸方向である。
【００１９】
左側光軸方向１１と右側光軸方向１２は平行であり、レンズ中心位置７、８を結ぶ直線は各光軸方向１１、１２と垂直に交わり、撮像面９、１０を結ぶ直線は各光軸方向１１、１２と垂直に交わる。
【００２０】
まず２枚の入力画像間の画素もしくはブロックの対応関係を検出する。対応を検出するには、相互相関値や残差絶対値を使って検出するのが一般的である。ここでは、ブロックの残差絶対値を使った場合で説明する。
【００２１】
左右の画像の全体の大きさは共にｗ×ｈであり、左画像中の任意の位置（ｘ、ｙ）の画素値をｆ（ｘ、ｙ）とし、右画像中の任意の位置（ｘ、ｙ）の画素値をｇ（ｘ、ｙ）で表現する。なお、以下、原点は画像の左上の点であり、右方向がｘ＋方向、下方向がｙ＋方向であるとする。また、特に断りがない場合は、ブロックの位置はブロックの左上座標で表すとする。
【００２２】
位置（ａ、ｂ）、大きさｃ×ｄの左画像中のブロックＢ１に対応するブロックを右画像中から検出する場合を考える。右画像中の任意の位置（ｐ、ｑ）のブロックＢｘと左画像中のブロックＢ１との残差絶対値Ｖ（ｐ、ｑ）は、次式で定義される。
【００２３】
【数１】
0004115013.tif 000002
【００２４】
対応ブロックを検出するには、残差絶対値Ｖ（ｐ、ｑ）が最も小さくなるブロックＢｘの位置を検出すれば良い。これは、ｐを０から（ｗ−ｃ）、ｑを０から（ｈ−ｄ）までそれぞれ独立に値を変化させて、残差絶対値Ｖ（ｐ、ｑ）が最も小さくなる（ｐ、ｑ）を求めることによって得ることができる。以降、ブロックＢ１のように対応を検出する際のベースとなるブロックを参照ブロック、参照ブロックに対応するブロックを探索ブロックと呼ぶ。
【００２５】
対応の検出結果は、例えば図４のようにして格納しておく。図４の２０は全ての対応ブロックの数Ｎｂであり、２１は最初の対応の参照ブロックのｘ座標Ｌｒ［０］であり、２２は参照ブロックのｙ座標Ｔｒ［０］であり、２３は参照ブロックと探索ブロックの横幅Ｗ［０］であり、２４は参照ブロックと探索ブロックの縦幅Ｈ［０］であり、２５は最初の対応の探索ブロックのｘ座標Ｌｓ［０］であり、２６は探索ブロックのｙ座標Ｔｓ［０］であり、２７は２番目の対応の参照ブロックのｘ座標Ｌｒ［１］である。
【００２６】
次に参照ブロックの取り方について述べる。最も簡単な方法は、ユーザーに参照ブロックを指示してもらうことである。例えば、ＧＵＩを用いて、画面上の被写体（物体）を枠で囲うようにして指示してもらう、ようにする。もし、ユーザーの指示が望めない場合は、左画像をｃ×ｄの大きさのブロックがメッシュ状に上下左右に並ぶように取る。
【００２７】
次に三次元位置を算出する。図２の撮像面９、１０をレンズ中心位置７、８を中心に点対称に折り返した画像面１３、１４を定義する。通常、カメラから送られてくる画像は撮像面の画像ではなく、画像面に変換した後の画像である為この方が計算しやすい。レンズ中心位置７をこの座標系の原点Ｏとし、光軸方向１１に垂直右方向をｘ＋方向、光軸方向１１をｚ＋方向とする。
【００２８】
図３は、図２の状態を右側（ｘ＋方向）から見た図である。光軸方向１１，１２をｚ＋方向、光軸方向１１，１２に垂直下方向をｙ＋方向とする。なお、画像面１３を参照ブロックのある参照画像面、画像面１４を探索ブロックのある探索画像面と呼ぶ。求める物体の位置を（Ｘｏ、Ｙｏ、Ｚｏ）とし、レンズ中心位置８の位置を（Ｘｃ、０、０）とし、物体６とレンズ中心位置７とを結ぶ直線と参照画像面１３との交わる点１５の位置を（Ｘｒ、Ｙｒ、Ｚｃ）とし、物体６とレンズ中心位置８とを結ぶ直線と探索画像面１４との交わる点１６の位置を（Ｘｃ−Ｘｓ、Ｙｒ、Ｚｃ）とする（なお、先にあげた物体とカメラの設置条件により、１４と１５のｙ座標Ｙｒは参照画像面と探索画像面で一致する）。
【００２９】
すると、幾何学的な比例関係、Ｘｒ：Ｘｏ＝Ｚｃ：Ｚｏ、Ｘｓ：Ｘｃ−Ｘｏ＝Ｚｃ：Ｚｏ、Ｙｒ：Ｙｏ＝Ｚｃ：Ｚｏから、求める物体の位置（Ｘｏ、Ｙｏ、Ｚｏ）は、次式で求まる。
【００３０】
【数２】
0004115013.tif 000003
【００３１】
【数３】
0004115013.tif 000004
【００３２】
【数４】
0004115013.tif 000005
【００３３】
Ｘｒ、Ｘｓ、Ｙｒは物体を含んだブロック対応を求めることで求められる。但し、Ｘｒ、Ｘｓは、図２の参照画像面１３、探索画像面１４の面の中心からの距離なので、変換する必要がある。参照位置が（Ｌｒ［０］、Ｔｒ［０］）、探索位置が（Ｌｓ［０］、Ｔｓ［０］）、ブロックの大きさがＷ［０］×Ｈ［０］の場合、Ｘｒ＝Ｌｒ［０］−（Ｗ［０］／２）、Ｘｓ＝Ｌｓ［０］−（Ｗ［０］／２）、Ｙｒ＝Ｔｒ［０］−（Ｈ［０］／２）となる。先にあげた条件から、Ｔｒ［０］＝Ｔｓ［０］となるはずなので、ＹｒはＴｒ［０］あるいは、Ｔｓ［０］のどちらを使って計算しても良い。
【００３４】
Ｚｃは、撮像面（ＣＣＤなど）上の１画素の大きさと計算に用いる単位系（例えばｍｍ）とが一致するような値を予め測定、計算しておく。Ｘｃは、基本的には測定しておくのが望ましいが、測定できていなくても、被写体の位置（Ｘｏ、Ｙｏ、Ｚｏ）は、Ｘｃが１次係数としてかかっているので、カメラと物体の相対位置関係は求めることができる。
【００３５】
求めた三次元位置情報は、例えば図５の３１、３２、３３のように、図４の対応ブロック情報の後ろにブロックの三次元位置（Ｘｏ、Ｙｏ、Ｚｏ）を付け加えておく。ここで、図５の３４は物体の識別子としてのＩＤ番号であり、ここではブロックの順に従って、０から１ずつ増やした数を入れておく。このＩＤ番号は、背景・被写体画像作成手段３で使われる。図５の３０のＮｏは、物体の数であり、ここではブロックの数２０のＮｂと同じにしておく。
【００３６】
背景・被写体画像作成手段３は、三次元位置検出手段２からの三次元位置情報を使って、背景と被写体を分離し、入力画像格納手段１の入力画像から背景と被写体の画像を作成する。三次元位置検出手段２で対応ブロックを得る部分で説明したように、ユーザーが被写体を指定している場合は、特に分離処理は必要なく、各ブロック自身が被写体となっているとして良い。もしユーザーの指定がない場合は、メッシュに区切られた参照画面のそれぞれの参照ブロックの対応を見て分離する必要がある。求め方は色々考えられるが、単純な方法として、三次元位置が近いブロックは、同じ被写体に属すると考えて、統合していく方法がある。
【００３７】
図６は、ブロックの統合を説明するフローチャートの例である。まず、ステップＳ１でブロックインデックスＢｉを０にして、ステップＳ２へ進む。ステップＳ２ではブロックインデックスＢｊを０にして、ステップＳ３へ進む。ステップＳ３では、ブロックＢｉ（ブロックインデックスＢｉの示すブロック、の意）とブロックＢｊ間の距離が近いかどうかを判断し、近いと判断した場合はステップＳ４へ、近いと判断されなかった場合はステップＳ５へ進む。次に、下式を定義する。
【００３８】
【数５】
0004115013.tif 000006
【００３９】
【数６】
0004115013.tif 000007
【００４０】
ブロックＢｉ、ブロックＢｊ間の距離の近さは上式をどちらも満たす場合は、近いと判断するようにする。なお、上式中のＴ１、Ｔ２は閾値である。
【００４１】
ステップＳ４では、物体ＩＤ番号Ｏ［Ｂｊ］の値を物体ＩＤ番号Ｏ［Ｂｉ］の値にし、物体の数Ｎｏを１減らし、ステップＳ１へ進む。ステップＳ５では、Ｂｊが最後であるかどうか判別し、最後ならステップＳ６へ、最後でないならステップＳ７へ進む。なお、最後かどうかは、Ｂｊが（Ｎｂ−１）と等しいかどうかで判断できる。
【００４２】
ステップＳ６では、Ｂｉが最後であるかどうか判別し、最後なら処理を抜け、最後でないならステップＳ８へ進む。最後かどうかは、Ｂｉが（Ｎｂ−１）と等しいかどうかで判断できる。ステップＳ７では、Ｂｊを１増やして、ステップＳ３へ進む。ステップＳ８では、Ｂｉを１増やして、ステップＳ２へ進む。これらの処理によって、物体の識別子が同じブロックは同じ物体の一部であるとみなせる。
【００４３】
物体の情報が図５の状態では利用しにくいので、図７の様な形式にまとめなおす。図７の４０は全物体数で、図５の３０と同じ値である。図７の４１は物体を構成するブロックの数を表し、例えばここではこの値が２であるとする。４２、４３、４４、４５は物体の左上位置と大きさで、構成するブロックを全て含む範囲である。４６はこの物体のＩＤ番号である。４７のＩ［０］は物体の画像領域へのポインタ値である。ここではまだ代入されていない。４８のＢｉ［０、０］と４９のＢｉ［０、１］は、物体を構成するブロックのブロックインデックス番号で、ブロック数４１の値が２だったので、２つしかブロック番号がない。
【００４４】
図８は、図７の形式の情報の作成の仕方を説明するフローチャートである。説明を分かりやすくするため、図５の情報格納形式をブロックテーブル、ブロックテーブル中の各ブロックの情報領域をブロック行、図７の情報格納形式をオブジェクトテール、オブジェクトテーブル中の各オブジェクトの情報領域をオブジェクト行と呼ぶことにする。
【００４５】
ステップＳ１０でブロックインデックスＢｉを０にし、ステップＳ１１へ進む。ステップＳ１１では、既にブロックＢｉがオブジェクトテーブルに登録されているかどうかを調べ、もしまだ登録されていなければステップＳ１３へ、登録されていればステップＳ１２へ進む。登録されているかどうかは、オブジェクトテーブル中の各オブジェクト行を順に走査して、オブジェクト行の物体ＩＤ番号とブロックＢｉの物体ＩＤ番号が一致するものがあるかどうかを調べれば良い。一致するものがあれば既に登録されており、一致するものがなければまだ登録されていないことになる。ステップＳ１２では、新規ブロックを追加し、ステップＳ１４へ進む。
【００４６】
新規ブロックの追加の手順は次の通りである。まず、オブジェクトテーブルの物体ＩＤ番号が同じオブジェクト行（例えば、Ｏｉ行とする）にブロック番号を追加する。ブロック番号の追加とは、オブジェクト行Ｏｉの最後にＢｉ［Ｏｉ、Ｎｂ［Ｏｉ］］用の領域を確保し、ブロックＢｉのブロックインデックス値Ｂｉを代入することである。次にオブジェクト行Ｏｉのブロック数Ｎｂ［Ｏｉ］を１増やす。次に物体の位置と大きさ情報を更新する。
【００４７】
まず、ブロックＢｉの左端位置Ｌｒ［Ｂｉ］がＬｏ［Ｏｉ］より小さければＬｏ［Ｏｉ］をＬｒ［Ｂｉ］で更新する。同様に、ブロックＢｉの上端位置Ｔｒ［Ｂｉ］がＴｏ［Ｏｉ］より小さければＴｏ［Ｏｉ］をＴｒ［Ｂｉ］で更新する。次にブロックＢｉの右端位置（Ｌｒ［Ｂｉ］＋Ｗ［Ｂｉ］）を求め、（Ｌｏ［Ｏｉ］＋Ｗｏ［Ｏｉ］）より大きければＷｏ［Ｏｉ］を（Ｌｒ［Ｂｉ］＋Ｗ［Ｂｉ］−Ｌｏ［Ｏｉ］）で更新する。同様に、ブロックＢｉの下端位置（Ｔｒ［Ｂｉ］＋Ｈ［Ｂｉ］）を求め、（Ｔｏ［Ｏｉ］＋Ｈｏ［Ｏｉ］）より大きければＨｏ［Ｏｉ］を（Ｔｒ［Ｂｉ］＋Ｈ［Ｂｉ］−Ｔｏ［Ｏｉ］）で更新する。これで新規ブロックが追加される。
【００４８】
ステップＳ１３では、新規物体を追加し、ステップＳ１４へ進む。新規物体の追加の手順は次の通りである。まず、最後のオブジェクト行の次に新たなオブジェクト行領域を確保し（新たなオブジェクト行をＯｉ行とする）、ブロック数Ｎｂ［Ｏｉ］として１を代入し、オブジェクトの位置と大きさとして、ブロックの位置と大きさをそのまま代入すれば良い。ブロックＩＤ番号をＯ［Ｂｉ］にし、最後にオブジェクトを構成するブロック情報として、ブロック番号Ｂｉを追加する。画像ポインタＩ［Ｏｉ］はまだ特に設定しなくて良い。これで新規物体が追加される。
【００４９】
ステップＳ１４では、Ｂｉが最後かどうかを判断し、最後ならオブジェクトテーブル作成処理を抜け、最後でないなら、ステップＳ１５へ進む。最後かどうかは、Ｂｉが（Ｎｂ−１）と等しいかどうかで判断する。ステップＳ１５では、Ｂｉを１増やして、ステップＳ１０へ進む。
【００５０】
次に、背景と被写体の分別だが、背景は遠い物体と思われるので、まずオブジェクトテーブルの各オブジェクト行の中で最も遠いものを探す。例えば、Ｏｉ行を処理しているとすると、最初のブロックＢｉ［Ｏｉ、０］のＺ座標値Ｚ［Ｂｉ［Ｏｉ、０］］がその物体の距離と定義する。Ｏｉを０から（Ｎｏ−１）まで変えて、最も距離の遠い（大きい）時のＯｉを記録しておく。例えば、最も遠い物体をＯｄ行とする。
【００５１】
次に、背景は最も遠い物体から閾値Ｔｄの距離内の物体と定義する。再び、Ｏｉを０から（Ｎｏ−１）まで変えて、次式を満たす物体を背景の物体とする。
【００５２】
【数７】
0004115013.tif 000008
【００５３】
閾値Ｔｄは、固定値でも良いし、Ｚ［Ｂｉ［Ｏｄ、０］］の１０％などとしても良い。結果は、図７と同じ形で格納しておく。但し、最初のオブジェクトは、背景とみなされたオブジェクトを全て集めたものにする。背景とみなされなかったオブジェクトは従来通り、単独のオブジェクトとして登録する。説明のため、最初のオブジェクトテーブルを初期オブジェクトテーブル、背景を集めたオブジェクトテーブルを分離オブジェクトテーブルと呼ぶことにする。分離オブジェクトテーブルを作成するのは、次の手順で良い。
【００５４】
まず、分離オブジェクトテーブル領域を確保する。次にＯｉを０から（Ｎｏ−１）まで変えて、上式を満たす初期オブジェクトテーブルの物体（背景の物体）の構成ブロックを、分離オブジェクトテーブルの最初のオブジェクト行の構成ブロックに追加する。もしまだ最初のオブジェクトが作成されていなかったら、オブジェクト行を作成する。これによって、分離オブジェクトテーブルが作成できる。
【００５５】
次に物体の画像を作成する。以下、特に断りが無い場合、「オブジェクトテーブル」は、「分離オブジェクトテーブル」を指すものとする。オブジェクトテーブルの各オブジェクト行を順に操作して、次の処理を行う。例えば、Ｏｉ行のオブジェクト行を現在処理しているとする。まず、オブジェクトの大きさＷｏ［Ｏｉ］×Ｈｏ［Ｏｉ］の画像領域を確保し、そのポインタ値をＩ［Ｏｉ］に代入する。この画像領域の任意の位置（ｘ、ｙ）の画素値は、ｈ（ｘ、ｙ）でアクセスできるとする。次にＯｉ行の各ブロックの画像をコピーする。これは次式で表現できる。
【００５６】
【数８】
0004115013.tif 000009
【００５７】
【数９】
0004115013.tif 000010
【００５８】
【数１０】
0004115013.tif 000011
【００５９】
【数１１】
0004115013.tif 000012
【００６０】
これらの処理を、Ｏｉを０から（Ｎｏ−１）まで変えて、順に行なえば良い。最初の行（０行）のオブジェクトの画像が背景画像であり、それ以外は被写体画像となる。
【００６１】
なおこの手法では、背景画像は被写体部分の画像が抜けた画像になってしまう。第２の発明にあるように、抜けた部分を周囲の画素から推測して埋めることで、見た目に自然な画像にすることができる。推測の仕方は色々考えられるが、最も簡単な手法は、１画素単位で周囲の平均輝度値を取って、埋めていくことである。図９（ａ）はこの手法で埋めた例である。四角は画素を表し、中の値は輝度値を表す。斜線が引かれた周囲の画素は既に値の割り当てられた輝度値であり、斜線が引かれていない画素は抜けている部分とする。図９（ａ）は、１回の埋め処理を行なった状態の図である。例えば、抜けた部分の左上の画素は周囲に、輝度値３９、１００、２５の画素がある。これらを単純平均すると、平均輝度値は５４となる。その下の画素は、左の３つの画素の輝度値が３９、５８、４３なので、平均輝度値は４６となる。このようにして、画素値が割り当てられている画素と接している抜けた画素の画素値を求めることを繰り返すことで、全ての抜けた部分を埋めることができる。
【００６２】
図９（ｂ）はパターンの繰り返しで埋める手法である。この図では最も簡単な２画素単位の繰り返しにしてある。５行目は、斜線のある左端２画素（１００、５０）をパターンとして、その右の２画素を同じ輝度値（１００、５０）にしている。４行目は、左からと上からのパターンが重なっているのでその平均を取る。その結果、左の９３と上の２１６の平均で１５４、その右の画素は、左の６５と上の２３７の平均で１５１、３行目の左の画素は、左の２１と上の１０３の平均で６２、その右の画素は、左の１８と上の１０８の平均で６３とし、このような処理を繰り返して、抜けた部分を埋めていく。なお、パターンで埋めていくと、模様を保存することができ、見た目がより自然になる効果がある。
【００６３】
また、被写体や背景の画像を作る際、入力画像上の大きさをそのまま画像の大きさとしてしまうと、透視変換（遠近法）により遠くにあるものほど小さくなってしまう。立体物を作成する際に、縮尺を小さくして実物よりも小さく作成すると、立体物を観察した時の遠近法の効果が小さくなり、見た目が不自然な場合がある。第３の発明にあるように、画像の大きさに関して奥行きを考慮して補正してやることで、この不自然さを軽減することができる。例えば、オブジェクトテーブルのＯｉ行の物体を補正するとし、補正係数をＲｃとし、基準奥行きをＺｂとする。特に補正を行なわない場合は、Ｒｃ＝０とすれば良い。
【００６４】
補正された横幅Ｗｃ［Ｏｉ］は（Ｗｏ［Ｏｉ］×（１＋Ｒｃ×Ｚ［Ｂｉ［Ｏｉ、０］］／Ｚｂ））、補正された縦幅Ｈｃ［Ｏｉ］は（Ｈｏ［Ｏｉ］×（１＋Ｒｃ×Ｚ［Ｂｉ［Ｏｉ、０］］／Ｚｂ））、補正された左端位置Ｌｃ［Ｏｉ］は（Ｌｏ［Ｏｉ］−Ｗｏ［Ｏｉ］×（Ｒｃ×Ｚ［Ｂｉ［Ｏｉ、０］］／Ｚｂ）／２）、補正された上端位置Ｔｃ［Ｏｉ］は（Ｔｏ［Ｏｉ］−Ｈｏ［Ｏｉ］×（Ｒｃ×Ｚ［Ｂｉ［Ｏｉ、０］］／Ｚｂ）／２）となる。次式は、上式（式８〜１０）を補正したものである。式１１は補正をしないままで良い。
【００６５】
【数１２】
0004115013.tif 000013
【００６６】
【数１３】
0004115013.tif 000014
【００６７】
【数１４】
0004115013.tif 000015
【００６８】
図１０は展開図算出手段４を説明するフローチャートである。ステップＳ２０では、台紙部品を出力ページ上に作成し、ステップＳ２１へ進む。出力ページとは、位置を指定して、線分やビットマップ画像、テキストなどが描画表現できるものを指す。ＰｏｓｔＳｃｒｉｐｔ言語インタプリタのキャンバスやＷｉｎｄｏｗｓ  ＯＳのＤｅｖｉｃｅ  Ｃｏｎｔｅｘｔ（ＤＣ）であっても良いし、単純にビットマップ画像と考えても良い。
【００６９】
台紙部品は、この段階では単なる長方形の領域なので、出力画像上へ長方形の枠を描き、長方形の中央に線を引いておく。図１１（ａ）は、出力ページ上に台紙を描画したものである。５０は台紙枠、５６は中央に引かれた線である。５１〜５５は、物体部品を配置する目印であるが、詳細は後ほど説明する。
【００７０】
ステップＳ２１では、背景部品の配置を台紙上に描画し、ステップＳ２２へ進む。ステップＳ２２では、背景部品を出力ページ上に描画し、ステップＳ２３へ進む。ステップＳ２３では、オブジェクトインデックスＯｉを１にし、ステップＳ２４へ進む。ステップＳ２４では、物体Ｏｉの部品の配置を台紙上に描画し、ステップＳ２５へ進む。ステップＳ２５では、物体Ｏｉの部品の配置を背景部品上に描画し、ステップＳ２６へ進む。ステップＳ２６では、物体Ｏｉの部品を出力ページ上に描画し、ステップＳ２７へ進む。ステップＳ２７では、Ｏｉが最後かどうか判断し、最後と判断された場合は展開図算出手段４の処理を抜け、最後でないと判断された場合はステップＳ２８へ進む。ステップＳ２８では、Ｏｉを１増やし、ステップＳ２４へ進む。
【００７１】
図１１（ａ）の５１、５２は、ステップＳ２１で描画された背景部品の配置位置である。線でなく厚みがあるのは、糊白の部分を付加しているからである。糊白部分は、前から見た時に見えないように、部品の配置線より後ろの部分に作成した方が良い。糊白部分には、オブジェクトインデックス番号を描画しておく。背景は、０行なので、図１１（ａ）の５１、５２の様に、糊白内部に０と描画しておく。背景部品は、オブジェクトテーブルの最初のオブジェクトなので、背景の三次元位置は、左上位置（Ｌｃ［０］、Ｔｃ［０］）、大きさＷｃ［０］×Ｈｃ［０］である。５６の線は、図２のＺ軸１１と重なるようにするとすると、５６上の画素はＸ座標が０の値となるはずである。従って、５１の部分は、Ｘ座標値がＬｃ［０］から０の範囲、５２の部分は０から（Ｌｃ［０］＋Ｗｃ［０］）の範囲となる。５１、５２の奥行き位置だが、基本的には５０の手前（下）の枠線をＺ＝０の線とし、物体の奥行きＺ［Ｂｉ［０、０］］の直線上に位置するとする。但し、台紙を開く時に背景や物体が立ち上がり易い様に、Ｘ＝０の直線５６上では正しい奥行き位置とするが、その点を中心に５１、５２の様に、１８０度弱の折れ線となるようにする。すなわち、５６から左側と右側で、Ｚ軸が曲がっていると解釈すれば良い。このＺ軸の曲がりは、以降の被写体部品の配置に際しても同じものが適用される。
【００７２】
図１１（ｂ）の５７〜６１は、背景部品を出力ページに描画したものである。６０、６１の横幅は、図１１（ａ）の５１、５２と同じである。縦幅は、Ｈｃ［０］である。５７の内部（斜線部）は、背景画像である。次に被写体の配置、描画であるが、ここでは図１１（ａ）の５３、５４と５５の２個あるとする。
【００７３】
ステップＳ２４で行なわれている最初の被写体部品の台紙上の位置の求め方は、背景部品と同じである。被写体部品の奥行きＺ［Ｂｉ［Ｏｉ、０］］と横幅Ｈｃ［Ｏｉ］が分かれば位置は決まる。５３の場合、５６を跨がない位置なので、一つの線分と一つの糊白で済む。線分は、背景部品の折れ線と平行になる。５３の場合は、Ｘ座標値がＬｃ［Ｏｉ］から（Ｌｃ［Ｏｉ］＋Ｗｃ［Ｏｉ］）の範囲の一つの線分となる。５４、５５の場合は、被写体部品の位置が５６のＸ＝０を跨いでいるので、背景部品と同様に、５４はＸ座標値がＬｃ［Ｏｉ］から０の範囲、５５は０から（Ｌｃ［Ｏｉ］＋Ｗｃ［Ｏｉ］）の範囲となる。奥行き位置は、５３と同様に計算する。糊白部分には、オブジェクトインデックス番号を描画しておく。図１１（ａ）の５３の様に糊白内部に１と描画したり、５４、５５の様に糊白内部に２と描画したりする。
【００７４】
ステップＳ２５の、被写体部品の配置を背景部品上に描画する処理は、以下の通りである。図３の様にカメラを原点とし、地面が高さＹｃと定義されているので、まず、被写体部品の高さＹ［Ｂｉ［Ｏｉ、０］］を使って、地面からの高さ（Ｙｃ−Ｙ［Ｂｉ［Ｏｉ、０］］）を求める。５７の下端を地面の高さとし、この下端から（Ｙｃ−Ｙ［Ｂｉ［Ｏｉ、０］］）の高さに被写体部品の切り込み用の線分を引く。線分の長さは、被写体部品の横幅と同じでも良いが、画像以外の部分が太くて目立ってしまうので、この部分は細くした方が良く、固定幅Ｗｐとする。横位置は、Ｗｐ幅の部分が被写体部品の真中に来るように、（Ｌｃ［Ｏｉ］＋（Ｗｃ［Ｏｉ］−Ｗｐ）／２）からＷｐ分とする。５８は５３の被写体部品の背景部品上の位置である。５９は、５４、５５の被写体部品の背景部品上の位置である。５９は一直線で良いので、５４、５５で分ける必要はない。切り込み用線分部分には、オブジェクトインデックス番号を描画しておく。図１１（ｂ）の５８、５９の様に、線分周囲に１、２と描画しておく。
【００７５】
ステップＳ２６は被写体部品の出力ページへの描画モジュールであるが、例えば以下の処理を行う。図１１（ｂ）の６２〜６６は５３の被写体部品、６７〜７２は５４、５５の被写体部品を出力ページ上へ描画した様子である。６４、６９の斜線部分は被写体部品の画像部分であるので、大きさはＷｏ［Ｏｉ］×Ｈｏ［Ｏｉ］で、中には被写体部品の画像をコピーしておく。６５、７０は、高さを補う補助部分なので、幅は部品と一緒のＷｏ［Ｏｉ］である。高さは画像の分を引いた（Ｙｃ−Ｙ［Ｂｉ［Ｏｉ、０］］−Ｈｏ［Ｏｉ］）となる。６６、７１、７２は糊白部分だが、６６は５６を跨がないので単一で良い。横幅は６５と同じで、高さは固定幅Ｈｐで良い。図のように、角の部分を少しカットしておくと仕上がりが美しくなる。７１、７２は、５４、５５と同じく分離している。横幅は、５４、５５と同じで良い。高さは固定幅Ｈｐで良い。６３、６８は奥行きを補う補助部分で、縦幅は背景までの奥行きの差（Ｚ［Ｂｉ［０、０］］−Ｚ［Ｂｉ［Ｏｉ、０］］）となる。横幅は５８、５９と同じく固定幅Ｗｐで良い。６２、６７は糊白部分であり、横幅はＷｐ、縦幅はＨｐとなる。糊白部分には、オブジェクトインデックス番号を描画しておく。図１１（ｂ）の６２、６４の様に糊白内部に１と描画したり、６７、７１、７２の様に糊白内部に２と描画したりする。
【００７６】
なお、背景部品と被写体部品の出力ページ上への配置は、図１１（ｂ）のように、被写体部品を横に並べて無駄なく配置するようにしても良いし、配置計算が複雑な場合は、出力ページの大きさを考慮して、単純に縦あるいは横に並べても良い。もし出力ページをはみ出す場合は、次のページの出力ページを用意し、そこに出力するようにする。
【００７７】
また、第４の発明にあるように、ステップＳ２１において、背景部品の配置だけでなく、背景画像中の地面部分の画像を図１２（ａ）の８０の様に台紙部分に描画するようにし、ステップＳ２５、ステップＳ２６において、図１２（ｂ）の様に背景８１と被写体８４，８５の部品を作成すると、被写体が宙に浮いた様な感じがなくなり、自然に見える効果がある。背景画像から地面画像を作成するには、消失点（水平線）を求める必要があるが、レンズの光軸は地面に平行という条件をつけてあるので、単純に背景画像の下半分を地面画像であるとしても良い。地面画像は、背景画像の下半分を図１２（ａ）の様にコピーする。その際、手前の部分と奥の部分では、Ｚ軸方向の引き延ばし倍率が変わってくる。
【００７８】
図３より、地面上のＺ＝Ｚｇ上の点とカメラ中心を結ぶ線と参照画像１３上の交点は、Ｚｇ：Ｙｃ＝Ｚｃ：Ｙｊの関係があるので、Ｙｊ＝Ｙｃ×Ｚｃ／Ｚｇとなる。また、図２より、地面上の（Ｘｇ、Ｙｇ）上の点とカメラ中心を結ぶ線と参照画像１３上の交点は、Ｘｇ：Ｚｇ＝Ｘｊ：Ｚｃの関係があるので、Ｘｊ＝Ｘｇ×Ｚｃ／Ｚｇとなる。これによって、地面上の（Ｘｇ、Ｙｃ、Ｚｇ）に対応する画素は、参照画像１３の（Ｘｇ×Ｚｃ／Ｚｇ、Ｙｃ×Ｚｃ／Ｚｇ）の画素である。これによって図１２（ａ）の８０の様に、地面部分を描画することができる。また、ステップＳ２５において、被写体部品は、地面に接するように配置できるので、図１２（ｂ）の８２、８３の切り込みの高さは、図１２（ｂ）の８４、８５の高さで良い。また、ステップＳ２６において、図１２（ｂ）の８４、８５の下の底あげ部分（図１１（ｂ）の６５、７０の部分）は必要ないので作らないようにする。
【００７９】
印刷手段５は、展開図算出手段４で作成された出力ページを印刷する。印刷対象は、一般的な紙で良い。複数の出力ページがある際は、複数の紙に印刷する。
【００８０】
次に、立体物作成の手順を説明する。印刷された展開図は、ユーザーがはさみやカッターなどで台紙、背景部品、被写体部品を切り抜く。被写体部品は被写体の実際の輪郭に関わらず、包含する長方形にしてしまっているので、このまま使うと輪郭外の部分が不自然になる。このため被写体を切り抜く際に、ユーザーが輪郭を認識して、余分な輪郭外の部分を切り落とすようにする。これにより自然な被写体部品を作成できる。台紙５０は、同じ大きさの硬く厚い紙などに接着しておくと、後の開閉操作の時に楽である。
【００８１】
背景部品の被写体の配置位置５８、５９は切り込みを入れておく。まず、背景部品の６０、６１の糊白部分が台紙上の５１、５２の糊白部分に合うように、接着する。接着は糊白部分に糊を塗って接着してもよいし、テープなどを用いて止めても良い。
【００８２】
次に被写体部品の６６の糊白部分が台紙上の５３の糊白部分に合うように接着する。次に被写体部品の６２の糊白部分を背景部品上の５８の切り込み部分に差し込み、背景部品の裏側で糊白部分を接着する。こうすることで、糊白部分が表に出ず、仕上がりがきれいになる。
【００８３】
同様に、被写体部品の７１、７２の糊白部分が台紙上の５４、５５の糊白部分に合うように接着し、被写体部品の６７の糊白部分を背景部品上の５９の切り込み部分に差し込み、背景部品の裏側で糊白部分を接着する。なお、５１、５２や５３、５４、５５の接着を台紙表面でなく、切り込みにして、裏側で接着する方法もある。この方が仕上がりはよりきれいである。このようにして、立体物が作成できる。
【００８４】
次に、５６の線を中心にして、内側に折り込み、被写体部品がすべて内側に折り込まれるようにすれば、画像処理を用いた立体模型（例えば飛び出す絵本）が実現できる。すなわち、折り込んだ台紙を開けば、背景部分が立ち上がり、それに引っ張られて、被写体部品も立ち上がる。
【００８５】
【発明の効果】
以上の説明により、本発明によれば、複数の異なる方向から撮影した画像から物体の三次元情報を得、背景と被写体の画像を作成し、台紙上に背景画像と被写体画像を配置し、台紙を開閉することによって背景画像と被写体画像が起き上がるような展開図を作り出し、印刷することで、手軽に立体模型が得られる効果がある。
【００８６】
また、断層画面を重ねる作業にくらべ、面の展開図であるので、作業量も格段に少なくできる効果がある。
【００８７】
また、台紙を折り畳むことができるため、保存の際、ほとんどスペースを必要としない利点がある。
【００８８】
また、開く際に背景や被写体が起き上がってくるので、いわゆる飛び出す絵本と同じく、動きのある立体模型を作ることができ、ユーザーの注目を集めやすい効果がある。
【００８９】
また、背景画像を作成する際に、被写体で隠れて抜けてしまっている部分を周囲の画像を使って埋めることで、背景に不自然な抜けが発生することを防ぐことができる。周囲の１画素だけでなく、周囲のブロック単位で埋めることで、テクスチャの連続性が出てくるので、より自然な埋め方ができる効果がある。
【００９０】
また、遠近法（透視変換）による拡大縮小を考慮して、背景画像と被写体画像を作成することで、模型上で遠近感が不自然に強調されることを防ぐ効果がある。
【００９１】
また、台紙部分が背景画像中の地面部分となるようにし、背景画像と被写体画像が地面に直接接するようにすることで、遠くの物体が宙に浮いたような状態になることを防ぐ効果がある。
【図面の簡単な説明】
【図１】本願発明のブロック図である。
【図２】撮影状態を上から説明した図である。
【図３】撮影状態を横から説明した図である。
【図４】ブロック間の対応の結果の格納の仕方を説明したものである。
【図５】ブロックと物体の三次元情報の格納の仕方を説明したものである。
【図６】ブロックの統合を説明するフローチャートである。
【図７】物体の情報の格納の仕方を説明したものである。
【図８】図７の形式の情報の作成の仕方を説明するフローチャートである。
【図９】（ａ）は背景画像の抜けの１画素単位の埋め方を説明したものであり、（ｂ）は背景画像の抜けのブロック単位の埋め方を説明したものである。
【図１０】展開図算出手段４を説明するフローチャートである。
【図１１】（ａ）は台紙の展開図を説明したものであり、（ｂ）は背景部品と被写体部品の展開図を説明したものである。
【図１２】（ａ）は台紙の地面部分に地面画像をつけた時の台紙の展開図を説明したものであり、（ｂ）は台紙の地面部分に地面画像をつけた時の背景部品と被写体部品の展開図を説明したものである。
【符号の説明】
１  入力画像格納手段
２  三次元位置検出手段
３  背景・被写体画像作成手段
４  展開図算出手段
５  印刷手段
【図１】
0004115013.tif 000016
【図２】
0004115013.tif 000017
【図３】
0004115013.tif 000018
【図４】
0004115013.tif 000019
【図５】
0004115013.tif 000020
【図６】
0004115013.tif 000021
【図７】
0004115013.tif 000022
【図８】
0004115013.tif 000023
【図９】
0004115013.tif 000024
【図１０】
0004115013.tif 000025
【図１１】
0004115013.tif 000026
【図１２】
0004115013.tif 000027