以下に添付図面を参照して、実施の形態を詳細に説明する。
図1は、本実施の形態の画像処理装置10の模式図である。
画像処理装置10は、表示画像を表示部20へ表示する装置である。
画像処理装置10は、撮影部12と、画像処理部14と、記憶部16と、入力部18と、表示部20と、を備える。撮影部12、画像処理部14、記憶部16、入力部18、及び表示部20は、バスにより電気的に接続されている。
なお、画像処理装置10は、少なくとも画像処理部14を備えた構成であればよく、撮影部12、記憶部16、入力部18、及び表示部20の少なくとも1つを別体として設けた構成であってもよい。
また、画像処理装置10は、携帯可能な携帯端末であってもよいし、位置を固定された固定型の端末であってもよい。本実施の形態では、一例として、画像処理装置10は、撮影部12と、画像処理部14と、記憶部16と、入力部18と、表示部20と、を一体的に備えた、携帯可能な端末である場合を説明する。
撮影部12は、表示画像を表示する実空間における観察環境を撮影する。観察環境は、表示部20に表示された画像をユーザが視認(観察)するときの環境である。また、観察環境は、オブジェクトを印刷した記録媒体を観察する環境であってもよい。撮影によって、撮影部12は、実空間における観察環境の撮影画像として、背景画像を取得する。
背景画像は、仮想三次元空間の三次元空間画像の一例である。背景画像は、静止画像であってもよいし、動画像であってもよい。実空間の観察環境は、例えば、オフィス、展示会場、駅の構内、駅のホーム、各種建物内などである。撮影部12は、撮影によって撮影画像を得る公知の撮影装置である。なお、背景画像は、CG(Computer Graphics)などで描画された画像であってもよく、撮影部12で得られた画像に限定されない。
本実施の形態では、撮影部12が、撮影によって全天球パノラマ画像を得る撮影装置である場合を説明する。全天球パノラマ画像とは、全天球の範囲(360°)の撮影によって得られるパノラマ画像である。また、本実施の形態では、背景画像(三次元空間画像)が、全天球パノラマ画像である場合を、一例として説明する。
表示部20は、各種画像を表示する。表示部20は、LCD(Liquid Crystal Display)などの公知の表示装置である。本実施の形態では、表示部20には、後述する表示画像が表示される。
また、本実施の形態では、一例として、表示部20と撮影部12は、画像処理装置10の筐体(図示省略)において、表示部20の画面と、撮影部12の撮影方向と、が互いに逆方向を向くように配置されている場合を説明する。このため、例えば、画像処理装置10の位置を固定したまま、撮影部12で撮影した背景画像を表示部20に表示した場合、表示部20に表示された背景画像と、表示部20の背景(表示部20の画面の対向側)に位置する実空間の風景と、は同じとなる。
入力部18は、ユーザから各種操作を受け付ける。
なお、入力部18と表示部20とを一体的に構成したUI(ユーザ・インターフェース)部22としてもよい。UI部22は、例えば、公知のタッチパネルである。
本実施の形態では、UI部22は、入力部18と表示部20とを一体的に構成したタッチパネルである場合を説明する。
記憶部16は、メモリやハードディスクドライブ装置(HDD)等の記憶媒体であり、後述する各処理を実行するための各種プログラムや、各種データを記憶する。
画像処理部14は、CPU(Central Processing Unit)、ROM(Read Only Memory)、及びRAM(Random Access Memory)などを含んで構成されるコンピュータである。なお、画像処理部14は、汎用のCPU以外の回路などであってもよい。画像処理部14は、画像処理装置10に設けられた装置各部を制御する。
画像処理部14は、表示画像を表示部20へ表示する制御を行う。本実施の形態では、表示画像は、背景画像上に、オブジェクトの二次元画像を重畳した表示画像である。このような表示処理は、例えばOpenGL(Open Graphics Library)などの3Dエンジンにより実現する。
本実施の形態では、表示画像は、仮想三次元空間を球体として表し、該球体の内壁に沿った画像となるように全天球パノラマ画像(背景画像)を配置する。そして、この仮想三次元空間内に、オブジェクトを配置した三次元モデルを、二次元面に投影した画像である場合を説明する。
また、なお、表示画像は、更に、他の画面を含んだ画像であってもよい。
他の画面としては、例えば、透明な色材を用いて形成する透明画像の表示された画面や、特色(金、白、透明など)の色材を用いて紙に与える表面効果を規定した表面効果画像の表示された画面等が挙げられるが、これらに限られない。
表示画像が、複数の画面を含む場合には、表示画像は、これらの複数の画面を、Z軸方向(表示部20の画面に対して垂直方向)に異なる位置に配置した画像とすればよい。
図2は、画像処理部14の機能構成を示すブロック図である。画像処理部14は、取得部24と、受付部25と、指定部26と、設定部27と、表示制御部28と、光源受付部29と、オブジェクト移動部30と、オブジェクト拡大縮小部31と、オブジェクト回転部32と、視線方向変更部33と、視線・配置位置変更部34と、再設定部35と、判別部36と、を含む。
取得部24、受付部25、指定部26、設定部27、表示制御部28、光源受付部29、オブジェクト移動部30、オブジェクト拡大縮小部31、オブジェクト回転部32、視線方向変更部33、視線・配置位置変更部34、再設定部35、および判別部36の一部またはすべては、例えば、CPUなどの処理装置にプログラムを実行させること、すなわち、ソフトウェアにより実現してもよいし、IC(Integrated Circuit)などのハードウェアにより実現してもよいし、ソフトウェア及びハードウェアを併用して実現してもよい。
取得部24は、オブジェクトを取得する。オブジェクトは、表示対象の画像である。オブジェクトは、二次元画像であってもよいし、三次元画像であってもよい。本実施の形態では、オブジェクトが、二次元画像である場合を一例として説明する。二次元画像は、例えば、印刷対象の原稿を示す原稿画像である。
以下では、オブジェクトを、原稿画像と称して説明する場合がある。
取得部24は、例えば、記憶部16から原稿画像を読取ることで、原稿画像を取得する。例えば、表示制御部28が、記憶部16に記憶されている原稿画像(オブジェクト)の一覧を表示部20に表示する。ユーザは、入力部18を操作することで、表示対象の原稿画像を選択する。取得部24は、選択された原稿画像を読取ることで、原稿画像を取得する。なお、取得部24は、撮影部12で撮影された画像を原稿画像として取得してもよい。また、取得部24は、図示を省略する公知のスキャナ装置で読取った画像を、原稿画像として取得してもよい。この場合、画像処理部14とスキャナ装置とを電気的に接続した構成とすればよい。
また、取得部24は、背景画像を取得する。例えば、取得部24は、記憶部16に記憶されている複数の背景画像の中から、ユーザによる入力部18の操作指示によって選択された背景画像を読取ることで、該背景画像を取得する。なお、取得部24は、撮影部12で撮影された撮影画像(本実施の形態では全天球パノラマ画像)を、背景画像として取得してもよい。本実施の形態では、取得部24は、撮影部12から背景画像を取得する。
受付部25は、表示部20の画面上における、原稿画像の表示領域の指定をユーザから受け付ける。表示部20の画面は、二次元の平面状である。ユーザは、表示部20の画面上で、原稿画像の表示領域を指定する。受付部25は、表示部20の画面上における、指定された表示領域の位置を示す二次元座標を受け付けることで、表示領域の指定を受け付ける。
なお、本実施の形態では、表示部20の画面上における二次元座標を、表示領域の指定として受け付ける。すなわち、表示領域の指定として受け付ける二次元座標は、表示部20の画面上、すなわちデバイス上の座標となる。このため、表示領域の指定として受け付ける二次元座標を、以下では、デバイス座標と称して説明する。
原稿画像の表示領域の形状は、限定されない。例えば、指定される表示領域の形状は、円形状(真円、楕円)、三角形、四角形、五角形以上の多角形、などである。本実施の形態では、一例として、指定される表示領域の形状が、4頂点を有する矩形状(すなわち、四角形)である場合を説明する。
すなわち、本実施の形態では、受付部25は、表示部20の画面上における矩形状領域の指定を、表示領域の指定として受け付ける。なお、受付部25は、表示部20の画面上における矩形状領域の4頂点の指定を、表示領域の指定として受け付けてもよい。詳細には、表示部20の画面上における、矩形状領域の4頂点の二次元座標を、表示領域の指定として受け付けてもよい。
図3は、デバイス座標と、指定される表示領域と、の説明図である。ユーザは、例えば、表示部20を参照しながら、表示部20の画面上において、オブジェクトの表示領域を示す4頂点を指定する。上述したように、本実施の形態では、入力部18と表示部20は、一体的に構成されたタッチパネル(UI部22)である。このため、ユーザは、表示部20の画面上を操作することで、原稿画像の表示領域を表示部20の画面上で指定することができる。
例えば、画像処理部14では、表示領域の各頂点の指定順と、四角形の表示領域の各頂点の相対位置と、の関係を予め定める。各頂点の相対位置は、例えば、左上座標、右上座標、左下座標、右下座標、などで示される。
ユーザは、表示部20の画面における、原稿画像の表示領域を示す4頂点の各々を、予め定めた指定順に沿って指定する。このため、例えば、ユーザは、左上座標に応じた頂点51A、右上座標に応じた頂点51B、左下座標に応じた頂点51C、右下座標に応じた頂点51D、の4頂点をUI部22(入力部18)の操作により順次指定する。これによって、受付部25は、指定された4頂点のデバイス座標を、指定された表示領域として受け付ける。
このとき、表示制御部28は、表示部20に、指定順に応じた各頂点の指定を促すメッセージ(例えば、「次に、左上座標を指定して下さい」など)を表示してもよい。また、同じデバイス座標が連続して指定された場合には、表示制御部28は、表示部20に、再度の入力を促すメッセージを表示してもよい。
なお、詳細は後述するが、ユーザは、4頂点の内の1頂点を指定し、所望の位置にドラッグ操作などにより移動させることができる。
指定部26は、受付部25で受け付けた表示領域を、指定された表示領域として設定する。詳細には、指定部26は、指定された表示領域の4頂点のデバイス座標を表示領域情報として記憶部16に記憶する。
図4は、表示領域情報のデータ構造の一例を示す図である。表示領域情報は、例えば、指定順と、原稿画像の頂点の名称と、指定されたデバイス座標と、を対応づけたデータである。原稿画像の頂点の名称として、図4に示す例では、左上座標、右上座標、左下座標、右下座標、の各々を用いる。
図2に戻り、指定部26は、指定された表示領域の、各頂点のデバイス座標を、指定された表示領域として、設定部27へ出力する。
なお、指定部26は、一点選択移動部26Aを含んだ構成であってもよい。
一点選択移動部26Aは、取得部24で取得した原稿画像から、原稿画像の縦横の各々のサイズを読取る。そして、一点選択移動部26Aは、該原稿画像の中央と、表示部20の画面の中央と、が一致するように、表示部20の画面上に読取ったサイズの原稿画像を配置したときの、該原稿画像の4頂点の二次元座標(デバイス座標)を算出する。
この場合、表示制御部28は、表示部20の画面における、算出されたデバイス座標の位置に、4頂点の各々を示すマークを表示する。例えば、表示制御部28は、表示部20の画面における、算出された4頂点のデバイス座標に相当する各位置に、4頂点の各々を示すマーク(例えば、円マーク)を表示する(図3参照)。また、表示制御部28は、表示部20における、算出された4頂点のデバイス座標に相当する各位置に、表示対象の原稿画像の4頂点の各々を一致させた原稿画像を表示してもよい。
ユーザは、入力部18を操作することで、表示部20に表示された4頂点の内、1頂点を選択し、表示部20の画面上における任意の箇所に移動させる。詳細には、ユーザは、表示部20に表示された4頂点の内、位置を変更する対象の1頂点の表示された付近を指示してドラッグし、任意の位置にまで移動させる。これにより、ユーザは、表示領域を変更することができる。
受付部25は、矩形状領域の4頂点の内の1頂点の選択及び移動を受け付け、移動後の1頂点と、他の3頂点と、を頂点として含む矩形状領域を、表示領域の指定として受け付ける。
この場合、一点選択移動部26Aは、表示部20に表示されている4頂点の内、ユーザによって指示された位置に最も近い頂点を、選択された1頂点とすればよい。例えば、ユーザによって指示された位置の、表示部20の画面におけるデバイス座標が(Xa,Ya)であったとする。この場合、一点選択移動部26Aは、4頂点の内の1頂点(X1,Y1)までの距離を、下記式(1)により算出する。
一点選択移動部26Aは、同様にして、指定された1頂点のデバイス座標(Xa,Ya)から残り3頂点(X2,Y2)、(X3,Y3)、(X4,Y4)の各々までの距離を算出し、4頂点の内、最も距離の近い頂点を、ユーザによって選択された1頂点とすればよい。
例えば、4頂点の内の1頂点(X1,Y1)が、デバイス座標(Xa,Ya)から最も近い1頂点であったとする。この場合、一点選択移動部26Aは、最初にユーザによって指定されたデバイス座標(Xa,Ya)と、4頂点の内、該デバイス座標に最も近い1頂点のデバイス座標(X1,Y1)と、を対応づけて記憶部16に記憶する。
次に、ユーザは、入力部18の操作指示によって、選択した1頂点のデバイス座標(Xa,Ya)の位置をドラッグする。受付部25は、ドラッグ中のデバイス座標を取得する。ここで、ドラッグ中のデバイス座標を(Xb,Yb)とする。すると、最初にユーザによって指定されたデバイス座標に最も近い1頂点(X1,Y1)の移動後のデバイス座標は、(X1+Xb−Xa,Y1+Yb−Ya)で表せる。
このため、一点選択移動部26Aは、選択された1頂点以外の3頂点のデバイス座標(X2,Y2)、(X3,Y3)、(X4,Y4)と、ユーザによる入力部18の指示によって移動した移動後の1頂点のデバイス座標(X1+Xb−Xa,Y1+Yb−Ya)と、によって、定まる矩形状の領域を、指定された表示領域として設定する。
なお、このとき、一点選択移動部26Aは、ドラッグ中のデバイス座標を、順次設定部27へ出力してもよい。後述する設定部27の処理によって、ユーザは、表示画像に含まれる、指定した表示領域に応じた大きさ及び形状の原稿画像を参照しながら、表示領域を調整することができる。
また、取得部24が背景画像を取得している場合、表示部20には、背景画像上に、調整中の表示領域の形状、位置、及び大きさに調整された原稿画像を重畳した表示画像が表示されることとなる。このため、ユーザは、表示部20に表示された原稿画像を参照しながら、背景画像上の任意の領域に表示領域を指定することができる。
また、表示制御部28は、表示部20の画面に、ユーザによって指定された表示領域を示す画像を表示する場合、画面上における、ユーザによって指定されたデバイス座標から相対位置分だけ移動させた位置に、表示領域を示す画像を表示することが好ましい。このため、表示部20の画面上における、ユーザによって指示された箇所が、ユーザの指やポインタデバイスなどで見えなくなることが抑制され、ユーザは、表示領域を容易に指定することができる。
また、表示部20の画面上における、ユーザによって指示された位置(例えば、4頂点の位置)と、指定された表示領域を示す画像の表示位置は、完全に一致した形態に限定されない。
図5は、ユーザによって指定された表示領域の4頂点と、表示領域を示す画像と、の関係の一例を示す図である。図5に示すように、ユーザによって表示領域51として指定された4頂点(51A、51B、51C、51D)の各々のデバイス座標と、該表示領域を表示した画像52の4頂点のデバイス座標と、は異なっていてもよい。
すなわち、ユーザによって指定された4頂点の各々のデバイス座標から、表示部20に表示する表示領域の画像の4頂点の各々のデバイス座標を算出することができれば、ユーザによって指定された表示領域51と、該表示領域51を表示した画像52と、の各々の4頂点の位置は、必ずしも一致していなくてもよい。
この場合、指定部26は、例えば、ユーザによって指定された表示領域51の4頂点の各々のデバイス座標から、4頂点の重心のデバイス座標を算出する。そして、指定部26は、重心から各4頂点の各々に到るベクトルを定数倍することで、表示部20に表示する表示領域51の画像の4頂点のデバイス座標を算出することができる。このため、例えば、指定された表示領域51の4頂点を強調した画像を表示部20に表示した場合であっても、領域調整中の表示領域51の画像の見映えに対する影響を減らすことができる。
なお、表示対象の原稿画像(オブジェクト)は、本実施の形態では、二次元画像であり、長方形などの四角形である。しかし、四角形以外の形状で原稿画像を表示させたい場合もある。すなわち、表示領域として、円形状などの、四角形以外の形状が指定される場合もある。このような場合には、表示制御部28は、原稿画像における各画素の画素値に、透過度を表すアルファ値を追加し、利用しない部分の画素値のアルファ値を、完全透過を示す値に調整する透過処理を実行すればよい。透過処理については、表示制御部28によるグラフィックエンジンで処理できる。このようにすれば、様々な形状の表示領域に対応することができる。
図2に戻り、光源受付部29は、光源情報及び原稿反射情報を受け付ける。光源情報は、仮想三次元空間に配置される仮想光源の反射特性を示す情報である。原稿反射特性は、記録媒体の種類に応じた反射特性を示す情報である。例えば、光源受付部29は、記憶部16に予め光源情報テーブル及び原稿反射情報テーブルを記憶する。そして、光源受付部29は、ユーザによる入力部18の操作指示によって、光源情報テーブル及び原稿反射情報テーブルの各々から選択された、光源情報及び原稿反射情報を受け付ける。
図6は、光源情報テーブルのデータ構造の一例を示す図である。光源情報テーブルは、光源の種類を識別する光源IDと、光源名と、光源情報と、を対応づけた情報である。なお、光源情報テーブルは、データベースであってもよく、データ形式は限定されない。
光源情報は、対応する光源IDによって特定される光源の、光属性を示す情報である。光属性は、表示画像表示時の光を演出するための、反射量を特定するための情報である。光源情報は、光源の色温度に関する項目である鏡面光、拡散光、及び環境光の各々における、RGBの色成分ごとの光量(輝度)で表される。RGBの各色成分の光の値は、最大「1.0」であり、最小値「0」である。具体的には、図6中、鏡面光の値の一例として記載した“(1.00,0.95,0.95)”は、R成分、G成分、B成分の各々の鏡面光の光量が、各々、1.00,0.95,0.95であることを示す。
図7は、原稿反射情報テーブルのデータ構造の一例を示す図である。原稿反射情報テーブルは、記録媒体の種類を識別する原稿IDと、反射種と、原稿反射情報と、を含む。反射種は、対応する原稿IDによって識別される種類の記録媒体の、反射の種類を示す。すなわち、記録媒体の紙質の種類などによって、反射率は異なるものとなる。原稿反射情報は、鏡面光反射率、拡散光反射率、及び環境光反射率を含む。鏡面光反射率は、入射角と反射角の等しくなる反射率である。拡散光反射率は、乱反射する反射率である。環境光反射率は、繰り返し乱反射して得られる光の反射率である。本実施の形態では、RGBの各成分の値により、これらの鏡面光反射率、拡散光反射率、及び環境光反射率の各々の反射率を規定している。具体的には、図7中、鏡面光反射率の値の一例として記載した“(0.5,0.5,0.5)”は、R成分、G成分、B成分の各々の鏡面光反射率が“0.5”であることを示す。
なお、表示画像表示時の光を演出するための反射量は、光源の光量(光源情報)と、物体の反射率(上記図7に示す原稿反射情報に示される反射率)と、の乗算値により定まる。または、光源情報に仮想三次元空間での光源の座標位置を加え、OpenGLに反射量を計算させてもよい。
表示制御部28は、記憶部16に記憶されている光源情報テーブルを読取り、光源情報テーブルに登録されている光源情報の一覧を、選択可能に表示部20に表示する。ユーザは、表示された光源情報の一覧の中から、所望の光源名に対応する光源情報を入力部18の操作指示により入力する。これにより、光源受付部29は、光源情報を受け付ける。
同様に、表示制御部28は、記憶部16に記憶されている原稿反射情報テーブルを読取り、原稿反射情報テーブルに登録されている原稿反射情報の一覧を、選択可能に表示部20に表示する。ユーザは、表示された原稿反射情報の一覧の中から、所望の反射種に対応する原稿反射情報を入力部18の操作指示により入力する。これにより、光源受付部29は、原稿反射情報を受け付ける。
なお、ユーザによる入力部18の操作指示などにより、新たな光源情報や新たな原稿反射情報を、原稿情報テーブル及び原稿反射情報テーブルに登録してもよいし、登録されているこれらの情報を編集可能としてもよい。
図2に戻り、次に、設定部27について説明する。
設定部27は、仮想三次元空間における、指定された表示領域に対応する仮想領域を算出する。また、設定部27は、仮想三次元空間における、原稿画像(オブジェクト)を配置する配置面を設定する。
まず、仮想領域の算出について説明する。上述したように、表示領域51は、表示部20の二次元の画面上で指定された、二次元座標(デバイス座標)によって表される。設定部27は、この二次元のデバイス座標によって示される表示領域51を仮想三次元空間に配置し、該仮想三次元空間に配置した該表示領域51の三次元座標、傾き、位置等を示す仮想領域を算出する。
まず、仮想領域の算出における、設定部27の処理の概要を説明する。設定部27は、仮想三次元空間の予め定めた基準位置に仮配置した原稿面を表示部20の画面上における二次元空間に射影する射影行列と、指定された表示領域51の二次元座標と、原稿画像と、を用いて、仮想三次元空間における指定された表示領域51に対応する仮想領域を算出する。
仮想三次元空間に仮配置した原稿面とは、表示対象のオブジェクトの縦横の長さを元に、該大きさ及び形状のオブジェクトの4頂点を仮想三次元空間に仮配置した画像を示す。すなわち、原稿面は、仮想三次元空間に仮配置した原稿画像(オブジェクト)を示す。本実施の形態では、原稿面は、矩形状である場合を説明する。
仮想三次元空間の基準位置とは、仮想三次元空間における、Z=0のXY平面を意味する。Z=0の位置は、OpenGLにおいて仮想三次元空間を写す仮想カメラの位置に相当し、−Z軸方向は、仮想カメラの撮影方向の反対方向(180°反対方向)を意味する。
そして、設定部27は、ユーザによって指定された表示領域51の4頂点のデバイス座標と、仮想三次元空間に仮配置した原稿面(原稿画像)の4頂点の座標と、仮想三次元空間に仮配置した原稿面を二次元空間に射影する射影行列と、を用いて、傾き・位置行列を算出する。
傾き・位置行列は、仮想三次元空間における、指定された表示領域51に対応する仮想領域に配置した、オブジェクトの傾きと位置(奥行)を算出するための行列である。
そして、設定部27は、仮想三次元空間に仮配置した原稿面の4頂点の三次元座標を、傾き・位置行列に適用することで、三次元空間内における、指定された表示領域51に対応する仮想領域の4頂点の三次元座標を算出する。
これにより、設定部27は、仮想三次元空間における、指定された表示領域51に対応する、仮想領域を算出する。
図8は、設定部27の機能ブロック図である。設定部27は、仮配置部27Aと、第1算出部27Bと、第2算出部27Cと、第3算出部27Dと、制限部27Fと、第4算出部27Gと、配置面設定部27Hと、を含む。
仮配置部27A、第1算出部27B、第2算出部27C、第3算出部27Dと、制限部27F、第4算出部27G、および配置面設定部27Hの一部またはすべては、例えば、CPUなどの処理装置にプログラムを実行させること、すなわち、ソフトウェアにより実現してもよいし、ICなどのハードウェアにより実現してもよいし、ソフトウェア及びハードウェアを併用して実現してもよい。
仮配置部27Aは、指定部26で設定された表示領域51を取得する。詳細には、仮配置部27Aは、ユーザによって指定された表示領域51の各頂点のデバイス座標(二次元座標)を取得する。
また、仮配置部27Aは、表示対象の原稿画像(オブジェクト)の縦横サイズを取得する。
そして、仮配置部27Aは、表示対象の原稿画像の縦横サイズの原稿面を、仮想三次元空間における、Z=0のXY平面上に仮配置する。すなわち、仮配置部27Aは、まず、表示対象のオブジェクトを、三次元空間におけるZ=0のXY平面に仮配置し、仮想三次元空間に仮配置した原稿面とする。
図9は、仮想三次元空間に仮配置した原稿面54を示す説明図である。仮配置部27Aは、原稿面54の中心を、仮想三次元空間におけるXY平面の原点Oに重ね、該原稿面54の4頂点の座標(三次元座標)を初期値として設定することで、原稿面54を仮配置する。
ここで、原稿画像の横幅をwidth、高さをheightとし、Ox=width/2、Oy=height/2とする。すると、仮配置した原稿面54の4頂点の各々の、仮想三次元空間における初期配置座標は、図10に示す値となる。
図10に示すように、例えば、仮配置した原稿面54の4頂点(左上(topleft)、右上(topright)、左下(bottomleft)、右下(bottomright))の各々の初期配置座標は、図10に示される値となる。
そして、仮配置部27Aは、仮配置した原稿面54の初期配置座標を保持する。
図8に戻り、第1算出部27Bは、射影行列Fを算出する。
図11は、射影行列F及び射影行列Gの算出の説明図である。射影行列Fは、仮想三次元空間に仮配置した原稿面54の初期配置座標を(図11(B)参照)、二次元空間のデバイス座標(図11(A)参照)に射影する射影行列である。
すなわち、第1算出部27Bは、仮想三次元空間に仮配置した原稿面54における右上(topright)の1頂点Oの初期配置座標(Ox,Oy,0)を、二次元空間における1頂点Dのデバイス座標(Dx,Dy)に射影するための、射影行列Fを算出する。
また、第1算出部27Bは、その逆の射影を行うための射影行列Gを算出する。すなわち、第1算出部27Bは、二次元空間のデバイス座標を、仮想三次元空間に仮配置した原稿面54の初期配置座標に射影するための射影行列Gを算出する。
なお、上述したように、本実施の形態では、OpenGLを用いた表示処理を行う。このため、本実施の形態では、第1算出部27Bは、OpenGLによる変換ステージに従い、射影行列F、及び射影行列Gを算出する。
図12は、OpenGLによる変換ステージと射影行列との関係の説明図である。第1算出部27Bは、OpenGLの変換ステージに従い、二次元空間のデバイス座標(図12中、ハードウェア依存二次元座標参照)を、正規化行列N1の逆行列N1 −1で正規化二次元座標に変換した後に、射影行列F、及び射影行列Gを算出する。なお、第1算出部27Bは、射影行列の算出のための公知の計算式、もしくは、同等の任意の計算式を用いて、射影行列F及び射影行列Gを算出すればよい。また、第1算出部27Bは、openCV(Open Source Computer Vision Library)などのコンピュータビジョン向けライブラリを利用して、射影行列F及び射影行列Gを算出してもよい。
第1算出部27Bが算出する射影行列F、射影行列Gを以下に示す。
式(2)は、射影行列Fを示す。式(3)は、射影行列Gを示す。射影行列は、その定義により、定数倍の不定性が存在する。このため、射影行列は、任意のスケール係数(0ではない値)を乗算しても同じ変換であるとする。なお、射影行列Fについては、三行一列のベクトルを左から各々f1、f2、f3、f4と表す。
第2算出部27Cは、傾き・位置行列を算出する。傾き・位置行列は、上述したように、仮想三次元空間における、指定された表示領域51に対応する仮想領域に配置した、原稿画像の傾きと位置(奥行)を算出するための行列である。
第2算出部27Cは、第1算出部27Bから射影行列Fを取得する。また、第2算出部27Cは、撮影部12の光学特性パラメータを取得する。撮影部12の光学特性パラメータは、撮影部12の焦点距離、CCD(Charge Coupled Device)イメージセンサにおける、1画素分の幅、高さ、画像中心、画素単位の焦点距離(レンズ中心から画像平面までの距離)、などのパラメータである。記憶部16は、撮影部12の光学特性パラメータを予め記憶する。第2算出部27Cは、記憶部16から光学特性パラメータを読取ればよい。
第2算出部27Cは、射影行列Fと、撮影部12の光学特性パラメータと、を用いて、傾き・位置行列を算出する。本実施の形態では、第2算出部27Cは、射影行列Fと、後述する投影行列Aと、を用いて、傾き・位置行列を算出する。
まず、第2算出部27Cは、撮影部12の光学特性パラメータから、仮想三次元空間に配置された三次元像を二次元像に投影(すなわち、仮想三次元空間の三次元座標を二次元空間の二次元座標に投影)するための投影行列(以下、投影行列Aとする)を算出する。投影行列Aは、以下の式(4)によって示される。
式(4)中、ax及びayは、撮影部12の焦点距離を示す。詳細には、ax及びayは、撮影部12のレンズ中心から撮影素子配列(CCD)を配置した平面までの距離を示す。cx及びcyは、主点を示し、本実施の形態では、画像中心を示す。画像中心とは、撮影によって得た二次元の撮影画像の中心を示す。
第2算出部27Cは、表示画像の生成時に用いる背景画像の取得時の、撮影部12の光学特性パラメータを用いて、投影行列Aを算出することが好ましい。撮影部12の光学特性パラメータから算出した投影行列Aを用いることで、背景画像の撮影条件と同じ光学条件の原稿画像を含む、表示画像とすることができる。すなわち、背景画像に映り込む物体と同様の二次元化を行うことができる。
本実施の形態では、第2算出部27Cは、画像処理装置10に搭載されている撮影部12の光学特性パラメータから、投影行列Aを予め算出し、記憶部16に予め記憶する。また、背景画像を撮影する複数の撮影部12の各々の光学特性パラメータを用いて算出した、複数の投影行列Aを予め記憶部16に記憶してもよい。そして、画像処理部14では、複数の投影行列Aをユーザに対して選択可能に表示部20に表示し、第2算出部27Cは、ユーザによる入力部18の操作指示によって選択された投影行列Aを採用してもよい。また、ユーザによる入力部18の操作指示によって、任意の光学特性パラメータ及び投影行列Aを設定してもよい。
そして、第2算出部27Cは、射影行列Fと、投影行列Aと、を用いて、傾き・位置行列を算出する。例えば、第2算出部27Cは、ホモグラフィ分解法を用いて、射影行列Fと投影行列Aとから、傾き・位置行列を算出する。なお、ホモグラフィ分解法を用いた場合、値の定まらない場合や虚数解が得られる場合がある。傾き・位置行列は、式(5)で示される。
なお、式(5)では、傾き・位置行列の三行一列のベクトルを、左から各々γ1、γ2、γ3、tと表している。なお、γ3は、γ1とγ2の外積である。
第2算出部27Cは、以下の式(6)を用いて、傾き・位置行列を算出する。
式(6)中、μ1は、式(7)で表せる。式(6)中、μ2は、式(8)で表せる。
本実施の形態では、第2算出部27Cは、OpenGLを利用する。このため、第2算出部27Cは、式(5)に示す傾き・位置行列に、行ベクトル(0,0,0,1)を足して4×4行列に変換したものを、傾き・位置行列として算出する(式(9)参照)。
第2算出部27Cは、算出した傾き・位置行列(上記式(9)参照)を保持する。なお、第2算出部27Cは、前回算出した傾き・位置行列についても保持する。
次に、第2算出部27Cは、算出した傾き・位置行列と、射影行列Fと、算出に用いた光学特性パラメータと、を、第3算出部27Dへ出力する。
第3算出部27Dは、仮想三次元空間に配置された三次元像を二次元像に投影(すなわち、仮想三次元空間の三次元座標を二次元空間の二次元座標に投影)するための投影行列Bを算出する。
傾き・位置行列に、光沢特性パラメータから求めた投影行列Aを乗算しても、射影行列Fに一致しない。このため、第3算出部27Dは、傾き・位置行列に対して乗算した乗算結果が射影行列Fに一致するように、投影行列Bを算出する。ここで、傾き・位置行列と投影行列Bとの乗算値を、射影行列Fに一致させるための3行3列の補正行列を、Mとする。第3算出部27Dは、ホモグラフィ分解法により、以下の式(10)及び式(11)を導出し、式(15)により、補正行列Mを算出する。
なお、式(10)及び式(11)中、μ1は、式(12)によって表され、μ2は、式(13)によって表される。また、式(10)及び式(11)中、λは、式(14)によって表される。
このため、投影行列Bは、式(16)で表せる。
ここで、第3算出部27Dは、OpennGL用に、式(16)中の投影行列Aと、補正行列Mと、を式(17)に示すように変更する。
式(17)中、nとfは、OpenGL上でz軸方向における投影範囲を定めるものである。具体的には、nは、z軸の負の方向に沿ったクリップ距離の近い方を示す。fは、z軸の負の方向に沿ったクリップ距離の遠い方を示す。
第3算出部27Dが算出した投影行列Bを、仮想三次元空間に配置された三次元像を二次元像に投影(すなわち、仮想三次元空間の三次元座標を二次元空間の二次元座標に投影)するための投影行列として用いることで、後述する表示制御部28は、仮想三次元空間に配置した原稿面54を、デバイス座標で指定された表示領域51に投影する。
ここで、第3算出部27Dは、ユーザによる入力部18の操作指示に応じて、補正部27Eを呼び出す。すなわち、第3算出部27Dは、補正部27Eを含む。
第3算出部27Dが算出した投影行列Bは、光学特性パラメータから著しく異なる値を取り得る。このため、補正部27Eは、投影行列Bに示される各要素の値が予め定めた範囲から逸脱する場合、各要素の値が予め定めた範囲内に収まるように、投影行列Bの各要素を補正する。
例えば、補正部27Eは、投影行列Bの一行一列目の要素と、二行二列目の要素と、が当初の投影行列Bの1割以上変動する場合には、最大で一割の変動となるように、行列の要素の値を補正する。なお、当初の投影行列Bとは、オブジェクトを仮想三次元空間の予め定めた基準位置に当初に仮配置した原稿面の領域に対する相似領域を、表示部20の画面上の二次元空間に仮配置した時点を示す。
例えば、ユーザの操作指示によって、表示部20の画面上におけるユーザ所望の領域に表示領域51を配置するまでは、補正を行わず、配置完了後に、ユーザによる操作指示に従い、補正部27Eによる補正を実行してもよい。
また、投影行列Bの一行一列目の要素と、二行二列目の要素と、の変動の上限を0割とすることで、撮影部12の当初の光学特性パラメータを投影行列として用いることができる。このような処理を行うことで、後述するオブジェクト移動部30による移動処理において、背景画像に映り込む物体と異なる二次元化による違和感を、低減することができる。
第3算出部27Dは、前回算出した投影行列Bと、今回算出した投影行列Bと、の2つの投影行列Bを保持する。また、第3算出部27Dは、今回算出した投影行列Bを、制限部27Fへ出力する。
図13は、デバイス座標と、傾き・位置行列と、投影行列Bと、の関係を示す説明図である。
図13に示すように、傾き・位置行列は、仮想三次元空間における、指定された表示領域51に対応する仮想領域に配置した、オブジェクトの傾きと位置(奥行)を算出するための行列である。このため、三次元仮想空間内に仮配置した原稿面54の4頂点の座標に、傾き・位置行列を適用することで、指定された表示領域51に応じた傾き及び奥行(位置)を反映させることができる。投影行列Bは、仮想三次元空間に配置された三次元像を二次元像に投影(すなわち、仮想三次元空間の三次元座標を二次元空間の二次元座標に投影)するために用いる。
図8に戻り、制限部27Fは、ユーザによって指定された表示領域51の形状が、実際にはあり得ない形状となるか否かを判定し、ありえない形状であると判定した場合、前回指定された表示領域51を用いるように制御する。
実際にはあり得ない形状とは、例えば、指定された表示領域51の内角の合計値が180°以上である場合や、指定された表示領域に対応する仮想領域の、仮想三次元空間における位置が、仮想三次元空間における奥行方向の原点(すなわち、仮想空間における上記基準位置より視点位置側+Z軸方向)に位置する場合である。
詳細には、制限部27Fは、仮配置した原稿面54の4頂点の初期配置座標を仮配置部27Aから取得する。そして、制限部27Fは、最新の投影行列Bを第2算出部27Cから取得し、傾き・位置行列を第2算出部27Cから取得する。そして、図12に示すように、制限部27Fは、仮配置した原稿面54の4頂点の初期配置座標と、傾き・位置行列と、投影行列Bと、から、該4頂点の各々の、正規化二次元座標を算出する。このとき、制限部27Fは、該4頂点の全ての正規化二次元座標におけるZ座標(奥行方向の座標)が0以上である場合、すなわち、仮想三次元空間を写す仮想カメラの後方側(撮影方向の反対側、すなわち、仮想三次元空間における奥行方向の原点より視点位置側)に位置する場合、異常と判断する。なお、仮想カメラは、仮想三次元空間の原点に配置され、−Z軸方向を撮影方向としている。
図8に戻り、第4算出部27Gは、制限部27Fが異常と判断したか否かを判別する。制限部27Fによって異常であると判断された場合、第4算出部27Gは、異常信号を、指定部26(図2参照)と、第2算出部27Cと、第3算出部27Dと、に通知する。
指定部26は、異常信号を受け付けると、最新の指定された表示領域51を、前回指定された表示領域51で上書きする。第2算出部27Cは、異常信号を受け付けると、最新の傾き・位置行列を、前回算出した傾き・位置行列で上書きする。補正部27Eは、異常信号を受け付けると、最新の投影行列Bを、前回算出した投影行列Bで上書きする。そして、第4算出部27Gは、前回仮配置された原稿面54の4頂点の初期配置座標と、前回の傾き・位置行列と、前回の投影行列Bと、を第4算出部27G及び表示制御部28へ通知する。
一方、第4算出部27Gは、制限部27Fによって異常ではないと判断された場合、仮配置された原稿面54の4頂点の初期配置座標と、最新の傾き・位置行列(仮想領域)と、最新の投影行列Bと、を第4算出部27G及び表示制御部28へ通知する。
第4算出部27Gは、仮想三次元空間に仮配置した原稿面54の4頂点の三次元座標(初期配置座標)を、傾き・位置行列に適用することで、仮想三次元空間における、指定された表示領域51に対応する仮想領域の4頂点の三次元座標を算出する。これにより、第4算出部27Gは、仮想三次元空間における、指定された表示領域51に対応する仮想領域を算出する。そして、第4算出部27Gは、算出した仮想領域の三次元座標を、表示制御部28へ通知する。
配置面設定部27Hは、仮想三次元空間における、オブジェクトを配置する配置面を設定する。配置面は、実空間における平面状の領域である。例えば、実空間が、複数の壁面で構成された室内であるとする。この場合、配置面は、この複数の壁面の内の1つの壁面である。また、実空間が、床面、天井面、床面と天井面とに連続する4つの壁面で構成された立方体状の室内であるとする。この場合、配置面は、立方体状の室内を構成する6つの壁面の内の1つである。
例えば、配置面設定部27Hは、仮想三次元空間における、予め定めた視線方向に対して直交する平面を、配置面として設定する。ここで、上述したように、ユーザによって表示領域51が指定される場合がある。このため、本実施の形態では、配置面設定部27Hは、第4算出部27Gが算出した仮想領域に沿った平面を、配置面として設定してもよい。また、配置面設定部27Hは、第4算出部27Gが算出した仮想領域に沿った平面を、仮想三次元空間における視点位置から離れる方向に向かって移動させ、上記実空間の壁面などの平面状の領域まで移動させた位置の平面(壁面)を、配置面として設定する。
図2に戻り、表示制御部28は、仮想三次元空間における、設定された配置面に原稿画像72(図14参照)を配置する。詳細には、表示制御部28は、仮想三次元空間に設定された配置面における仮想領域に、原稿画像72を配置して三次元オブジェクトとする。すなわち、表示制御部28は、仮想三次元空間の配置面における、三次元座標によって示される仮想領域に原稿画像72を配置することで、三次元オブジェクトとする。さらに詳細には、表示制御部28は、仮想三次元空間の配置面における、三次元座標によって示される仮想領域の4頂点の各々に、原稿画像(オブジェクト)の4頂点の各々が一致するように配置する。
そして、表示制御部28は、仮想三次元空間における、配置面に原稿画像(オブジェクト)を配置した状態を、予め定めた視点位置から予め定めた視線方向に視認した二次元画像に変換した表示画像を、表示部20に表示する制御を行う。すなわち、表示制御部28は、仮想三次元空間の配置面における、表示領域51に対応する仮想領域に原稿画像72が一致するように配置した状態を、予め定めた視点位置から予め定めた視線方向に視認した二次元空間に投影した表示画像を、表示部20に表示する制御を行う。
ここで、上述したように、本実施の形態では、背景画像74は、全天球パノラマ画像である。このため、表示制御部28は、全天球パノラマ画像を、視点位置から視線方向に予め定めた視野角で視認した範囲を、表示画像として用いる背景画像74として使う。このため、表示画像に含まれる背景画像74は、具体的には、全天球パノラマ画像における、視点位置から視線方向に予め定めた視野角で視認した範囲である。
なお、視点位置から視線方向に視認、とは、仮想三次元空間を球体と仮定した場合、該球体の中心を視点位置として視線方向に視認することを示す。
視点位置は、具体的には、仮想三次元空間の上記基準位置に仮配置された原稿面54に対する垂線に沿った−Z軸方向の位置である。視点位置は、OpenGLの処理により、ユーザによって指定された任意の位置に変更可能である。また、視線方向も、ユーザによる入力部18の操作指示によって変更可能である(詳細後述)。
すなわち、表示制御部28は、オブジェクト、背景画像、仮想三次元空間に仮配置した原稿面54の4頂点の三次元座標(初期配置座標)、配置面の三次元座標、OpenGL内でのMODEL−VIEW行列として最新の傾き・位置行列、PROJECTION行列として投影行列B、及び、光源受付部29で受け付けた光源情報ならびに原稿反射情報を受け付ける。
そして、表示制御部28は、OpenGLを用いて、仮想三次元空間に背景画像(本実施の形態では、球状の全天球パノラマ画像)を配置する。すなわち、表示制御部28は、球状の仮想三次元空間の内壁に沿って全天球パノラマ画像を配置する。そして、表示制御部28は、仮想三次元空間に(すなわち、この球状の全天球パノラマ画像内に)、受け付けた光源情報および原稿反射情報に応じた仮想光源を配置すると共に、仮想三次元空間における、指定された表示領域に対応する、配置面における仮想領域に、原稿画像72を配置し、光源情報に応じた光源効果を付加された原稿画像とする。
そして、表示制御部28は、この仮想三次元空間における配置面に原稿画像(オブジェクト)を配置した状態を、予め定めた視点位置から予め定めた視線方向に視認した表示画像を、表示部20に表示する制御を行う。
表示制御部28は、原稿画像(オブジェクト)を二次元空間に投影して表示画像を作成する際には、第3算出部27Dが算出した投影行列Bを用いる。
表示部20に表示画像が表示されると、ユーザは、入力部18を操作することで、表示画像に含まれる原稿画像の位置を、表示部20の画面上における任意の位置に移動させることが可能となる。
例えば、ユーザは、タッチパネルとして構成されたUI部22の画面を操作することで、表示されている原稿画像またはその周辺にタッチし、任意の移動先の位置にまでドラッグする。受付部25は、ドラッグ中、新たな二次元座標が指定されるたびに、新たに指定された表示領域51のデバイス座標を受け付け、指定部26は、受付部25で受け付けた、指定された表示領域の各頂点のデバイス座標を表示領域情報として記憶部16に記憶する。
そして、設定部27は、指定部26で新たなデバイス座標が指定されるたびに、上記処理を行い、表示制御部28は、上記と同様にして表示画像を表示部20へ表示する。このように、ドラッグ中、表示領域51の新たなデバイス座標が指定される度に、画像処理部14は、上記表示画像の表示処理を繰り返し実行する。
なお、ユーザによる、表示領域51の二次元座標の指定が終了したときに、設定部27は処理を終了してもよいし、補正部27Eによる投影行列の補正処理を行ってもよい。
図14は、画像処理部14における表示処理の一連の流れを示す模式図である。
まず、取得部24が背景画像74と、原稿画像72と、を取得する(図14(A)参照)。受付部25が、原稿画像72の表示領域51の指定を受け付ける(図14(B)参照)。上述したように、本実施の形態では、表示領域51の4頂点のデバイス座標を入力部18から受け付けることで、表示領域51の指定を受け付ける(図14(B)参照)。これらの4頂点は、ユーザがタッチパネルとして構成されたUI部22を用いて指定したものである。この場合、仮想三次元空間における、該表示領域51に沿った平面が、設定部27によって、配置面50として設定される。
また、ユーザが入力部18の操作によって、表示領域51の4頂点の内の1頂点を背景画像74上におけるユーザ所望の位置にドラッグすることで、ユーザ所望の位置に各頂点を移動させることができる(図14(C)参照)。この場合、仮想三次元空間における、該表示領域51に沿った平面が、設定部27によって、配置面50として設定されることとなる。
次に、設定部27が、仮想三次元空間K内における、指定された表示領域51に対応する仮想領域53を算出する(図14(D)参照)。また、設定部27は、仮想三次元空間K内における、仮想領域53に沿った平面を、配置面50として設定する(図14(D)参照)。
そして、表示制御部28は、仮想三次元空間Kの該配置面50における仮想領域53に、原稿画像72を配置する(図14(D)参照)。このとき、表示制御部28は、仮想三次元空間K内に、受け付けた光源情報を示す仮想光源LAを配置することで、受け付けた光源情報に応じた光源効果を付加された原稿画像72とすることが好ましい。
具体的には、上述したように、設定部27は、仮想三次元空間Kに仮配置した原稿面を二次元空間に射影する射影行列Fを算出する。また、設定部27は、指定された表示領域51の二次元座標と、仮想三次元空間K内に仮配置した原稿面の三次元座標と、射影行列と、を用いて、仮想三次元空間K内における、指定された表示領域に対応する仮想領域に配置したオブジェクトの傾きと位置を算出するための傾き・位置行列を算出する。さらに、設定部27は、仮想三次元空間Kに仮配置した原稿面の4頂点の三次元座標を、傾き・位置行列に適用することで、仮想三次元空間K内における、指定された表示領域51に対応する仮想領域53(図14(D)参照)の三次元座標を算出する。また、ユーザの入力に応じて、仮想三次元空間K内における、三次元オブジェクト55の位置や姿勢を変更する。
表示制御部28は、ユーザの入力に応じて、各機能部を呼び出す。また、表示制御部28は、表示部20へ表示する画像を制御する。表示制御部28は、3Dグラフィックエンジン(例えば、OpenGL)を利用して、原稿画像72を、仮想三次元空間Kにおける、指定された表示領域51に応じて設定された、配置面50における仮想領域53に配置する。そして、表示制御部28は、該原稿画像72を二次元空間に投影することで、背景画像74(全天球パノラマ画像)に二次元の原稿画像72を重畳した表示画像80を、表示部20に表示する。
これによって、表示制御部28は、仮想三次元空間Kの配置面50における仮想領域53に、原稿画像72を配置した状態を、視点位置Pから視線方向Lに視認した二次元画像に変換した表示画像80を、表示部20に表示することができる(図14(D)、図14(E)参照)。
図2に戻り、次に、オブジェクト移動部30、オブジェクト拡大縮小部31、オブジェクト回転部32、視線方向変更部33、視線・配置位置変更部34、および再設定部35について説明する。
オブジェクト移動部30、オブジェクト拡大縮小部31、およびオブジェクト回転部32は、指定された表示領域51に対応する位置に配置された原稿画像72を、仮想三次元空間の中で移動、拡大縮小、または回転させる。また、視線方向変更部33は、仮想三次元空間における視線方向を変更する。また、視線・配置位置変更部34は、仮想三次元空間における、視線方向および原稿画像72の双方の配置位置を変更する。また、再設定部35は、配置面50を再設定する。
表示制御部28は、ユーザによる入力部18の操作指示に応じて、オブジェクト移動部30、オブジェクト拡大縮小部31、オブジェクト回転部32、視線方向変更部33、視線・配置位置変更部34、および再設定部35を呼び出す。例えば、ユーザは、表示部20に表示された表示画面を参照しながら入力部18を操作することで、原稿画像72の移動、拡大縮小、回転、視線方向の変更、視線方向および原稿画像72の配置位置の変更指示、などを指示する。
図15は、表示画面60の一例を示す図である。
表示画面60は、表示画像の表示領域70と、背景画像選択ボタン61と、オブジェクト選択ボタン62と、配置ボタン63と、移動・拡大縮小ボタン64と、3D回転ボタン65と、平面回転ボタン66と、を含む。
表示領域70には、表示画像が表示される。背景画像選択ボタン61は、ユーザが背景画像74を選択するときに操作する指示領域である。オブジェクト選択ボタン62は、ユーザが原稿画像72を選択するときに操作する操作領域である。配置ボタン63は、表示領域51の指定時にユーザが操作する指示領域である。移動・拡大縮小ボタン64、3D回転ボタン65、及び平面回転ボタン66は、原稿画像72を仮想三次元空間Kの中で移動、拡大、縮小、回転させるときにユーザによって指示される。詳細には、移動・拡大縮小ボタン64は、表示画像に含まれる原稿画像72の移動、拡大、または縮小を指示するときにユーザが操作する指示領域である。3D回転ボタン65は、表示画像に含まれる原稿画像72を三次元に回転させるときにユーザが操作する指示領域である。平面回転ボタン66は、表示画像に含まれる原稿画像72を二次元に回転させるときにユーザが操作する指示領域である。
配置ボタン63、移動・拡大縮小ボタン64、3D回転ボタン65、及び平面回転ボタン66は排他的に選択可能となっており、一つのボタンが指示されると、別のボタンの選択が解除される。なお、アプリケーション起動時には、配置ボタン63が選択された状態となっており、表示領域51の指定及び変更が可能な状態となっている。
図16は、移動、拡大縮小、回転の説明図である。
ユーザが、移動・拡大縮小ボタン64、3D回転ボタン65、または平面回転ボタン66を選択したとする。なお、これらの選択の後に、ユーザは、配置ボタン63を選択することも可能である。
まず、移動・拡大縮小ボタン64について説明する。表示画像に含まれる二次原稿元画像56を移動したり、拡大したり、縮小したりする処理は、もっともよく利用される機能である。このため、本実施の形態では、これらの複数の処理を指示するためのボタンを、1つの移動・拡大縮小ボタン64としている。UI部22をタッチパネルで構成した場合、移動指示はドラッグ、拡大縮小指示はピンチアウト/ピンチインで行われる。このため、表示部20の画面にタッチしているユーザの指の数が異なっており、同一のボタンであってもどちらの処理をユーザが利用しようとしているのか切り分けできる。すなわち、移動・拡大縮小ボタン64が選択された状態で、ユーザによってドラッグの指示がなされると、画像処理部14は、「移動指示」と判断すればよい。また、移動・拡大縮小ボタン64が選択された状態で、ユーザによってピンチアウト/ピンチインがなされると、画像処理部14は、「拡大指示」または「縮小指示」がなされたと判断すればよい。
表示制御部28は、設定部27に、選択されているボタンを示す指示情報(配置ボタン63、移動・拡大縮小ボタン64、3D回転ボタン65、及び平面回転ボタン66の何れか)と、ユーザによって指示されたデバイス座標を出力する。
設定部27は、表示制御部28から受け付けた指示情報及びデバイス座標に応じて、オブジェクト移動部30、オブジェクト拡大縮小部31、またはオブジェクト回転部32を呼び出す。
オブジェクト移動部30は、移動・拡大縮小ボタン64を示す指示情報を受け付け、且つ、ユーザによって原稿画像72のドラッグ操作がなされた場合(図16(A)参照)、起動する。なお、オブジェクト移動部30は、これらの指示情報(移動指示)やドラッグ操作を、入力部18から受付部25を介して受け付ける。
そして、オブジェクト移動部30は、ドラッグ開始時のデバイス座標を記憶する。また、オブジェクト移動部30は、指定部26から、指定された表示領域51の各頂点のデバイス座標を取得し、4頂点の重心Pを求める。言い換えれば、オブジェクト移動部30は、表示されている表示画像に含まれる原稿画像72の各頂点のデバイス座標と、重心Pと、を求める(図16(B)参照)。
なお、オブジェクト移動部30は、重心Pに代えて、4頂点の何れか1頂点を求めても良いし、任意の1点でもよい。具体的には、任意の1点から、原稿画像72の4頂点の各々のオブジェクト座標を算出可能な、該任意の1点であればよい。ここでは、制御が簡単な重心Pを利用する場合を説明する。
そして、オブジェクト移動部30は、ドラッグ開始時の原稿画像72の重心Pのオブジェクト座標を保持する。
次に、オブジェクト移動部30は、ユーザによるドラッグ操作中は、現座標(現在指示している二次元座標)からドラッグ開始時の二次元座標を差し引き、表示部20の画面上における移動ベクトルを算出する。そして、オブジェクト移動部30は、算出した移動ベクトルを、ドラッグ開始時の重心Pに加算することで、現在の重心P’のデバイス座標を算出する(図16(B)参照)。
次に、オブジェクト移動部30は、算出した現在の重心P’の位置に、設定部27が保持している射影行列Gを適用することで、仮想三次元空間Kにおける原稿画像72の位置を算出する。なお、この算出時には、Z座標の値は0とする。これにより、原稿画像72は、仮想三次元空間K内の、XY平面を、原稿画像72Aの位置から原稿画像72Bの位置へと移動することとなる(図16(C)参照)。
表示制御部28による表示画像の表示時には、原稿画像72がXY平面上を移動することとなる。ここで、原稿画像72Aの位置から原稿画像72Bの位置への移動を示す行列をTとする。オブジェクト移動部30は、第2算出部27Cで算出された傾き・位置行列に、この行列Tを乗算した行列(RT×T)を、新たな傾き・位置行列として第4算出部27G及び表示制御部28へ引き渡せばよい。なお、RTは、傾き・位置行列を示す。
また、設定部27は、この行列Tを利用して、デバイス座標を算出し、新たな表示領域51(変更後の表示領域51)として、指定部26へ引き渡せばよい。
このように、ユーザは、表示画像に含まれる原稿画像72を、容易に移動させることができるので、仮想三次元空間Kに配置された仮想光源LAによる反射位置の変化を、容易に確認することができる。
オブジェクト拡大縮小部31は、移動・拡大縮小ボタン64を示す指示情報を受け付け、且つ、ユーザによって原稿画像72のピンチアウト/ピンチイン操作がなされた場合(図16(D)参照)、起動する。なお、オブジェクト拡大縮小部31は、これらの指示情報(拡大縮小指示)やピンチアウト/ピンチイン操作を、入力部18から受付部25を介して受け付ける。
そして、オブジェクト拡大縮小部31は、ピンチアウト/ピンチイン開始時の2頂点間の距離を算出し、記録する。また、ピンチアウト/ピンチイン中も、オブジェクト拡大縮小部31は、2頂点間の距離を算出する。そして、ピンチアウト/ピンチイン中の2頂点間の距離を、ピンチアウト/ピンチイン開始時の2頂点間の距離で割ったものを、指定倍率として扱う。オブジェクト初期座標は、XY平面上にあり、倍率はXY座標だけに適応する。オブジェクト拡大縮小部31は、原稿画像72をピンチアウト/ピンチインするときの行列を、行列Sとし記憶する。
さらに、オブジェクト拡大縮小部31は、第2算出部27Cで算出された傾き・位置行列に、行列Sを乗算した行列(RT×S)を、新たな傾き・位置行列として第4算出部27G及び表示制御部28へ引き渡せばよい。なお、オブジェクト移動部30による移動の後に、拡大縮小が指示された場合には、オブジェクト拡大縮小部31は、第2算出部27Cで算出された傾き・位置行列に、行列Tと、行列Sと、を乗算した行列(RT×T×S)を、新たな傾き・位置行列として第4算出部27G及び表示制御部28へ引き渡せばよい。これにより、拡大した原稿画像72を含む表示画像が表示される。
設定部27は、オブジェクト移動部30のときと同様にしてデバイス座標を算出し、新たな表示領域51(変更後の表示領域51)として、指定部26へ引き渡せばよい。また、設定部27は、拡大縮小の倍率を、表示制御部28に引き渡す。表示制御部28は、受け付けた倍率を、表示画像と共に表示部20に表示するように制御する。この倍率を表示部20に表示することで、背景画像中に、基準となる大きさを示す物体などの画像が含まれる場合、原稿画像72の倍率をどの程度にすればよいか、ユーザは容易に推測可能となる。具体的には、ユーザは、表示されている倍率から、例えば、原稿画像72をA3サイズのポスターとして出力するか、A1サイズのポスターとして出力するか、などを、表示画像を確認しながら考察することができる。
オブジェクト回転部32は、3D回転ボタン65、または平面回転ボタン66を示す指示情報を受け付けた場合(図16(E)参照)、起動する。なお、オブジェクト回転部32は、これらの指示情報(二次元回転指示、三次元回転指示)を、入力部18から受付部25を介して受け付ける。
オブジェクト回転部32は、3D回転ボタン65を示す指示情報(三次元回転指示)を受け付けた場合、ユーザによる入力部18の指示などによるドラッグに合わせて、原稿画像72を三次元回転させる。具体的には、オブジェクト回転部32は、マウス等による入力部18のドラッグに応じた、3次元の回転行列を生成する。
本実施の形態では、この3次元の回転行列の生成に、既知のトラックボールコントロール技術を利用する。この三次元の回転行列をR3とする。この場合、オブジェクト回転部32が、下記式(18)によって示される行列を、新たな傾き・位置行列として第4算出部27G及び表示制御部28に引き渡すことで、三次元回転された原稿画像72を含む表示画像が表示部20に表示される。
RT×R3・・・式(18)
なお、オブジェクト移動部30による移動、及びオブジェクト拡大縮小部31による拡大縮小の後に、さらに、三次元回転が指示された場合には、オブジェクト回転部32は、下記式(19)によって示される行列を、新たな傾き・位置行列として第4算出部27G及び表示制御部28に引き渡すことで、三次元回転された原稿画像72を含む表示画像が表示部20に表示される。
RT×T×R3×S・・・式(19)
設定部27は、オブジェクト移動部30のときと同様にしてデバイス座標を算出し、新たな表示領域51(変更後の表示領域51)として、指定部26へ引き渡せばよい。三次元回転された原稿画像72を含む表示画像が表示部20に表示されることで、ユーザは、光源反射効果を容易に確認できる。
オブジェクト回転部32は、平面回転ボタン66を示す指示情報(二次元回転指示)を受け付けた場合(図16(E)参照)、ユーザによる入力部18の指示などによるドラッグに合わせて、仮想三次元空間K内における原稿画像72をXY平面に沿って二次元回転させる。具体的には、オブジェクト回転部32は、マウス等による入力部18のドラッグに応じた、二次元の回転行列を生成する。
この場合、オブジェクト回転部32は、ドラッグ開始点からの移動量を、予め定めた係数をかけたラジアンとして取り扱う。オブジェクト回転部32は、このラジアンを利用して、二次元の回転行列R2を生成する。オブジェクト回転部32が、下記式(20)によって示される行列を、新たな傾き・位置行列として第4算出部27G及び表示制御部28に引き渡すことで、二次元回転された原稿画像72を含む表示画像が表示部20に表示される。
RT×R2・・・式(20)
なお、オブジェクト移動部30による移動、オブジェクト拡大縮小部31による拡大縮小、三次元回転、の後に更に二次元回転が指示された場合、オブジェクト回転部32は、下記式(21)によって示される行列を、新たな傾き・位置行列として第4算出部27G及び表示制御部28に引き渡すことで、さらに二次元回転された原稿画像72を含む表示画像が表示部20に表示される。
RT×T×R3×R2×S・・・式(21)
設定部27では、オブジェクト移動部30のときと同様にしてデバイス座標を算出し、新たな表示領域51(変更後の表示領域51)として、指定部26へ引き渡せばよい。設定部27は、背景画像に平行なXY平面に原稿画像72を配置するが、背景画像が常に垂直や水平な状態になっているとは限らず、傾いていることもあるため、この回転を利用することが好ましい。また、机などの背景画像の上にオブジェクトを配置する場合、座っているユーザからみて正しく置かれている状態にしたいため、平面回転を行う。三次元回転に比べて、二次元回転の方が大変容易である。
なお、オブジェクト移動部30、オブジェクト拡大縮小部31、及びオブジェクト回転部32の少なくとも2つを組み合わせて利用してもよい。また、ユーザによる操作により配置ボタン63が指示され、表示領域51の指定をやり直す場合には、T、R3、R2、Sを単位行列にすればよい。
移動・拡大縮小ボタン64、3D回転ボタン65、及び平面回転ボタン66を用いて、原稿画像72を移動、拡大縮小、回転させることができるので、原稿画像72の4頂点の全てを操作して移動を行うことなく、一度確定した表示領域51の形状を維持した状態で、三次元仮想空間S内における原稿画像72の姿勢を容易に変更することができる。
また、ユーザは、表示画像における原稿画像72の位置を容易に調整することができる。
次に、視線方向変更部33、視線・配置位置変更部34、再設定部35、の各々について説明する。
図17は、視線方向変更の説明図である。視線方向変更部33は、仮想三次元空間における視線方向を変更する。ユーザは、視線方向の変更を入力する。受付部25は、視線方向の変更指示を示す指示情報を受付ける。視線方向変更部33は、入力部18から受付部25を介して、視線方向の変更を示す指示情報を受付ける。
例えば、ユーザは、表示部20に表示された表示画像80における、原稿画像72以外の領域をタッチして矢印B1方向へドラッグしたとする。これによって、該ドラッグの方向とは逆方向の矢印B2方向への視線方向の変更指示が入力される。
具体的には、視線方向変更部33は、表示画像80における、原稿画像72以外の領域のタッチされた位置を示すデバイス座標を、受付部25を介して入力部18から受付ける。そして、視線方向変更部33は、タッチ開始時のデバイス座標を保存しておき、タッチ中(すなわちドラッグ中)、タッチ開始時からのデバイス座標の移動量を利用して回転角度を算出する。そして、視線方向変更部33は、タッチ開始時の回転角度に、タッチ中(すなわちドラッグ中)の回転角度を加算した方向を、変更後の視線方向Lとして特定する。
図17(A)に示すように、例えば、仮想三次元空間Kをなす背景画像74(全天球パノラマ画像)における、ある位置に原稿画像72が配置されていたとする。そして、表示画像80Aとして、該背景画像74を視点位置Pから視線方向L1に視認した視野角の範囲74Aの二次元画像が表示されていたとする。そして、ユーザが、表示部20に表示された表示画像80Aにおける、原稿画像72以外の領域をタッチして矢印B1方向へドラッグしたとする。これによって、該ドラッグの方向とは逆方向の矢印B2方向への視線方向の変更指示が入力される。
すると、視線方向変更部33は、入力された、矢印B2方向へ視線方向Lを移動することで、視線方向L1から視線方向L2に視線方向を変更する。視線方向変更部33は、上述したように、タッチ開始時からのデバイス座標の移動量を利用して、回転角度を算出し、変更後の視線方向L2を特定すればよい。このため、該背景画像74を視点位置Pから視線方向Lに視認した視野角の範囲が、範囲74Aから範囲74Bへ移動される(図17(B)参照)。
この場合、表示制御部28は、仮想三次元空間Kにおける視線方向L1を、視線方向L2へ変更し、背景画像74(全天球パノラマ画像)を視点位置Pから視線方向L2に視認した状態を示す該範囲74Bの表示画像80Bを、表示部20へ表示する。
このため、この場合、仮想三次元空間Kにおける原稿画像72の位置は固定したまま、視線方向Lのみを変更した状態を示す表示画像80Bが、表示部20に表示されることとなる。なお、表示制御部28は、視線方向Lの変更に応じて、原稿画像72を変形することが好ましい。
なお、視線方向Lの変更は、画像処理装置10の姿勢から判別してもよい。例えば、画像処理装置10の姿勢(例えば、表示部20の表示面に対する垂線方向)を、視線方向Lとして扱っても良い。この場合、画像処理装置10に、画像処理装置10の姿勢を検出するための公知のセンサ(例えば、ジャイロセンサやGPSなど)を備えた構成とすればよい。そして、画像処理部14では、画像処理装置10の姿勢の変化方向および変化量を、視線方向Lの変更方向および変更量(回転角度)として用いればよい。また、ヘッドマウントディスプレイを利用して、ヘッドマウントディスプレイと連携できるジャイロセンサを用いて、視線方向Lの変化量を求めてもよい。
図18は、視線方向Lを変更した場合の、表示画像80の一例を示す模式図である。図18(A)は、視線方向Lが図17(A)に示す状態であるときの、表示画像80の一例(表示画像80A)を示す模式図である。図18(B)は、視線方向Lが図17(B)に示す状態であるときの、表示画像80の一例(表示画像80B)を示す模式図である。
図18に示すように、視線方向Lの変更指示によって、仮想三次元空間Kにおける原稿画像72の位置は固定であるが、視線方向Lが変更されることで、原稿画像72の見え方が変化する。このため、ユーザは、視線方向Lの変更によって、原稿画像72がどのような見え方(表示位置や形状)となるかを容易に確認することができる。
次に、視線・配置位置変更部34について説明する。視線・配置位置変更部34は、仮想三次元空間Kにおける、視線方向Lおよび原稿画像72の双方の配置位置を変更する。
例えば、受付部25は、視線方向Lの変更指示と、原稿画像(オブジェクト)72の配置位置の変更指示と、を含む同時変更指示を、入力部18から受付ける。すなわち、同時変更指示は、視線方向Lと原稿画像72の双方を同時に移動させるための指示である。
受付部25が同時変更指示を受付けると、視線・配置位置変更部34は、仮想三次元空間Kにおける、配置面50に沿った仮想面に沿って、視線方向Lの変更指示に応じた方向に原稿画像72を移動させる。
配置面50に沿った仮想面とは、仮想三次元空間Kにおいて、配置面50の位置および姿勢を維持したまま、仮想三次元空間Kにおいて該配置面50を拡大した二次元平面である。このため、仮想面の一部領域が配置面50と一致する。
表示制御部28は、同時変更指示を受付けたときに、配置面50に沿った仮想面に沿って、視線方向Lの変更指示に応じた方向に原稿画像72を移動させた状態を、視点位置Pから変更後の視線方向Lへ視認した二次元画像に変換した、表示画像80を、表示部20に表示する制御を行う。
また、判別部36は、受付部25が、予め定めた角度以上の視線方向Lの変更指示を含む、同時変更指示を受付けたか否かを判別する。予め定めた角度は、例えば、90°、180°などである。
再設定部35は、予め定めた角度以上の視線方向Lの変更指示を含む同時変更指示を受付けたと判別したときに、仮想三次元空間Kにおける、配置面50を視線方向Lの変更に応じて変更した平面を、新たな配置面50として再設定する。例えば、再設定部35は、仮想三次元空間Kにおける、変更後の視線方向Lに対して直交する平面(垂直に交差する平面)を、新たな配置面50として再設定する。
例えば、再設定部35は、現在の視線方向Lと現在設定されている配置面50の法線方向を取得する。ここで、配置面50の法線方向をA0=(α0,β0,γ0)、時刻tの視線方向をAt=(αt,βt,γt)とする。すると、相対的な方向は、At−A0で表される。再設定部35は、予め定めた角度(すなわち相対角度)、視線方向Lが回転した場合、原稿画像72の配置面50を切り替えることで、再設定する。
この再設定により、例えば、再設定部35は、一般的な直方体の建物の垂直面に対して、配置面50を切り替えることができる。この時の配置面50の法線方向は、A0=(α0+π/2*Sα,β0+π/2*Sβ,γ0+π/2*Sγ)で表される。ここで、Sは、表示部20の姿勢の変化を表す整数変数{0,1,2,3}である。表示部20の姿勢を変更するタイミングは、姿勢の変化量|At−A0|が閾値ψ(45<ψ<90)を超えた時とする。
なお、配置面50を再設定した後も、同様に、再設定部35は、予め定めた角度以上の視線方向Lの変更指示を受付けた場合、配置面50を再設定すればよい。
表示制御部28は、再設定された配置面50に原稿画像(オブジェクト)72を配置した状態を、視点位置Pから変更後の視線方向へ視認した二次元画像に変換した表示画像80を、表示部20に表示する制御を行う。
例えば、ユーザによるUI部22の操作によって、異なる2点(例えば、原稿画像72上と、背景画像74上)が同時にタッチされたとする。すると、画像処理部14は、これらの2点の各々のデバイス座標を受付ける。本実施の形態では、画像処理部14は、原稿画像72上の点と、背景画像74上の点と、を示す2点のデバイス座標を同時に受付けた場合、同時変更指示を受付けたと判断する。なお、画像処理部14は、原稿画像72の4頂点のデバイス座標を把握していることから、原稿画像72上の点と、背景画像74上の点と、を示す2点のデバイス座標を同時に受付けたことを判別することができる。
そして、ユーザは、例えば、原稿画像72上のタッチ位置は固定としたまま、背景画像74におけるタッチ位置を所望の方向にドラッグする。この操作により、ユーザは、原稿画像72の配置位置と視線方向Lの双方を同時に移動させることを示す、同時変更指示を入力する。
視線・配置位置変更部34は、受付けた同時変更指示に応じて、仮想三次元空間Kにおける、視線方向Lおよび原稿画像72の双方の配置位置を変更する。
図19は、同時変更指示の受付けにより、視線方向Lと原稿画像72の位置を同時に変更したときの、表示画像80(表示画像80C〜表示画像80E)の一例を示す模式図である。図20は、同時変更指示の受付けにより、視線方向Lと原稿画像72の位置を同時に変更したときの、仮想三次元空間Kにおける原稿画像72の位置を示す模式図である。
例えば、図19(A)に示すように、ユーザが、表示部20における原稿画像72上の点(タッチ位置T1)と、背景部分の点(タッチ位置T2a)と、を同時にタッチしたとする。そして、ユーザは、タッチ位置T1を固定したまま、背景部分のタッチ位置T2aを所望の方向(例えば、矢印B3方向)にドラッグする。この操作により、ユーザは、原稿画像72の配置位置と視線方向Lの双方を同時に移動させることを示す、同時変更指示を入力する。この場合、ユーザは、該矢印B3方向の逆方向(矢印B4)に視線方向Lを移動させることを示す指示と、原稿画像72も同時に移動させることを示す指示と、を入力したこととなる。
図19(A)に示す操作を受付けると、図20に示すように、視線・配置位置変更部34は、仮想三次元空間K(背景画像(全天球パノラマ画像)74)における視線方向L1を、該ドラッグ量に応じた回転角度θ回転し、視線方向L2へ変更する。また、視線・配置位置変更部34は、仮想三次元空間Kにおける原稿画像72を、該原稿画像72の配置されている配置面50Aに沿った仮想面50A’に沿って、視線方向Lの変更方向(ここでは、矢印B4方向)に、該回転角度θ移動させる。このため、原稿画像72は、仮想三次元空間K内を、仮想面50A’に沿って、原稿画像72Aの位置から原稿画像72Bの位置へと移動される。なお、仮想面50A’における、移動後の原稿画像72Bの位置は、視点位置Pを中心として、視線方向L1を回転角度θ回転させた位置に相当する。
そして、表示制御部28は、仮想三次元空間Kにおける、仮想面50A’に沿って移動させた原稿画像72Bを、視点位置Pから視線方向L2に視認した状態を示す表示画像80を、表示部20へ表示する。
このため、この場合、表示部20には、図19(B)に示す表示画像80Dが表示されることとなる。すなわち、仮想三次元空間Kにおける視線方向Lが矢印B4へ移動することで、背景画像74が反対の方向(矢印B3方向)に流れた状態を示す表示画像80Dが、表示部20に表示される。このとき、同時変更指示がなされず、視線方向Lのみを変更する場合には、原稿画像72もまた矢印B3方向へ流れる。しかし、同時変更指示がなされた場合、原稿画像72を配置面50Aに沿った仮想面50A’に沿って、視線方向Lの変更方向(ここでは、矢印B4方向)に移動させる。このため、この場合、原稿画像72も仮想三次元空間Kを移動し、表示画像80Dに含まれて表示されることとなる。
そして、さらに、ユーザが、表示部20における原稿画像72上の点(タッチ位置T1)をタッチしたまま、背景部分の点(タッチ位置T2b)をタッチしたまま矢印B3方向にドラッグし、タッチ位置T2cへドラッグしたとする(図19(C)参照)。
この操作により、ユーザは、原稿画像72の配置位置と視線方向Lの双方を同時に移動させることを示す、同時変更指示を更に入力する。この場合、ユーザは、該矢印B3方向の逆方向(矢印B4)に、更に視線方向Lを移動させることを示す指示と、原稿画像72も同時に移動させることを示す指示と、を入力したこととなる。そして、この操作によって、変更前の視線方向L1から、予め定めた角度以上の視線方向Lの変更指示が入力されたとする。すなわち、図20における回転角度θが、該予め定めた角度(例えば90°)以上となったと仮定する。なお、回転角度θは、視点位置Pを中心とする、変更前の視線方向L1と、変更後の視線方向L2と、の成す角度から求めればよい。また、回転角度θは、原稿画像72の姿勢を示す行列から求めてもよい。
この場合、再設定部35は、仮想三次元空間Kにおける、変更後の視線方向L2に直交する平面を、新たな配置面50(例えば、配置面50B)として再設定する。
ここで、画像処理部14は、単位ベクトルを回転角度θで回転させたときに得られるベクトルを、配置面50の法線ベクトルAとする。なお、法線ベクトルAとなる配置面50は、仮想三次元空間K内に複数存在する。すなわち、配置面50は、視点位置Pからの距離が変動可能である。このようにしておくことで、奥行きについて自由に原稿画像72を配置することができる。一方、配置面50の方向は一方向に決定してしまうが、屋内や屋外での建造物は、複数の壁面が平行な関係で配置されることが多い。このため、一度の設定で、ユーザは奥行きを変更するだけで、平行な面に原稿画像72を自由に移動させることができる。そして、再設定部35は、回転角度θを、配置面50の再設定に用いる。
このため、図20に示す場合、表示制御部28は、仮想面50A’に配置されていた原稿画像72Bを、再設定された配置面50Bに配置する(図20中、矢印Q参照)。このため、原稿画像72Bは、配置面50Bに配置された原稿画像72Cとなる。
そして、表示制御部28は、仮想三次元空間Kにおける、再設定された配置面50Bに配置された原稿画像72Cを、視点位置Pから視線方向L2に視認した状態を示す表示画像80を、表示部20へ表示する。
このため、この場合、表示部20には、図19(C)に示す表示画像80Eが表示されることとなる。すなわち、仮想三次元空間Kにおける視線方向Lが矢印B4へ所定角度以上変更されることで、変更後の視線方向L2に直交する新たな平面が配置面50Bとして再設定され、該配置面50B上に原稿画像72が配置される。そして、表示画像80Eは、再設定された配置面50Bに原稿画像72Cを配置した状態を、視点位置Pから変更後の視線方向L2に視認した二次元画像に変換した表示画像80となる。
次に、画像処理部14が実行する表示処理の流れを説明する。図21は、画像処理部14が実行する表示処理の流れの説明図である。
まず、取得部24がオブジェクトと背景画像を取得し、表示制御部28へ出力する(SEQ100)。光源受付部29は、光源情報及び原稿反射情報を受け付け、表示制御部28へ出力する(SEQ102)。
受付部25は、表示部20の画面上における、原稿画像72の表示領域の指定をユーザから受け付け、指定部26へ出力する(SEQ104)。指定部26は、受付部25で受け付けた表示領域を、指定された表示領域として設定し、設定部27の仮配置部27Aに出力する(SEQ106)。
仮配置部27Aは、指定部26で設定された表示領域51を取得する。そして、仮配置部27Aは、表示対象のオブジェクトを、三次元空間におけるZ=0のXY平面に仮配置し、原稿面54とする。そして、仮配置部27Aは、仮配置した原稿面54の初期配置座標(三次元座標)を、第1算出部27Bへ出力する(SEQ108)。
第1算出部27Bは、仮想三次元空間に仮配置した原稿面54の初期配置座標を、二次元空間のデバイス座標に射影する射影行列Fと、その逆の射影行列Gを算出する。そして、射影行列Fを第2算出部27Cへ出力する(SEQ110)。
第2算出部27Cは、第1算出部27Bから取得した射影行列Fと、撮影部12の光学特性パラメータと、を用いて、傾き・位置行列を算出する。次に、第2算出部27Cは、算出した傾き・位置行列と、射影行列Fと、算出に用いた光学特性パラメータと、を、第3算出部27Dへ出力する(SEQ112)。
第3算出部27Dは、仮想三次元空間に配置された三次元像を二次元像に投影(すなわち、仮想三次元空間の三次元座標を二次元空間の二次元座標に投影)するための投影行列Bを算出する。
制限部27Fは、仮配置した原稿面54の4頂点の初期配置座標を仮配置部27Aから取得する(SEQ114)。そして、制限部27Fは、傾き・位置行列を第2算出部27Cから取得し(SEQ116)、最新の投影行列Bを第2算出部27Cから取得する(SEQ118)。そして、制限部27Fは、仮配置した原稿面54の4頂点の初期配置座標と、傾き・位置行列と、投影行列Bと、から、該4頂点の各々の、正規化二次元座標を算出する。このとき、制限部27Fは、該4頂点の全ての正規化二次元座標におけるz座標が0以上である場合、すなわち、仮想三次元空間を写す仮想カメラの後方側(撮影方向の反対側)に位置する場合、異常と判断する(SEQ120)。
第4算出部27Gは、制限部27Fが異常と判断したか否かを判別する(SEQ122)。制限部27Fによって異常であると判断された場合、第4算出部27Gは、異常信号を、指定部26(図2参照)と、第2算出部27Cと、第3算出部27Dと、に通知する。一方、第4算出部27Gは、制限部27Fによって異常ではないと判断された場合、仮配置された原稿面54の4頂点の初期配置座標と、最新の傾き・位置行列(仮想領域)と、最新の投影行列Bと、を、表示制御部28へ通知する(SEQ124)。
表示制御部28は、仮想三次元空間における、算出された仮想領域に原稿画像72を配置する。すなわち、表示制御部28は、仮想三次元空間における、三次元座標によって示される仮想領域に原稿画像72を配置する。そして、表示制御部28は、表示画像80を生成し、表示部20に表示する制御を行う(SEQ126)。
なお、このとき、ユーザによるドラッグなどの操作によって、新たな表示領域51が指定されると、SEQ100またはSEQ104へ戻る。
次に、表示画像80が表示された後に、ユーザによる入力部18の操作指示によって、視線方向、同時変更(原稿画像72と視線方向Lの双方)、原稿画像72の配置位置の変更、の何れかが入力された場合に、画像処理部14が実行する画像処理の一例を説明する。図22は、本実施の形態の画像処理装置10が実行する、画像処理の一例を示すフローチャートである。
まず、受付部25が、UI部22を介して受付けた、ユーザによる操作指示内容を判断する(ステップS200)。ステップS200で視線方向Lの変更指示を受付けたと判断した場合、ステップS202へ進む。
ステップS202では、視線方向変更部33がステップS200で受付けた視線方向Lの変更指示に応じて、視線方向Lを変更する(ステップS202)。そして、表示制御部28は、ステップS202で変更した、変更後の視線方向Lに応じた表示画像80を生成し、表示部20へ表示する(ステップS204、ステップS206)。そして、本ルーチンを終了する。
一方、ステップS200の判断で、視線方向Lの変更と原稿画像72の移動の同時変更指示を受付けたと判断した場合、ステップS214へ進む。ステップS214では、再設定部35が、予め定めた角度(所定角度)以上の視線方向Lの変更指示を含む同時変更指示を受付けたか否かを判断する(ステップS214)。
ステップS214で肯定判断すると(ステップS214:Yes)、ステップS216へ進む。ステップS216では、再設定部35が、配置面50を再設定する(ステップS216)。
次に、表示制御部28は、ステップS216で再設定された配置面50に原稿画像(オブジェクト)72を配置した状態を、視点位置Pから、同時変更指示に含まれる変更後の視線方向L2へ視認した二次元画像に変換した表示画像80を生成する(ステップS218、ステップS220)。そして、表示制御部28は、該表示画像80を、表示部20に表示する制御を行う(ステップS222)。そして、本ルーチンを終了する。
一方、ステップS214で否定判断すると(ステップS214:No)、ステップS224へ進む。ステップS224では、視線・配置位置変更部34が、仮想三次元空間Kにおける、配置面50に沿った仮想面に沿って、視線方向Lの変更指示に応じた方向に、変更指示によって示される回転角度θ、原稿画像72を移動させる(ステップS224)。
表示制御部28は、ステップS224で、配置面50に沿った仮想面に沿って、視線方向Lの変更指示に応じた方向に原稿画像72を移動させた状態を、視点位置Pから変更後の視線方向Lへ視認した二次元画像に変換した、表示画像80を生成する(ステップS226)。そして、表示制御部28は、該表示画像80を、表示部20に表示する制御を行う(ステップS228)。そして、本ルーチンを終了する。
一方、ステップS200で、原稿画像(オブジェクト)72の配置位置の変更指示を受付けたと判断した場合、ステップS208へ進む。ステップS208では、オブジェクト移動部30が、該変更指示に応じて、仮想三次元空間Kにおける原稿画像72の位置を移動させることで、配置位置を変更する(ステップS208)。次に、表示制御部28は、ステップS208によって変更された位置に配置された原稿画像72を、視点位置Pから視線方向Lに視認した二次元画像に変換した表示画像80を生成する(ステップS210)。そして、表示制御部28は、該表示画像80を表示部20へ表示し(ステップS212)、本ルーチンを終了する。
以上説明したように、本実施の形態の画像処理装置10は、設定部27と、表示制御部28と、受付部25と、を備える。設定部27は、仮想三次元空間Kにおける、オブジェクト(原稿画像72)を配置する配置面50を設定する。表示制御部28は、仮想三次元空間Kにおける、配置面50にオブジェクト(原稿画像72)を配置した状態を、予め定めた視点位置Pから視線方向Lに視認した二次元画像に変換した表示画像80を、表示部20に表示する制御を行う。受付部25は、視線方向Lの変更指示と、オブジェクト(原稿画像72)の配置位置の変更指示と、を含む同時変更指示を受付ける。表示制御部28は、同時変更指示を受付けた場合、配置面50に沿った仮想面50A’に沿って、視線方向Lの変更指示に応じた方向にオブジェクト(原稿画像72)を移動させた状態を、視点位置Pから変更後の視線方向Lに視認した二次元画像に変換した表示画像80を、表示部20に表示する制御を行う。
従って、本実施の形態の画像処理装置10では、仮想三次元空間Kにおける、視線方向Lとオブジェクト(原稿画像72)の位置の双方を、同時に変更することができる。
判別部36は、受付部25が予め定めた角度以上の視線方向Lの変更指示を含む同時変更指示を受付けたか否かを判別する。再設定部35は、予め定めた角度以上の視線方向Lの変更指示を含む同時変更指示を受付けたと判別したときに、仮想三次元空間Kにおける、配置面50を視線方向Lの変更に応じて変更した平面を、新たな配置面50として再設定する。表示制御部28は、再設定された配置面50にオブジェクト(原稿画像72)を配置した状態を、視点位置Pから変更後の視線方向Lに視認した二次元画像に変換した表示画像80を、表示部20に表示する制御を行う。
再設定部35は、予め定めた角度以上の視線方向Lの変更指示を含む同時変更指示を受付けたと判別したときに、仮想三次元空間Kにおける、変更後の視線方向に直交する平面を、新たな配置面50として再設定する。
表示制御部28は、仮想三次元空間Kの三次元空間画像(背景画像74)における、配置面50にオブジェクト(原稿画像72)を配置した状態を、視点位置Pから視線方向Lに視認した二次元画像に変換した表示画像80を、表示部20に表示する制御を行う。この三次元空間画像(背景画像74)は、全方位の撮影によって得られる全天球パノラマ画像である。
また、オブジェクト(原稿画像72)は、二次元画像である。
光源受付部29は、光源LAの光源効果を示す光源情報を受け付ける。表示制御部28は、仮想三次元空間Kにおける配置面50に、光源情報によって示される光源効果を付与したオブジェクト(原稿画像72)を配置した状態を、予め定めた視点位置Pから視線方向Lに視認した二次元画像に変換した表示画像80を、表示部20に表示する。
本実施の形態の画像処理方法は、仮想三次元空間Kにおける、オブジェクト(原稿画像72)を配置する配置面50を設定する設定ステップと、仮想三次元空間Kにおける配置面50にオブジェクト(原稿画像72)を配置した状態を、予め定めた視点位置Pから視線方向Lに視認した二次元画像に変換した表示画像80を、表示部20に表示する表示ステップと、視線方向Lの変更指示と、オブジェクト(原稿画像72)の配置位置の変更指示と、を含む同時変更指示を受付ける受付ステップと、を含む。表示ステップは、同時変更指示を受付けた場合、配置面50に沿った仮想面50A’に沿って、視線方向Lの変更指示に応じた方向にオブジェクト(原稿画像72)を移動させた状態を、視点位置Pから変更後の視線方向Lに視認した二次元画像に変換した表示画像80を、表示部20に表示する。
本実施の形態の画像処理プログラムは、仮想三次元空間Kにおける、オブジェクト(原稿画像72)を配置する配置面50を設定する設定ステップと、仮想三次元空間Kにおける配置面50にオブジェクト(原稿画像72)を配置した状態を、予め定めた視点位置Pから視線方向Lに視認した二次元画像に変換した表示画像80を、表示部20に表示する表示ステップと、視線方向Lの変更指示と、オブジェクト(原稿画像72)の配置位置の変更指示と、を含む同時変更指示を受付ける受付ステップと、をコンピュータに実行させるための画像処理プログラムである。表示ステップは、同時変更指示を受付けた場合、配置面50に沿った仮想面50A’に沿って、視線方向Lの変更指示に応じた方向にオブジェクト(原稿画像72)を移動させた状態を、視点位置Pから変更後の視線方向Lに視認した二次元画像に変換した表示画像80を、表示部20に表示する。
次に、上述した画像処理装置10のハードウェア構成について説明する。
図23は、画像処理装置10のハードウェア構成図である。画像処理装置10は、ハードウェア構成として、装置全体を制御するCPU300と、各種データや各種プログラムを記憶するROM302と、各種データや各種プログラムを記憶するRAM304と、各種データを記憶するHDD(ハードディスクドライブ)306と、撮影部308と、入力機能と表示機能を備えたタッチパネル等のUI部310と、を主に備えており、通常のコンピュータを利用したハードウェア構成となっている。なお、撮影部308は、図1の撮影部12に相当し、UI部310は、図1のUI部22に相当する。またHDD306が、図1の記憶部16に相当する。
上記実施の形態の画像処理装置10で実行されるプログラムは、インストール可能な形式又は実行可能な形式のファイルでCD−ROM、フレキシブルディスク(FD)、CD−R、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録されてコンピュータプログラムプロダクトとして提供される。
また、上記実施の形態の画像処理装置10で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、上記実施の形態の画像処理装置10で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
また、上記実施の形態の画像処理装置10で実行されるプログラムを、ROM302等に予め組み込んで提供するように構成してもよい。
上記実施の形態の画像処理装置10で実行されるプログラムは、上述した各部を含むモジュール構成となっており、実際のハードウェアとしてはCPU300が上記記憶媒体からプログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、上記各部が主記憶装置上に生成されるようになっている。
なお、本発明は上記実施の形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施の形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施の形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施の形態にわたる構成要素を適宜組み合わせてもよい。また、種々の変形が可能である。