(実施形態1)
以下、本発明の例示的な実施形態について、図面を参照して詳細に説明する。なお、以下では画像処理装置の一例として、被写体の3次元形状の計測(3Dスキャンともいう)が可能な構成を備えたデジタルカメラに本発明を適用した例を説明する。しかし、本発明でいう画像処理装置は、被写体の3次元形状の計測が可能な構成に限らず、計測した3次元の形状データを取得可能な任意の電子機器にも適用可能である。これらの電子機器には、例えば携帯電話機、ゲーム機、タブレット端末、パーソナルコンピュータ、時計型や眼鏡型の情報端末などが含まれてよい。
(デジタルカメラ200の構成)
図2は、本実施形態の画像処理装置の一例としてデジタルカメラ200の機能構成例を示すブロック図である。なお、図2に示す機能ブロックの1つ以上は、ASICやプログラマブルロジックアレイ(PLA)などのハードウェアによって実現されてもよいし、CPUやMPU等のプログラマブルプロセッサがソフトウェアを実行することによって実現されてもよい。また、ソフトウェアとハードウェアの組み合わせによって実現されてもよい。従って、以下の説明において、異なる機能ブロックが動作主体として記載されている場合であっても、同じハードウェアが主体として実現されうる。
撮像部201は、複数の撮像光学系と撮像素子によって構成され、それぞれの撮像光学系と撮像素子によって得られる視差画像を出力する。撮像部201の内部に備えられる撮像素子は、1つの撮像光学系により結像された被写体光学像を、2次元に配置された複数の画素を構成する複数の光電変換素子で受光し、画素ごとに光電変換してアナログ信号を出力する。撮像素子は、CMOS(Complementary Metal Oxide Semiconductor)イメージセンサなどの撮像素子であってよい。撮像素子は、タイミングジェネレータにより供給されるタイミング信号に従って、画素ごとのアナログ信号を出力する。各撮像素子から出力された各像のアナログ信号はそれぞれA/D変換され、視差を有するデジタルの画像データ(視差画像データ)として出力される。制御部206は、撮像部201から出力された視差画像データを用いて視差情報を取得し、当該視差情報に基づいて被写体である物体の3次元の形状データ(以降、単に3次元データともいう)を算出する。なお、1つの撮像素子により、例えば全有効画素のひとつひとつの画素を独立した複数のフォトダイオードで構成し、撮像光学系の複数の異なる瞳領域の光束をそれぞれ受光させる構成であってもよい。異なる瞳領域の光束に対応する画像データは互いに視差を有する画像データであり、上記視差画像データと同様に、異なる瞳領域に対応する1対の画像信号から奥行き方向のデータを取得することができる。またこのようにすれば、1つの撮像光学系を用いて視差画像データを得ることができる。
画面表示部202は、3次元データを取得中に撮像部201から出力された画像を表示するほか、既に取得した形状データに関する情報(既スキャン情報)、撮像画像等の確認を行う。
画面操作部203は、例えば画面表示部202の表示面上に配置されており、ユーザによる例えば接触操作などを検出すると、制御部206に操作指示の検出を通知する。制御部206は、画面操作部203からの通知に応じて、例えばメニュー表示等の表示を変更するために画面表示部202を制御する。
物体検出部204は、撮像部201によって得られる画像データに対して後述する物体検出処理を行う。物体検出処理は、画像内部の人物や物体の検出や、それらの位置、大きさなどを特定するための算出処理を行い、算出結果を制御部206に出力する。
ボタン操作部205は、操作ボタン等に対するユーザからの操作指示を検出し、制御部206に操作指示の検出あるいはその検出内容を通知する。制御部206は、ボタン操作部205からの通知に応じてデジタルカメラ200の各部を制御する。
制御部206は、例えばCPUあるいはMPUであり、ROM207に格納されたプログラムをRAM208の作業エリアに展開し、実行することにより、デジタルカメラ200全体を制御する。制御部206は、視差画像データから得られる視差情報に基づいて、3次元データを算出するとともに、算出した3次元データに対して、後述する3次元データの変換処理を行う。
ROM207は、半導体メモリや磁気ディスク等から構成される不揮発性の記憶装置であり、制御部206が実行するプログラムやデジタルカメラ200に設定された設定値を記憶する。
RAM208は、揮発性の記憶装置であり、デジタルカメラ200の電源を切った後は消えても構わないような一時的なデータを記憶する装置である。RAM208は、処理中の一時的なデータを記憶する役割を担う。
メモリスロット209は、記録データをメモリカード210に読み書きするためのインタフェースである。メモリカード210は、磁気や半導体で構成される記録メディアであり、撮影された画像や3次元データ、デジタルカメラ200に対する設定値がメモリスロット209を介して記録される。
加速度センサ211およびジャイロセンサ212は、デジタルカメラ200自体の移動、回転をそれぞれ検出する。制御部206は、検出された移動量や回転量の情報と、撮像部201の出力から算出可能な1方向の物体形状情報(即ち視差画像データから得られる3次元の情報)を多数の視点で取得した情報とを組み合わせて、3次元物体データを生成することができる。なお、本実施形態では、奥行き方向(Z軸方向)の情報を取得する手段として、視差画像データを用いたが、これに限らず、例えば赤外線などを用いたTOFセンサなど、奥行き方向の情報を取得する手段は、他の手法であってもよい。
撮像部201〜ジャイロセンサ212の各機能ブロックは、バスによって互いに接続され、データの送受信を行うことができる。
(本実施形態に係る3次元データの変換処理の必要性)
図1を参照して、被写体で構成される空間を3Dスキャンすることにより得られた3次元データを、造形物として出力する場合の課題の例を説明する。図1(a)は、デジタルカメラ200と、被写体となる物体101〜104の実物物体の位置関係を示している。物体101〜104は、デジタルカメラ200から奥行方向(Z軸方向)の各位置に存在し、それぞれが物体固有の奥行き(厚み)を有している。物体101および物体102は、Z軸からそれぞれプラスX方向、マイナスX方向に所定の距離を離れて位置し、デジタルカメラ200からZ軸方向の同等の距離に位置している。物体101および物体102より遠方(プラスZ軸方向)に物体103、物体104がそれぞれ所定の距離を隔てて位置している。このような物体101〜104の3次元データを、デジタルカメラ200により3Dスキャンするものとする。ここで、本実施形態のように、2次元に配列された光電変換素子を有する撮像素子で取得された画像信号によりX軸方向、Y軸方向の2次元データを取得し、さらに奥行き情報を取得する構成によって生成される3次元データについて説明する。例えば撮像部201の有する撮像素子で撮像する場合、撮像された画像内の被写体の大きさは、デジタルカメラ200からの距離に応じて実際の大きさより小さく撮像される。従って、単純に撮像部201から得られる2次元データ(画像データ)に奥行き情報のZ軸方向のデータを加えて3次元データを生成しても、実空間における各被写体の大きさの関係を再現しているとは限らない。実空間における3次元データをモデリングするためには、奥行き情報に基づいて、XY方向の各被写体の大きさも変形する必要がある。ただし、本実施形態では、2次元の画像データとして鑑賞可能なデータを持つユーザが、その画像の3次元化を求めて造形物を出力することを想定している。このため、3D出力装置へ提供する3次元データとしては、必ずしも各被写体の大きさの関係まで再現した3次元データである必要はなく、むしろXY軸方向の物体(被写体)の大きさの関係を画像データと等しくした前者の3次元データの方が好ましい場合も考えられる。従って、本実施形態では、物体を含む空間を描写する3次元データとしてXY方向のデータはどちらのデータも考えられるものとする。
上述の3Dスキャンにより得られた3次元データについて、さらに奥行き方向の情報について考える。得られた3次元データのうちの奥行き情報は、例えば図1(b)に示すように、3D出力装置で出力可能な大きさに縮尺を変更される(正規化される)。3次元データ中の各オブジェクト109〜112は、物体101〜104にそれぞれ対応する。図1(b)に示す各オブジェクトは、Z軸方向が一律に3D出力装置のレンジに合わせて縮小され、物体101〜104の間の奥行き方向の位置関係を維持して縮小されている。
しかし、撮影した3次元データを記念物体等として出力する場合、例えば図1(c)のように、奥行方向の縮尺を、物体の特徴に合わせて適切に縮小させる、または図1(d)のように、レリーフ状の3D出力物体として出力させるなどのニーズがある。また、図1(b)に示すような種類の3次元形状データの出力では、オブジェクト111とオブジェクト112の間のスペースが無駄になる場合や、画像データ内に存在していた例えばオブジェクト111などの重要な被写体が強調されず、印象的に見えないなど、ユーザの意図に沿わない構成になってしまう場合がある。従って、必ずしも各物体の位置関係や奥行きを正確に再現するのではなく、必要に応じてオブジェクト間の奥行きを変更する、3次元データの変換処理を行うことが望まれる。
そこで、本実施形態では、例えばz軸方向などの所定の方向の位置のデータの縮尺を変更し、さらにz軸方向の位置(範囲)に応じて縮尺(圧縮率)を変更可能にする。すなわち、本実施形態では、3次元データの所定方向の位置のデータを、物体の存在する位置に応じてそれぞれ変換する。例えば図1(c)および図1(d)に示すように、オブジェクト111とオブジェクト112の間の奥行き部分の縮尺をオブジェクト111やオブジェクト112の範囲の縮尺よりも大きくする。すなわち、本実施形態では、以下に説明する3次元データの変換処理によって例えば奥行方向の縮尺を奥行方向の位置に応じて変更するようにする。z軸方向の縮尺は、z軸方向と直交するx軸方向やy軸方向の縮尺と独立して行われてもよいし、何らかで関連付けられていてもよい。
(3次元データの変換処理に係る一連の動作)
次に、図3を参照して、デジタルカメラ200による3次元データの変換処理に係る一連の動作を説明する。本処理は、例えばデジタルカメラ200のボタン操作部205に対するユーザによる撮影指示が検出された場合に開始される。なお、本処理に係る各ステップは、制御部206の指示に応じて実行され、制御部206がROM207に記憶されたプログラムをRAM208の作業用領域に展開し、実行することにより実現される。
S301において、制御部206は、撮像部201から出力される視差画像データ、加速度センサ211の出力およびジャイロセンサ212の出力を取得する3Dスキャンと、取得した各データに基づく3次元データの成形処理を行う。本実施形態では、図1(a)に示した被写体となる物体101〜104を3Dスキャンの対象とした場合を例に説明する。本実施形態では、ある位置、方向(例えば図1(a)のデジタルカメラ200)の画像を基準として多方向からスキャン、即ち複数の方向から複数回の撮影を行なう。撮影の際には、デジタルカメラ200の撮影位置や向きの変動が各撮影と対応づけて取得され、得られたデータから被写体の3次元形状を得る。複数の視差画像データおよび撮影位置や向きの変動に基づいて、被写体となる物体の3次元形状を得る方法については、公知の方法を用いることができる。例えば、加速度センサ211、ジャイロセンサ212の情報を利用すると、撮影を行った複数の位置の位置関係が把握できるため、全ての3Dデータとしての点群データを、1つの3次元空間上での位置に落とし込むことができる。この合成操作によって、被写体の裏表も含めた表面形状の3D点群データを取得することができる。図1(a)に示す物体の3次元形状をスキャンした後、制御部206は、3次元データの成形処理、即ち例えばSTLファイルフォーマット等の一般的な3次元データに成形する処理を行う。
STLファイルフォーマットにおいては、3次元形状を3角形の面の集合として表現する方式を用いており、3次元点群データを3角形の集合データに変換する必要がある。この変換に関しては、一般的にいくつかの方法が知られているが、本実施形態では広く知られているアルゴリズムである3次元ドロネー分割法を用いるものとする。ROM207の中には、あらかじめこのドロネー分割法のアルゴリズムが格納されており、前述の手順で得られた物体の点群データを3角形平面集合に変換し、それを3次元空間内での3角形の集合体データであるSTLファイル形式に変換する。
本実施形態においては、本ステップの成形処理により、3D出力装置で可能な大きさに縮尺を変更し、x、y、z軸のそれぞれが同じ縮尺で縮小された3次元データを生成するものとして説明する。制御部206は、データの成形処理が終了するとメモリスロット209を介してメモリカード210に成形後のデータを格納する。本実施形態では複数の撮像光学系とその視差画像データを利用した3Dスキャンについて説明するが、3次元データが得られる限り、レーザー照射を利用する形態や像面位相差センサを利用する形態など他の形態も適用可能である。撮像部201に像面位相差検出機構が搭載されている場合、画素単位での距離データ取得が可能である。よって特定のある位置から撮像処理を行って得られる画像データには、画像内の各画素に対する色データと、加えて各画素毎にデジタルカメラ200から各画素に対応する被写体の表面部までの距離情報を取得することができる。この各画素に対して奥行方向の距離を配置した点群データが取得できる生の3Dデータとなる。
S302において、制御部206は、奥行方向を定義するために座標軸を決定する。本実施形態では、例えばz方向を奥行方向として定義する。y方向は地面に対して鉛直方向を表し、3Dスキャン中に加速度センサ211によって重力加速度の方向を特定することで定義する。3Dスキャン中はデジタルカメラ自体が様々な方向を向くため、スキャン直後にはどちらがz軸方向であるかが決定されていない。このため、制御部206は、スキャン結果の3次元データの概形を画面表示部202に表示し、画面操作部203のユーザインターフェースを介してユーザにより奥行方向であるz軸方向を決定する。z軸方向を決定すると上述したy軸の定義にしたがってy軸方向を決定し、さらにx軸方向を決定する。制御部206は、S301において生成した3次元データを新たに決定した座標系の3次元データに変換してメモリカード210に記憶させる。なお、以降の説明では図1(a)で示したz軸を選択したものとして説明する。
また、3Dスキャン中に記憶した2次元の撮像画像のうち、3次元データの所定の断面に対応する画像を決定する。即ち、決定したz軸方向に向かって撮像した画像であって、上述の物体101〜104が画角内に収まった画像を1枚決定し、3次元データの付加情報としてメモリカード210に記憶する。
本実施形態では、多方向からスキャン(即ち撮影)することを前提とするためユーザによるz軸方向の設定を行うようにしている。しかし、1方向からのスキャンのみで背面情報を取得しない等のスキャン方法の場合は、スキャン時の方向をそのままz軸として設定するようにしてもよい。この場合ユーザによるz軸指定は不要となる。
S303において、制御部206は、被写体である物体のうち、注目すべき主要物体を決定する。図4(a)は、S302において決定した2次元画像と当該画像に対する物体の検出結果の一例を示している。物体検出部204は、制御部206の指示に応じて、2次元画像において画像内の物体を検出し、その後、制御部206は、物体検出部204による検出結果を画面表示部202に表示する。なお、2次元画像内の物体の検出においては、公知の物体検出技術を用いることができるため、物体検出技術についての詳細な説明は省略する。図4(a)における表示例では、検出された画像内の4つの物体、即ち物体401〜404に対して、それぞれが検出されたことを明示するための物体検出枠405〜408が表示されている。ユーザは、画面操作部203に対する指示操作によって、物体検出枠405〜408のどれかを選択することで主要物体を特定する。制御部206は、ユーザ操作により所定の物体が特定されると、特定された物体を主要物体として決定する。なお、主要物体の決定方法については、上述したユーザの手動による決定方法だけでなく、制御部206が自動的に主要物体を決定するようにしてもよい。この場合には、画角内の物体の位置、物体が人物であるかといった物体の特性等の情報によって決定すればよい。
S304において、制御部206は、決定した主要物体の奥行方向の厚みを検出する。図4(a)に示す画像を撮影した位置および向きは、3Dスキャン中に記録された位置関係から得ることができ、図4(b)に示すデジタルカメラ200の位置および光軸の向きであるものとする。制御部206は、図4(a)の物体検出枠407が、取得済みの3次元データ内でどのような関係になるかを特定することができる。より具体的には、図4(b)は、物体検出枠407が3次元データにおいてどのような位置にあるかを示している。制御部206は、この物体検出枠407をz軸方向に走査し、走査してできた直方体410に含まれる物体領域の3次元データを検出する。
さらに具体的には、3次元データは、例えばSTLファイルフォーマット等の場合、ポリゴンと呼ばれる最少単位の3次元上の三角形情報の集合体として表現されている。制御部206は、まず上述した直方体内に含まれるポリゴンを全て検出する。その上で、検出したポリゴン間での接続状況を考慮して、上述の直方体410内でポリゴン群が閉曲面を構成しているか、またその閉曲面で構成される範囲のxy平面への写像が物体検出枠407の一定量以上の割合を占めているか、を判定する。いずれの判定をも満たす場合、制御部206は、直方体410に含まれる3次元データを主要物体の物体領域として決定する。一方、上述した条件を満たしている場合において、ポリゴン閉曲面で構成された物体が複数検出された場合、例えば「より前面にある」等の条件を加えることにより1つの物体に関する3次元データを決定する。本実施形態の場合、このような処理を行うことで、物体103を構成するポリゴン情報を抽出することができる。検出した物体103を構成するポリゴン情報のうち、z軸成分が一番小さいものと、一番大きいものとの差分を用いて物体103の厚みを推定することにより算出する。算出された厚みは、図4(b)における物体厚み409となる。
S305において、制御部206は、S304において算出した物体103のz軸方向の位置と厚みに基づいて、z軸方向に対する圧縮プロファイル関数H(z)を生成する。具体的には、圧縮プロファイル関数H(z)は、z軸上のどの位置にある成分をどれだけの倍率で圧縮するかを示すzの関数であり、z方向に対する変換特性を表す。圧縮プロファイル関数H(z)は、S304において算出したオブジェクト111のz軸方向の位置および厚みを利用して生成される。図5を参照して、圧縮プロファイル関数H(z)の生成処理を含むz軸方向の圧縮について説明する。なお、以降の説明は簡単のためにz方向について説明するが、x、y方向については例えば圧縮率1で変換するものする。
図5(a)は、z軸と垂直な方向(x軸のプラス側)から見た3次元データにおける位置関係を模式的に示している。また、図5(b)は、圧縮プロファイル関数H(z)の特性を示しており、横軸は奥行き(z)、縦軸は圧縮率を示している。例えば、圧縮率が1の場合、z軸方向の成分はそのまま維持される。また、例えば圧縮率が2の場合、z軸方向の距離はさらに1/2に圧縮される。オブジェクト111については、オブジェクト111の存在する位置と厚み範囲に対応する部分の圧縮率が1であるため、位置および厚みは変化しない。一方、オブジェクト111以外の位置については、その位置から離れるに従って線形に圧縮率が上がる特性を示している。このため、オブジェクト111と、オブジェクト109およびオブジェクト112とのそれぞれのz軸方向の位置関係はそれぞれ圧縮され、図5(c)に示すように、オブジェクト501と502の間、オブジェクト502と503の間の距離のように短縮される。また、オブジェクト109およびオブジェクト112の厚みもそれぞれ圧縮されるため、それぞれが図5(c)に示すオブジェクト501および503の厚みに圧縮される。このように、制御部206は、主要物体のz軸方向の位置と厚みに基づいて、主要物体に関して圧縮率を低く保ち、主要物体からの距離に応じて線形に圧縮率が上がる(即ち単調増加する)ように、圧縮プロファイル関数を生成する。
S306において、制御部206は、圧縮プロファイル関数から、実際に3次元データのz軸データを変換するための変換関数G(z)を生成する。連続系の数式で表すと、変換関数G(z)は、数式1で表される数式によって圧縮プロファイル関数H(z)から生成できる。数式1は、CPU演算等に適した離散系の数式では、数式2で表される数式となる。
z軸方向における圧縮プロファイル関数H(z)、変換関数G(z)および変換後のz’について、図5(c)を参照して説明する。説明の簡略化のため、横軸zは0〜100に正規化されているものとする。z=0の位置がz軸方向のデータ範囲の最前面位置、z=100の位置がz軸方向のデータ範囲の最後方位置に相当する。図5(d)は、圧縮プロファイル関数H(z)を表し、主要物体の範囲(z=30〜40)以外の圧縮率は任意に設定可能である。主要物体の範囲以外の圧縮率は、例えばz軸方向の最前面位置および最後方位置の圧縮率をそれぞれ予め定めた圧縮率として、主要物体の位置および厚みとの関係から算出するようにしてもよい。図5(e)に示す変換関数G(z)は、図5(d)に示す圧縮プロファイル関数H(z)に数式1および数式2が適用されて算出される関数である。圧縮変換する前の座標をz、zに対応する変換後の座標をz’とすると、zとz’の関係は数式3で表される。このzとz’の関係をグラフにしたものが図5(f)となる。
S307において、制御部206は、S306で決定したz軸方向における変換関数G(z)を用いて、S302で得られた3次元データのz軸方向のデータを変換する処理を行う。図6は、3次元データのファイルフォーマットの一例であるSTL(STereoLithography)ファイルフォーマットの構文を示している。図6に示すように、3次元データは、3次元空間上での三角形情報であるポリゴン情報を列挙した形式で表現されている。より具体的には、”facet normal”行から”endfacet”行までが三角形データの具体的なデータを構成し、具体的なデータは”facet normal”行および”vertex”行に記述される。”facet normal”行は、三角形の法線ベクトルを表し、3つの”vertex”行は三角形データの各頂点の座標を表すとともに、各頂点はx、y、z成分の数値を持つ。従って、制御部206は、三角形の各頂点の情報に対して、変換関数G(z)を適用してz軸方向に位置を変換する。
図7は、ポリゴンの3角形情報をz軸変換関数G(z)を使ってz軸方向にどのように変換するかを示している。図7(a)においてSで示すポリゴン情報は、A(x1、y1、z1)、B(x2、y2、z2)およびC(x3、y3、z3)の3頂点から構成されている。制御部206は、3次元データに含まれている全てのポリゴン情報に関して、x成分、y成分は変更せず、z成分のみについて数式3で示すz’を算出して、zをz’で変更したデータを作成する。図7(b)は、図7(a)に示すSが、式3によってz成分のみが圧縮されてS’となったポリゴン情報を示している。Sを構成するA〜Cの各頂点情報が、それぞれA’(x1、y1、z1’)、B’(x2、y2、z2’)、C’(x3、y3、z3’)に変換されている。
制御部206は、全てのポリゴン情報に対する変換処理を完了すると、STL形式で列挙した変換後のポリゴンデータをメモリスロット209を介してメモリカード210に記憶させる。制御部206は、変換後の3次元データを記憶させると、3次元データの変換処理に係る一連の動作を終了する。
なお、本実施形態では、S301において3Dスキャンにより得られた3次元データに対して、予めx、y、z方向を同一の縮尺で縮小したうえで、さらにz軸方向に対する変換処理を行うようにした。しかし、S301において予め同一の縮尺による縮小を行わずに、圧縮プロファイル関数に基づいて得られる縮尺であって、x軸およびy軸方向と異なる縮尺をz軸方向に対して適用するようにしてもよい。この場合、圧縮プロファイル関数H(z)を、実物体に対する縮尺を表す関数にすれば、本実施形態の処理を実現することができる。
また、本実施形態では、圧縮プロファイル関数H(z)において、主要物体以外の領域では、線形に圧縮率を変化させて3次元データの奥行方向を変換するようにした。しかし、圧縮プロファイル関数H(z)の特性は、ユーザの意図や物体の特徴に合わせて様々な特性にすることができる。例えばH(z)の変形例を図8(a)〜(c)に示す。図8(a)は上述した図5(a)と同一であるが、図5(b)は、図8(a)で示す3次元データのz軸方向の距離をどれだけ圧縮するかを決定する圧縮プロファイル関数H(z)の特性を示している。図8(b)に示すH(z)では、主要物体のz軸上の終了位置から階段状に一気に圧縮率を上げるようにしている。このようにすることで、図8(c)に示すように、変換後のオブジェクト901とオブジェクト902(主要物体)の位置関係を維持しつつ、主要物体より奥側のオブジェクト903については位置関係および奥行きを大幅に縮小した構成にすることができる。また、別の変形例を図8(d)〜(f)に示す。図8(d)は図8(a)と同様であるが、図8(e)は、図5(b)に示した圧縮プロファイル関数H(z)において、さらに主要物体のz軸上の開始位置、終了位置の前後で階段状に一気に圧縮率を上げ下げするようにしている。このようにすれば、変換後の主要物体の厚みを維持しつつ、オブジェクト1002(主要物体)の前後については位置関係および奥行きを等倍率で縮小する。この場合、オブジェクト1001および1002の間隔とオブジェクト1002および1003の間隔を実物体の位置関係と合わせつつ主要物体を強調することができる。
以上説明したように、本実施形態では、z軸方向などの所定方向の位置のデータに対する縮尺を変更し、さらにz軸方向の位置(範囲)に応じて縮尺(圧縮率)を変更可能にした。すなわち、奥行方向について圧縮プロファイル関数H(z)を定め、3次元データの奥行方向の位置のデータを物体の存在する位置に応じてそれぞれ変換するようにした。このようにすれば、造形物を出力させるための3次元データを、造形物に適した縮尺あるいは倍尺で変形することが可能になる。
また、奥行方向の位置に応じて縮尺を変更する際に、物体の種類に応じて、すなわち主要物体の領域に対する奥行方向の圧縮率を下げる一方、主要物体の領域以外において圧縮率を上げて、3次元データの奥行きを変形するようにした。即ち、全体の奥行方向の圧縮率と、特定の被写体の奥行方向の圧縮率とをそれぞれ設定するようにした。このようにすることで、図5(c)に示すように主要物体を他の物体に対して強調したり存在感を与えたりすることができ、記念物体やインテリアオブジェクト等として適切な造形物を生成することが可能になる。
(実施形態2)
次に実施形態2について説明する。実施形態1では、選択された主要物体の圧縮率を下げて他の領域の圧縮率を上げる圧縮プロファイル関数を用いて3次元データの変換処理を行った。本実施形態では、複数の主要物体、即ち主要物体以外のサブ主要物体に対する圧縮率を下げた圧縮プロファイル関数を用いて3次元データの変換処理を行う。このため、サブ主要物体を決定する処理および決定される圧縮プロファイル関数が実施形態1と異なり、その他の構成は実施形態1と同一である。このため、同一の構成およびステップについては同一の符号を付して重複する説明は省略し、相違点について重点的に説明する。
本実施形態における処理の流れを図9に示すフローチャートを参照して説明する。
まず制御部206は図3に示したS301〜S303の処理を行う。
次にS901において、制御部206は、S303で選択した主要物体より優先度が下がるが、主要度の高いサブ主要物体を決定する。図4(a)に示したように、S303における処理によって検出された画像内の4つの物体、即ち物体401〜404に対して、それぞれが検出されたことを明示するための物体検出枠405〜408が表示されている。ユーザは、画面操作部203への操作によって、S303において選択した主要物体以外の物体検出枠のいずれかを選択する。制御部206は、画面操作部203によりユーザ操作の通知を受けると、対応する物体をサブ主要物体として決定する。ここでは、ユーザが物体検出枠408を選択したことに応じて、制御部206がオブジェクト112をサブ主要物体として決定したものとする。なお、サブ主要物体の決定は、ユーザによるマニュアル選択だけでなく、制御部206が自動的に決定してもよい。この場合は、画角内でどのあたりに位置するか、物体が人物であるか、を判定することによってサブ主要物体を決定するようにすればよい。また、必要であればサブ主要物体を複数指定するようにしてもよい。
S902において、制御部206は、主要物体およびサブ主要物体それぞれについてz軸方向の厚みを算出する。制御部206は、S305において説明した方法と同様にして、主要物体およびサブ主要物体の厚みをそれぞれで算出する。例えば、図10に示すように、制御部206は、サブ主要物体の物体検出枠408をz軸方向に走査していき、走査してできた直方体内1010に含まれる3次元データを検出する。このとき、例えば直方体410のように他の直方体が検出された場合、直方体のxy平面の面積と物体検出枠408との比率が最も高い直方体を選択するようにしてもよい。
S903において、制御部206は、S902で算出した主要物体およびサブ主要物体のz軸方向における位置と厚みに基づいて、圧縮プロファイル関数H(z)を生成する。本実施形態に係る圧縮プロファイル関数H(z)について、図11を参照して説明する。
図11(a)は、z軸と垂直な方向(プラスx軸方向)から見た物体の位置関係を模式的に示している。図11(b)は、図5(b)と同様の物体形状データのz軸方向情報をどれだけ圧縮するかを決定する圧縮プロファイル関数である。図11(b)において、主要物体の存在する位置と厚み範囲に対しては、図5(b)と同様に圧縮率が1に設定されている。一方、サブ主要物体であるオブジェクト112の存在する位置と厚み範囲に対応する距離については、圧縮率が一律で2に設定されている。オブジェクト111およびオブジェクト112の位置および厚み領域以外については、オブジェクト111の位置から離れるに従って線形に圧縮率が上がるように設定されている。
このように本実施形態では、制御部206は、主要物体に対する圧縮率が低く、かつ主要物体からの距離に応じて線形に圧縮率が上がるように設定するが、サブ主要物体については例外的に圧縮率が低くなるように圧縮プロファイル関数H(z)を生成する。このようにすることで、図11(c)に示すように、縮小されたz’では、オブジェクト1102(主要物体)の厚みが維持されることに加え、オブジェクト1103(サブ主要物体)の厚みも維持されて縮小されている。即ち、オブジェクト1101〜1103間の位置関係は縮小されているが主要物体およびサブ主要物体は相対的に大きくなっており、これらの物体の存在が強調されている。また、サブ主要物体に対する圧縮率は、主要物体とは別の圧縮率が設定されているため、サブ主要物体は、主要物体よりもやや高い縮尺で縮小され、主要物体がサブ主要物体より強調されるように調整されている。
次に、制御部206は、図3に示したS306およびS307の処理を行って、本処理に係る一連の処理を終了する。なお、図11(e)は、上述の方法で生成された図11(d)に示す圧縮プロファイル関数H(z)を、数式1および数式2により生成した変換関数G(z)を示している。また、図11(f)は、変換関数G(z)で変換されるzと変換後のz’の関係性をそれぞれ表している。
なお、本実施形態では、圧縮プロファイル関数H(z)については、主要物体以外の範囲において線形に圧縮率を上げるものとしたが、主要物体およびサブ主要物体のz軸上の終了位置から階段状に圧縮率を上げるようにしてもよい。また、主要物体およびサブ主要物体のz軸上の開始位置、終了位置の前後で階段状に一気に圧縮率を上げ下げするように自動生成してもよい。
また、圧縮プロファイル関数H(z)において、主要物体等の範囲の圧縮率を予め定められた値として説明した。しかし、画面操作部203等のユーザインターフェースへの入力によって、奥行方向の縮尺(または圧縮率)を位置に応じて設定または変更できるようにしてもよい。このようにすれば、よりユーザの望む縮尺で主要物体を強調した造形物を生成することができる。
以上説明したように本実施形態では、図11(b)に示したように主要物体とサブ主要物体の圧縮率を下げた圧縮プロファイル関数を用いて、3次元データの変換処理を行うようにした。このようにすることで、主要物体のみならず、サブ主要物体を強調したり存在感を与えたりすることができ、記念物体やインテリアオブジェクト等として適切な造形物を生成することが可能になる。
(実施形態3)
次に実施形態3について説明する。上述した実施形態では、選択された複数の主要物体(主要物体及びサブ主要物体)の圧縮率を下げ、かつ他の領域の圧縮率を上げる圧縮プロファイル関数を用いて3次元データの変換処理を行った。本実施形態では、3次元データの変換処理において、複数の主要物体の一部(例えばサブ主要物体)のxy平面方向の大きさを補正する処理を更に行う。このため、当該大きさの補正処理以外の処理及び構成については実施形態2と同様である。このため、同一の構成およびステップについては同一の符号を付して重複する説明は省略し、相違点について重点的に説明する。
まず、本実施形態において想定する主要物体及びサブ主要物体の大きさと位置の関係について、図13(a)の一部を参照して説明する(図13(a)の詳細は別途後述する)。本実施形態では、主要物体1301及びサブ主要物体1302において、主要物体1301の実際の大きさがサブ主要物体1302の実際の大きさの例えば半分である場合を想定する。これは、例えば主要物体1301が子供であり、サブ主要物体1302が大人である場合等があげられる。また、デジタルカメラ200からの主要物体1301までの距離(L1)が、デジタルカメラ200からのサブ主要物体1302までの距離(L2)の半分であるとする。この場合、デジタルカメラ200の位置から撮像されたxy方向の2次元画像は、例えば図13(a)のようになる。すなわち、主要物体1301の実際の大きさはサブ主要物体1302の半分であるのに、2次元画像上では同じ大きさになる。仮に最終的な3次元形状の造形物をこの比率で出力する場合、この造形物を図13(a)に示す方向、位置から観賞するとは限らないため、大きさの関係が不自然になる可能性がある。このため、本実施形態では、主要物体のxy平面方向の大きさを基準にして、サブ主要物体のxy平面方向の大きさを正規化(すなわち補正)する。以下、本実施形態では、大人と子供の大きさがより適切に反映された造形物を生成するための補正処理を例に説明する。
(3次元データの変換処理に係る一連の動作)
次に、本実施形態に係る3次元データの変換処理の一連の動作について、図12に示すフローチャートを参照して説明する。
まず制御部206は、図3又は図9に示したS301〜S303の処理を行う。
S1201において、制御部206は、S303で選択した主要被写体よりは優先度が落ちるが、主要度の高いサブ主要物体を特定する。本ステップに係る処理は上述したS901の処理と同様であるが、改めて図13(a)を参照して説明する。S302において選択された2次元画像には、S303において検出された2つの物体(1301及び1302)と、各物体が検出されたことを明示する物体検出枠1303及び1304とが表示されている。このとき、ユーザが画面表示部202への操作によって、S303で選択した主要物体以外に対する物体検出枠を選択すると、制御部206は、選択された物体検出枠に対応する物体をサブ主要物体として決定する。例えば、ユーザが物体検出枠1304を選択すると、サブ主要物体1302がサブ主要物体として決定される。
S1202において、制御部206は、主要物体及びサブ主要物体のそれぞれに対するz軸方向の厚みを算出する。制御部206は、S305に示した方法と同様にしてz軸方向の厚みをそれぞれ算出する。例えば、図13(b)に示すように、制御部206は、主要物体1301(オブジェクト1307)に対する物体検出枠1303と、サブ主要物体1302(オブジェクト1308)に対する物体検出枠1304をz軸方向に走査する。そして、走査してできた直方体1309及び1310に含まれる3次元データを検出してオブジェクトの厚み1305及び1306を検出する。
S1203において、制御部206は、S1202で算出したオブジェクト1307、オブジェクト1308に対するz軸方向における位置と厚みに基づいて、圧縮プロファイル関数H(z)を生成する。本実施形態に係る圧縮プロファイル関数H(z)について、図14(a)、図14(b)、図14(d)〜図14(f)を適宜参照して説明する。
図14(a)は、z軸と垂直な方向(プラスx軸方向)から見た物体の位置関係を模式的に示している。図14(b)は、上述した実施形態における圧縮プロファイル関数と同様、物体形状データのz軸方向情報をどれだけ圧縮するかを決定する圧縮プロファイル関数を示している。図14(b)において、主要物体であるオブジェクト1307が存在する位置と厚み範囲に対しては、図11(b)と同様に圧縮率が1に設定されている。一方、サブ主要物体であるオブジェクト1308が存在する位置と厚み範囲に対応する距離については、圧縮率が一律で2に設定されている。オブジェクト1307およびオブジェクト1308の位置および厚み領域以外については、オブジェクト1307の位置から離れるに従って線形に圧縮率が上がるように設定されている。
このように本実施形態では、制御部206は、主要物体に対する圧縮率が低く、かつ主要物体からの距離に応じて線形に圧縮率が上がるように設定しつつ、サブ主要物体については例外的に圧縮率が低くなるように圧縮プロファイル関数H(z)を生成する。このようにすることで、縮小されたz’では、オブジェクト1307(主要物体)の厚みが維持されることに加え、オブジェクト1308(サブ主要物体)の厚みも維持されて縮小される。
次に、制御部206は、図3に示したS306およびS307の処理を行う。なお、図14(e)は、上述の方法で生成された図14(d)に示す圧縮プロファイル関数H(z)を、数式1および数式2により生成した変換関数G(z)を示している。また、図11(f)は、変換関数G(z)で変換されるzと変換後のz’の関係性をそれぞれ表している。
さらに、S1204及びS1205では、制御部206は、主要物体に対して、サブ主要物体のxy平面方向の大きさを補正する。
まずS1204において、制御部206は、xy平面方向のオブジェクト1308(サブ主要物体)の大きさを補正するか否かを選択した、ユーザによる設定を取得する。この設定は、例えば、xy平面方向のオブジェクト1308(サブ主要物体)の大きさを、オブジェクト1307(主要物体)の大きさに合わせて補正するか否かを選択するものである。制御部206は、取得した設定が補正を行う設定である場合はS1205に処理を進め、補正を行わない設定である場合は、補正を行うこと無く本処理に係る一連の動作を終了する。
S1205において、制御部206は、オブジェクト1308(サブ主要物体)の大きさを補正する。より具体的には、制御部206は、オブジェクトの大きさを補正するパラメータを各オブジェクトまでの距離の比率を用いて算出する。例えば、図15には、図13(b)をx軸方向から見たyz平面の模式図を示している。例えば、デジタルカメラ200から主要物体1301までの距離がL1、デジタルカメラ200からサブ主要物体1302までの距離がL2であり、L2=L1×2の関係があるものとする。また、主要物体1301のy方向の長さがH1、サブ主要物体1302のy方向の長さがH2であり、H2=H1×2の関係があるものとする。さらに、デジタルカメラ200の画角をθとする。このとき、L1の距離における画角の範囲に相当する縦幅を画角縦幅1、同様にL2の距離における画角の範囲に相当する縦幅を画角縦幅2とすると、相似の関係より画角縦幅2は画角縦幅1の2倍となる。従って、ある撮像位置から撮影した場合の2次元画像内における各オブジェクトの大きさは、物体までの距離に反比例する。すなわち、制御部206は、オブジェクト1308(サブ主要物体)の3Dデータ情報のx方向、y方向の大きさをL2/L1の比率を用いて補正(すなわち変倍)して、オブジェクト1402のサブ主要物体データに変換する。例えば、図14(c)には、オブジェクト1308に対する大きさの補正を行った結果であるオブジェクト1401及びオブジェクト1402を示している。
このようにすれば、変換後のオブジェクト1401と変換後のオブジェクト1402とのxy平面方向の大きさをより現実に即した大きさ関係にすることができる。また、実施形態2と同様、オブジェクト1402のサブ主要物体データは、実施形態1の方法による変換後のオブジェクト(例えば503)と比べて厚みを持って強調された造形にもなる。
そして、制御部206は、オブジェクト1402のサブ主要物体データを生成すると、本処理に係る一連の動作を終了する。
なお、上述したS1204では、サブ主要物体の大きさの補正を行うか否かを選択して設定する例を説明した。このように、補正を行うか否かを選択可能にするのは、補正をOFFにすることがより適切な場合もあり得るためである。例えば、図16(a)及び図16(b)に示す例では、主要物体2001及びサブ主要物体2002が2次元画像内の被写体として撮影され、対応する3次元状のオブジェクト2003(主要物体)及びオブジェクト2004(サブ主要物体)を示している。
この例では、主要物体2001が人物であり、サブ主要物体2002がタワーなど巨大なランドマークである場合を示している。このとき、デジタルカメラ200からオブジェクト2003までの距離L3に比べて、オブジェクト2004までの距離L4が非常に長いものとする。また、図16(a)に示す画像は、例えば記念写真のように、人物である主要物体2001と共にタワーであるサブ主要物体2002の全体を写し込もうとする構図になっている。このような場合にS1205で説明した補正処理を行うと、サブ主要物体2002の3Dデータが現実の比率によって拡大されて過度に巨大となり、図16(a)を撮影する際に意図した被写体の関係が崩れる可能性がある。従って、図16に示すような撮影を行った場合には、サブ主要物体の大きさの補正を行わない(すなわちOFFにする)ように制御できることが望ましい。
すなわち、本実施形態によれば、撮影内容に応じて、主要物体1301とサブ主要物体1302のxy平面方向の大きさの補正処理の有無を制御することができる。この補正処理を行わない場合であっても、図11(c)に示したように主要物体とサブ主要物体とをそれぞれ強調した形で当該物体以外の部分を圧縮し、記念品やインテリアオブジェクト等としての造形物を出力する場合に適したデータに変換できる。
なお、本実施形態では、S1201においてサブ主要物体がユーザ操作によって決定される例を説明した。しかし、例えばサブ主要物体の画角内の位置や、物体が人物であるか等の判定結果に基づいて、制御部206が1以上のサブ主要物体を自動的に決定するようにしてもよい。
また、本実施形態では、S1204において補正処理の有無の選択がユーザ操作によって選択される例を説明したが、ユーザ操作によらず、例えば物体の種別の認識や物体の大きさ等の認識結果に基づいて、補正処理の有無を自動的に選択してもよい。例えば、制御部206は、主要物体とサブ主要物体の大きさの差が予め定めた閾値より大きい場合に補正処理をOFFにするようにしてもよい。また、例えば、制御部206は、主要物体、サブ主要物体がともに人物であると判定した場合に、補正処理をONにするようにしてもよい。
以上説明したように本実施形態では、サブ主要物体のxy平面方向の大きさを、主要物体とサブ主要物体との奥行方向の距離の比に基づいて補正するようにした。このようにすることにより、造形物を出力させるための3次元の形状データについて、奥行方向と垂直な方向(xy平面方向)の大きさをより現実に即した大きさ関係に変換して出力することができる。また、この補正を行うか否かを設定可能にし、特に主要物体とサブ主要物体との奥行方向の距離の比が適切な関係にない場合には、当該補正を行わないようにした。このようにすることにより、造形物を出力させるための3次元の形状データを、造形物に適した縮尺あるいは倍尺で変形することが可能になる。
(その他の実施形態)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。