(57)【特許請求の範囲】
【請求項１】
画像に対して仮想光源を設定し、前記仮想光源に応じて前記画像における被写体の陰影状態が変更されるように画像処理を行う画像処理装置において、
前記画像に含まれる被写体ごとに、それぞれの陰影状態に応じて第１仮想光源を設定する範囲を決定する第１決定手段と、
前記被写体ごとに決定された前記第１仮想光源の設定範囲に基づいて、第２仮想光源の設定位置を決定する第２決定手段と、
前記第２決定手段によって決定された前記第２仮想光源に応じて、前記画像に含まれる各被写体の陰影状態が変更されるように画像処理を行う処理手段と、
を有することを特徴とする画像処理装置。
【請求項２】
前記第２決定手段は、複数の前記第１仮想光源の設定範囲が共通する範囲で前記第２仮想光源の設定位置を決定する、
ことを特徴とする請求項１に記載の画像処理装置。
【請求項３】
各被写体の陰影状態は、各被写体に照射される環境光によって生じた陰影の状態であり、
前記第１決定手段は、前記被写体ごとに、それぞれの陰影状態が予め定めた陰影の状態より強い場合、前記環境光によって生じた陰影を弱めるように前記第１仮想光源の設定範囲を決定し、それぞれの陰影状態が予め定めた陰影の状態より弱い場合、前記環境光によって生じた陰影を強調するように前記第１仮想光源の設定範囲を決定する、
ことを特徴とする請求項１又は２に記載の画像処理装置。
【請求項４】
前記画像に含まれる複数の被写体のいずれかを優先させる優先順を決定する優先手段を更に備え、
前記第２決定手段は、複数の前記第１仮想光源の設定範囲が共通する範囲のうち、前記優先順の高い被写体に対して決定された前記第１仮想光源の設定範囲を優先して、前記第２仮想光源の設定位置を決定する、
ことを特徴とする請求項１から３のいずれか１項に記載の画像処理装置。
【請求項５】
各被写体の陰影状態を、各被写体の領域における輝度の分布に基づいて検出する検出手段を更に備える、
ことを特徴とする請求項１から４のいずれか１項に記載の画像処理装置。
【請求項６】
前記検出手段は、各被写体の領域におけるコントラスト、陰影が生じている領域の輪郭、及び陰影が生じている領域の面積の少なくとも１つに基づいて各被写体の陰影状態を検出する、
ことを特徴とする請求項５に記載の画像処理装置。
【請求項７】
前記第１決定手段は、前記第１仮想光源の設定範囲を、仮想光源の位置、強度、色、及び拡散特性の少なくともいずれかに更に基づいて決定する、
ことを特徴とする請求項１から６のいずれか１項に記載の画像処理装置。
【請求項８】
前記画像に対する顔検出を行って、各被写体の領域を検出する顔検出手段を更に備える、
ことを特徴とする請求項１から７のいずれか１項に記載の画像処理装置。
【請求項９】
撮像した画像を出力する撮像素子と、
請求項１から８のいずれか１項に記載の画像処理装置と、を備える、
ことを特徴とする撮像装置。
【請求項１０】
画像に対して仮想光源を設定し、前記仮想光源に応じて前記画像における被写体の陰影状態が変更されるように画像処理を行う画像処理装置の制御方法において、
第１決定手段が、前記画像に含まれる被写体ごとに、それぞれの陰影状態に応じて第１仮想光源を設定する範囲を決定する第１決定工程と、
第２決定手段が、前記被写体ごとに決定された前記第１仮想光源の設定範囲に基づいて、第２仮想光源の設定位置を決定する第２決定工程と、
処理手段が、前記第２決定工程において決定された前記第２仮想光源に応じて、前記画像に含まれる各被写体の陰影状態が変更されるように画像処理を行う処理工程と、
を有することを特徴とする画像処理装置の制御方法。
【請求項１１】
コンピュータに、請求項１０に記載の画像処理装置の制御方法の各工程を実行させるためのプログラム。
【請求項１２】
撮像した画像を出力する撮像素子を備えると共に、前記画像に対して仮想光源を設定し、前記仮想光源に応じて前記画像における被写体の陰影状態が変更されるように画像処理を行う撮像装置の制御方法において、
撮像素子が、撮像した前記画像を出力する出力工程と、
第１決定手段が、前記画像に含まれる被写体ごとに、それぞれの陰影状態に応じて第１仮想光源を設定する範囲を決定する第１決定工程と、
第２決定手段が、前記被写体ごとに決定された前記第１仮想光源の設定範囲に基づいて、第２仮想光源の設定位置を決定する第２決定工程と、
処理手段が、前記第２決定工程において決定された前記第２仮想光源に応じて、前記画像に含まれる各被写体の陰影状態が変更されるように画像処理を行う処理工程と、
を有することを特徴とする撮像装置の制御方法。
【請求項１３】
コンピュータに、請求項１２に記載の撮像装置の制御方法の各工程を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理装置、撮像装置およびこれらの制御方法ならびにプログラムに関する。
【背景技術】
【０００２】
従来、画像処理によって、画像中の被写体に対して仮想的な光源（仮想光源）からの光を照射し、被写体に生じる陰影の状態を変更する（リライティングともいう）技術が知られている。このリライティング技術により、環境光によって生じた被写体の陰影を撮影後に補正することができる。
【０００３】
リライティングを行う際には、どのような位置に仮想光源に設定するかが問題となる。特許文献１は、顔の明度分布により環境光の向きを特定し、被写体に対して環境光と仮想光源とを逆方向に配置するように仮想光源の位置を決定することにより、被写体に生じる陰影を低減させるリライティング技術を開示している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−１３５９９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、被写体が複数存在し、これらの被写体の３次元形状や向きが異なる場合、それぞれの被写体の形状や向きに応じて最適な仮想光源をそれぞれ設定することが望ましい。しかしながら、複数の被写体のそれぞれに対して独立した別個の仮想光源を設定すると、被写体間の陰影の状態が不自然になる場合がある。また、特許文献１では、複数の被写体が存在する場合に仮想光源を設定することを考慮していない。
【０００６】
本発明は、上述の従来技術の問題点に鑑みてなされたものである。すなわち、複数の被写体が存在する画像に対して仮想光源を設定する場合に、被写体間の陰影状態の不自然さを低減することが可能な画像処理装置、撮像装置およびこれらの制御方法ならびにプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
この課題を解決するため、例えば本発明の画像処理装置は以下の構成を備える。すなわち、画像に対して仮想光源を設定し、仮想光源に応じて画像における被写体の陰影状態が変更されるように画像処理を行う画像処理装置において、画像に含まれる被写体ごとに、それぞれの陰影状態に応じて第１仮想光源を設定する範囲を決定する第１決定手段と、被写体ごとに決定された第１仮想光源の設定範囲に基づいて、第２仮想光源の設定位置を決定する第２決定手段と、第２決定手段によって決定された第２仮想光源に応じて、画像に含まれる各被写体の陰影状態が変更されるように画像処理を行う処理手段と、を有することを特徴とする。
【発明の効果】
【０００８】
本発明によれば、複数の被写体が存在する画像に対して仮想光源を設定する場合に、被写体間の陰影状態の不自然さを低減することが可能になる。
【図面の簡単な説明】
【０００９】
【図１】本発明の実施形態に係る画像処理装置の一例としてのデジタルカメラの機能構成例を示すブロック図
【図２】実施形態１に係る画像処理部の機能構成例を示すブロック図
【図３】実施形態１に係るリライティング処理の一連の動作を示すフローチャート
【図４】実施形態１に係る被写体の例を示す図
【図５】実施形態１に係る仮想光源設定値算出部の処理の一連の動作を示すフローチャート
【図６】実施形態１に係る仮想光源と被写体の位置関係の一例を示す図
【図７】実施形態１に係る仮想光源の位置を決定する方法の一例を示す図
【図８】実施形態２に係る仮想光源設定値算出部の処理の一連の動作を示すフローチャート
【図９】実施形態２に係る仮想光源の位置を決定する方法の一例を示す図
【発明を実施するための形態】
【００１０】
（実施形態１）
以下、本発明の例示的な実施形態について、図面を参照して詳細に説明する。なお、以下では画像処理装置の一例として、撮像可能な任意のデジタルカメラに本発明を適用した例を説明する。しかし、本発明は、デジタルカメラに限らず、撮像された画像を取得してリライティング処理を行うことが可能な任意の機器にも適用可能である。これらの機器には、例えば携帯電話機、ゲーム機、タブレット端末、パーソナルコンピュータ、時計型や眼鏡型の情報端末、監視システム、医療機器などが含まれてよい。
【００１１】
（デジタルカメラ１００の構成）
図１は、本実施形態の画像処理装置の一例としてデジタルカメラ１００の機能構成例を示すブロック図である。なお、図１に示す機能ブロックの１つ以上は、ＡＳＩＣやプログラマブルロジックアレイ（ＰＬＡ）などのハードウェアによって実現されてもよいし、ＣＰＵやＭＰＵ等のプログラマブルプロセッサがソフトウェアを実行することによって実現されてもよい。また、ソフトウェアとハードウェアの組み合わせによって実現されてもよい。従って、以下の説明において、異なる機能ブロックが動作主体として記載されている場合であっても、同じハードウェアが主体として実現されうる。
【００１２】
レンズ群１０１は、フォーカスレンズやズームレンズを含むレンズ群である。シャッター１０２は絞り機能を備え、レンズ群１０１と撮像部１０３との間に設けられている。撮像部１０３は、レンズ群１０１によって撮像面に形成される光学像を２次元状に配列された画素で光電変換し、画素単位の電気信号に出力する撮像素子を有する。撮像素子は、ＣＣＤイメージセンサやＣＭＯＳイメージセンサであってよい。Ａ／Ｄ変換部１０４は、撮像部１０３が出力するアナログ信号をデジタル信号（画像データ）に変換する。
【００１３】
画像処理部１０５は、Ａ／Ｄ変換部１０４から出力される画像データに対し、後述する各種画像処理を行う。画像処理部１０５はまた、撮影された画像に対して後述するリライティング処理を行う。画像メモリ１０６は揮発性の半導体メモリを含み、Ａ／Ｄ変換部１０４や画像処理部１０５から出力された画像データを一時的に記憶する。
【００１４】
メモリ制御部１０７は、画像処理部１０５や顔検出部１１３による画像メモリ１０６の読み書きを制御する。Ｄ／Ａ変換部１０８は、メモリ制御部１０７から読み出したデジタルをアナログ信号に変換する回路又はモジュールを含む。表示部１０９は、ＬＣＤや有機ＥＬディスプレイ等の表示装置を含み、デジタルカメラ１００を操作するための各種ＧＵＩ、ライブビュー画像、又は記録媒体１１２から読み出して再生される画像などを表示する。
【００１５】
コーデック部１１０は、画像メモリ１０６に記憶されている画像データを記録媒体に記録するために予め定められた方法で符号化したり、画像ファイルに含まれる符号化画像データを例えば表示のために復号したりする。インタフェース（Ｉ／Ｆ）１１１は、例えば半導体メモリカードやカード型ハードディスクなどの着脱可能な記録媒体１１２を挿抜する機構を備え、デジタルカメラ１００と機械的および電気的に接続する。
【００１６】
システム制御部５０は、例えばＣＰＵやＭＰＵなどのプロセッサを含み、不揮発性メモリ１２１等に記録されたプログラムをシステムメモリ１２２に展開、実行して必要なブロックや回路を制御することにより、デジタルカメラ１００の機能を実現する。
【００１７】
顔検出部１１３は、撮影された画像に含まれる顔領域を検出し、検出された顔領域のそれぞれについて、位置、大きさ、信頼度などの顔情報を求める。なお、顔検出部１１３はニューラルネットワークに代表される学習を用いた手法や、目、鼻、口などの特徴部位を、画像領域からテンプレートマッチングにより探索し類似度が高い領域を顔とみなす手法など、任意の方法を用いることができる。
【００１８】
操作部１２０は、ユーザがデジタルカメラ１００に対する各種の指示を入力するためのボタンやスイッチなどの入力デバイスを含む。表示部１０９がタッチディスプレイである場合、タッチパネルは操作部１２０に含まれる。また、音声入力や視線入力など、非接触で指示を入力するタイプの入力デバイスが操作部１２０に含まれてもよい。
【００１９】
不揮発性メモリ１２１は、電気的に消去・記録可能な、例えばＥＥＰＲＯＭ等であってよい。不揮発性メモリ１２１は、例えば各種の設定値、ＧＵＩデータを記録するほか、システム制御部５０がＭＰＵやＣＰＵである場合、システム制御部５０が実行するためのプログラムを記録する。システムメモリ１２２は、システム制御部５０の動作用の定数や変数、不揮発性メモリ１２１から読み出したプログラム等を展開したデータを一時的に記憶する。
【００２０】
（デジタルカメラ１００における撮影時の基本動作）
次に、上記のように構成されたデジタルカメラ１００における被写体撮影時の基本動作について説明する。
【００２１】
撮像部１０３は、シャッター１０２が開いている所定の時間内にレンズ群１０１が撮像面に形成する被写体像を撮像素子によって光電変換し、電荷を蓄積する。そして、撮像部１０３は蓄積された電荷を所定のタイミングで読み出してアナログ画像信号としてＡ／Ｄ変換部１０４へ出力する。Ａ／Ｄ変換部１０４は、撮像部１０３から出力されるアナログ画像信号をデジタル画像信号（画像データ）に変換し画像処理部１０５に出力する。
【００２２】
画像処理部１０５は、Ａ／Ｄ変換部１０４からの画像データ、又は、メモリ制御部１０７からの画像データに対し、例えば、同時化処理（色補間処理或いはデモザイク処理）、ガンマ（γ）補正などの画像処理を行う。また、画像処理部１０５では、撮影で得られた画像データを用いて輝度やコントラストなどに関する所定の演算処理を行い、得られた演算結果に基づいてシステム制御部５０が焦点調節や露光制御を行う。焦点検出や露出制御に顔検出部１１３の検出結果を考慮してもよい。このように、本実施形態のデジタルカメラ１００では、ＴＴＬ（スルー・ザ・レンズ）方式のＡＦ（オートフォーカス）処理、ＡＥ（自動露出）処理を行う。画像処理部１０５ではさらに、撮影で得られた画像データを用いたオートホワイトバランス（ＡＷＢ）調整も行う。
【００２３】
画像処理部１０５から出力された画像データは、メモリ制御部１０７を介して画像メモリ１０６に書き込まれる。画像メモリ１０６は、撮像部１０３から出力された画像データや、表示部１０９に表示するための画像データを格納する。また、Ｄ／Ａ変換部１０８は、画像メモリ１０６に格納されている画像表示用のデータをアナログ信号に変換して表示部１０９に供給する。表示部１０９は、ＬＣＤ等の表示装置に、Ｄ／Ａ変換部１０８からのアナログ信号に応じた表示を行う。
【００２４】
コーデック部１１０は、例えばＪＰＥＧやＭＰＥＧなどの規格に準拠した処理を行って、画像メモリ１０６に記録された画像データを符号化する。システム制御部５０は、符号化された画像データに対して予め定められたヘッダなどを付与して画像ファイルを形成し、Ｉ／Ｆ１１１を介して記録媒体１１２に記録する。
【００２５】
なお、デジタルカメラ１００は、撮影スタンバイ状態において動画撮影を行い、撮影された動画を表示部１０９に表示し続けることにより表示部１０９を電子ビューファインダ（ＥＶＦ）として機能させることができる。この場合、システム制御部５０は、シャッター１０２を開いた状態に制御し、撮像部１０３のいわゆる電子シャッターを用いて例えば３０フレーム／秒の撮影を行うように撮像部１０３を制御する。
【００２６】
また、システム制御部５０は、操作部１２０に含まれるシャッターボタンが半押しされた場合に上述のＡＦ、ＡＥ制御を実行し、更にシャッターボタンが全押しされた場合、本撮影による記録用の静止画撮影を実行して画像データを記録媒体１１２に記録する。さらに、動画撮影ボタンなどにより動画撮影が指示された場合、記録媒体１１２への動画記録を開始する。
【００２７】
（画像処理部１０５の構成）
次に、画像処理部１０５におけるリライティング処理に係る機能構成例を、図２を参照して説明する。なお、図２に示す機能ブロックの１つ以上は、ＡＳＩＣや、ＦＰＧＡやＰＬＡなどのプログラマブルロジックアレイ（ＰＬＡ）などのハードウェアによって実現されてもよい。また、図１と同様、ＣＰＵやＭＰＵ等のプログラマブルプロセッサがソフトウェアを実行することによって実現されてもよく、ソフトウェアとハードウェアの組み合わせによって実現されてもよい。
【００２８】
なお、リライティング処理は、リライティング処理の実行が指定された状態で撮影された画像や、メニュー画面等からリライティング処理の実施が指示された、例えば記録媒体１１２に記録済の画像に対して実施することができる。なお、リライティング処理において撮影時の情報が必要な場合、不揮発性メモリ１２１またはシステムメモリ１２２から読み出したり、画像ファイルのヘッダなどから取得したりするものとする。
【００２９】
図２において、２０１は画像信号生成部、２０２はＷＢ増幅部、２０３は対象領域抽出部、２０４は陰影状態検出部、２０５は仮想光源設定値算出部、２０６は仮想光源設定部、２０７は仮想光源信号付加部、２０８はガンマ処理部である。各部の具体的な機能や動作はリライティング処理の動作において適宜後述する。
【００３０】
（画像処理部１０５におけるリライティング処理の一連の動作）
次に、図３を参照して、画像処理部１０５におけるリライティング処理の一連の動作を説明する。なお、本処理は、操作部１２０に含まれるメニュー画面等からリライティング処理の実施が指示された場合に本処理が開始される。本処理に先だって、画像処理部１０５は、入力された画像データに対して画像信号生成部２０１による同時化処理を行い、さらにＷＢ増幅部２０２によってＲＧＢの各色信号にゲインをかけてホワイトバランスを調整する。
【００３１】
Ｓ３０１では、対象領域抽出部２０３は、リライティング処理において処理の対象領域を抽出する。具体的に、対象領域抽出部２０３は、ＷＢ増幅部２０２から入力された画像データのうち、リライティング処理において対象となる被写体領域の画像データのみを抽出する。例えば、対象領域抽出部２０３は、顔検出部１１３によって検出された被写体人物の顔領域を示す情報を別途取得し、リライティング処理の対象となる領域（単に対象領域ともいう）を特定する。対象領域抽出部２０３は、特定した対象領域に基づいて顔領域の画像データを抽出する。対象領域抽出部２０３は、撮影画像に複数の被写体が含まれる場合、同様の処理を繰り返して複数の被写体領域の画像データをそれぞれ抽出する。
【００３２】
Ｓ３０２では、対象領域抽出部２０３は、抽出した対象領域が画像中に複数存在するか否かを判定する。対象領域抽出部２０３は、対象領域が複数存在していると判定した場合にはＳ３０３に処理を進め、一方、対象領域が１つであると判定した場合にはＳ３０６に処理を進める。
【００３３】
Ｓ３０３では、陰影状態検出部２０４は、対象領域のそれぞれにおける被写体の陰影の状態を検出する。なお、陰影状態検出部２０４による、被写体の陰影の状態を検出する処理（陰影状態検出処理）の詳細は後述する。陰影状態検出部２０４は、陰影状態検出処理によって検出した被写体の陰影の状態（詳細は後述するが対象領域のコントラストの状態）を、被写体陰影情報として仮想光源設定値算出部２０５へ出力する。また、陰影状態検出部２０４は、陰影状態検出処理の一部として環境光の位置を推定する。推定された環境光の位置情報は、被写体陰影情報と共に仮想光源設定値算出部２０５に出力される。なお、Ｓ３０３及びＳ３０４における処理は、対象領域が複数検出されている場合であるため、複数の対象領域のそれぞれに対して実行される。
【００３４】
Ｓ３０４では、仮想光源設定値算出部２０５は、入力された被写体陰影情報に基づいて被写体ごとの仮想光源の設定値を算出する。なお、仮想光源設定値算出部２０５による仮想光源の設定値を算出する処理（仮想光源設定値算出処理）の詳細は後述する。仮想光源設定値算出部２０５は、算出した被写体ごとの仮想光源の設定値を、仮想光源設定部２０６へ出力する。
【００３５】
Ｓ３０５では、仮想光源設定部２０６は、対象領域のそれぞれに対して算出された被写体ごとの仮想光源の設定値を比較し、その比較結果に基づいて、本リライティング処理で実際に用いる仮想光源の設定値を決定する。なお、仮想光源設定部２０６による、実際に用いる仮想光源の設定値を決定する処理（仮想光源決定処理）の詳細は後述する。
【００３６】
一方、Ｓ３０６では、陰影状態検出部２０４は、対象領域における被写体の陰影の状態を検出し、被写体の陰影の状態を表す情報（すなわち被写体陰影情報）を仮想光源設定値算出部２０５へ出力する。Ｓ３０７では、仮想光源設定値算出部２０５は、入力された被写体陰影情報に基づき、仮想光源の設定値を算出する。なお、Ｓ３０６、Ｓ３０７における処理は、補正対象領域が１つ検出された場合であるため、Ｓ３０５のように複数の被写体領域のそれぞれに対して算出された設定値を比較する処理は必要ない。このため、仮想光源設定値算出部２０５は、Ｓ３０７で算出した仮想光源の設定値を、仮想光源信号付加部２０７へ出力する。
【００３７】
Ｓ３０８では、仮想光源信号付加部２０７は、算出された仮想光源の設定値に基づいて、仮想光源が配置された場合に被写体上に現れる陰影（例えば補正値）を生成し、ＷＢ増幅部２０２から入力された画像データに対して付加する。
【００３８】
（陰影状態検出部２０４における陰影状態検出処理）
更に、陰影状態検出部２０４による、陰影状態検出処理の詳細について、図４を参照して説明する。まず、陰影状態検出部２０４は、対象領域抽出部２０３から入力された対象領域の画像データに基づいて、被写体の明るさを算出する。例えば、図４に示すように、対象領域４０１を複数のブロック（例えば、８×８＝６４個）に分割して、分割したブロックごとに輝度の平均値を算出する。次に、陰影状態検出部２０４は、算出した輝度の平均値に基づいて、被写体のコントラスト値を算出する。具体的には、分割した複数のブロックのうち、最も平均輝度の高いブロック（４０２）と最も平均輝度の低いブロック（４０３）を選択し、その平均輝度の比を算出して、コントラスト値として用いる。ただし、輝度信号に加えて、色相や彩度などの色信号をブロック毎に算出して、被写体色が近いブロック間でコントラスト値を算出する。陰影状態検出部２０４は、算出したコントラスト値（すなわち被写体陰影情報）を仮想光源設定値算出部２０５へ出力する。
【００３９】
また、陰影状態検出部２０４は、環境光の位置の推定を行う。環境光の位置の推定は、公知の種々の方法を用いることができる。例えば、被写体の中で最も明るい領域を検出したうえで検出した領域の法線ベクトルを取得し、得られたベクトルが指す方向を環境光の位置する方向として定めてもよい。また、人物の顔領域を対象とするため、鼻などの所定の器官を検出し、検出された器官の陰の位置を検出することにより、環境光の方向を推定するようにしてもよい。陰影状態検出部２０４は、推定した環境光の位置情報を、仮想光源設定値算出部２０５へ出力する。
【００４０】
（仮想光源設定値算出部２０５における仮想光源設定値算出処理）
次に、仮想光源設定値算出部２０５における、仮想光源設定値算出処理の詳細について、図５及び図６を参照して説明する。図５は、仮想光源設定値算出処理に係る一連の動作を示すフローチャートを、図６は、被写体、環境光、及び仮想光源の位置関係を、それぞれ示している。対象領域を図４に示したような人物の顔領域とする場合を例に説明する。
【００４１】
図６は、被写体を上方から俯瞰した状態（撮影画像の水平方向と奥行き方向で構成される平面）を模式的に表している。６０１の斜線部は、被写体（人物の顔の領域）を表したものであり、簡単のために平面で表している。法線ベクトル６０２は、被写体６０１の向きを表す代表的な法線ベクトルである。代表的な法線ベクトルの算出方法は、公知の様々な方法を用いることができる。例えば、仮想光源設定値算出部２０５は、不図示の測距手段により被写体までの距離を測定し、測定した結果に基づいて推定された被写体の立体形状から法線ベクトルを算出する。あるいは、仮想光源設定値算出部２０５は、顔検出部１１３により検出された顔、及び器官（例えば目や鼻など）に基づいて顔の向きを推定し、当該推定した結果に基づき法線ベクトルを推定することもできる。
【００４２】
また、仮想光源設定値算出部２０５は、被写体の代表的な法線ベクトルを算出する。被写体の法線ベクトルの代表的な方向は、算出した法線ベクトルを被写体領域全体について平均化することで算出することができる。あるいは、リライティングの対象とする被写体領域の中心位置における法線ベクトルを、代表的な法線ベクトルとして算出してもよい。
【００４３】
図６では、環境光６０３は、代表的な法線ベクトル６０２と被写体６０１とが交わる座標（画素）６１０を、陰影状態検出部２０４が推定した方向から照射している。また、仮想光源６０４ａ、６０４ｂは、仮想的な点光源を設置する位置の例を表している。図６の例では、法線ベクトル６０２と仮想光源の照射方向とのなす角を角度α、法線ベクトルと環境光の照射方向とのなす角を角度βで表す。なお、角度αは、仮想光源６０４ａの座標と法線ベクトルの始点（法線ベクトルと被写体領域との交点）とを結ぶ直線と、法線ベクトルとのなす角とも言える。同様に、角度βは、環境光の座標と法線ベクトルの始点（法線ベクトルと被写体領域との交点）とを結ぶ直線と、法線ベクトルとのなす角とも言える。なお、法線ベクトルと仮想光源、環境光の照射方向とのなす角は、法線ベクトルを基準にして反時計回りに正の符号、時計回りに負の符号を取るものとする。
【００４４】
さらに、図５を参照して、仮想光源設定値算出処理の一連の動作を説明する。なお、仮想光源設定値算出部２０５が仮想光源の位置(光を照射する方向)を算出して、算出した仮想光源の位置（方向）を仮想光源の設定値とする一連の動作について説明する。
【００４５】
Ｓ５０１では、仮想光源設定値算出部２０５は、目標コントラスト値をシステム制御部５０から取得する。目標コントラスト値は、リライティング処理において目標とする被写体のコントラストを示す情報である。この目標コントラスト値は、予め実験等により定められ、不揮発性メモリ１２１に記憶させたものであってよい。
【００４６】
Ｓ５０２では、仮想光源設定値算出部２０５は、環境光によって生じた被写体コントラスト値を、陰影状態検出部２０４から取得する。Ｓ５０３では、仮想光源設定値算出部２０５は、目標コントラスト値と被写体コントラスト値とを比較する。仮想光源設定値算出部２０５は、被写体コントラスト値が目標コントラスト値より高い場合、Ｓ５０４に処理を進め、そうでない場合はＳ５０５に処理を進める。なお、被写体コントラスト値が目標コントラスト値より高い場合は、環境光によって被写体領域に暗い陰影が生じ、コントラストが高くなっている場合に対応する。
【００４７】
Ｓ５０４では、仮想光源設定値算出部２０５は、被写体に対して仮想光源と環境光とが異なる側から照射されるように、仮想光源の位置(方向)を算出する。例えば、図６の例では、仮想光源設定値算出部２０５は、仮想光源の位置(方向)を、環境光６０３と異なる側である仮想光源６０４ｂの位置に設定する。この場合、角度αの符号が角度βの符号とは逆となり、角度αの絶対値が例えば４５°となるように仮想光源の照射方向を設定する。
【００４８】
なお、角度αの絶対値を４５°としたのは、一般的な被写体に対して法線ベクトル６０２に対して４５°の角度から光を照射すると適切なコントラストとなる場合が多いことによる。ただし、これは単なる一例であり、被写体の陰の部分を仮想光によって明るく補正し、被写体領域のコントラストを下げることができれば、この角度に限らない。
【００４９】
また、図６の例において、仮想光源設定値算出部２０５は、仮想光源６０４ｂの照射方向を、環境光６０３と法線ベクトル６０２とを挟んで対称となる方向（−β）としてもよい。さらに他の例として、仮想光源６０４ｂの照射方向を、４５°±１０°、好ましくは４５°±５°としてもよい。あるいは、仮想光源設定値算出部２０５は、このステップで設定した仮想光源を適用した際の被写体コントラスト値を算出して、その値が最も目標コントラスト値に近づくよう照射方向を繰り返し演算によって決定してもよい。仮想光源設定値算出部２０５は、仮想光源の位置(方向)を算出するとＳ５０８に処理を進める。
【００５０】
Ｓ５０５では、仮想光源設定値算出部２０５は、更に、被写体コントラスト値が所定の閾値以下であるか否かを判定する。これは、被写体コントラスト値が低い場合には、環境光が被写体に対してほぼ一様に照射されて、環境光による陰影がほとんど生じていない場合（被写体の立体感が失われている）を区別して処理するためである。仮想光源設定値算出部２０５は、所定の閾値以下である場合はＳ５０６へ処理を進め、そうでない場合はＳ５０７へ処理を進める。
【００５１】
Ｓ５０６では、仮想光源設定値算出部２０５は、仮想光の照射方向が法線ベクトル６０２となす角αとの絶対値が４５°となるように、仮想光の位置（方向）を算出する。角度αの符号は正負何れでも構わないので、角度αは、４５°と−４５°の２通りの値となる。例えば被写体の輝度の平均値が所定の値以下であって暗い場合、仮想光源の照射方向を環境光と同じ方向にしてもよい。なお、角度αの絶対値を４５°としたのは好ましい値の一例であり、被写体領域の一部を仮想光源によって明るく補正し、被写体領域のコントラストを上げることができれば、これに限定されない。仮想光源設定値算出部２０５は、仮想光の位置（方向）を算出すると、Ｓ５０８へ処理を進める。
【００５２】
一方、Ｓ５０７へ進む場合、環境光によってある程度被写体に陰影が生じているが、目標のコントラストは得られていない状況である。このような場合、仮想光源を用いたリライティング処理により被写体に自然な陰影を付加することにより、被写体の立体感を高めることができる。Ｓ５０７では、仮想光源設定値算出部２０５は、仮想光の照射方向と法線ベクトル６０２とのなす角αの符号が、環境光６０３の照射方向と法線ベクトル６０２とのなす角βと同一符号、かつ角度αの絶対値が４５°となるように仮想光源の位置（方向）を設定する。これは、図６の例では、仮想光源６０４ａの位置（方向）に対応する。
【００５３】
なお、角度αの絶対値を４５°としたのは、好ましい値の一例であり、被写体領域の一部を仮想光源によって明るく補正し、被写体領域のコントラストを上げることができれば、これに限定されない。例えば、角度αの絶対値を角度βの絶対値を基準として算出してもよい。具体的には、角度αの絶対値が、｜β｜±１５°、好ましくは｜β｜±１０°、さらに好ましくは｜β｜±５°としてもよい。あるいは、α＝β、すなわち、環境光と同じ照射方向を仮想光の照射方向として決定してもよい。仮想光源設定値算出部２０５は、仮想光の位置（方向）を算出すると、Ｓ５０８に処理を進める。
【００５４】
Ｓ５０８では、仮想光源設定値算出部２０５は、算出した仮想光源の位置を、仮想光源の設定値として仮想光源設定部２０６へ出力する。なお、上述したように、複数の被写体が検出されている場合には、仮想光源設定値算出部２０５は、それぞれの被写体に対して、その陰影状態に応じた仮想光源の設定値を算出して、仮想光源設定部２０６へ出力する。
【００５５】
（仮想光源設定部２０６における仮想光源設定処理）
次に、仮想光源設定部２０６における、仮想光源の設定値の決定方法について説明する。上述したように、仮想光源設定値算出部２０５は、複数の被写体のそれぞれに対して適した仮想光源の設定値を算出する。一方、仮想光源設定部２０６は、算出された各被写体に対する仮想光源の設定値を比較して、複数の被写体に対して全体として適した（すなわち全体最適な）仮想光源の設定値を算出する。
【００５６】
図７は、複数の補正対象に対して、上述した仮想光源設定値算出部２０５がそれぞれの仮想光源の設定値（仮想光源を配置する方向）を算出した例を示している。被写体７０１ａと被写体７０１ｂは、図６と同様、対象領域となる被写体を上方から俯瞰した状態で示されており、簡単のために被写体表面は平面とする。図７では、被写体７０１ａと被写体７０１ｂの顔の向きが互いに異なっている。法線ベクトル７０２ａと法線ベクトルｂはそれぞれ被写体７０１ａと被写体７０１ｂに対する代表的な法線ベクトルを表す。仮想光源の方向７０３ａと仮想光源の方向７０３ｂとは、それぞれ被写体７０１ａ、７０１ｂに対して、仮想光源設定値算出部２０５が算出した仮想光源の設定値(仮想光源を配置する方向)を表す。仮想光源設定部２０６は、仮想光源の方向７０３ａと仮想光源の方向７０３ｂとを比較して、被写体７０１ａと被写体７０１ｂの両方に対して適切な仮想光源の設定値を算出する。具体的には、仮想光源の方向７０３ａと仮想光源の方向７０３ｂの交点である点７０４の位置に仮想光源を配置するように、仮想光源の設定値(仮想光源の設定位置)を決定する。
【００５７】
なお、図７の例では、２つの被写体が存在する場合を例に説明したが、補正対象領域の個数は、これに限定されない。３つ以上の被写体が存在する場合でも、それぞれの被写体領域に対して算出された仮想光源の設定値(仮想光源を配置する方向)を比較して、重複する位置を選べばよい。仮想光源設定部２０６は、仮想光源の設定値の決定が完了すると、当該仮想光源の設定値を仮想光源信号付加部２０７へ出力する。
【００５８】
（仮想光源信号付加部２０７におけるリライティング処理）
次に、仮想光源信号付加部２０７における、仮想光源を用いたリライティング処理について説明する。本実施形態では、仮想光源信号付加部２０７は、仮想光源によって照射された処理対象画素の出力ＲＧＢ値（Ｒｏｕｔ、Ｇｏｕｔ、Ｂｏｕｔ）を、下記の式に従って算出する。
【００５９】
Ｒｏｕｔ  ＝  ［Ｒｔ  ＋  Ａ ×  cos(α)  ×（１／Ｄ＾２）×  Ｒｖ］／Ｍ 
Ｇｏｕｔ  ＝  ［Ｇｔ  ＋  Ａ ×  cos(α)  ×（１／Ｄ＾２）×  Ｇｖ］／Ｍ
Ｂｏｕｔ  ＝  ［Ｂｔ  ＋  Ａ ×  cos(α)  ×（１／Ｄ＾２）×  Ｂｖ］／Ｍ
ただし、（Ｒｔ、Ｇｔ、Ｂｔ）は処理対象の画素値、Ａは仮想光源の強度を表す所定の定数、Ｄは仮想光源と被写体までの距離、（Ｒｖ、Ｇｖ、Ｂｖ）は光源反射色を表す。Ｍは、リライティング後の出力ＲＧＢ値を正規化するための予め設定された定数である。角度αは、仮想光源設定部２０６が決定した仮想光源の方向と、対象画素における被写体の法線ベクトルのなす角である。
【００６０】
なお、角度αの算出においては、仮想光源信号付加部２０７は、リライティング処理の対象である画素のそれぞれに対して被写体の法線ベクトルを別途取得して、角度αを算出してもよい。あるいは、仮想光源信号付加部２０７は、図４に示したように被写体領域を複数のブロックに分割し、ブロックごとに算出した法線ベクトルに基づいて、角度αを算出してもよい。更に、人物の顔のように被写体の３次元形状が予め定められる場合、仮想光源信号付加部２０７は、対象画素の顔領域内における位置に基づいて法線ベクトルの方向を推定し、角度αを算出してもよい。
【００６１】
なお、上述した式における光源反射色（Ｒｖ、Ｇｖ、Ｂｖ）は、仮想光源が被写体表面で反射したときの反射色を、予め設定された仮想光源色と被写体色とによって推定したものである。また、仮想光源の強度Ａは、例えば被写体コントラスト値と目標コントラストの差分に応じて決定すればよい。
【００６２】
仮想光源信号付加部２０７は、上記式に従って算出した画素値を反映した画像をガンマ処理部２０８に出力する。画像処理部１０５は、ガンマ処理部２０８を経たリライティング処理後の画像を画像メモリ１０６に出力する。
【００６３】
以上説明したように、本実施形態では、複数の被写体領域を対象としたリライティング処理において、それぞれの被写体の陰影状態に基づいて算出した仮想光源の方向を比較して、仮想光源の方向の共通する位置（交点）に最終的な仮想光源を設定した。このようにすることにより、複数の被写体を含んだ画像に対してリライティング処理を行う場合であっても、各被写体の陰影の状態が不自然になることがなく、所望の陰影状態となり、好ましい画像を得ることができる。換言すれば、複数の被写体が存在する画像に対して仮想光源を設定する場合に、被写体間の陰影状態の不自然さを低減することができる。
【００６４】
なお、本実施形態では、仮想光源設定算出処理において、仮想光源設定値算出部２０５がコントラストの情報を用いて仮想光源の配置を算出する例を説明した。しかし、仮想光源設定算出処理においてコントラストの情報は必須ではなく、被写体の陰影の状態を表す情報であれば、どのようなものを用いてもよい。例えば、仮想光源設定値算出部２０５は、環境光によって生じる被写体の陰の領域を検出し、検出した領域の境界の特性（輪郭）を被写体の陰影の状態に変えて用いてもよい。具体的には、仮想光源設定値算出部２０５が被写体の陰領域の境界について明るさの勾配を算出し、勾配が所定の目標より高い（低い）場合は、環境光と反対側（低い場合は同じ側）に仮想光源を配置する。このようにすることで、被写体の陰がくっきりとしている場合には、被写体の陰領域の境界を目立たなくし、被写体の陰がぼんやりとしている場合には、被写体の陰を強調するリライティング処理を行うことができる。
【００６５】
また、仮想光源設定値算出部２０５は、仮想光源設定算出処理においてコントラストの情報を用いる代わりに、被写体領域内の陰領域の面積を算出し、算出した面積を被写体の陰影の状態を表す情報として用いてもよい。具体的には、仮想光源設定値算出部２０５は、被写体領域内の陰領域が被写体領域内に占める割合を算出し、当該割合が所定の目標より高い（低い）場合に環境光と反対側（同じ側）に仮想光源を配置する。このようにすることで、被写体領域内の陰の面積が多い場合には陰の面積を減らし、被写体領域内の陰の面積が少ない場合には、当該影の面積を増やすリライティング処理を行うことができる。
【００６６】
さらに、仮想光源設定値算出部２０５は、仮想光源設定算出処理においてコントラストの情報を用いる代わりに、被写体領域の輝度ヒストグラムを算出し、当該ヒストグラムの度数分布の偏りに応じて、仮想光源の位置を決定してもよい。具体的には、仮想光源設定値算出部２０５は、所定の閾値を下回る輝度値の度数を数え上げ、当該度数が所定の目標より高い（低い）場合には、環境光と反対側（同じ側）に仮想光源を配置する。
【００６７】
また、本実施形態では、仮想光源設定算出処理において、仮想光源設定値算出部２０５が被写体のコントラストと目標とするコントラストとの比較によって、仮想光源の位置を算出する例を説明した。しかし、被写体の陰影情報に基づいて仮想光源の位置を算出する方法であれば、どのような方法を用いてもよい。例えば、仮想光源設定値算出部２０５は、検出した被写体のコントラスト値が、所定の閾値範囲内にあるか否かに応じて、仮想光源の配置を算出してもよい。具体的には、被写体のコントラスト値が所定の閾値以上（未満）である場合、仮想光源を環境光と反対側（同じ側）に配置する。このようにすることで、特定の目標とするコントラスト値を定めない場合であっても、適切にリライティング処理を適用することができる。または、被写体のコントラスト値と、目標とするコントラスト値の差分が、所定の閾値未満である場合には、リライティング処理を行わないよう制御してもよい。
【００６８】
更に、本実施形態では、仮想光源設定算出処理において、仮想光源設定値算出部２０５が、被写体の陰影状態に基づいて仮想光源の設定値（位置）を算出する例を説明したが、仮想光源の設定値を算出する方法はこれに限定されない。それぞれの被写体に対して適切な仮想光源の設定値を算出する方法であれば、どのような方法を用いても構わない。例えば、被写体が人物の顔である場合、人物の顔の向きに基づいて、仮想光源の設定値(位置)を決めてもよい。人物の顔にリライティング処理を行う場合、仮想光源からの光が被写体人物の顔を照らす領域が多いほど、全体的に明るい画像となり、好ましい印象を与える。このため、仮想光源設定値算出部２０５は、被写体である人物の顔が向かって右側(左側)を向いている場合には、仮想光源が人物に対して、向かって左側(右側)から照射するように、仮想光源の位置を決定する。
【００６９】
また、本実施形態では、仮想光源設定値算出部２０５が仮想光源の位置を算出する際に、被写体の法線ベクトルを基準として、法線ベクトルと仮想光源の方向とのなす角を設定する例を説明した。しかし、仮想光源の位置の算出方法はこれに限定されない。例えば、被写体に対して上下左右のどちらから照射するかを表す情報を、仮想光源の設定値として算出してもよい。
【００７０】
更に、本実施形態では、仮想光源設定部２０６が仮想光源の設定値として仮想光源を配置する位置を決定する例を説明した。しかし、仮想光源の設定値はこれに限定されない。すなわち、複数算出された仮想光源の設定値同士を比較することによって、実際に用いる仮想光源の設定値を決定する方法であれば、どのようなものを用いても構わない。例えば、仮想光源設定部２０６は仮想光源の強度を仮想光源の設定値として決定してもよい。この場合、仮想光源設定部２０６は、それぞれの被写体の陰影状態に基づいて算出された、適した仮想光源の強度を用いて、その平均値を用いるようにすればよい。あるいは、仮想光源設定部２０６はそれぞれの被写体に対して算出された仮想光源の強度のうち、最も小さい値を用いるようにしてもよい。このようにすることで、一部の被写体が過剰に補正され、明るくなり過ぎることを防ぐことができる。
【００７１】
また、仮想光源設定値算出部２０５及び仮想光源設定部２０６は、仮想光源の設定値として、仮想光源から照射する仮想的な光源の色、拡散特性を用いてもよい。仮想光源の位置を算出した場合と同様に、被写体の色や陰影の情報を検出してそれぞれの被写体に適した仮想光源の色や拡散特性を算出し、算出した値を比較して、複数の被写体に対して全体として適した仮想光源の設定値を決定すればよい。
【００７２】
更に、仮想光源設定値算出部２０５及び仮想光源設定部２０６は、仮想光源の設定値として、仮想光源の個数や形状を用いてもよい。例えば、被写体領域の陰影の状態や被写体領域の大きさに基づいて、それぞれの被写体に対して適した仮想光源の大きさを算出し、算出した値を比較して、複数の被写体に対して全体として適した仮想光源の設定値を決定すればよい。
【００７３】
（実施形態２）
次に実施形態２について説明する。実施形態１では、複数の被写体のそれぞれの陰影の状態に応じてそれぞれ最適な仮想光源の設定値を算出し、各仮想光源の設定値を比較して実際に使用する仮想光源の設定値を決定した。これに対し、実施形態２では、複数の被写体のそれぞれの陰影の状態に応じてそれぞれ最適な仮想光源の設定値の範囲を算出し、各仮想光源の設定値の範囲を比較して実際に使用する仮想光源の設定値を決定する点が異なる。本実施形態のデジタルカメラ１００及び画像処理部１０５の構成は実施形態１と同一である。このため、同一の構成及びステップについては同一の符号を付して重複する説明は省略し、相違点について重点的に説明する。
【００７４】
（仮想光源設定値算出部２０５における仮想光源設定値算出処理）
本実施形態に係る仮想光源設定値算出処理の一連の動作について、図８を参照して説明する。
【００７５】
まず、Ｓ５０１〜Ｓ５０３の処理を実施形態１と同様に行って目標コントラスト値と被写体コントラスト値を比較する。
【００７６】
Ｓ８０１では、被写体領域のコントラストが目標コントラストより高いため、仮想光源設定値算出部２０５は、リライティングによってコントラストが低くなるように仮想光源の設定値の範囲を算出する。仮想光源設定値算出部２０５は、仮想光源が環境光の反対側（角度αの符号と角度βの符号とが逆）となるように、法線ベクトルと仮想光源の照射方向とのなす角αの符号を定め、角度αの絶対値の範囲を３０°〜６０°とする。仮想光源を配置する位置(方向)がここで設定される範囲内であれば、仮想光源からの光は被写体の陰の部分の中心にあたることになる。このように仮想光源を算出することにより、被写体領域のコントラストが下がって目標とするコントラストに近づく。仮想光源設定値算出部２０５は、算出した仮想光源の設定値の範囲についての情報を、仮想光源設定部２０６へ出力する。
【００７７】
なお、上述の例において角度αの絶対値の範囲を３０°〜６０°としたのは、好ましい値の範囲の一例を示したものである。被写体領域の陰の部分を仮想光源によって明るく補正して、被写体領域のコントラストを下げることができれば、この範囲でなくてもよい。仮想光源設定値算出部２０５は、例えば、角度αの絶対値の範囲を角度βの絶対値を基準として、（β＋５）°〜（β−５）°のように定めてもよい。また、角度αの絶対値の範囲は定めずに、角度αの符号のみ定めるようにしてもよい（但し、この場合は角度αの範囲を９０°に設定していることと等価である）。すなわち、被写体に対して法線ベクトルの右側から照射するのか左側から照射するのかを定めるようにする。さらに、仮想光源を照射した後の被写体の陰影状態を推定することにより、仮想光源の位置の最適値を算出し、その前後±１０°の範囲を、仮想光源の設定値の範囲として定めるようにしてもよい。
【００７８】
Ｓ５０５では、仮想光源設定値算出部２０５は、被写体コントラスト値が所定の閾値以下であるか否かを判定する。所定の閾値以下である場合はＳ８０２へ処理を進め、そうでない場合はＳ８０３へ処理を進める。
【００７９】
Ｓ８０２では、環境光による陰影がほとんど生じていないため、仮想光源設定値算出部２０５は、リライティングによってコントラストが高くなるように仮想光源の設定値の範囲を算出する。仮想光源設定値算出部２０５は、角度αの絶対値を３０°〜６０°の範囲に定める。本ステップでは、角度αの符号は正負何れに設定されてもよく、角度αの設定値の範囲は３０°〜６０°又は−３０°〜−６０°となる。仮想光源の位置(照射する方向)がここで定めた値の範囲内であれば、リライティングによって被写体領域のコントラストは高くなる。このように仮想光源の位置を設定することにより、被写体領域のコントラストを目標とするコントラストに近づけることができる。仮想光源設定値算出部２０５は、算出した仮想光源の設定値の範囲についての情報を、仮想光源設定部２０６へ出力する。
【００８０】
Ｓ８０３では、環境光によってある程度被写体に陰影が生じているが、目標のコントラストは得られていないため、仮想光源設定値算出部２０５は、リライティングによってコントラストが高くなるように仮想光源の設定値の範囲を算出する。仮想光源設定値算出部２０５は、仮想光源が環境光と同じ側（角度αの符号と角度βの符号が同一）となるように法線ベクトルと仮想光源の照射方向とのなす角αの符号を定め、角度αの絶対値の範囲を３０°〜６０°と定める。ここで定めた値の範囲内であれば、仮想光源からの光は被写体領域の中で明るい領域を中心に照射されて、その領域がより明るくなる。このように仮想光源を設定すれば、被写体領域のコントラストを高めることができる。仮想光源設定値算出部２０５は、算出した仮想光源の設定値の範囲についての情報を、仮想光源設定部２０６へ出力する。
【００８１】
Ｓ８０４では、算出した仮想光源の位置の範囲を、仮想光源の設定値として仮想光源設定部２０６へ出力する。なお、上述したように、複数の被写体が検出されている場合には、仮想光源設定値算出部２０５は、それぞれの被写体に対して、その陰影状態に応じた仮想光源の設定値の範囲を算出して、仮想光源設定部２０６へ出力する。
【００８２】
（仮想光源設定部２０６における仮想光源設定処理）
次に、仮想光源設定部２０６における、実際に使用する仮想光源の設定値を設定する処理について説明する。仮想光源設定部２０６は、仮想光源設定値算出部２０５からそれぞれの被写体に対する仮想光源の設定値の範囲を入力して、各仮想光源の設定値の範囲を比較し、複数の被写体に対して全体として適した仮想光源の設定値を設定する。
【００８３】
仮想光源設定部２０６が仮想光源の設定を決定する処理を、図９を参照して説明する。図９（ａ）及び図９（ｂ）は、仮想光源設定値算出部２０５が複数の被写体のそれぞれに対して算出した仮想光源の設定値の範囲と、仮想光源設定部２０６が決定する仮想光源の設定値の例を示している。
【００８４】
図９（ａ）において、被写体９０１ａ、被写体９０１ｂ、及び被写体９０１ｃは、図６と同様、それぞれの対象領域となる被写体を上方から俯瞰した状態を示されており、簡単のために被写体の表面は平面とする。法線ベクトル９０２ａ、法線ベクトル９０２ｂ、及び法線ベクトル９０２ｃは、それぞれ、被写体９０１ａ〜９０１ｃに対する代表的な法線ベクトルを表す。９０３ａ、９０３ｂ、９０３ｃは、それぞれ、被写体９０１ａ〜９０１ｃに対して、仮想光源設定値算出部２０５が算出した仮想光源の設定値(位置)の範囲を表す。９０４ａは、被写体９０１ａに対する仮想光源の設定値の範囲９０３ａの中央値を表す。領域９０５は、仮想光源の設定値の範囲９０３ａ〜９０３ｃの全てに重複して含まれる領域（共通する設定範囲）を表し、点９０６及び点９０７は、仮想光源設定部２０６が決定する、実際に使用する仮想光源の設定値(位置)の例を表す。
【００８５】
仮想光源設定部２０６は、仮想光源の設定値の範囲９０３ａ〜９０３ｃを比較して、被写体９０１ａ〜９０１ｃの被写体に対して全体として適した仮想光源の設定値(位置)を決定する。具体的には、仮想光源設定部２０６は、仮想光源の設定値の範囲９０３ａ〜９０３ｃの全てに重複して含まれる領域９０５内に仮想光源を配置する。領域９０５内であれば、何れの位置を仮想光源の位置として決定してもよいが、仮想光源設定部２０６は、例えば、領域９０５の重心の位置にあたる点９０６を仮想光源の位置として決定する。
【００８６】
なお、仮想光源設定部２０６は、被写体の優先順位の情報を更に用いて、仮想光源の位置を決定してもよい。例えば、被写体９０１ａ〜９０１ｃのうち被写体９０１ａの優先順位が最も高い場合（例えば主要被写体等）、領域９０５内において、被写体９０１ａに対して最適な位置（線分９０４ａ上の位置。例えば点９０７）を仮想光源の位置として決定してもよい。
【００８７】
更に、点光源以外の形状の仮想光源に対しても、同様にして設定値を設定することができる。図９（ａ）に示す仮想光源９０８は、平行光を照射する仮想光源を模式的に示しており、９０９は仮想光源９０８から照射される平行光の方向を示している。仮想光源設定部２０６は、平行光の方向９０９が仮想光源の設定値の範囲９０３ａ〜９０３ｃのいずれの範囲にも含まれる方向を、仮想光源９０８の設定値(方向)として決定する。
【００８８】
なお、図９（ａ）では、仮想光源の設定値の範囲９０３ａ〜９０３ｃの全てに含まれる領域が存在する場合を前提とした例について説明した。しかし、図９（ｂ）に示すように仮想光源の設定値の範囲の全てに含まれる領域が存在しない場合も考えられる。図９（ｂ）における仮想光源の設定値の範囲９０３ａが存在するように、全ての被写体に対して適した設定値を定めることができない場合、仮想光源設定部２０６は、少なくとも複数の被写体に対して適した設定値となる値を、仮想光源の設定値として決定する。例えば、図９（ａ）と同様、点９０６や点９０７の位置を仮想光源の設定値（位置）として決定すれば、被写体９０１ａと被写体９０１ｂの２つの被写体に対して適した仮想光源の設定となる。
【００８９】
また、仮想光源設定部２０６は、仮想光源を配置する個数を変更してもよい。例えば、図９（ｂ）の場合であれば、点９０６の位置と点９１２の位置の２箇所に仮想光源を配置すると、被写体９０１ａ〜９０１ｃの全ての被写体に対して適したリライティング処理を行うことができる。
【００９０】
上述した動作を完了すると、仮想光源設定部２０６は、決定した仮想光源の設定値を、仮想光源信号付加部２０７へ出力する。そして、仮想光源信号付加部２０７は、実施形態１と同様にして仮想光源を用いたリライティング処理を行った画像を出力する。
【００９１】
以上説明したように、本実施形態では、複数の被写体領域を対象にリライティング補正を行う際に、それぞれの被写体の陰影状態に基づいて算出した仮想光源の設定値の範囲を比較し、複数の被写体に対して全体として適した仮想光源の設定値を設定するようにした。これにより、複数の被写体が含まれる画像に対してリライティング補正を行う場合に、それぞれの被写体の陰影の状態を所望の状態に補正し、好ましい画像を得ることが可能となる。換言すれば、複数の被写体が存在する画像に対して仮想光源を設定する場合に、被写体間の陰影状態の不自然さを低減することができる。
【００９２】
なお、本実施形態では、仮想光源設定値算出部２０５が仮想光源を配置する位置を仮想光源の設定値として算出する例について説明した。しかし、仮想光源の設定値はこれに限定されない。例えば、仮想光源の強度を算出するようにしてもよい。この場合、仮想光源設定値算出部２０５は、それぞれの被写体の陰影の状態に基づいて適した仮想光源の強度の範囲を算出する。その後、仮想光源設定部２０６は、複数の被写体のそれぞれに対して算出された仮想光源の強度の範囲を比較して、重複して範囲に含まれる値を仮想光源の強度として決定すればよい。
【００９３】
また、本実施形態では、仮想光源設定部２０６は、仮想光源の設定値を決定する際に全ての被写体に対して適した設定値が存在しない場合、少なくとも複数の被写体に対して適した仮想光源の設定値を設定する例を説明した。しかし、仮想光源の設定値の決定方法はこれに限定されない。例えば、被写体に対する優先順位の情報を更に用いて、優先順位の高い複数の被写体に対して適した仮想光源の設定値を、優先して設定してもよい。このようにすることにより、優先順位の高い複数の被写体には適切なリライティング処理がなされて、画像内の主要な陰影状態の不自然さを低下させることができる。
【００９４】
さらに、本実施形態では、被写体の優先順位を決定する際に、最も主要な被写体を高い優先順位に決定する例を説明した。しかし、被写体に対する優先順位の決定方法はこれに限定されない。例えば、仮想光源設定部２０６は、画像中に占める面積が大きい被写体や、被写体の陰影状態と目標とする陰影状態との差分が大きい被写体（すなわちリライティングによる補正の必要性が高い被写体）を優先順位の高い被写体としてもよい。
【００９５】
（その他の実施形態）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００９６】
５０…システム制御部、１０５…画像処理部、２０４…陰影状態検出部、２０５…仮想光源設定値算出部、２０６…仮想光源設定部、２０７…仮想光源信号付加部
【図１】
0006663246.tif 000002
【図２】
0006663246.tif 000003
【図３】
0006663246.tif 000004
【図４】
0006663246.tif 000005
【図５】
0006663246.tif 000006
【図６】
0006663246.tif 000007
【図７】
0006663246.tif 000008
【図８】
0006663246.tif 000009
【図９】
0006663246.tif 000010