(実施形態1)
以下、本発明の例示的な実施形態について、図面を参照して詳細に説明する。なお、以下では画像処理装置の一例として、撮像可能な任意のデジタルカメラに本発明を適用した例を説明する。しかし、本発明は、デジタルカメラに限らず、撮像された画像を取得してリライティング処理を行うことが可能な任意の機器にも適用可能である。これらの機器には、例えば携帯電話機、ゲーム機、タブレット端末、パーソナルコンピュータ、時計型や眼鏡型の情報端末、監視システム、医療機器などが含まれてよい。
(デジタルカメラ100の構成)
図1は、本実施形態の画像処理装置の一例としてデジタルカメラ100の機能構成例を示すブロック図である。なお、図1に示す機能ブロックの1つ以上は、ASICやプログラマブルロジックアレイ(PLA)などのハードウェアによって実現されてもよいし、CPUやMPU等のプログラマブルプロセッサがソフトウェアを実行することによって実現されてもよい。また、ソフトウェアとハードウェアの組み合わせによって実現されてもよい。従って、以下の説明において、異なる機能ブロックが動作主体として記載されている場合であっても、同じハードウェアが主体として実現されうる。
レンズ群101は、フォーカスレンズやズームレンズを含むレンズ群である。シャッター102は絞り機能を備え、レンズ群101と撮像部103との間に設けられている。撮像部103は、レンズ群101によって撮像面に形成される光学像を2次元状に配列された画素で光電変換し、画素単位の電気信号に出力する撮像素子を有する。撮像素子は、CCDイメージセンサやCMOSイメージセンサであってよい。A/D変換部104は、撮像部103が出力するアナログ信号をデジタル信号(画像データ)に変換する。
画像処理部105は、A/D変換部104から出力される画像データに対し、後述する各種画像処理を行う。画像処理部105はまた、撮影された画像に対して後述するリライティング処理を行う。画像メモリ106は揮発性の半導体メモリを含み、A/D変換部104や画像処理部105から出力された画像データを一時的に記憶する。
メモリ制御部107は、画像処理部105や顔検出部113による画像メモリ106の読み書きを制御する。D/A変換部108は、メモリ制御部107から読み出したデジタルをアナログ信号に変換する回路又はモジュールを含む。表示部109は、LCDや有機ELディスプレイ等の表示装置を含み、デジタルカメラ100を操作するための各種GUI、ライブビュー画像、又は記録媒体112から読み出して再生される画像などを表示する。
コーデック部110は、画像メモリ106に記憶されている画像データを記録媒体に記録するために予め定められた方法で符号化したり、画像ファイルに含まれる符号化画像データを例えば表示のために復号したりする。インタフェース(I/F)111は、例えば半導体メモリカードやカード型ハードディスクなどの着脱可能な記録媒体112を挿抜する機構を備え、デジタルカメラ100と機械的および電気的に接続する。
システム制御部50は、例えばCPUやMPUなどのプロセッサを含み、不揮発性メモリ121等に記録されたプログラムをシステムメモリ122に展開、実行して必要なブロックや回路を制御することにより、デジタルカメラ100の機能を実現する。
顔検出部113は、撮影された画像に含まれる顔領域を検出し、検出された顔領域のそれぞれについて、位置、大きさ、信頼度などの顔情報を求める。なお、顔検出部113はニューラルネットワークに代表される学習を用いた手法や、目、鼻、口などの特徴部位を、画像領域からテンプレートマッチングにより探索し類似度が高い領域を顔とみなす手法など、任意の方法を用いることができる。
操作部120は、ユーザがデジタルカメラ100に対する各種の指示を入力するためのボタンやスイッチなどの入力デバイスを含む。表示部109がタッチディスプレイである場合、タッチパネルは操作部120に含まれる。また、音声入力や視線入力など、非接触で指示を入力するタイプの入力デバイスが操作部120に含まれてもよい。
不揮発性メモリ121は、電気的に消去・記録可能な、例えばEEPROM等であってよい。不揮発性メモリ121は、例えば各種の設定値、GUIデータを記録するほか、システム制御部50がMPUやCPUである場合、システム制御部50が実行するためのプログラムを記録する。システムメモリ122は、システム制御部50の動作用の定数や変数、不揮発性メモリ121から読み出したプログラム等を展開したデータを一時的に記憶する。
(デジタルカメラ100における撮影時の基本動作)
次に、上記のように構成されたデジタルカメラ100における被写体撮影時の基本動作について説明する。
撮像部103は、シャッター102が開いている所定の時間内にレンズ群101が撮像面に形成する被写体像を撮像素子によって光電変換し、電荷を蓄積する。そして、撮像部103は蓄積された電荷を所定のタイミングで読み出してアナログ画像信号としてA/D変換部104へ出力する。A/D変換部104は、撮像部103から出力されるアナログ画像信号をデジタル画像信号(画像データ)に変換し画像処理部105に出力する。
画像処理部105は、A/D変換部104からの画像データ、又は、メモリ制御部107からの画像データに対し、例えば、同時化処理(色補間処理或いはデモザイク処理)、ガンマ(γ)補正などの画像処理を行う。また、画像処理部105では、撮影で得られた画像データを用いて輝度やコントラストなどに関する所定の演算処理を行い、得られた演算結果に基づいてシステム制御部50が焦点調節や露光制御を行う。焦点検出や露出制御に顔検出部113の検出結果を考慮してもよい。このように、本実施形態のデジタルカメラ100では、TTL(スルー・ザ・レンズ)方式のAF(オートフォーカス)処理、AE(自動露出)処理を行う。画像処理部105ではさらに、撮影で得られた画像データを用いたオートホワイトバランス(AWB)調整も行う。
画像処理部105から出力された画像データは、メモリ制御部107を介して画像メモリ106に書き込まれる。画像メモリ106は、撮像部103から出力された画像データや、表示部109に表示するための画像データを格納する。また、D/A変換部108は、画像メモリ106に格納されている画像表示用のデータをアナログ信号に変換して表示部109に供給する。表示部109は、LCD等の表示装置に、D/A変換部108からのアナログ信号に応じた表示を行う。
コーデック部110は、例えばJPEGやMPEGなどの規格に準拠した処理を行って、画像メモリ106に記録された画像データを符号化する。システム制御部50は、符号化された画像データに対して予め定められたヘッダなどを付与して画像ファイルを形成し、I/F111を介して記録媒体112に記録する。
なお、デジタルカメラ100は、撮影スタンバイ状態において動画撮影を行い、撮影された動画を表示部109に表示し続けることにより表示部109を電子ビューファインダ(EVF)として機能させることができる。この場合、システム制御部50は、シャッター102を開いた状態に制御し、撮像部103のいわゆる電子シャッターを用いて例えば30フレーム/秒の撮影を行うように撮像部103を制御する。
また、システム制御部50は、操作部120に含まれるシャッターボタンが半押しされた場合に上述のAF、AE制御を実行し、更にシャッターボタンが全押しされた場合、本撮影による記録用の静止画撮影を実行して画像データを記録媒体112に記録する。さらに、動画撮影ボタンなどにより動画撮影が指示された場合、記録媒体112への動画記録を開始する。
(画像処理部105の構成)
次に、画像処理部105におけるリライティング処理に係る機能構成例を、図2を参照して説明する。なお、図2に示す機能ブロックの1つ以上は、ASICや、FPGAやPLAなどのプログラマブルロジックアレイ(PLA)などのハードウェアによって実現されてもよい。また、図1と同様、CPUやMPU等のプログラマブルプロセッサがソフトウェアを実行することによって実現されてもよく、ソフトウェアとハードウェアの組み合わせによって実現されてもよい。
なお、リライティング処理は、リライティング処理の実行が指定された状態で撮影された画像や、メニュー画面等からリライティング処理の実施が指示された、例えば記録媒体112に記録済の画像に対して実施することができる。なお、リライティング処理において撮影時の情報が必要な場合、不揮発性メモリ121またはシステムメモリ122から読み出したり、画像ファイルのヘッダなどから取得したりするものとする。
図2において、201は画像信号生成部、202はWB増幅部、203は対象領域抽出部、204は陰影状態検出部、205は仮想光源設定値算出部、206は仮想光源設定部、207は仮想光源信号付加部、208はガンマ処理部である。各部の具体的な機能や動作はリライティング処理の動作において適宜後述する。
(画像処理部105におけるリライティング処理の一連の動作)
次に、図3を参照して、画像処理部105におけるリライティング処理の一連の動作を説明する。なお、本処理は、操作部120に含まれるメニュー画面等からリライティング処理の実施が指示された場合に本処理が開始される。本処理に先だって、画像処理部105は、入力された画像データに対して画像信号生成部201による同時化処理を行い、さらにWB増幅部202によってRGBの各色信号にゲインをかけてホワイトバランスを調整する。
S301では、対象領域抽出部203は、リライティング処理において処理の対象領域を抽出する。具体的に、対象領域抽出部203は、WB増幅部202から入力された画像データのうち、リライティング処理において対象となる被写体領域の画像データのみを抽出する。例えば、対象領域抽出部203は、顔検出部113によって検出された被写体人物の顔領域を示す情報を別途取得し、リライティング処理の対象となる領域(単に対象領域ともいう)を特定する。対象領域抽出部203は、特定した対象領域に基づいて顔領域の画像データを抽出する。対象領域抽出部203は、撮影画像に複数の被写体が含まれる場合、同様の処理を繰り返して複数の被写体領域の画像データをそれぞれ抽出する。
S302では、対象領域抽出部203は、抽出した対象領域が画像中に複数存在するか否かを判定する。対象領域抽出部203は、対象領域が複数存在していると判定した場合にはS303に処理を進め、一方、対象領域が1つであると判定した場合にはS306に処理を進める。
S303では、陰影状態検出部204は、対象領域のそれぞれにおける被写体の陰影の状態を検出する。なお、陰影状態検出部204による、被写体の陰影の状態を検出する処理(陰影状態検出処理)の詳細は後述する。陰影状態検出部204は、陰影状態検出処理によって検出した被写体の陰影の状態(詳細は後述するが対象領域のコントラストの状態)を、被写体陰影情報として仮想光源設定値算出部205へ出力する。また、陰影状態検出部204は、陰影状態検出処理の一部として環境光の位置を推定する。推定された環境光の位置情報は、被写体陰影情報と共に仮想光源設定値算出部205に出力される。なお、S303及びS304における処理は、対象領域が複数検出されている場合であるため、複数の対象領域のそれぞれに対して実行される。
S304では、仮想光源設定値算出部205は、入力された被写体陰影情報に基づいて被写体ごとの仮想光源の設定値を算出する。なお、仮想光源設定値算出部205による仮想光源の設定値を算出する処理(仮想光源設定値算出処理)の詳細は後述する。仮想光源設定値算出部205は、算出した被写体ごとの仮想光源の設定値を、仮想光源設定部206へ出力する。
S305では、仮想光源設定部206は、対象領域のそれぞれに対して算出された被写体ごとの仮想光源の設定値を比較し、その比較結果に基づいて、本リライティング処理で実際に用いる仮想光源の設定値を決定する。なお、仮想光源設定部206による、実際に用いる仮想光源の設定値を決定する処理(仮想光源決定処理)の詳細は後述する。
一方、S306では、陰影状態検出部204は、対象領域における被写体の陰影の状態を検出し、被写体の陰影の状態を表す情報(すなわち被写体陰影情報)を仮想光源設定値算出部205へ出力する。S307では、仮想光源設定値算出部205は、入力された被写体陰影情報に基づき、仮想光源の設定値を算出する。なお、S306、S307における処理は、補正対象領域が1つ検出された場合であるため、S305のように複数の被写体領域のそれぞれに対して算出された設定値を比較する処理は必要ない。このため、仮想光源設定値算出部205は、S307で算出した仮想光源の設定値を、仮想光源信号付加部207へ出力する。
S308では、仮想光源信号付加部207は、算出された仮想光源の設定値に基づいて、仮想光源が配置された場合に被写体上に現れる陰影(例えば補正値)を生成し、WB増幅部202から入力された画像データに対して付加する。
(陰影状態検出部204における陰影状態検出処理)
更に、陰影状態検出部204による、陰影状態検出処理の詳細について、図4を参照して説明する。まず、陰影状態検出部204は、対象領域抽出部203から入力された対象領域の画像データに基づいて、被写体の明るさを算出する。例えば、図4に示すように、対象領域401を複数のブロック(例えば、8×8=64個)に分割して、分割したブロックごとに輝度の平均値を算出する。次に、陰影状態検出部204は、算出した輝度の平均値に基づいて、被写体のコントラスト値を算出する。具体的には、分割した複数のブロックのうち、最も平均輝度の高いブロック(402)と最も平均輝度の低いブロック(403)を選択し、その平均輝度の比を算出して、コントラスト値として用いる。ただし、輝度信号に加えて、色相や彩度などの色信号をブロック毎に算出して、被写体色が近いブロック間でコントラスト値を算出する。陰影状態検出部204は、算出したコントラスト値(すなわち被写体陰影情報)を仮想光源設定値算出部205へ出力する。
また、陰影状態検出部204は、環境光の位置の推定を行う。環境光の位置の推定は、公知の種々の方法を用いることができる。例えば、被写体の中で最も明るい領域を検出したうえで検出した領域の法線ベクトルを取得し、得られたベクトルが指す方向を環境光の位置する方向として定めてもよい。また、人物の顔領域を対象とするため、鼻などの所定の器官を検出し、検出された器官の陰の位置を検出することにより、環境光の方向を推定するようにしてもよい。陰影状態検出部204は、推定した環境光の位置情報を、仮想光源設定値算出部205へ出力する。
(仮想光源設定値算出部205における仮想光源設定値算出処理)
次に、仮想光源設定値算出部205における、仮想光源設定値算出処理の詳細について、図5及び図6を参照して説明する。図5は、仮想光源設定値算出処理に係る一連の動作を示すフローチャートを、図6は、被写体、環境光、及び仮想光源の位置関係を、それぞれ示している。対象領域を図4に示したような人物の顔領域とする場合を例に説明する。
図6は、被写体を上方から俯瞰した状態(撮影画像の水平方向と奥行き方向で構成される平面)を模式的に表している。601の斜線部は、被写体(人物の顔の領域)を表したものであり、簡単のために平面で表している。法線ベクトル602は、被写体601の向きを表す代表的な法線ベクトルである。代表的な法線ベクトルの算出方法は、公知の様々な方法を用いることができる。例えば、仮想光源設定値算出部205は、不図示の測距手段により被写体までの距離を測定し、測定した結果に基づいて推定された被写体の立体形状から法線ベクトルを算出する。あるいは、仮想光源設定値算出部205は、顔検出部113により検出された顔、及び器官(例えば目や鼻など)に基づいて顔の向きを推定し、当該推定した結果に基づき法線ベクトルを推定することもできる。
また、仮想光源設定値算出部205は、被写体の代表的な法線ベクトルを算出する。被写体の法線ベクトルの代表的な方向は、算出した法線ベクトルを被写体領域全体について平均化することで算出することができる。あるいは、リライティングの対象とする被写体領域の中心位置における法線ベクトルを、代表的な法線ベクトルとして算出してもよい。
図6では、環境光603は、代表的な法線ベクトル602と被写体601とが交わる座標(画素)610を、陰影状態検出部204が推定した方向から照射している。また、仮想光源604a、604bは、仮想的な点光源を設置する位置の例を表している。図6の例では、法線ベクトル602と仮想光源の照射方向とのなす角を角度α、法線ベクトルと環境光の照射方向とのなす角を角度βで表す。なお、角度αは、仮想光源604aの座標と法線ベクトルの始点(法線ベクトルと被写体領域との交点)とを結ぶ直線と、法線ベクトルとのなす角とも言える。同様に、角度βは、環境光の座標と法線ベクトルの始点(法線ベクトルと被写体領域との交点)とを結ぶ直線と、法線ベクトルとのなす角とも言える。なお、法線ベクトルと仮想光源、環境光の照射方向とのなす角は、法線ベクトルを基準にして反時計回りに正の符号、時計回りに負の符号を取るものとする。
さらに、図5を参照して、仮想光源設定値算出処理の一連の動作を説明する。なお、仮想光源設定値算出部205が仮想光源の位置(光を照射する方向)を算出して、算出した仮想光源の位置(方向)を仮想光源の設定値とする一連の動作について説明する。
S501では、仮想光源設定値算出部205は、目標コントラスト値をシステム制御部50から取得する。目標コントラスト値は、リライティング処理において目標とする被写体のコントラストを示す情報である。この目標コントラスト値は、予め実験等により定められ、不揮発性メモリ121に記憶させたものであってよい。
S502では、仮想光源設定値算出部205は、環境光によって生じた被写体コントラスト値を、陰影状態検出部204から取得する。S503では、仮想光源設定値算出部205は、目標コントラスト値と被写体コントラスト値とを比較する。仮想光源設定値算出部205は、被写体コントラスト値が目標コントラスト値より高い場合、S504に処理を進め、そうでない場合はS505に処理を進める。なお、被写体コントラスト値が目標コントラスト値より高い場合は、環境光によって被写体領域に暗い陰影が生じ、コントラストが高くなっている場合に対応する。
S504では、仮想光源設定値算出部205は、被写体に対して仮想光源と環境光とが異なる側から照射されるように、仮想光源の位置(方向)を算出する。例えば、図6の例では、仮想光源設定値算出部205は、仮想光源の位置(方向)を、環境光603と異なる側である仮想光源604bの位置に設定する。この場合、角度αの符号が角度βの符号とは逆となり、角度αの絶対値が例えば45°となるように仮想光源の照射方向を設定する。
なお、角度αの絶対値を45°としたのは、一般的な被写体に対して法線ベクトル602に対して45°の角度から光を照射すると適切なコントラストとなる場合が多いことによる。ただし、これは単なる一例であり、被写体の陰の部分を仮想光によって明るく補正し、被写体領域のコントラストを下げることができれば、この角度に限らない。
また、図6の例において、仮想光源設定値算出部205は、仮想光源604bの照射方向を、環境光603と法線ベクトル602とを挟んで対称となる方向(−β)としてもよい。さらに他の例として、仮想光源604bの照射方向を、45°±10°、好ましくは45°±5°としてもよい。あるいは、仮想光源設定値算出部205は、このステップで設定した仮想光源を適用した際の被写体コントラスト値を算出して、その値が最も目標コントラスト値に近づくよう照射方向を繰り返し演算によって決定してもよい。仮想光源設定値算出部205は、仮想光源の位置(方向)を算出するとS508に処理を進める。
S505では、仮想光源設定値算出部205は、更に、被写体コントラスト値が所定の閾値以下であるか否かを判定する。これは、被写体コントラスト値が低い場合には、環境光が被写体に対してほぼ一様に照射されて、環境光による陰影がほとんど生じていない場合(被写体の立体感が失われている)を区別して処理するためである。仮想光源設定値算出部205は、所定の閾値以下である場合はS506へ処理を進め、そうでない場合はS507へ処理を進める。
S506では、仮想光源設定値算出部205は、仮想光の照射方向が法線ベクトル602となす角αとの絶対値が45°となるように、仮想光の位置(方向)を算出する。角度αの符号は正負何れでも構わないので、角度αは、45°と−45°の2通りの値となる。例えば被写体の輝度の平均値が所定の値以下であって暗い場合、仮想光源の照射方向を環境光と同じ方向にしてもよい。なお、角度αの絶対値を45°としたのは好ましい値の一例であり、被写体領域の一部を仮想光源によって明るく補正し、被写体領域のコントラストを上げることができれば、これに限定されない。仮想光源設定値算出部205は、仮想光の位置(方向)を算出すると、S508へ処理を進める。
一方、S507へ進む場合、環境光によってある程度被写体に陰影が生じているが、目標のコントラストは得られていない状況である。このような場合、仮想光源を用いたリライティング処理により被写体に自然な陰影を付加することにより、被写体の立体感を高めることができる。S507では、仮想光源設定値算出部205は、仮想光の照射方向と法線ベクトル602とのなす角αの符号が、環境光603の照射方向と法線ベクトル602とのなす角βと同一符号、かつ角度αの絶対値が45°となるように仮想光源の位置(方向)を設定する。これは、図6の例では、仮想光源604aの位置(方向)に対応する。
なお、角度αの絶対値を45°としたのは、好ましい値の一例であり、被写体領域の一部を仮想光源によって明るく補正し、被写体領域のコントラストを上げることができれば、これに限定されない。例えば、角度αの絶対値を角度βの絶対値を基準として算出してもよい。具体的には、角度αの絶対値が、|β|±15°、好ましくは|β|±10°、さらに好ましくは|β|±5°としてもよい。あるいは、α=β、すなわち、環境光と同じ照射方向を仮想光の照射方向として決定してもよい。仮想光源設定値算出部205は、仮想光の位置(方向)を算出すると、S508に処理を進める。
S508では、仮想光源設定値算出部205は、算出した仮想光源の位置を、仮想光源の設定値として仮想光源設定部206へ出力する。なお、上述したように、複数の被写体が検出されている場合には、仮想光源設定値算出部205は、それぞれの被写体に対して、その陰影状態に応じた仮想光源の設定値を算出して、仮想光源設定部206へ出力する。
(仮想光源設定部206における仮想光源設定処理)
次に、仮想光源設定部206における、仮想光源の設定値の決定方法について説明する。上述したように、仮想光源設定値算出部205は、複数の被写体のそれぞれに対して適した仮想光源の設定値を算出する。一方、仮想光源設定部206は、算出された各被写体に対する仮想光源の設定値を比較して、複数の被写体に対して全体として適した(すなわち全体最適な)仮想光源の設定値を算出する。
図7は、複数の補正対象に対して、上述した仮想光源設定値算出部205がそれぞれの仮想光源の設定値(仮想光源を配置する方向)を算出した例を示している。被写体701aと被写体701bは、図6と同様、対象領域となる被写体を上方から俯瞰した状態で示されており、簡単のために被写体表面は平面とする。図7では、被写体701aと被写体701bの顔の向きが互いに異なっている。法線ベクトル702aと法線ベクトルbはそれぞれ被写体701aと被写体701bに対する代表的な法線ベクトルを表す。仮想光源の方向703aと仮想光源の方向703bとは、それぞれ被写体701a、701bに対して、仮想光源設定値算出部205が算出した仮想光源の設定値(仮想光源を配置する方向)を表す。仮想光源設定部206は、仮想光源の方向703aと仮想光源の方向703bとを比較して、被写体701aと被写体701bの両方に対して適切な仮想光源の設定値を算出する。具体的には、仮想光源の方向703aと仮想光源の方向703bの交点である点704の位置に仮想光源を配置するように、仮想光源の設定値(仮想光源の設定位置)を決定する。
なお、図7の例では、2つの被写体が存在する場合を例に説明したが、補正対象領域の個数は、これに限定されない。3つ以上の被写体が存在する場合でも、それぞれの被写体領域に対して算出された仮想光源の設定値(仮想光源を配置する方向)を比較して、重複する位置を選べばよい。仮想光源設定部206は、仮想光源の設定値の決定が完了すると、当該仮想光源の設定値を仮想光源信号付加部207へ出力する。
(仮想光源信号付加部207におけるリライティング処理)
次に、仮想光源信号付加部207における、仮想光源を用いたリライティング処理について説明する。本実施形態では、仮想光源信号付加部207は、仮想光源によって照射された処理対象画素の出力RGB値(Rout、Gout、Bout)を、下記の式に従って算出する。
Rout = [Rt + A × cos(α) ×(1/D^2)× Rv]/M
Gout = [Gt + A × cos(α) ×(1/D^2)× Gv]/M
Bout = [Bt + A × cos(α) ×(1/D^2)× Bv]/M
ただし、(Rt、Gt、Bt)は処理対象の画素値、Aは仮想光源の強度を表す所定の定数、Dは仮想光源と被写体までの距離、(Rv、Gv、Bv)は光源反射色を表す。Mは、リライティング後の出力RGB値を正規化するための予め設定された定数である。角度αは、仮想光源設定部206が決定した仮想光源の方向と、対象画素における被写体の法線ベクトルのなす角である。
なお、角度αの算出においては、仮想光源信号付加部207は、リライティング処理の対象である画素のそれぞれに対して被写体の法線ベクトルを別途取得して、角度αを算出してもよい。あるいは、仮想光源信号付加部207は、図4に示したように被写体領域を複数のブロックに分割し、ブロックごとに算出した法線ベクトルに基づいて、角度αを算出してもよい。更に、人物の顔のように被写体の3次元形状が予め定められる場合、仮想光源信号付加部207は、対象画素の顔領域内における位置に基づいて法線ベクトルの方向を推定し、角度αを算出してもよい。
なお、上述した式における光源反射色(Rv、Gv、Bv)は、仮想光源が被写体表面で反射したときの反射色を、予め設定された仮想光源色と被写体色とによって推定したものである。また、仮想光源の強度Aは、例えば被写体コントラスト値と目標コントラストの差分に応じて決定すればよい。
仮想光源信号付加部207は、上記式に従って算出した画素値を反映した画像をガンマ処理部208に出力する。画像処理部105は、ガンマ処理部208を経たリライティング処理後の画像を画像メモリ106に出力する。
以上説明したように、本実施形態では、複数の被写体領域を対象としたリライティング処理において、それぞれの被写体の陰影状態に基づいて算出した仮想光源の方向を比較して、仮想光源の方向の共通する位置(交点)に最終的な仮想光源を設定した。このようにすることにより、複数の被写体を含んだ画像に対してリライティング処理を行う場合であっても、各被写体の陰影の状態が不自然になることがなく、所望の陰影状態となり、好ましい画像を得ることができる。換言すれば、複数の被写体が存在する画像に対して仮想光源を設定する場合に、被写体間の陰影状態の不自然さを低減することができる。
なお、本実施形態では、仮想光源設定算出処理において、仮想光源設定値算出部205がコントラストの情報を用いて仮想光源の配置を算出する例を説明した。しかし、仮想光源設定算出処理においてコントラストの情報は必須ではなく、被写体の陰影の状態を表す情報であれば、どのようなものを用いてもよい。例えば、仮想光源設定値算出部205は、環境光によって生じる被写体の陰の領域を検出し、検出した領域の境界の特性(輪郭)を被写体の陰影の状態に変えて用いてもよい。具体的には、仮想光源設定値算出部205が被写体の陰領域の境界について明るさの勾配を算出し、勾配が所定の目標より高い(低い)場合は、環境光と反対側(低い場合は同じ側)に仮想光源を配置する。このようにすることで、被写体の陰がくっきりとしている場合には、被写体の陰領域の境界を目立たなくし、被写体の陰がぼんやりとしている場合には、被写体の陰を強調するリライティング処理を行うことができる。
また、仮想光源設定値算出部205は、仮想光源設定算出処理においてコントラストの情報を用いる代わりに、被写体領域内の陰領域の面積を算出し、算出した面積を被写体の陰影の状態を表す情報として用いてもよい。具体的には、仮想光源設定値算出部205は、被写体領域内の陰領域が被写体領域内に占める割合を算出し、当該割合が所定の目標より高い(低い)場合に環境光と反対側(同じ側)に仮想光源を配置する。このようにすることで、被写体領域内の陰の面積が多い場合には陰の面積を減らし、被写体領域内の陰の面積が少ない場合には、当該影の面積を増やすリライティング処理を行うことができる。
さらに、仮想光源設定値算出部205は、仮想光源設定算出処理においてコントラストの情報を用いる代わりに、被写体領域の輝度ヒストグラムを算出し、当該ヒストグラムの度数分布の偏りに応じて、仮想光源の位置を決定してもよい。具体的には、仮想光源設定値算出部205は、所定の閾値を下回る輝度値の度数を数え上げ、当該度数が所定の目標より高い(低い)場合には、環境光と反対側(同じ側)に仮想光源を配置する。
また、本実施形態では、仮想光源設定算出処理において、仮想光源設定値算出部205が被写体のコントラストと目標とするコントラストとの比較によって、仮想光源の位置を算出する例を説明した。しかし、被写体の陰影情報に基づいて仮想光源の位置を算出する方法であれば、どのような方法を用いてもよい。例えば、仮想光源設定値算出部205は、検出した被写体のコントラスト値が、所定の閾値範囲内にあるか否かに応じて、仮想光源の配置を算出してもよい。具体的には、被写体のコントラスト値が所定の閾値以上(未満)である場合、仮想光源を環境光と反対側(同じ側)に配置する。このようにすることで、特定の目標とするコントラスト値を定めない場合であっても、適切にリライティング処理を適用することができる。または、被写体のコントラスト値と、目標とするコントラスト値の差分が、所定の閾値未満である場合には、リライティング処理を行わないよう制御してもよい。
更に、本実施形態では、仮想光源設定算出処理において、仮想光源設定値算出部205が、被写体の陰影状態に基づいて仮想光源の設定値(位置)を算出する例を説明したが、仮想光源の設定値を算出する方法はこれに限定されない。それぞれの被写体に対して適切な仮想光源の設定値を算出する方法であれば、どのような方法を用いても構わない。例えば、被写体が人物の顔である場合、人物の顔の向きに基づいて、仮想光源の設定値(位置)を決めてもよい。人物の顔にリライティング処理を行う場合、仮想光源からの光が被写体人物の顔を照らす領域が多いほど、全体的に明るい画像となり、好ましい印象を与える。このため、仮想光源設定値算出部205は、被写体である人物の顔が向かって右側(左側)を向いている場合には、仮想光源が人物に対して、向かって左側(右側)から照射するように、仮想光源の位置を決定する。
また、本実施形態では、仮想光源設定値算出部205が仮想光源の位置を算出する際に、被写体の法線ベクトルを基準として、法線ベクトルと仮想光源の方向とのなす角を設定する例を説明した。しかし、仮想光源の位置の算出方法はこれに限定されない。例えば、被写体に対して上下左右のどちらから照射するかを表す情報を、仮想光源の設定値として算出してもよい。
更に、本実施形態では、仮想光源設定部206が仮想光源の設定値として仮想光源を配置する位置を決定する例を説明した。しかし、仮想光源の設定値はこれに限定されない。すなわち、複数算出された仮想光源の設定値同士を比較することによって、実際に用いる仮想光源の設定値を決定する方法であれば、どのようなものを用いても構わない。例えば、仮想光源設定部206は仮想光源の強度を仮想光源の設定値として決定してもよい。この場合、仮想光源設定部206は、それぞれの被写体の陰影状態に基づいて算出された、適した仮想光源の強度を用いて、その平均値を用いるようにすればよい。あるいは、仮想光源設定部206はそれぞれの被写体に対して算出された仮想光源の強度のうち、最も小さい値を用いるようにしてもよい。このようにすることで、一部の被写体が過剰に補正され、明るくなり過ぎることを防ぐことができる。
また、仮想光源設定値算出部205及び仮想光源設定部206は、仮想光源の設定値として、仮想光源から照射する仮想的な光源の色、拡散特性を用いてもよい。仮想光源の位置を算出した場合と同様に、被写体の色や陰影の情報を検出してそれぞれの被写体に適した仮想光源の色や拡散特性を算出し、算出した値を比較して、複数の被写体に対して全体として適した仮想光源の設定値を決定すればよい。
更に、仮想光源設定値算出部205及び仮想光源設定部206は、仮想光源の設定値として、仮想光源の個数や形状を用いてもよい。例えば、被写体領域の陰影の状態や被写体領域の大きさに基づいて、それぞれの被写体に対して適した仮想光源の大きさを算出し、算出した値を比較して、複数の被写体に対して全体として適した仮想光源の設定値を決定すればよい。
(実施形態2)
次に実施形態2について説明する。実施形態1では、複数の被写体のそれぞれの陰影の状態に応じてそれぞれ最適な仮想光源の設定値を算出し、各仮想光源の設定値を比較して実際に使用する仮想光源の設定値を決定した。これに対し、実施形態2では、複数の被写体のそれぞれの陰影の状態に応じてそれぞれ最適な仮想光源の設定値の範囲を算出し、各仮想光源の設定値の範囲を比較して実際に使用する仮想光源の設定値を決定する点が異なる。本実施形態のデジタルカメラ100及び画像処理部105の構成は実施形態1と同一である。このため、同一の構成及びステップについては同一の符号を付して重複する説明は省略し、相違点について重点的に説明する。
(仮想光源設定値算出部205における仮想光源設定値算出処理)
本実施形態に係る仮想光源設定値算出処理の一連の動作について、図8を参照して説明する。
まず、S501〜S503の処理を実施形態1と同様に行って目標コントラスト値と被写体コントラスト値を比較する。
S801では、被写体領域のコントラストが目標コントラストより高いため、仮想光源設定値算出部205は、リライティングによってコントラストが低くなるように仮想光源の設定値の範囲を算出する。仮想光源設定値算出部205は、仮想光源が環境光の反対側(角度αの符号と角度βの符号とが逆)となるように、法線ベクトルと仮想光源の照射方向とのなす角αの符号を定め、角度αの絶対値の範囲を30°〜60°とする。仮想光源を配置する位置(方向)がここで設定される範囲内であれば、仮想光源からの光は被写体の陰の部分の中心にあたることになる。このように仮想光源を算出することにより、被写体領域のコントラストが下がって目標とするコントラストに近づく。仮想光源設定値算出部205は、算出した仮想光源の設定値の範囲についての情報を、仮想光源設定部206へ出力する。
なお、上述の例において角度αの絶対値の範囲を30°〜60°としたのは、好ましい値の範囲の一例を示したものである。被写体領域の陰の部分を仮想光源によって明るく補正して、被写体領域のコントラストを下げることができれば、この範囲でなくてもよい。仮想光源設定値算出部205は、例えば、角度αの絶対値の範囲を角度βの絶対値を基準として、(β+5)°〜(β−5)°のように定めてもよい。また、角度αの絶対値の範囲は定めずに、角度αの符号のみ定めるようにしてもよい(但し、この場合は角度αの範囲を90°に設定していることと等価である)。すなわち、被写体に対して法線ベクトルの右側から照射するのか左側から照射するのかを定めるようにする。さらに、仮想光源を照射した後の被写体の陰影状態を推定することにより、仮想光源の位置の最適値を算出し、その前後±10°の範囲を、仮想光源の設定値の範囲として定めるようにしてもよい。
S505では、仮想光源設定値算出部205は、被写体コントラスト値が所定の閾値以下であるか否かを判定する。所定の閾値以下である場合はS802へ処理を進め、そうでない場合はS803へ処理を進める。
S802では、環境光による陰影がほとんど生じていないため、仮想光源設定値算出部205は、リライティングによってコントラストが高くなるように仮想光源の設定値の範囲を算出する。仮想光源設定値算出部205は、角度αの絶対値を30°〜60°の範囲に定める。本ステップでは、角度αの符号は正負何れに設定されてもよく、角度αの設定値の範囲は30°〜60°又は−30°〜−60°となる。仮想光源の位置(照射する方向)がここで定めた値の範囲内であれば、リライティングによって被写体領域のコントラストは高くなる。このように仮想光源の位置を設定することにより、被写体領域のコントラストを目標とするコントラストに近づけることができる。仮想光源設定値算出部205は、算出した仮想光源の設定値の範囲についての情報を、仮想光源設定部206へ出力する。
S803では、環境光によってある程度被写体に陰影が生じているが、目標のコントラストは得られていないため、仮想光源設定値算出部205は、リライティングによってコントラストが高くなるように仮想光源の設定値の範囲を算出する。仮想光源設定値算出部205は、仮想光源が環境光と同じ側(角度αの符号と角度βの符号が同一)となるように法線ベクトルと仮想光源の照射方向とのなす角αの符号を定め、角度αの絶対値の範囲を30°〜60°と定める。ここで定めた値の範囲内であれば、仮想光源からの光は被写体領域の中で明るい領域を中心に照射されて、その領域がより明るくなる。このように仮想光源を設定すれば、被写体領域のコントラストを高めることができる。仮想光源設定値算出部205は、算出した仮想光源の設定値の範囲についての情報を、仮想光源設定部206へ出力する。
S804では、算出した仮想光源の位置の範囲を、仮想光源の設定値として仮想光源設定部206へ出力する。なお、上述したように、複数の被写体が検出されている場合には、仮想光源設定値算出部205は、それぞれの被写体に対して、その陰影状態に応じた仮想光源の設定値の範囲を算出して、仮想光源設定部206へ出力する。
(仮想光源設定部206における仮想光源設定処理)
次に、仮想光源設定部206における、実際に使用する仮想光源の設定値を設定する処理について説明する。仮想光源設定部206は、仮想光源設定値算出部205からそれぞれの被写体に対する仮想光源の設定値の範囲を入力して、各仮想光源の設定値の範囲を比較し、複数の被写体に対して全体として適した仮想光源の設定値を設定する。
仮想光源設定部206が仮想光源の設定を決定する処理を、図9を参照して説明する。図9(a)及び図9(b)は、仮想光源設定値算出部205が複数の被写体のそれぞれに対して算出した仮想光源の設定値の範囲と、仮想光源設定部206が決定する仮想光源の設定値の例を示している。
図9(a)において、被写体901a、被写体901b、及び被写体901cは、図6と同様、それぞれの対象領域となる被写体を上方から俯瞰した状態を示されており、簡単のために被写体の表面は平面とする。法線ベクトル902a、法線ベクトル902b、及び法線ベクトル902cは、それぞれ、被写体901a〜901cに対する代表的な法線ベクトルを表す。903a、903b、903cは、それぞれ、被写体901a〜901cに対して、仮想光源設定値算出部205が算出した仮想光源の設定値(位置)の範囲を表す。904aは、被写体901aに対する仮想光源の設定値の範囲903aの中央値を表す。領域905は、仮想光源の設定値の範囲903a〜903cの全てに重複して含まれる領域(共通する設定範囲)を表し、点906及び点907は、仮想光源設定部206が決定する、実際に使用する仮想光源の設定値(位置)の例を表す。
仮想光源設定部206は、仮想光源の設定値の範囲903a〜903cを比較して、被写体901a〜901cの被写体に対して全体として適した仮想光源の設定値(位置)を決定する。具体的には、仮想光源設定部206は、仮想光源の設定値の範囲903a〜903cの全てに重複して含まれる領域905内に仮想光源を配置する。領域905内であれば、何れの位置を仮想光源の位置として決定してもよいが、仮想光源設定部206は、例えば、領域905の重心の位置にあたる点906を仮想光源の位置として決定する。
なお、仮想光源設定部206は、被写体の優先順位の情報を更に用いて、仮想光源の位置を決定してもよい。例えば、被写体901a〜901cのうち被写体901aの優先順位が最も高い場合(例えば主要被写体等)、領域905内において、被写体901aに対して最適な位置(線分904a上の位置。例えば点907)を仮想光源の位置として決定してもよい。
更に、点光源以外の形状の仮想光源に対しても、同様にして設定値を設定することができる。図9(a)に示す仮想光源908は、平行光を照射する仮想光源を模式的に示しており、909は仮想光源908から照射される平行光の方向を示している。仮想光源設定部206は、平行光の方向909が仮想光源の設定値の範囲903a〜903cのいずれの範囲にも含まれる方向を、仮想光源908の設定値(方向)として決定する。
なお、図9(a)では、仮想光源の設定値の範囲903a〜903cの全てに含まれる領域が存在する場合を前提とした例について説明した。しかし、図9(b)に示すように仮想光源の設定値の範囲の全てに含まれる領域が存在しない場合も考えられる。図9(b)における仮想光源の設定値の範囲903aが存在するように、全ての被写体に対して適した設定値を定めることができない場合、仮想光源設定部206は、少なくとも複数の被写体に対して適した設定値となる値を、仮想光源の設定値として決定する。例えば、図9(a)と同様、点906や点907の位置を仮想光源の設定値(位置)として決定すれば、被写体901aと被写体901bの2つの被写体に対して適した仮想光源の設定となる。
また、仮想光源設定部206は、仮想光源を配置する個数を変更してもよい。例えば、図9(b)の場合であれば、点906の位置と点912の位置の2箇所に仮想光源を配置すると、被写体901a〜901cの全ての被写体に対して適したリライティング処理を行うことができる。
上述した動作を完了すると、仮想光源設定部206は、決定した仮想光源の設定値を、仮想光源信号付加部207へ出力する。そして、仮想光源信号付加部207は、実施形態1と同様にして仮想光源を用いたリライティング処理を行った画像を出力する。
以上説明したように、本実施形態では、複数の被写体領域を対象にリライティング補正を行う際に、それぞれの被写体の陰影状態に基づいて算出した仮想光源の設定値の範囲を比較し、複数の被写体に対して全体として適した仮想光源の設定値を設定するようにした。これにより、複数の被写体が含まれる画像に対してリライティング補正を行う場合に、それぞれの被写体の陰影の状態を所望の状態に補正し、好ましい画像を得ることが可能となる。換言すれば、複数の被写体が存在する画像に対して仮想光源を設定する場合に、被写体間の陰影状態の不自然さを低減することができる。
なお、本実施形態では、仮想光源設定値算出部205が仮想光源を配置する位置を仮想光源の設定値として算出する例について説明した。しかし、仮想光源の設定値はこれに限定されない。例えば、仮想光源の強度を算出するようにしてもよい。この場合、仮想光源設定値算出部205は、それぞれの被写体の陰影の状態に基づいて適した仮想光源の強度の範囲を算出する。その後、仮想光源設定部206は、複数の被写体のそれぞれに対して算出された仮想光源の強度の範囲を比較して、重複して範囲に含まれる値を仮想光源の強度として決定すればよい。
また、本実施形態では、仮想光源設定部206は、仮想光源の設定値を決定する際に全ての被写体に対して適した設定値が存在しない場合、少なくとも複数の被写体に対して適した仮想光源の設定値を設定する例を説明した。しかし、仮想光源の設定値の決定方法はこれに限定されない。例えば、被写体に対する優先順位の情報を更に用いて、優先順位の高い複数の被写体に対して適した仮想光源の設定値を、優先して設定してもよい。このようにすることにより、優先順位の高い複数の被写体には適切なリライティング処理がなされて、画像内の主要な陰影状態の不自然さを低下させることができる。
さらに、本実施形態では、被写体の優先順位を決定する際に、最も主要な被写体を高い優先順位に決定する例を説明した。しかし、被写体に対する優先順位の決定方法はこれに限定されない。例えば、仮想光源設定部206は、画像中に占める面積が大きい被写体や、被写体の陰影状態と目標とする陰影状態との差分が大きい被写体(すなわちリライティングによる補正の必要性が高い被写体)を優先順位の高い被写体としてもよい。
(その他の実施形態)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。