以下、添付図面を参照し、本発明の好適な実施形態について説明する。
<装置構成>
図1は、本実施例に係る、光源推定を行う情報処理装置としてのカメラについて、その構成の一例を示す図である。
撮像部101は、ズームレンズ、フォーカスレンズ、ぶれ補正レンズ、絞り、シャッター、光学ローパスフィルタ、iRカットフィルタ、カラーフィルタ、及び、CMOSやCCDなどのセンサなどから構成され、被写体の光量を検知する。
A/D変換部102は、被写体の光量をデジタル値に変換する。
信号処理部103は、変換されたデジタル値にホワイトバランス処理、ガンマ処理、ノイズ低減処理などを行い、デジタル画像データを生成する。
D/A変換部104は、生成されたデジタル画像データに対しアナログ変換を行う。
エンコーダ部105は、デジタル画像データをJpegやMpegなどのファイルフォーマットに変換する処理を行う。
メディアインターフェース106は、PC、その他メディア(例えば、ハードディスク、メモリーカード、CFカード、SDカード、USBメモリ)につなぐためのインターフェースである。また、メディアインターフェース106は、インターネットなど通信網へ接続されており必要に応じてデータの送受信を行う。
CPU107は、各部を統括的に制御するプロセッサである。
ROM108は、CPU107で実行される制御プラグラム等を格納している。
RAM109は、CPU107の主メモリ、ワークエリア等として機能する。
撮像系制御部110は、フォーカスを合わせる、シャッターを開く、絞りを調節するなどの、CPU107から指示された撮像系の制御を行う。
操作部111は、ボタンやモードダイヤルなどが該当し、これらを介して入力されたユーザ指示を受け取る。
キャラクタジェネレーション112は、文字やグラフィックなどを生成する。
表示部113は、一般的には液晶ディスプレイが広く用いられており、キャラクタジェネレーション部112やD/A変換部104から受け取った撮影画像や文字の表示を行う。また、タッチスクリーン機能を有していても良く、その場合は、ユーザ指示を操作部111の入力として扱うことも可能である。
光源推定部114は、デジタル画像データから光源推定処理を行う。光源推定部114の詳細については後述する。
GPSレシーバ115は、撮像位置データを取得して光源推定部114やエンコーダ部105に供給する。さらにGPSレシーバ115は、カメラの方向を取得する電子コンパスとしての機能を具備する事が望ましい。
なお、カメラの構成要素は上記以外にも存在するが、本実施例の主眼ではないので、説明を省略する。
図2は、本実施例に係る光源推定部114の内部構成を示す機能ブロック図である。
光源推定部114は、画像データ取得部201、被写体形状データ取得部202、撮像条件データ取得部203、光源データ導出部205、初期光源データ決定部204、光源データ出力部206で構成される。
画像データ取得部201は、撮像部101で撮像され所定の画像処理が施されたデジタル画像データ(以下、単に「画像データ」と呼ぶ。)を信号処理部103から取得する。
被写体形状データ取得部202は、上記画像データに係る画像内の被写体の形状データをROM108等から取得する。
撮像条件データ取得部203は、撮像時の各種条件に関するデータ(以下、「撮像条件データ」と呼ぶ。)を、操作部111、撮像系制御部110、信号処理部103、GPSレシーバ115などから取得する。撮像条件データには、撮像を行った際のカメラの状態や状況を示すパラメータが含まれる。具体的には、シャッタースピード、フラッシュ使用の有無、ISO感度、絞り値、ホワイトバランス(WB)、撮像日時、GPS情報、ポートレートや夜景などの撮像モード、コメント情報、URL情報、撮像に用いたカメラ本体やレンズの型番などである。また、カメラの画角、解像度、カメラの光学中心の位置、カメラの光軸を示すベクトル、カメラの上方向を示すベクトルの情報も含む事が好適である。この撮像条件データは、ユーザが直接入力して設定しても良いし、撮像時に画像データのヘッダやフッタに自動的に記録されるようにしても良い。
初期光源データ決定部204は、撮像条件データに対応する初期光源データを、様々なタイプの光源データ(光源データ記憶部としてのROM108等に、撮像条件データに関連付けられて格納)を参照して決定する。
光源データ導出部205は、画像データ、被写体形状データ、撮像条件データ、初期光源データから、シーンの光源として最適な光源データを導出する。ここで、本実施例における光源データについて説明する。図3は、光源と被写体の関係を表す図である。本明細書において光源とは、被写体への入射光に関し、入射方向毎の輝度分布を表すものとする。入射方向は、緯度θ、経度φにより表される。図4は、光源データの一例を示す図である。図4の例では、行に緯度、列に経度を取り、被写体へ入射する光の入射方向毎の輝度を示す数値(0.0〜1.0)が入っている。緯度90度部分の値が突出して大きいこのような光源データは、高い方向からの光源(つまり天頂からの光強度が高い光源)を表している。このような光源を有するシーンとしては晴天の昼の空などが挙げられる。
光源データ出力部206は、導出された光源データを外部に出力する。
なお、上記各部における処理は、CPU107が各種ソフトウェア(コンピュータプログラム)を動作させることで実現される。
図5は、本実施例における光源推定処理の流れを示すフローチャートである。
ステップ501において、画像データ取得部201は、所定の画像処理が施された画像データを信号処理部103から取得する。取得した画像データは、光源データ導出部205に送られる。
ステップ502において、被写体形状データ取得部202は、被写体の形状データを取得する。取得した被写体形状データは、光源データ導出部204に送られる。なお、被写体形状データとしては、ポリゴンデータが好適であり、予め3Dスキャナ等で計測してROM108等に格納しておいたものを取得する。或いは情報処理装置自体に3Dスキャナを備える構成とし、計測したポリゴンデータを直接取得するようにしてもよい。図6は、本ステップで取得されるポリゴンデータの一例を示しており、立方体のポリゴンデータが示されている。図6に示す通りポリゴンデータは、頂点データとメッシュデータを含んでいる。被写体を平面の集合と考えると、立方体は6つの平面の集合であり、8つの頂点を有する。頂点データは各頂点の3次元座標値を保持する。メッシュデータは平面を規定し、頂点をどのように接続して平面を構成するか記述している。例えば図6のメッシュデータにおける平面S0は、頂点v0,v1,v2,v3で指定される四角形の平面を表している。図6では平面を4頂点で構成したが、3頂点や5頂点で構成しても構わない。このような形状を記述するポリゴンデータが、被写体形状データとして取得される。
ステップ503において、撮像条件データ取得部203は、操作部111等から撮像条件データを取得する。取得した撮像条件データは、初期光源データ決定部204及び光源データ導出部205に送られる。
ステップ504において、初期光源データ決定部204は、取得された撮像条件データに対応する初期光源データを、ROM108等に保存されている光源データテーブルを参照して決定する。
ここで、ROM108等に保存されている光源データテーブルについて説明する。光源データ記憶部としてのROM108等には、撮像条件データに関連付けられた複数の光源データを含む光源データテーブルが保持されている。そして、複数の光源データの中から、取得された撮像条件データに対応する1の光源データが初期光源データとして決定される。図7の(a)〜(d)は、それぞれ異なる撮像条件データに対応する光源データの例を示している。図7の(a)は、ホワイトバランスが「曇り」設定のときに適した光源データの一例である。ホワイトバランスが「曇り」の場合、撮像シーンは曇りや日陰であり、撮像時の光源が全方向で一様である事が推察される。そのため、すべての方向で輝度が均一な値を持つような光源データが好適である。図7の(b)は、ホワイトバランスが「太陽光」設定のときに適した光源データの一例である。ホワイトバランスが「太陽光」の場合、撮像シーンは晴天下であることが推察される。そのため、天頂方向からの光の輝度が高い光源データが好適である。なお、ホワイトバランスが「太陽光」の場合には、GPS情報や撮像日時などの情報に基づいて正確な太陽の方角を予測し、その予測される方角で輝度が最大となるような光源データを保持しておくとより望ましい。図7の(c)は、フラッシュ使用に適した光源データの一例である。フラッシュは水平方向から照射される確率が高い。そのため、緯度0°方向における輝度が最大となるような光源データが好適である。図7の(d)は、撮像モードが「夜景」設定のときに適した光源データの一例である。この場合、撮像シーンが夜である事が推察される。そのため、街の明かりなど水平方向からの輝度が比較的高い光源データが好適である。
このような様々なタイプの光源データが、撮像条件データに関連付けられてROM108等に保持される。図8は、複数の光源データを撮像条件データと関連付けて保持する光源データテーブルの一例である。初期光源データ決定部204は、このような光源データテーブルを参照して、そのときの撮像条件データに適した初期光源データを見つけ出すことになる。具体的には、図8に示した光源データテーブルの各行について以下の式(1)を用いて指標Eを計算し、指標Eが最小となるような初期光源データを特定する。
ここで、vi及びaiは撮像条件データの各パラメータであって、viはステップ503で取得した撮像条件データ、aiはROM108等に保持されるテーブル内の撮像条件データである。iは撮像条件データのパラメータの数に対応し、例えば、v1/a1がGPS情報の経度、v2/a2がGPS情報の緯度、v3/a3が撮像日時といった具合である。なお、WB設定などの数値化されていないパラメータに関しては、図8において括弧で示すように任意の数値(例えば、WB太陽光は数値“0”)を割り振る等し、比較可能な状態にする。wiは重み係数である。初期光源データを決定するための主たる判断要素として例えばGPS情報を用いたい場合は、GPS情報に対する重み係数を他のパラメータよりも大きく設定する事が好適である。
以上のようにして、ステップ503で取得した撮像条件データに対応する光源データが初期光源データとして決定される。
ステップ505において、光源データ導出部205は、取得した画像データ、被写体形状データ、撮像条件データ(ステップ501〜503)及び決定された初期光源データ(ステップ504)に基づいて、シーンに最適な光源データを導出する。光源データ導出処理の詳細については後述する。
ステップ506において、光源データ出力部206は、導出された光源データを出力する。
(光源データ導出処理)
図9は、ステップ505における光源データ導出処理の流れを示すフローチャートである。この処理により、実際の撮像画像に近いCG画像を得ることが可能な、最適化された光源データが得られる。
ステップ901において、光源データ導出部205は、求める光源データの初期値として、初期光源データ決定部204から送られた初期光源データを設定する。後述のとおり、本フローチャートはループ構造を有しており、第i回目のループにおける光源データはLi(θ,φ)で表される。ステップ901では初期値として、L0(θ,φ)、が設定される。
ステップ902において、光源データ導出部205は、ステップ901で設定された初期光源データと、前述のステップ502〜503で取得された被写体形状データ及び撮像条件データとに基づいてレンダリングを行い、CG画像データを生成する。ここでの撮像条件データは、具体的には、カメラの画角、位置などレンダリングに必要となるパラメータである。レンダリング手法は、CG画像と実写画像とを比較できるよう、パストレーシングやフォトンマッピング等、物理的に正確性を期した手法が好適である。本ステップの詳細は[非特許文献1]を参照されたい。なお、光源データLi(θ,φ)を用いてレンダリングされたCG画像をIiと表すこととする。ここで、図10及び図11を参照して、光源データとCG画像との関係を説明する。図10の(a)は撮像画像(実写画像)の一例であり、同(b)はその撮像環境下における光源のデータ(すなわち、推定されるべき光源データ)を示している。図10の(b)から明らかなように、この場合は緯度45°、経度0°の方向のみから光が照射されるため、図10の(a)において示す撮影画像において被写体である直方体の右斜め下の位置に影が確認できる。一方、図11の(a)はレンダリングされたCG画像の一例であり、同(b)はそのレンダリング時に用いられた光源のデータを示している。図11の(b)から明らかなように、誤った方向(緯度は正しいが、経度が0°ではなく90°)から光が照射されることになるため、図11の(a)において示すレンダリング結果(CG画像)において被写体である直方体の左斜め下の位置に影が確認できる。図10及び図11で示した例では、実際の撮像画像とレンダリングされたCG画像との差が大きいことから、図11の(b)に示す光源データがシーンの光源データとして不適切であることが分かる。ここでは説明の便宜上、レンダリングに使用された光源データが極端に不適切な例を用いたが、本実施例に係る光源データ導出処理では、既に説明したとおり、理想に比較的近い光源データが初期光源データとして設定される。
ステップ903において、光源データ導出部205は、ステップ902で生成されたCG画像と撮像画像との誤差Δiを求め、求められた誤差Δiが所定の閾値より小さいかどうかを判定する。誤差を求める方法としては、計算負荷の低いRMS誤差でも良いし、人間の視覚特性を利用した画像の差を算出するVDP(Visual Difference Predictor)やS−CIELAB等を用いても良い。求められた誤差Δiが所定の閾値(例えば誤差にS−CIELABを用いた場合は人間の検知限である1を閾値として設定)より小さければステップ905に進む。一方、求められた誤差Δiが所定の閾値より大きければステップ904に進む。
ステップ904において、光源データ導出部205は、ステップ903で求めた誤差Δiに基づいて、光源データの内容を更新する。具体的には、次の式(2)を用いて、次の光源データLi+1(θ,φ)を計算する。
このようにして光源データの更新が行われ、次の更新データLi+1(θ,φ)が得られると、ステップ902に戻り、当該更新された光源データの下でレンダリングがなされる。そして、新たに得られたCG画像と撮像画像との誤差Δiが閾値より小さいかどうかが判定され(ステップ903)、誤差Δiが閾値より小さいと判定されるまで同様の処理が繰り返される。
ステップ905において、光源データ導出部205は、導出された光源データ(誤差Δiが所定の閾値より小さいと判定された光源データ)を、光源データ出力部206に出力する。
このようにしてシーンに最適な光源データが導出される。
以上のとおり、本実施例に係る発明によれば、適切な光源データを導出する処理において、光源データの初期値(初期光源データ)が、ホワイトバランス設定などの光源の特性を示す撮像条件データに基づいて設定される。これにより、光源データの最適化計算の収束を早めることができ、さらに最適化において局所解に陥って誤った結果を出してしまうリスクを減らすことができる。
なお、本実施例では、光源推定を行う情報処理装置としてカメラを例示したが、これに限らない。例えば、デジタル画像データを受け取ったコンピュータのCPUが、各種ソフトウェアを動作させることにより光源推定処理を実行しても良い。
実施例1においては、予め3Dスキャナ等で計測してROM108等に格納しておいた被写体形状データを取得して、光源データ導出処理に用いていた。次に、取得した画像データと撮像条件データに基づいて被写体形状の推定を行い、得られた形状データを用いて光源データを導出する態様を、実施例2として説明する。なお、実施例1と共通する部分については説明を簡略化ないしは省略し、ここでは差異点を中心に説明することとする。
図12は、本実施例に係る光源推定部114の内部構成を示す機能ブロック図である。実施例1に係る光源推定部114(図2参照)との大きな違いは、被写体形状データ取得部202に代えて被写体形状推定部1201が設けられている点である。
また、本実施例の場合、画像データ取得部201で取得される画像データは、複数の異なる視点で撮像された画像からなるデータ(複数視点画像データ)であることが好適である。図13は、本実施例に係る、光源推定を行なう情報処理装置としての、撮像部を複数備えたカメラについて、その構成の一例を示す図である。図13では、撮像部1301及び1302の2つの撮像部が示されているが、撮像部の数及びその配置は任意に設定可能である。例えば9個の撮像部を正方格子上に均等に配置する場合などが考えられ、係る多眼方式のカメラであれば、1回の撮像で9視点の画像データを得ることができる。さらに、1回の撮像で1枚の画像を撮像する単眼方式の撮像部を有するカメラ(図1参照)を用い、視点をずらして複数回撮像することで、複数視点画像データを得るようにしても良い。図14の(a)〜(c)は、例えば単眼方式の撮像部を有するカメラを用いて、3つの異なる視点から撮像した場合の複数視点画像の一例を示す図である。
図15は、本実施例における光源推定処理の流れを示すフローチャートである。
ステップ1501において、画像データ取得部201は、所定の画像処理が施された複数視点画像データを信号処理部103から取得する。取得した複数視点画像データは、被写体形状推定部1201及び光源データ導出部205に送られる。
ステップ1502において、撮像条件データ取得部203は、操作部111等から撮像条件データを取得する。取得した撮像条件データは、被写体形状推定部1201、初期光源データ決定部204及び光源データ導出部205に送られる。
ステップ1503において、被写体形状推定部1201は、複数視点画像データから被写体の形状を推定する。視点の異なる複数枚の画像から被写体の形状を推定する手法は公知であり、例えばSfM(Structure from Motion)などを用いて算出することができる。ここでは、推定の具体的な処理については説明を省くが、例えばSfMを採用する場合、撮像条件データにカメラの位置情報等を含ませるようにして、それらを利用する事が好ましい。算出された被写体形状データは、その正確性ないしは信頼性を表す評価値と共に光源データ導出部205に送られる。ここで、評価値について説明する。形状推定では複数の画像間で対応する点(領域)が抽出される。そこで、この対応する点間での一致度が高いほど高評価となるような評価値が被写体形状データに与えられる。この際、一致度に関して設定された閾値(例えば、90%)を形状推定の評価値とする事が好適である。
ステップ1504において、初期光源データ決定部204は、撮像条件データに対応する初期光源データを、ROM108等に保存されている光源データテーブルを参照して決定する。ここでの処理は、実施例1に係る図5のフローチャートのステップ504と同じである。
ステップ1505において、光源データ導出部205は、取得された複数視点画像データ及び撮像条件データ、算出された被写体形状データ、決定された初期光源データに基づいて、シーンの光源データを導出する。本実施例に係る光源データ導出処理は、実施例1に係る図5のフローチャートのステップ505(図9のフローチャート参照)と概ね同様であるが、以下の点で相違している。
まず、ステップ1501で複数視点画像データが取得されるので、ステップ902におけるレンダリング処理及びステップ903におけるCG画像と撮像画像との誤差判定処理も、視点の異なる画像毎に(つまり、9視点分の画像を含む場合は9回)実行される。
さらに、ステップ903における、CG画像と撮像画像との誤差を評価する際の閾値が以下のようにして設定される。そもそも、複数の画像から推定された被写体形状データの場合、3Dスキャナ等の測定器を用いて得られた被写体形状データ等に比較して、実際の被写体とのずれが大きくなるのが通常である。当然のことながら、ずれの大きい被写体形状データを用いてレンダリングしたCG画像は、実際の撮像画像との誤差も大きくなる事が想定される。そのため、本ステップにおいて用いられる閾値は、実施例1の場合よりも大きな値に設定される。具体的には、被写体形状データと共に受け取った形状推定の評価値に応じて、ステップ903における閾値を設定する。例えば、被写体形状データ推定部1201において対応点を抽出する際に、対応点付近の画像の差が閾値C以下であれば対応点として採用するアルゴリズムであったとする。この場合、ステップ903における閾値も同じくCに設定する、といった具合である。また、他の要因で誤差が発生するような場合は閾値を2Cに設定するなど、想定される誤差の大きさによりステップ903における閾値を適宜設定する事が望ましい。
ステップ1506において、光源データ出力部206は、導出された光源データを出力する。上述のとおり本実施例の場合には、誤差が閾値より小さいと判定された光源データが視点の異なる画像の数の分だけ導出されることになるので、設定された閾値等によっては、画像毎に異なる内容の光源データが導出される可能性がある。このような場合は、閾値を設定し直して全ての画像について同じ結果が出るまでステップ1505の処理を繰り返す、或いは、最も多くの画像で誤差が閾値より小さいと判定された光源データを最終的な光源データとする等により、1の光源データを決定すればよい。
以上のとおり、本実施例に係る発明によれば、複数視点画像データから被写体の形状を推定するので、事前に被写体の形状を3Dスキャナ等で測定するなどして被写体形状データを準備する手間を省くことができる。
次に、光源データ導出処理で使用する初期光源データを、通信網に接続された外部のサーバ等を用いて決定する態様について、実施例3として説明する。なお、他の実施例と共通する部分については説明を簡略化ないしは省略し、ここでは差異点を中心に説明することとする。
図16は、本実施例に係る、光源推定を行う情報処理システムのシステム構成例を示す図である。光源推定装置1600はPC等であり、実施例1における光源推定部114に概ね相当する。本実施例に係る光源推定装置1600と実施例1に係る光源推定部114(図2参照)との大きな違いは、光源推定装置1600には初期光源データ決定部が存在せず、代わりに撮像条件データ送信部1604と初期光源データ受信部1605とを備えている点である。そして、光源推定装置1600は、初期光源データ決定手段としての処理サーバ1610及び光源データ記憶手段(光源データベース)としてのデータサーバ1620と、インターネット等の通信網を介して相互に接続されている。
図17は、本実施例における光源推定処理の流れを示すフローチャートである。
ステップ1701において、光源推定装置1600の画像データ取得部1601は、所定の画像処理が施された画像データを、不図示のカメラ等から取得する。取得した画像データは、光源データ導出部1606に送られる。
ステップ1702において、光源推定装置1600の被写体形状データ取得部1602は、被写体形状データが格納されたHDD(不図示)等から、被写体形状データを取得する。
ステップ1703において、光源推定装置1600の撮像条件データ取得部1603は、不図示のカメラ等から撮像条件データを取得する。取得した撮像条件データは、光源データ導出部1606及び撮像条件データ送信部1604に送られる。
ステップ1704において、撮像条件データ送信部1604は、取得した撮像条件データを初期光源データ決定手段としての処理サーバ1610に送信する
ステップ1705において、処理サーバ1610は、データサーバ1620に格納された様々な光源データの中から撮像条件データに対応する1の初期光源データを決定して、光源推定装置1600に送信する。
図18は、本実施例に係る処理サーバ1610における初期光源データ決定処理の流れを示すフローチャートである。
ステップ1801において、処理サーバ1610は、光源推定装置1600から撮像条件データを受信する。
ステップ1802において、処理サーバ1610は、受信した撮像条件データに光源関連情報を付与する。ここで、光源関連情報とは、例えば、撮像条件データに含まれるGPS情報や日時等から得た撮像地点の天候情報を指す。天候情報は、晴れや曇りといった情報でも良いし、撮像時刻(或いはその前後)に気象衛星によって当該撮像地点を上空から撮像した画像情報でも良い。撮像画像を用いる方がより詳細な天候情報を取得できる利点がある。このような天候情報を通信網に接続された処理装置が提供する気象サービス等を利用して取得する。光源関連情報の他の例としては、GPS情報から逆Geocoding等のサービスを用いて撮像地点の住所を取得することで得られる、撮像地点に存在する建造物名の情報等が考えられる。
ステップ1803において、処理サーバ1610は、光源関連情報の付与された撮像条件データに基づき、データサーバ1620にアクセスして当該撮像条件データに対応する光源データを検索し、初期光源データを決定する。初期光源データの決定方法は、実施例1のステップ504と同様である。
ステップ1804において、処理サーバ1610は、決定した初期光源データを光源推定装置1600に送信する。
図17のフローチャートの説明に戻る。
ステップ1706において、光源推定装置1600の初期光源データ受信部1605は初期光源データを受信する。
ステップ1707において、光源データ導出部1606は、光源データを導出する。光源データの導出方法は、実施例1の図9のフローチャートで説明したとおりである。
ステップ1708において、光源データ出力部1607は、導出された光源データを出力する。ここでの出力は、例えば不図示のメモリーカード等の記憶媒体に光源データを保存することを含む。さらに、導出された最適化計算後の光源データ及びその撮像条件データが、データサーバ1620に送られる。この際、導出された光源データの評価値(実際の光源との整合度合いを示す値)も合わせて送信する事が好適である。評価値としては、例えば図9のフローチャートのステップ903で使用した閾値でも良いし、ユーザが別途設定した値(0〜100%:値が大きいほど高評価)でも良い。光源データとその撮像条件データを受信したデータサーバ1620においては、受信した光源データとその撮像条件データを光源データテーブルに追加する処理(光源データテーブの更新処理)が行われる。図19は、更新された光源データテーブルの一例を示しており、実施例1に係る光源データテーブル(図8参照)には存在しない項目、天候情報1901及び評価値1902が追加されている。なお、本実施例に係る光源データベースは、基本となる数種類の光源データを含む光源データテーブルをメーカー側で最初に用意し、後にユーザが光源データを作成する都度(或いはその際のユーザからの更新指示を待って)更新されるようにするのが好適である。
以上のとおり、本実施例に係る発明によれば、通信網上で共有される独立した光源データベースを用いるため、より多くの光源データを保持することができ、シーンに最適な光源データを高速に安定して導出することができる。さらに、新たに作成された光源データが随時光源データベースに追加されるので、より精度の高い光源データの導出が可能となる。
次に、実際の被写体形状データを用いることなく、簡易に光源データを導出する態様について、実施例4として説明する。なお、他の実施例と共通する部分については説明を簡略化ないしは省略し、ここでは差異点を中心に説明することとする。
図20は、本実施例に係る光源推定部114の内部構成を示す機能ブロック図である。
本実施例に係る光源推定部114は、画像データ取得部201、撮像条件データ取得部203、光源データ導出部205、初期光源データ決定部204、光源データ出力部206で構成され、実際の被写体形状データを取得する被写体形状データ取得部202が存在しない。
図21は、本実施例における光源推定処理の流れを示すフローチャートである。
ステップ2101において、画像データ取得部201は、所定の画像処理が施された画像データを信号処理部103から取得する。取得した画像データは、光源データ導出部205に送られる。
ステップ2102において、撮像条件データ取得部203は、操作部111等から撮像条件データを取得する。取得した撮像条件データは、光源データ導出部205及び初期光源データ決定部204に送られる。
ステップ2103において、初期光源データ決定部204は、撮像条件データに対応する初期光源データを、ROM108等に保存されている光源データテーブルを参照して決定する。
ステップ2104において、光源データ導出部205は、取得した画像データ、撮像条件データ(ステップ2101、2102)及び決定された初期光源データ(ステップ2103)に基づいて、シーンの光源データを導出する。本実施例における光源データ導出処理では被写体の形状データが入力されないため、それに代わる簡易形状データを用いてレンダリングを行う。ここで、簡易形状としては、例えばカメラに正対する反射率50%のマテリアル属性を有する平面などが好適である。この場合の平面とカメラの距離は撮像条件データに含まれる被写体距離に設定するのが望ましい。また、平面の大きさは、例えばポートレートモードの場合は2m×0.5mなど人の大きさに、ポートレートモード以外の場合は撮像条件データに含まれるカメラの画角から画像の全面をカバーする大きさに設定する事が好ましい。実際の被写体形状データに代わる簡易形状データは、予めHDD等に用意しておく。このような簡易形状データに基づくレンダリングによってCG画像データが生成され、このCG画像データを用いて最適な光源データが導出される。
ステップ2105において、光源データ出力部206は、導出された光源データを出力する。
なお、上述した簡易形状データを用いる手法を実施例3に適用し、通信網を介して光源データを導出することも可能である。その際には被写体形状データがない状態で導出された光源データであることを示す指標を光源データベース内の光源データに添付することが望ましい。
以上のとおり、本実施例に係る発明によれば、被写体形状データを取得する代わりに簡易形状データを用いるので、最適な光源データをより高速に導出することができる。
実施例4では被写体形状データの代わりに簡易形状データを用いて光源データを導出した。次に、簡易形状データすら用いることなく、より簡易に光源データを導出する態様について、実施例5として説明する。なお、他の実施例と共通する部分については説明を簡略化ないしは省略し、ここでは差異点を中心に説明することとする。
図22は、本実施例にかかる光源推定部114の詳細を示す機能ブロック図である。本実施例に係る光源推定部114は、画像データ取得部201、撮像条件データ取得部203、特徴量導出部2201、光源データ導出部205及び光源データ出力部206で構成される。本実施例に特有の構成は、特徴量導出部2201である。
特徴量導出部2201は、画像データ取得部201から受け取った画像データを解析し、画像の平均色温度、画素値のヒストグラム、光源データの平均Lab値、画素値のヒストグラムの分散値といったその画像の特徴を数値化した特徴量(以下、「画像特徴量」と呼ぶ。)を導出する。本実施例では、画像特徴量として、画像の平均色温度と画素値のヒストグラムを採用した場合について説明するものとする。
図23は、本実施例における光源推定処理の流れを示すフローチャートである。
ステップ2301において、画像データ取得部201は、所定の画像処理が施された画像データを信号処理部103から取得する。取得した画像データは、特徴量導出部2201に送られる。
ステップ2302において、撮像条件データ取得部203は、操作部111等から撮像条件データを取得する。取得した撮像条件データは、光源データ導出部205に送られる。
ステップ2303において、特徴量導出部2201は、画像データ取得部201から受け取った画像データを解析し、画像特徴量(ここでは、画像の平均色温度と画素値のヒストグラム)を導出する。具体的には以下のとおりである。
画像の平均色温度については、まず、画像の使用色空間プロファイルに基づいてRGB値を色度XYZに変換し、それを相関色温度に変換して画像の色温度を得る。そして、得られた色温度の平均を求めることで導出する。
また、画素値のヒストグラムについては、画像中の各画素の輝度値の出現回数をカウントし、その出現頻度を求めることで導出する。
ステップ2304において、光源データ導出部205は、ROM108等に保存されている光源データテーブルを参照し、撮像条件データ及び画像特徴量に対応する光源データを取得する。図24は、本実施例に係る光源データテーブルの一例を示す図である。本実施例における光源データテーブルの場合、複数の光源データが、撮像条件データ及び画像特徴量に相当する光源データの特徴量と関連づけられて保持される。ここでは、光源データの特徴量として、平均色温度と輝度値のヒストグラムの情報が関連付けられ保持されている。光源データの平均色温度は、まず、角度毎に保持された輝度値をRGB値に拡張する。そして、各方向に対応するRGB値を色温度へ変換し、変換された色温度の平均をとることで得られる。また、ヒストグラムは、光源データにおける各輝度(0〜1)の出現回数について0.1刻みにビンを設定してカウントし、そのカウント数をサンプルの数で除算することで得られる。例えば、図7の(d)に示す光源データの場合は、各輝度のカウント数は(0,0,8,0,4,0,0,0,0),となり、これをサンプルの数12で除算することでヒストグラムとしての(0,0,0.66,0,0.33,0,0,0,0)が得られる。なお、画像特徴量として、平均色温度や画素値のヒストグラム以外の指標を用いる場合、光源データテーブルには、かかる画像特徴量に対応する値が求められ保持されることは言うまでもない。
前記(0,0,0.66,0,0.33,0,0,0,0)で示されるような光源データのヒストグラムと対比可能な画像データのヒストグラムの作成方法について述べる。画像データの画素値が例えば0〜255の範囲で設定されているとする。まず画像データ中の各画素について、その画素値の範囲が0〜1となるよう変換を施す。かかる変換は各画素の画素値を255で除算する変換で実現できる。次いで0〜1の範囲で0.1刻みにビンを設定し、各画素の変換後の画素値の出現回数をカウントする。カウント結果のデータ例として、画像サイズが1000画素×1000画素の場合、(5000,10000, 650000,320000,10000,5000,0,0) など挙げられる。このカウント結果のデータをサンプル数1000×1000=1000000で除算すると(0.005,0.01,0.65,0.32,0.01,0.005,0,0)が得られる。このデータが光源データのヒストグラムと対比可能な画像データのヒストグラムである。
本ステップでは、上述したような光源データテーブルを参照して、ステップ2302で取得した撮像条件データとステップ2303で導出した画像特徴量に対応する1の光源データが選択される。この選択は、実施例1に係る図5のフローチャートの初期光源データを決定するステップ(ステップ504)と同様の方法で行えばよい。すなわち、図24に示すような光源データテーブルの各行について前述の式(1)を用いて指標Eを計算し、指標Eが最小となるような光源データを選択する。
ステップ2305において、光源データ導出部205は、導出された光源データを、光源データ出力部206に出力する。この場合の出力方法としては、保存すべき画像データのヘッダ部に光源データを記録しても良いし、画像ファイルとは別に光源データファイルを生成して保存してもよい。
以上のとおり、本実施例に係る発明によれば、撮像した環境の光源に近い光源データを簡易に導出することができる。
次に、撮像画像のデータを加工して光源データを導出する態様について、実施例6として説明する。なお、他の実施例と共通する部分については説明を簡略化ないしは省略し、ここでは差異点を中心に説明することとする。
図25は、本実施例にかかる光源推定部114の詳細を示す機能ブロック図である。本実施例に係る光源推定部114は、画像データ取得部201、撮像条件データ取得部203、デプス画像生成部2501、光源データ導出部205及び光源データ出力部206で構成される。本実施例に特有の構成は、デプス画像生成部2501である。
デプス画像生成部2501は、カメラから被写体までの距離情報を画像で表現したデプス画像を生成する。デプス画像生成の詳細については後述する。
なお、本実施例に係る画像取得部201で取得する画像データは、実施例2と同様、複数の異なる視点で撮像された画像からなる複数視点画像データであることが好適である。
図26は、本実施例における光源推定処理の流れを示すフローチャートである。
ステップ2601において、画像データ取得部201は、所定の画像処理が施された複数視点画像データを信号処理部103から取得する。取得した複数視点画像データは、デプス画像生成部2501及び光源データ導出部205に送られる。
ステップ2602において、撮像条件データ取得部203は、操作部111等から撮像条件データを取得する。取得した撮像条件データは、デプス画像生成部2501及び光源データ導出部205に送られる。
ステップ2603において、デプス画像生成部2501は、画像データ取得部201から受け取った複数視点画像データと、視点の異なる複数の撮像画像それぞれに対応する撮像条件データとから、デプス画像を生成する。デプス画像の生成には公知の手法を用いればよく、例えば、特許文献2における変形例4に記載の方法などが挙げられる。ここでは、2つの画像から、デプス画像を生成する場合を例に説明することとする。
デプス画像の生成に際しては、まず、視点の異なる2つの撮像画像を基に視差画像が生成される。図27は、視点の異なる2つの撮像画像から視差画像を作る様子を説明する図である。画像A及び画像Bには、被写体として、人物、タワー及びビルがそれぞれ存在している。まず、撮像画像Aの各画素位置に対して所定のサイズ(例えば11x11画素)の領域を設定し、かかる領域と相関の高い領域を撮像画像Bから見つけ出す。ここで、撮像画像Aの画素位置(xA,yA)を中心とする領域と相関の高い撮像画像B中の領域の中心の画素位置を(xB,yB)とする。被写体が有限の距離にある場合は、(xA,yA)と(xB,yB)とは一致せず、ズレが発生する。そして、この画素ズレは、被写体の距離が遠いほど小さくなることが知られている。そこで、画素ズレ量dxを算出し、算出された画素ズレ量dxを撮像画像Aの各画素位置に割り当てることにより視差画像が得られる。この場合において、画素ズレ量dxは以下の式で表わされる。
図27に示された視差画像では、最も画素ズレ量dxの値が大きい人物が白で表され、次に画素ズレ量dxの値が大きいタワー及びビルが薄いグレーで表され、最も画素ズレ量dxの値が小さい背景部分が濃いグレーで表されている。
視差画像データが得られると、次に、撮影条件データに基づいて、視差画像データをデプス画像データへと変換する。画素ズレ量からカメラ特性値に応じて距離に変換する方法は公知であるため、簡単なジオメトリの場合について説明する。前述の図27において、撮像画像Aの中心に位置する被写体が、撮像画像Bでは水平方向に画素ズレ量dxだけずれた位置にあるとする。ここで、撮影条件データから画像の水平画素数Mとカメラの画角θを取得し、さらにカメラの位置データから撮像画像Aの光学中心と撮像画像Bの光学中心との距離Dを導出する。そして、以下の式(5)に従って、画素ズレ量dxを被写体までの距離(デプス値)Lに変換する。
図28は、上記式(5)によって、被写体までの距離(デプス値)が導かれることを示す図である。
このように、撮像画像Aに対応するデプス画像が生成される。なお、上記説明において撮像画像Aと撮像画像Bの立場を入れ替えて処理を行うことで、撮像画像Bに対応するデプス画像が得られることは言うまでもない。
以上のようにして、複数視点画像データと撮影条件データとから、視点の異なる各撮像画像に対応するデプス画像が生成される。
図26のフローチャートの説明に戻る。
ステップ2604において、光源データ導出部205は、複数視点画像データ、撮像条件データ及びデプス画像データから、光源データを導出する。
図29は、本実施例における光源データ導出処理の流れを示すフローチャートである。
ステップ2901において、光源データ導出部205は、光源データを初期化する。具体的には、光源データの全ての緯度経度に対応する輝度値に対して、未設定を示す数値(例えば−1)などを設定する。
ステップ2902において、光源データ導出部205は、複数視点画像データの中から処理対象となる撮像画像を設定する。
ステップ2903において、光源データ導出部205は、処理対象に設定された撮像画像内の参照する画素位置nを設定する。仮に、処理開始直後の段階で例えば画像の左上端の画素位置が最初に設定されたとすれば、画素位置nは、次回以降の処理において左上端から右下端に向けて順次更新(n+1)され、新たな画素位置nが設定されることになる。
ステップ2904において、光源データ導出部205は、デプス画像における画素位置nのデプス値L(n)を取得する。
ステップ2905において、光源データ導出部205は、取得したデプス値L(n)と予め定められた閾値とを比較する。比較の結果、デプス値L(n)が閾値より大きければステップ2906に進む。一方、デプス値L(n)が閾値より小さければステップ2903に戻り、次の画素位置を設定する。
ここで、デプス値に応じて処理を切り替える理由について説明する。CGで一般的に用いられる光源データとして無限遠光源マップがある。無限遠光源マップは、光源が無限遠方にあるものとして方向(緯度、経度)のみから光源の輝度を指定するフォーマットである。このようなフォーマットに従う場合、無限遠方とは見做せないような画像領域を持つ撮像画像を光源データに使用すると、不自然な合成結果となってしまう可能性が高い。よって、無限遠方とは見做せないような画像領域を含む撮像画像を光源データに使用することは避けるべきである。そこで、デプス画像に基づいて、撮像画像から光源データに適さない画像領域を除外する。図30の(a)は無限遠方と見做せる被写体のみを含む撮像画像を光源データに使用した場合のCGレンダリング結果の一例、同(b)は無限遠方とは見做せない被写体を含む撮像画像を光源データに使用した場合のCGレンダリング結果の一例をそれぞれ示している。そして、図30の(a)及び(b)の各レンダリング結果の上には光源データを利用したCGジオメトリが示されており、CGオブジェクトの立方体を囲む光源データが可視化されドームで表現されている。両者を比較すると、図30の(a)では、タワーとビルの間から光りが差し込むためレンダリング結果において、CGオブジェクトである立方体に影が付いている。実際の光源データが取得された環境に実在の立方体を設置した場合にも同様に影が付くため、図30の(a)はリアルなCGレンダリング結果と言える。これに対し、図30の(b)では、本来はビルとタワーの間から差し込む光が人物により遮られているため、CGオブジェクトである立方体に影が付いていない。つまり、図30の(b)は、リアルなレンダリング結果とは言えない。また、光源データは、撮影を行った場所における光線の入射輝度を表すものであるため、その場所の照明環境には関係のない人物のデータが光源データに反映されることはそもそも好ましくない。どの程度離れていれば無限遠方とするかは、ユーザの設定により可変であることが好ましい。例えば上述の閾値を10mとした場合には、デプス値L(n)が10mを越える部分の画像領域を用いて光源データが生成されることになる。
図29のフローチャートの説明に戻る。
ステップ2906において、光源データ導出部205は、画素位置nに対応する方向(緯度、経度)を撮影条件データから導出する。図41は、画素位置nと、画素位置nに対応する方向の関係を示す図である。この場合において光軸方向は、カメラに内蔵した電子コンパス、ジャイロ、水平センサなどにより緯度・経度を取得して、撮影条件データとして予め保持されているものとする。そして、係る光軸方向を基準として画素位置nに対応する方向を求める。説明を簡単にするためにカメラは水平に設置されているものとする。この場合において、画像中心と高さが同じである画素位置nに対応する方向は、光軸方向を水平にθn回転させた方向であることが図41から分かる。角度θnは、カメラの画角をθとして、(画素ズレ量÷画素数)×画角によって求められる。なお、画角や画素数などの情報は、撮影条件データから取得することは言うまでもない。
ステップ2907において、光源データ導出部205は、ステップ2906で導出した画素位置nに対応する方向(緯度、経度)について、画素位置nにおける撮像画像の画素値を設定する。
ステップ2908において、光源データ導出部205は、処理対象に設定された撮像画像のすべての画素位置について処理したかどうかを判定する。すべての画素位置について処理が完了していればステップ2909に進む。一方、未処理の画素位置がある場合にはステップ2903に戻り、次の画素位置を設定する。
ステップ2909において、光源データ導出部205は、複数視点画像データに含まれるすべての撮像画像について処理が完了したかどうかを判定する。未処理の撮像画像があれば、ステップ2902に戻り、次の撮像画像を処理対象の画像に設定して、ステップ2902〜ステップ2908の処理を繰り返す。一方、すべての撮像画像について処理が完了していれば、本処理を終える。
以上のようにして、複数視点画像データと撮像条件データから撮影環境に対応する光源データが生成される。
なお、本実施例では簡単のため、異なる視点で撮像された画像が2枚の場合を例に説明したが、当然のことながら、より多くの複数視点画像を取得し、2以上の撮像画像を用いて上述の処理を行って光源データを生成することも可能である。
図26のフローチャートの説明に戻る。
ステップ2605において、光源データ出力部206は、ステップ2604で生成された光源データを出力する。出力の方法としては保存すべき画像データのヘッダ部に光源データを記録しても良いし、画像ファイルとは別に光源データファイルを生成して保存してもよい。
以上のとおり、本実施例に係る発明によれば、撮像画像のデータから光源データを導出することができる。
複数の撮像画像から求めた視差を基にデプス画像を得て光源データを導出する実施例6においては、撮像画像が1枚しかない場合はデプス画像を得ることができない。そこで、1枚の撮像画像からデプス画像を擬似的に生成する態様について、実施例7として説明する。なお、実施例6と共通する部分については説明を省略し、差異点であるデプス画像の生成を中心に説明することとする。
本実施例における光源推定処理の流れは、実施例7に係る図26のフローチャートと同様であるので、以下、図26のフローに沿って説明する。
ステップ2601において、画像データ取得部201は、所定の画像処理が施された1枚の撮像画像のデータを信号処理部103から取得する。取得した画像データは、デプス画像生成部2501及び光源データ導出部205に送られる。
ステップ2602において、撮像条件データ取得部203は、操作部111等から撮像条件データを取得する。取得した撮像条件データは、デプス画像生成部2501及び光源データ導出部205に送られる。
ステップ2603において、デプス画像生成部2501は、画像データ取得部201から受け取った1枚の撮像画像のデータと、当該撮像画像に対応する撮像条件データとから、デプス画像を生成する。
実施例6で説明したとおり、無限遠方とは見做すことができない画像領域を含む撮像画像をそのまま光源データに使用することは適切ではない。そこで、1枚の撮像画像からデプス画像を生成する際にも、近い距離にある被写体を取り除く必要がある。本実施例では、特定の距離内に存在する被写体(ここでは、人物)が撮像画像内に写っている場合には、その被写体を除いた他の被写体の領域のみを無限遠方と見做すことでデプス画像を生成している。具体的には、以下のとおりである。
まず、デプス画像生成部2501は、撮像画像に対し人物の顔領域を検出する処理を行う。顔領域の検出には、公知の顔検出技術を用いればよい。顔検出技術には、例えば、撮像画像上の複数の異なる位置で部分画像を切り出し、その部分画像が顔領域の画像であるか否かを判別して、撮像画像上の顔領域を検出するパターン・マッチングを利用する手法などがある。
次に、検出した顔領域を含む所定の領域を基準として、その外側を無限遠方と見做し得る遠い距離(例えば、1km)、その内側を近い距離(1m)といった具合に距離情報を設定して、デプス画像を得る。この場合において所定の領域は、例えば、検出された顔領域の面積の2倍の面積を持つような円形の領域に設定すること等が考えられる。
このように撮像画像内の顔領域を検出し、検出された顔領域を含む一定の領域を近い距離にある画像領域として扱うことで、1枚の撮像画像から近似的にデプス画像が生成される。なお、本実施例では近い距離にある被写体として人物を検出する場合について説明したが、例えば、犬等の動物や建物などをパターンマッチング等によって検出し、検出された動物や建物などの外側を無限遠方と見做すようにしてもよい。
ステップ2604において、光源データ導出部205は、1枚の撮像画像のデータ、撮像条件データ、及び上述のようにして得られたデプス画像データから光源データを導出する。この場合の光源データ導出処理は、処理対象の撮像画像が1枚である点を除いて実施例6で説明したとおりであり、
また、実施例6の更なる変形例として、擬似的にデプス画像を生成することなく、顔領域等の検出結果に基づいて、光源データに使用する領域を示す情報を撮像画像に付加するようにしてもよい。この場合、図29のフローチャートのステップ2905では、画素位置nが当該設定された領域内にあるかどうかが判定されることになり、領域内にあると判定されればステップ2906に移行するようにして、光源データが導出される。
次に、撮像画像内の影領域を除外することで高精度に光源データを導出する様態を、実施例8として説明する。なお、他の実施例と共通する部分については説明を簡略化ないしは省略し、ここでは差異点を中心に説明することとする。
図31は、本実施例に係る光源推定部114の内部構成を示す機能ブロック図である。実施例1に係る光源推定部114(図2参照)との大きな違いは、除外領域決定部3101が追加されている点である。
除外領域決定部3101は、画像内の影領域を抽出し、抽出された影領域のうち画像の端部に掛かっている領域を光源推定には用いない除外領域として決定する処理を行う。
図32は、本実施例における光源推定処理の流れを示すフローチャートである。
ステップ3201において、画像データ取得部201は、所定の画像処理が施された画像データを信号処理部103から取得する。取得した画像データは、光源データ導出部205及び除外領域決定部3101に送られる。
ステップ3202において、除外領域決定部3101は、受け取った画像データに対し影領域抽出処理を行う。撮像画像から影領域を抽出する手法は公知であり、例えば画像のXYZ値を用いて抽出することができる。具体的には、撮像画像の使用色空間プロファイルに基づいて、RGB値を色度XYZに変換した後、輝度値Y < Yth(例えば、Yth = 80)を満たす画素領域を影領域として抽出する。他にも、背景差分法や明度変化を利用する方法等もあるがここでは省略する。
ステップ3203において、除外領域決定部3101は、ステップ3202で抽出された各影領域のうち、光源推定に用いない画素領域(以下、「除外領域」と呼ぶ。)を決定する。除外領域とするかどうかは、抽出した各影領域が撮像画像の端部に掛かっているかどうかを調べ、画像の端部に掛かっていれば画像に写っていない物体が生みだした影であるとみなして、除外領域と決定する。図33は、除外領域の一例を示す図である。図33では、2つの影領域3301及び3302が示されており、影領域3302は画像の左上端部に掛かっている。この場合、影領域3302が除外領域として決定されることになる。
ここで、画像端部の影領域を除外することで高精度に光源データを導出できる理由について説明する。図34は、緯度45°、経度0°の方向から1(lux)の光が床の上に配置された直方体と立方体を照射しているシーンをカメラで撮像する様子を示す図である。いま、このような状態で撮像された画像から、光源データを導出する場合を考える。ここで、床、直方体及び立方体は、反射光の輝度が出射方向に対して一様なLambert反射とし、反射率は1とする。本実施例では簡単の為、白黒画像の1チャンネルの場合で説明するが、カラー画像を用いる場合は同様の処理をR, G, Bの3チャンネルそれぞれについて行えばよい。図35の(a)は、撮像画像を示しており、画面中央に立方体とその影、画面左上部に直方体が生みだす影が写っている。まず、撮像画像の画素領域の内、直方体が生みだす影領域のみを用いて光源データを導出する場合を考える。この場合、床がLambert反射であり、影領域A内の画素値が0であることから、導出される光源データは全ての緯度、経度方向に関して光強度が0(lux)の光源データとなる(図35の(b)参照)。次に、撮像画像の画素領域の内、影領域以外の全領域を用いて光源データを導出する場合を考える。このとき、実施例1で説明した光源推定処理(図9のフローチャート参照)では、緯度45°、経度0°の方向から1(lux)の光を立方体に照射したCG画像と撮像画像との誤差Δiが所定の閾値より小さくなるような光源データが導出される。すなわち、導出される光源データは、図35の(c)で示すような緯度45°、経度0°の方向の光強度が1(lux)の光源データとなる。このように、影領域から得られる光源データと影領域以外の全領域から得られる光源データとは大きく異なることが分かる。図36は、除外領域がない場合とある場合における、導出された光源データを示している。図36の(a)は、除外領域がない場合(画像内の全画素領域を用いて光源推定する場合)に導出される光源データであり、緯度45°、経度0°の方向の光強度が0.8(lux)の光源データとなっている。一方、図36の(b)は、除外領域がある場合(撮像画像内の影領域を除いた画素領域を用いて光源推定する場合)に導出される光源データであり、緯度45°、経度0°の方向の光強度が1.0(lux)の光源データとなっている。両者を比較すると明らかなように、除外領域がある場合の方が、撮影シーンの光源データをより高精度に導出できている。
なお、本実施例では撮影画像の端部を含む影領域を、撮影画像に写っていない物体が生みだした影であると見做して除外領域と決定したが、撮影画像に既存の物体認識技術を適用し、立体物と認識した被写体に接していない影領域を除外領域と決定しても良い。更に、光源推定に用いたくない領域を、UI上でユーザが指定できるようにしても良い。
以降のステップ3204〜ステップ3206は、実施例1に係る図5のフローチャートのステップ502〜ステップ504と同じ処理なのでここでは説明を省略する。
ステップ3207において、光源データ導出部204は、取得した画像データ、被写体形状データ、撮像条件データ及び決定された初期光源データに基づいて、シーンに最適な光源データを導出する。本実施例の光源データ導出処理も基本的には実施例1に係る図9のフローチャートと同じであるが、ステップ903における処理が異なる。すなわち、本実施例においてCG画像と撮像画像との誤差Δiを求める際には、除外領域以外の画素領域(撮像画像の全画素領域から除外領域を除いた画素領域)を用いて、CG画像との誤差Δiを求めることになる。
ステップ3208において、光源データ出力部206は、導出された光源データを出力する。
以上のとおり、本実施例に係る発明によれば、撮像画像内の影領域を除外して光源推定に用いないことで、より高精度に光源データを導出できる。
実施例8では、撮像画像に写る影領域の内、画像の端部に掛かっている影領域を光源推定に用いない除外領域とした。しかし、斜めから光が当たる夕日の撮影シーンや、画像の端部に主要な被写体が写っている撮影シーン等では、撮像画像内に写る主要な被写体が生みだす影までもが画像の端部に掛かってしまい、適切に除外領域を決定することが困難となる。そこで、上記のような撮影シーンで撮像された画像からも除外領域を適切に決定できるよう、初期光源データを用いて除外領域を決定する態様について、実施例9として説明する。なお、他の実施例と共通する部分については説明を簡略化ないしは省略し、ここでは差異点を中心に説明することとする。
図37は、本実施例に係る光源推定部114の内部構成を示す機能ブロック図である。実施例8に係る光源推定部114(図31参照)との大きな違いは、除外領域決定部3601の配置(他の各部との関係)である。すなわち、本実施例における除外領域決定部3601は、画像データ取得部201からの画像データだけでなく、被写体形状データ、撮像条件データ、初期光源データをも取得し、除外領域の決定に使用する。
図38は、本実施例における光源推定処理の流れを示すフローチャートである。
ステップ3801において、画像データ取得部201は、所定の画像処理が施された画像データを信号処理部103から取得する。取得した画像データは、光源データ導出部205及び除外領域決定部3601に送られる。
ステップ3802において、被写体形状データ取得部202は、被写体の形状データを取得する。取得した被写体形状データは、光源データ導出部204及び除外領域決定部3601に送られる。
ステップ3803において、撮像条件データ取得部203は、操作部111等から撮像条件データを取得する。取得した撮像条件データは、初期光源データ決定部204、光源データ導出部205及び除外領域決定部3601に送られる。
ステップ3804において、初期光源データ決定部204は、取得された撮像条件データに対応する初期光源データを、ROM108等に保存されている光源データテーブルを参照して決定する。
ステップ3805において、除外領域決定部3601は、取得した画像データ、初期光源データ、被写体形状データ及び撮像条件データに基づいてレンダリングを行い、CG画像を生成する。図39は、レンダリングによって生成されたCG画像の一例を示す図である。画面中央にある立方体の生みだす影が画像右下の端部に掛かっている。
ステップ3806において、除外領域決定部3601は、ステップ3801で取得した撮像画像とステップ3805で生成されたCG画像のそれぞれに対し、影領域抽出処理を行う。影領域の抽出については実施例8で説明したとおりである(図32のフローチャートのステップ3202を参照。)。
ステップ3807において、除外領域決定部3601は、撮像画像内の各影領域に対して、CG画像の影領域と重なる影領域の面積の割合Pを算出する。そして、算出された割合Pが所定の閾値Pth(例えば、Pth = 0.5)より小さいかどうか判定しP < Pthを満たす影領域を光源推定に用いない除外領域と決定する。図40は、本実施例における除外領域の決定の過程を説明する図である。図40において、撮像画像における影領域4001についてはCG画像における影領域4003と重なる割合Pは0.85となる。一方、撮像画像における影領域4002についてはCG画像内に対応する影領域が存在しないので割合=0となる。したがって、この場合、撮像画像における影領域4001は画像右下の端部に掛かっているものの、算出された割合Pが閾値Pth(0.5)よりも大きいため除外領域とは決定されず、影領域4002のみが除外領域として決定されることになる。
ステップ3808において、光源データ導出部205は、取得した画像データ、被写体形状データ、撮像条件データ及び決定された初期光源データに基づいて、シーンに最適な光源データを導出する。本実施例の光源データ導出処理は、実施例8における図32のフローチャートのステップ3207と同様である。すなわち、CG画像と撮像画像との誤差Δiを求める際に、除外領域以外の画素領域(撮像画像の全画素領域から除外領域を除いた画素領域)を用いて、CG画像との誤差Δiを求めることになる。
ステップ3809において、光源データ出力部206は、導出された光源データを出力する。
以上のとおり、本実施例に係る発明によれば、斜めから光が当たる夕日の撮影シーンや撮像画像の端部に被写体が写っている撮影シーン等で撮像された画像からでも、精度の高い光源データの導出が可能となる。
実施例1では、光源推定の演算の初期値を決定する際に撮像条件データを用いる態様について説明した。次に、光源推定の演算において複数の解の候補が見つかった場合に、撮像条件データを用いて、一つの光源データを決定する態様について、実施例10として説明する。なお、他の実施例と共通する部分については説明を簡略化ないしは省略し、ここでは差異点を中心に説明することとする。
図42は、本実施例に係る、光源推定を行う情報処理システムのシステム構成例を示す図である。光源推定装置4200はPC等であり、実施例1における光源推定部114に概ね相当する。本実施例に係る光源推定装置4200には、最適光源データ決定部4201が存在する。この最適光源データ決定部4201は、光源データ導出部205が導出する複数の解の候補の中から、撮像条件データに基づいて一つの光源データを決定する。
図43は、本実施例における光源推定処理の流れを示すフローチャートである。
ステップ4301において、光源推定装置4200の画像データ取得部201は、所定の画像処理が施された画像データを、不図示のカメラ等から取得する。取得した画像データは、光源データ導出部205に送られる。
ステップ4302において、光源推定装置4200の被写体形状データ取得部202は、被写体形状データが格納されたHDD(不図示)等から、被写体形状データを取得する。
ステップ4303において、光源推定装置4200の撮像条件データ取得部403は、不図示のカメラ等から撮像条件データを取得する。取得した撮像条件データは、光源データ導出部205に送られる。
ステップ4304において、光源データ導出部205は、被写体形状データに基づいて光源データを導出する。この導出の際に用いられる推定アルゴリズムは、複数の候補解を導出する。例えば、数式(3)に記載されている光源データの更新をしていくことにより解を見つける場合、例えば、遺伝的アルゴリズムを用いる事が考えられる。この場合、複数の解が探索され、それぞれが光源データの候補解となる。
ステップ4305において、ステップ4304で得られた複数の候補解の中から、一つの候補解を最適光源データとして決定する。この決定には、例えば、図7(a)〜(d)に記載されている光源データを利用する。最適光源データ決定部4201は、WB(曇り)で撮像された画像データに対しては複数の候補解の中から、図7(a)に記載されている光源データと最も近い候補解を最適光源データとして決定する。最も近い候補解の決定に際しては、例えば、二乗誤差を評価値として決定する。
ステップ4306において、ステップ4305で決定された最適光源データを出力する。
以上の通り本実施例では、光源推定の演算において複数の解の候補が見つかった場合に、撮像条件データを用いて、一つの光源データを決定することが可能となる。
なお、本実施例では、複数の光源データの候補解の中から一つの候補解を最適光源データとして選択するとしたが、例えば、複数の候補解を適切な重みを付けて足し合わせても良い。即ち、撮像条件データを手掛かりに、重み係数を決定し、複数の候補解を足し合わせることにより、より好適な最適光源データを導出することが可能となる。
(その他の実施形態)
また、本発明の目的は、以下の処理を実行することによっても達成される。即ち、上述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)が記憶媒体に格納されたプログラムコードを読み出す処理である。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施の形態の機能を実現することになり、そのプログラムコード及び該プログラムコードを記憶した記憶媒体は本発明を構成することになる。