〔実施例〕
図1は、本発明の実施例に係る撮像装置の構成を示すブロック図である。10は撮影レンズであって、レンズ駆動回路42にてレンズ位置を光軸に沿って前後に動かすことで焦点を調節したり、画角を調節することが可能である。さらに、ブレ量検知回路44で測定した撮像装置のブレ量に基づいて、手ブレ補正回路40にてレンズを駆動し、手ブレを抑制する方向に光軸を変化させることで光学的な手ブレ補正を行う構成とすることも可能である。なお、ブレ量検知回路44は、ジャイロセンサーなどが含まれている。なお、前述したような、撮影レンズを駆動させて光学的な手ブレ補正を行う代わりに、撮像素子16を駆動させて光学的な手ブレ補正を行う構成であっても構わない。
絞り14は、開口径を変化させることで、撮影レンズ10を通過した光の光量を調節する。絞り駆動回路26は、システム制御部60から伝達された絞り制御情報、例えば、絞り値に基づいて、絞り14の制御を行う。なお、絞り14は、複数枚の羽から構成された虹彩絞りや、あらかじめ、板を様々な径で穴を打ち抜いた丸絞りなどのいずれの形態であってもよい。
システム制御部60は、被写体輝度が高い場合は絞り14を絞って通過する光量を減少させるように制御し、被写体輝度が低い場合は絞り14を開放にして通過する光量を増加させるように制御する。また、システム制御部60は、メカニカルシャッター制御情報をメカニカルシャッター駆動回路28に伝達することで、メカニカルシャッター12を制御する。また、システム制御部60は、撮像素子制御信号をTG(Timing Generator)24に伝達することで、撮像素子16を制御する。
TG24は、システム制御部60から受信した制御情報に基づいて、撮像素子16に蓄積した電荷の読み出し動作や蓄積した電荷のリセット動作の実行タイミングを示す駆動信号を出力する。以下では、撮像素子16のリセット動作が行われてから読み出し動作が行われるまでの時間、あるいは、撮像素子16のリセット動作が行われてからメカニカルシャッター12により撮像素子16の撮像領域が遮光されるまでの時間を電荷蓄積時間と表す。
撮像素子16から読み出された画像データは、CDS(Correlated Double Sampler)回路18に入力される。CDS回路18は相関二重サンプリング方式により画像データのノイズ成分を除去することを主な役割とする。その後、CDS回路18でノイズ成分が除去された画像データはPGA(Programmable Gain Amplifier)回路20により、画像データの信号レベルを減衰/増幅される。システム制御部60は、画像データに対する増幅レベルをPGA20に伝達することで、増幅量を制御することができる。
46はストロボであってストロボ制御部48により発光制御される。PGA回路20から出力された画像データはA/D(Analog/Digital Converter)回路22にてアナログ信号からデジタル信号へ変換される。デバイスにより、デジタル信号のビット幅は10ビット、12ビット、14ビットなどがあり、後段の画像処理回路50は、複数種類のビット幅に対応可能である。図1では、CDS、PGA、A/Dをそれぞれ別のブロックとして表現しているが、一つのICパッケージにこれらの機能を搭載したものを採用することも可能である。
A/D回路22から出力されるデジタル化された画像データは画像処理回路50へ入力される。画像処理回路50は複数のブロックから構成され、さまざまな機能を実現している。
なお、撮像素子16は、カラーフィルターを通して各画素ごとに特定の色成分を抽出するのが一般的である。A/D回路22からの画像データは撮像素子16の画素及びカラーフィルター配置に対応したデータ形式になっており、輝度成分のみを評価して露出制御を行う自動露出(AE:Auto Exposure)制御で使用するには適さない形式である。画像処理回路50では、画像信号から色情報を排除し、輝度情報のみを抽出する輝度取得機能を備えている。画像処理回路50は、逆に、色情報を抽出する機能も備え、被写体の光源を特定し、色を適切に調節するホワイトバランス処理に使用することができる。
このような輝度情報、あるいは色情報を抽出する過程で画像処理回路50は、画像を複数の領域に分割し、分割された領域毎の画素信号の積分値(以下、ブロック積分値)を各色に対して出力する。以下では、BlockG1[h][v], BlockR[h][v], BlockB[h][v], BlockG2[h][v] (0<=h<24, 0<=v<16)と表す。また、このブロック積分値を用いて分割領域毎の輝度(以下、ブロック輝度とする。例えばBlockY[h][v] (0<=h<24, 0<=v<16))をシステム制御部60で演算し、前述の自動露出制御や光源を推定する際に利用する。なお、前述の例では、画像を横に24分割し、縦に16分割する場合を示しているが、分割数はこれに限定されない。
さらに、画像処理回路50では、撮像素子16から読み出された画像データの周波数成分のみを抜き出す機能を備え、自動ピント合わせ(AF:Auto Focus)制御時に使用することができる。また、画像処理回路50は、撮影画面の輝度度数分布を表す輝度ヒストグラムを生成する機能も持ち、画像データを入力することで対応する画像の輝度ヒストグラムを取得することもできる。
さらに、画像処理回路50は、A/D回路22によりデジタル化された画像データの信号レベルの増減、画像の色効果などを操作する機能を備え、撮影画像の画質を調節するという役割も担っている。画像データの信号レベルに対しては、画像データ全体に一律の増幅率で信号レベルを増減させる機能や、元の信号レベルの大小に応じて増幅率を変換するトーンカーブ(ガンマ)機能などが可能となっている。その他にも、画面内の領域ごとの周波数成分に応じた増幅率で信号レベルを増減させる機能など、様々な画像信号レベル調節が可能となっている。
A/D回路22から出力されるデジタル化された画像データは画像処理回路50へ入力されるとともに、一時記憶メモリ30に記憶される。一旦、一時記憶メモリ30に記憶された画像データは再度読み出すことができ、システム制御部60から画像データを参照したり、読み出した画像データを画像処理回路50に入力することが可能である。さらに、画像処理回路50で画像処理された画像データを一時記憶メモリ30に書き戻したり、システム制御部60から任意のデータを書き込むことも可能である。
画像処理回路50で適切に画像処理された画像データは、画像認識回路38に入力される。画像認識回路38は、入力された画像データに対応する画像の明るさ状況、ピント合焦状況、色状況の認識に加え、人物の顔認識とその表情、文字がある場合はその文字情報を認識することが可能となっている。画像認識回路38には複数の画像データを入力することが可能となっており、例えば2つの画像データを入力し、その2つの画像データに対応する2つの画像の特徴を比較することで、同一の画像かどうかを判定することが可能となっている。画像認識回路38で画像を認識する方法に加え、システム制御部60でも画像認識処理を行うことができる。システム制御部60はCPU上であらかじめコーディングされたプログラムを実行することができるが、一時記憶メモリ30に記憶された画像データを読み出し、その画像データを解析してシーンの状況を認識することができる。
LCDなどの画像表示装置108に撮影した画像を表示させる場合、画像処理回路50で画像処理を行った画像データをVRAM34上に展開しておき、それをD/A回路36にてアナログデータに変換して画像表示装置108に表示させる。なお、撮像素子16から周期的に読み出される画像データに対応する連続した画像を逐次画像表示装置108に表示更新していくことで、いわゆる、電子ファインダーとして画像表示装置108を機能させることが可能となる。
画像表示装置108には、画像だけでなく任意の情報を単独、もしくは画像と共に表示することが可能である。カメラの状態表示や、ユーザーが選択あるいはカメラが決定したシャッター速度や絞り値、撮影感度などの露出制御値に関する文字情報や、画像処理回路50で生成された輝度度数分布を示す輝度ヒストグラムや、顔認識結果、シーン認識結果等も表示可能である。また、画像表示装置108には、記憶媒体82に記憶されている画像データに対応する画像を表示することも可能である。画像データが圧縮されている場合、圧縮伸張ブロック32にて伸張し、VRAM34に画像データを展開する。この画像データをD/A回路36にてアナログデータに変換して出力する。
操作部70には、システムの電源オン/オフを切り替えることのできる電源スイッチ102、シャッタースイッチSW1(104)、シャッタースイッチSW2(106)、モード切替スイッチ110、パラメータ選択スイッチ112が含まれる。
104はシャッタースイッチSW1で、不図示のシャッターボタン(第1の操作手段)の操作途中でONとなり、静止画撮影のための自動露出制御やピント制御等の撮影準備動作の開始指示を行う。106はシャッタースイッチSW2で、不図示のシャッターボタンの操作完了でONとなり、静止画撮影あるいは動画撮影の撮影動作の開始を指示する。モード切替スイッチ110は、静止画撮影モード、動画撮影モード、再生モードなどの撮像装置の動作モードを切り替えることができる。パラメータ選択スイッチ112により、測距領域や測光モードをはじめとする撮影時の撮影条件の選択や、撮影画像再生時のページ送り、カメラの動作設定全般などをユーザが選択することができる。さらに前述の電子ファインダーのON/OFFを選択することもできる。また、パラメータ選択スイッチ112(第2の操作手段)により、後述する露出補正値(第2の補正量)をユーザが設定することが可能である。また、画像表示装置108は画像を表示すると共に、タッチパネルとして入力装置となる構成とすることもできる。
図2は、本発明の実施例に係る撮像装置で実行される、静止画記録モード処理を示すフローチャートである。静止画記録モードになると、システム制御部60は不図示の内部メモリに保持しているSW1フラグをOFFにする(ステップS201)。SW1フラグはシャッタースイッチSW1が押される前後で露出制御の動作を切り替えるために用いる。
ステップS202ではシステム制御部60は、現在の輝度ヒストグラムの表示設定を判断し、輝度ヒストグラムの表示設定がONになっていればステップS203に進む。輝度ヒストグラムの表示設定は操作部70を用いてユーザが設定することが可能である。
ステップS203ではシステム制御部60は、露出補正ライブ画像表示モードを有効にし、輝度ヒストグラムの表示設定がOFFであれば、露出補正ライブ画像表示モードを無効にする(ステップS204)。露出補正ライブ画像表示モードが有効である場合は、操作部70を用いてユーザにより設定された露出補正値を反映させたライブ画像が画像表示装置108に表示されるように露出制御を行う。
次に、ステップS205においてシステム制御部60は測光処理を行うが、この測光処理については図3を用いて後述する。なお、ステップS205では、システム制御部60は、測光処理において画像表示用の露出に制御する。ここで、輝度ヒストグラムの表示設定がONである場合は、ユーザにより設定された露出補正値を反映させた露出制御を行い、OFFである場合は、ユーザにより設定された露出補正値を反映させず後述のD−補正量(第1の補正量)を反映させた露出制御を行う。輝度ヒストグラムの表示設定がONである場合は、ユーザが表示画像の輝度に注目していると想定されるため、ユーザにより設定される露出補正値の効果を把握できるように露出補正値を反映させた画像を表示させる。一方、輝度ヒストグラムの表示設定がOFFである場合は、実際に撮影される明るさの画像を表示することよりも見やすい明るさの画像を表示することを優先し、ユーザにより設定される露出補正値は反映させず後述のD−補正量を反映させた画像を表示させる。
ステップS206ではシステム制御部60は、シャッタースイッチSW1がONしているか否かを判断し、OFFの場合はステップS202に戻り、ONの場合はステップS207に進む。ステップS207において、システム制御部60は不図示の内部メモリに保持しているSW1フラグをONにして、ステップS208の測光処理に進む。なお、ステップS208の測光処理については図3を用いて後述する。
ステップS209では、システム制御部60は、ステップS208の測光結果に基づき測距処理に適した露出に制御し、続いてステップS210において測距処理を行う。なお、ステップS209では、操作部70を用いてユーザによって露出補正値が設定されていたとしても、設定されている露出補正値を反映させず測光結果に基づいて露出制御を行う。これは、露出補正により露出オーバーあるいは露出アンダーとなるように露出制御されて得られた画像データに基づいて測距処理を行うと、正確に測距が行えない場合があるからである。
ステップS211では、S208の測光結果に基づき、シャッタースイッチSW1を保持している間(SW1がONの間)に用いる露出に制御する。ここでは、シャッタースイッチSW2がONになってから撮影が実行されるまでの撮影タイムラグを短縮するため、静止画露出の絞り値に予め絞りを制御しておく。なお、ステップS211では、操作部70を用いてユーザによって露出補正値が設定されている場合は、測光結果に基づく適正露出から設定されている露出補正分だけずらした露出を目標露出とする。これは、ステップS211ではステップS209と異なり撮影画像のプレビューとしての役割が大きいため、ユーザの設定した露出補正値を反映した露出に制御することが望ましいからである。
次に、システム制御部60は、シャッタースイッチSW2がONしているか否かを判断し(ステップS212)、OFFの場合はステップS213に、ONの場合はステップS214に進む。
ステップS213では、シャッタースイッチSW1がONしているか否かを判断し、ONの場合はステップS212に、OFFの場合はステップS201に戻る。シャッタースイッチSW1がON、シャッタースイッチSW2がOFFの間は、ステップS212〜S213が繰り返される。
ステップS214に進むと静止画の撮影を行い、撮影終了後はステップS201に戻る。この撮影処理は図7を用いて後述する。
図3、図4及び図5は、図2のステップS205およびステップS208で実行される測光処理の詳細を示すフローチャートである。ステップS301でシステム制御部60は、ブロック積分結果を取得する。すなわち、画像処理回路50を用いて色毎のブロック積分値を得るとともに、得られたブロック積分値に基づきブロック輝度を算出する。この時点の露出条件において撮像素子16から読み出された画像データに対応する画像の分割領域毎の色および輝度の情報がここで得られる。
次に、ステップS302では、被写体輝度Bvの算出を行う。ステップS301で得たブロック輝度の加重平均をとって求めた輝度Y、自動露出制御の目標輝度Y_ref、現在の露出値Evおよび感度Svから被写体輝度Bvを求める。ここで、Bv、Ev、Svはアペックス値とする。例えば以下のようにBvを求めることができる。
求めた被写体輝度Bvはシステム制御部60の内部メモリ(不図示)に記憶しておく。
次にシステム制御部60はステップS303において、露出補正ライブ画像表示モードか否かを判断し、露出補正ライブ画像表示モードであればステップS304に進み、内部メモリに記憶されているSW1フラグを参照する。なお、露出補正ライブ画像表示モードか否かのフラグはステップS203およびステップS204において設定される。また、SW1フラグはステップS201およびステップS207で設定される。露出補正ライブ画像表示モードであり、かつSW1フラグがOFFである場合はステップS305に進み、内部メモリに記憶している被写体輝度Bvをユーザが操作部70を用いて設定した露出補正値の分だけ補正する。被写体輝度Bvを設定されている露出補正値だけ補正し、後の露出制御で補正した被写体輝度Bvに応じた露出に制御することで露出補正を反映した画像が得られる。
露出補正ライブ画像表示モードでない場合および露出補正ライブ画像表示モードであり、かつSW1フラグがONである場合はステップS306に進み、システム制御部60は画像処理回路50から輝度ヒストグラムを取得する。この時点でVRAM34に展開されている画像データを読み出し、画像処理回路50に入力することで、画像データの輝度ヒストグラムを取得する。
次に、ブロック積分結果を取得するために用いる画像データ(第1の画像データ)と輝度ヒストグラムを取得するために用いる画像データ(第2の画像データ)の露出差分ΔEvHistを0に設定する(ステップS307)。そして、ステップS308のD−補正量算出処理に進む。本実施例におけるD−補正とは、画像が白とびしない範囲で露出をプラス補正することによって、雪山のような撮像画面の大部分が明るいシーンにおいて被写体が暗めに(白い雪がグレーに)撮影されてしまうことを回避する露出補正処理である。このD−補正量算出処理の詳細は図6を用いて後述する。
ステップS309ではステップS302で求めた被写体輝度Bvを、ステップS308で求めたD−補正量の分だけ補正してステップS310に進む。補正後の被写体輝度Bvはシステム制御部60の内部メモリに記憶しておく。
ステップS310ではこの時点で求まっている被写体輝度Bvと、現在の露出で適正となる被写体輝度(=Ev−Sv)の輝度差分を求め、輝度差分の絶対値を予め定められた閾値TH1と比較する。輝度差分の絶対値が閾値TH1より小さければ、現在の露出が被写体に対して適正範囲であるとみなし測光処理を終了する。
輝度差分の絶対値が閾値TH1以上であれば、ステップS311で現在の露出をヒストグラム露出HistExpとしてシステム制御部60の内部メモリに記憶する。ヒストグラム露出HistExpは、輝度ヒストグラムを取得するために用いる画像データに対応する露出条件として後段の処理にて参照する。
ステップS312では、システム制御部60の内部メモリに記憶されている被写体輝度Bvを参照し、被写体輝度Bvに応じて次に制御する露出Exp[0]を求める。ここで参照する被写体輝度BvはステップS302、S305、S309のいずれかで記憶されたものである。現在の露出値をEv、感度をSv、kを定数(0<k<1)として、露出Exp[0]の露出値Ev(Exp[0])は例えば以下のように求める。
Ev(Exp[0]) = Ev + k * (Bv + Sv − Ev)
露出値Ev(Exp[0])が求まれば、後はプログラム線図などを用いて露出Exp[0]を決定すればよい。
続いてステップS313において、システム制御部60は露出をExp[0]に制御する。次にシステム制御部60は、ブロック積分結果を取得し(ステップS314)、ブロック積分結果に基づき被写体輝度Bvを算出する(ステップS315)。ステップS316では、露出補正ライブ画像表示モードか否かを判断し、露出補正ライブ画像表示モードであればステップS317に進み、システム制御部60の内部メモリに記憶されているSW1フラグを参照する。露出補正ライブ画像表示モードであり、かつSW1フラグがOFFである場合はステップS318に進み、内部メモリに記憶している被写体輝度Bvをユーザが操作部70を用いて設定した露出補正値の分だけ補正する。露出補正ライブ画像表示モードでない場合および露出補正ライブ画像表示モードであり、かつSW1フラグがONである場合はステップS319に進み、システム制御部60は画像処理回路50から輝度ヒストグラムを取得する。このように、ステップS314〜S319までの処理は前述したステップS301〜S306までの処理と同様である。
次にステップS320において、ブロック積分結果を取得するために用いる画像データと輝度ヒストグラムを取得するために用いる画像データとの露出差分ΔEvHistとして、HistExpとExp[0]の露出差を設定する。ここで、Ev(HistExp)は露出HistExpの露出値、Ev(Exp[0])は露出Exp[0]の露出値である。時間的にはHistExpがExp[0]よりも前に設定される露出となるが、両者の露出差分をΔEvHistとしてシステム制御部60の内部メモリに記憶する。
ステップS321では、システム制御部60はD−補正量を算出し、求めたD−補正量の分だけ被写体輝度Bvを補正して(ステップS322)、ステップS323に進む。ステップS321のD−補正量算出処理については図6を用いて後述する。
ステップS323では、ヒストグラム露出HistExpをExp[0]に更新する。輝度ヒストグラムを取得するために用いる画像データに対応する露出は、図9を用いて後述するようにExp[0]になる。
ステップS324では、この時点で求まっている被写体輝度Bvと、現在の露出で適正となる被写体輝度(=Ev−Sv)の輝度差分を求め、輝度差分の絶対値を予め定められた閾値TH1と比較する。輝度差分の絶対値が閾値TH1より小さければ、現在の露出が被写体に対して適正範囲であるとみなし測光処理を終了する。
輝度差分の絶対値が閾値TH1以上であれば、ステップS325においてシステム制御部60の内部メモリに記憶されている被写体輝度Bvを参照し、被写体輝度Bvに応じて次に制御する露出Exp[0]、Exp[1]、Exp[2]を求める。Exp[1]、Exp[2]はなめらかに露出を変化させるための補間として用いる。露出Exp[0]、Exp[1]、Exp[2]の露出値Ev(Exp[0])、Ev(Exp[1])、Ev(Exp[2])は例えば以下のように求める。
Ev(Exp[0]) = Ev + k * (Bv + Sv − Ev)
Ev(Exp[1]) = Ev(Exp[0]) + k * (Bv + Sv − Ev(Exp[0])) / 3
Ev(Exp[2]) = Ev(Exp[0]) + 2k * (Bv + Sv − Ev(Exp[0])) / 3
露出値Ev(Exp[0])、Ev(Exp[1])、Ev(Exp[2])が求まれば、後はプログラム線図などを用いて対応する露出Exp[0]、Exp[1]、Exp[2]を求めればよい。
ステップS326においてシステム制御部60は、露出がExp[0]、Exp[1]、Exp[2]と変化していくよう露出制御を行う。続いてステップS327ではブロック積分結果を取得し、ブロック積分結果に基づき被写体輝度Bvを算出する(ステップS328)。
ステップS329では、露出補正ライブ画像表示モードか否かを判断し、露出補正ライブ画像表示モードであればステップS330に進み、システム制御部60の内部メモリに記憶されているSW1フラグを参照する。露出補正ライブ画像表示モードであり、かつSW1フラグがOFFである場合はステップS331に進み、内部メモリに記憶している被写体輝度Bvをユーザが操作部70を用いて設定した露出補正値の分だけ補正する。
露出補正ライブ画像表示モードでない場合および露出補正ライブ画像表示モードであり、かつSW1フラグがONである場合はステップS332に進み、システム制御部60は画像処理回路50から輝度ヒストグラムを取得する。
次に、ステップS333において、ブロック積分結果を取得するために用いる画像と輝度ヒストグラムを取得するために用いる画像との露出差分ΔEvHistとしてHistExpとExp[0]の露出差を設定する。設定されたΔEvHistの値はシステム制御部60の内部メモリに記憶しておく。
ステップS334では、システム制御部60はD−補正量を算出し、求めたD−補正量の分だけ被写体輝度Bvを補正して(ステップS335)、ステップS336に進む。このように、ステップS327〜S335までの処理は、前述したステップS314〜S322までの処理と同様である。
ステップS336において、ヒストグラム露出HistExpをExp[2]に更新する。次に輝度ヒストグラムを取得するために用いる画像データに対応する露出は、図9を用いて後述するようにExp[2]になる。
S337ではこの時点で求まっている被写体輝度Bvと、現在の露出で適正となる被写体輝度(=Ev−Sv)の輝度差分を求め、輝度差分の絶対値を予め定められた閾値TH1と比較する。輝度差分の絶対値が閾値TH1以上であれば、ステップS325に戻る。
輝度差分の絶対値が閾値TH1より小さければ、現在の露出が被写体に対して適正範囲であるとみなし測光処理を終了する。このようにしてステップS205及びS208において測光処理が実行される。
図6は、ステップS308、S321及びS334で実行されるD−補正量算出処理の詳細を示すフローチャートである。ステップS401でシステム制御部60は、ステップS301で取得したブロック積分値を参照する。そして、各色のブロック積分値の値の大きいほうから予め決められた所定の個数であるN個のブロックの平均値を求めてそれぞれMaxAveG1,MaxAveR,MaxAveB,MaxAveG2とする(例えばN=4)。
ステップS402〜S405では、システム制御部60は、ステップS401で求めた平均値に各色のWB係数を乗算し、それぞれMaxAveG1’,MaxAveR’,MaxAveB’,MaxAveG2’とする。
続いてステップS406で、システム制御部60は、上で求めたMaxAveG1’,MaxAveR’,MaxAveB’,MaxAveG2’の中の最大値を求め、これをMaxBlockAveとする。
ステップS407では、システム制御部60は、ステップS406で求めたMaxBlockAveと予め定めた目標値MaxBlockAveTargetとの差分(段数差)を演算し、これをΔBvBlockとする。具体的には以下の式でΔBvBlockを求める。
例えば、MaxBlockAve=240, MaxBlockAveTarget=480の場合にはΔBvBlock=1となり、MaxBlockAveをMaxBlockAveTargetにするには+1段露出補正すればよいことを示す。逆にMaxBlockAveがMaxBlockAveTargetより大きい場合はΔBvBlock < 0となり、露出をマイナス方向に補正すべきであることを示す。
次に、ステップS408では、システム制御部60はステップS302で取得した輝度ヒストグラムを参照し、低輝度側からの累積度数が予め決められた所定の割合であるM%となる輝度を求め、これをYhとする(例えばM=99.5)。さらにステップS409で、システム制御部60は、Yhをデガンマ処理した値をYhistとする。ここで、輝度ヒストグラムの元データはVRAM34に展開された画像データであり、画像処理回路50でガンマ処理された後の画像データとなるので、デガンマ処理することでガンマ処理による影響を排除している。
ステップS410では、システム制御部60は不図示の内部メモリに記憶されている、ブロック積分結果を取得するために用いる画像と輝度ヒストグラムを取得するために用いる画像との露出差分ΔEvHistを参照し、Yhistを補正する。具体的には
と更新する。例えば、ΔEvHist=1の場合、輝度ヒストグラムを取得するために用いる画像はブロック積分結果を取得するために用いる画像よりも1段暗い露出条件で得られた画像となる。そのため、Yhistをプラス方向に1段補正することで、ブロック積分結果を取得するために用いる画像画像と同じ露出条件で取得される輝度ヒストグラムから求まるYhistを推定している。
ステップS411では、システム制御部60は、ステップS410で求めたYhistと予め定めた目標値YhistTargetとの差分(段数差)を演算し、これをΔBvHistとする。具体的には以下の式でΔBvHistを求める。
例えばYhist=240, YhistTarget=480の場合にはΔBvHist=1となり、YhistをYhistTargetにするには+1段露出補正すればよいことを示す。逆にYhistがYhistTargetより大きい場合はΔBvHist < 0となり、露出をマイナス方向に補正すべきであることを示す。
ΔBvHistとΔBvBlockが演算されたら、いずれか小さいほうの値をΔBvD−とする(ステップS412)。基本的にはここで求めたΔBvD−がD−補正量となり、白とびしない範囲で露出を補正するためΔBvHistとΔBvBlockの小さいほうをD−補正量として用いる。白とびしない範囲とは、すなわち、MaxBlockAve < MaxBlockAveTarget かつ Yhist < YhistTargetとなる範囲である。
続いてステップS413〜ステップS419ではD−補正による露出補正の影響が大きくなりすぎないように、D−補正量を所定の範囲内に制限する。まずステップS413で、システム制御部60は、ステップS301、S314及びS327で得たブロック輝度の加重平均をとって求めた平均輝度Yを求める。次に平均輝度Yと目標輝度Y_refから、以下のようにΔBvを求める(ステップS414)。
ここで求めたΔBvを基準にD−補正量の制限処理を以下で行う。
ステップS415において、システム制御部60は、ステップS412で求めたΔBvD−からΔBvを減算して得られた差分を改めてΔBvD−として設定する。
次に、システム制御部60は、ΔBvD−が予め設定された所定値LIMIT(例えば+0.5段)以下であるか否かを判断し(ステップS416)、以下であればステップS418に進む。ΔBvD−が所定値LIMITより大きければステップS417に進み、所定値LIMITをΔBvD−として設定し、ステップS418に進む。ステップS416〜ステップS417の処理によってD−補正によって予め設定された上限値(例えば+0.5段)よりも大きく露出をプラス補正することを抑制している。
次に、システム制御部60は、ΔBvD−が負の値であるか否かを判断し(ステップS418)、負の値でなければD−補正量算出処理を終了する。ΔBvD−が負の値であればステップS419に進み、システム制御部60はΔBvD−に0を設定し、D−補正量算出処理を終了する。ステップS417〜ステップS418の処理によって、D−補正によって露出をマイナス方向に補正することを抑制している。
なお、本実施例では輝度ヒストグラムを参照して輝度が白とびしないようにするとともに、色毎のブロック積分値を参照することで特定の色信号のみが飽和することもないようにしている。これにより、特定の色成分だけ信号の大きい被写体に対してD−補正をかけた場合に画像の色がおかしくなるのを防いでいる。
次に、ステップS214で実行される撮影処理について、図7のフローチャートを用いて説明する。
ステップS501にて、システム制御部60は、ステップS208で記憶した測光値に基づき静止画用の露出に設定する。なお、操作部70を用いてユーザによって露出補正値が設定されている場合は設定されている露出補正値の分だけ露出を測光結果に基づく適正露出からずらす。また、発光撮影する場合には調光動作を行い、本露光に対する発光設定も行っておく。
露出設定が完了するとステップS502の露光動作に進む。露光して得られた画像データは一時記憶メモリ30に記憶される。次にステップS503で一時記憶メモリ30に記憶された画像データに対する現像処理を行う。
現像処理された画像データは、記憶媒体I/F80を通じて記憶媒体82に記録され(ステップS504)、ステップS208での撮影処理を終了する。
次に、図8を用いて、ブロック積分結果と輝度ヒストグラムの取得について説明する。撮像素子16から読み出された画像データは一時記憶メモリ30に記憶されると同時に画像処理回路50内部の積分ブロックに入力される。撮像素子16は撮像同期信号VDにしたがって駆動され、VD1周期(1垂直転送期間)で画像1コマ分の露光が行われるが、一時記憶メモリ30への記憶と積分ブロックへの画像データの入力までは、撮像素子16からの読出しと同じ垂直転送期間Vaで処理される。
入力された画像データに対するブロック積分結果を積分ブロックが出力するのは、画像データが入力される垂直転送期間Vaの次の垂直転送期間Vbとなる。また、垂直転送期間Vbでは一時記憶メモリ30から画像データを読出し、画像処理回路50内部の現像ブロックに入力し、現像された画像データをVRAM34上に展開する。
さらに、垂直転送期間Vbの次の垂直転送期間Vcでは、VRAM34上に展開された画像データを読出し、画像処理回路50内部のヒストグラム生成ブロックに入力することで、輝度ヒストグラムが出力される。なお、以下では、VRAM34上に展開された画像データをVRAMデータとし、撮像素子16からの読出された画像データを現像処理してVRAM34上に展開することをVRAMデータ生成とする。
このように、同じ画像データに対する、ブロック積分結果の出力タイミングと輝度ヒストグラムの出力タイミングとにはずれがあり、輝度ヒストグラムはブロック積分結果に比べて1垂直転送期間遅れて出力されることになる。
図9は、本実施例の撮像装置で繰り返し露出制御を行う場合の測光処理のタイミングを示す。VDは撮像同期信号であり、VD1周期で画像1コマ分の露光が行われる。また、画像データの読出し及びVRAMデータ生成もVDに同期して動作する。
まず、露出がExpA[0]の状態で垂直転送期間V1においてシステム制御部60はブロック積分結果の取得を開始する。ブロック積分については取得処理開始後、次の垂直転送期間で、読み出された画像データが画像処理回路50内部の積分ブロックに入力され、さらに次の垂直転送期間(読出しの次の垂直転送期間)の先頭付近で、積分結果が得られる。したがって、垂直転送期間V1で積分値の取得を開始すると、次の垂直転送期間V2で読出される画像データ(ExpA[0]での露光に対応)が積分され、さらに次の垂直転送期間V3の先頭付近で積分結果が得られる。すなわち、垂直転送期間V3で得られるブロック積分結果は、垂直転送期間V1においてExpA[0]で露光された画像データに対応するものとなる。このような、垂直転送期間V1からV3で実行されるブロック積分結果の取得は、前述したステップS301に対応している。
ブロック積分結果が得られたら、ステップS303、ステップS304の判断を経てステップS306で輝度ヒストグラムの取得を開始する。輝度ヒストグラムについては取得処理開始後、その時点で生成済みの最新のVRAMデータが読出されて画像処理回路50内部のヒストグラム生成ブロックに入力される。輝度ヒストグラムの結果は、特に撮像同期信号VDに同期することなく出力され、取得処理を開始した垂直転送期間内に取得が完了する。垂直転送期間V3の先頭付近で輝度ヒストグラムの取得を開始した場合は、図9のように前の垂直転送期間V2で生成されたVRAMデータ(ExpA[0]での露光に対応)から輝度ヒストグラムが生成される。そのため、垂直転送期間V1においてExpA[0]で露光された画像データに対応するヒストグラム結果が得られる。このような、垂直転送期間V3で実行されるヒストグラム生成は、前述したステップS306に対応している。以上のように、輝度ヒストグラムは、撮像同期信号が出力されてから1つ前に出力された画像データのブロック積分結果が取得されるまで、または、1つ前に出力された画像データのブロック積分結果が取得されてから撮像同期信号が出力されるまでに取得される。
ヒストグラム結果は垂直転送期間V3のうちに得られ、得られた結果に基づき被写体輝度が決定される。図9のように、ステップS301でのブロック積分結果取得に用いる画像データとステップS306でのヒストグラム取得に用いる画像データは露光条件は同じになる(どちらもExpA[0])ので、ステップS307で設定する露出差分は0となる。
現在の露出と算出した被写体輝度との差が大きい場合はステップS313で露出を制御することになるが、このステップS313で露出制御処理は垂直転送期間V3のうちに開始される。図9はステップS312で算出された露出をExpB[0]としたときのタイミング図となっている。露出制御処理において目的の露出を設定すると、次の垂直転送期間から実際に露出が変化し、制御は測光処理に戻る。図9の例では垂直転送期間V3に露出制御処理を開始し、次の垂直転送期間V4の露出が変化するとともに、処理は次のブロック積分取得処理(ステップS314)に進む。
垂直転送期間V4においてシステム制御部60はブロック積分結果の取得を開始する。次の垂直転送期間V5で読み出された画像データ(ExpB[0]での露光に対応)の積分結果が、さらに次の垂直転送期間V6の先頭付近で得られる。すなわち、垂直転送期間V6で得られるブロック積分結果は、垂直転送期間V4においてExpB[0]で露光された画像データに対応するものとなる。このような、垂直転送期間V4からV6で実行されるブロック積分結果の取得は、前述したステップS314に対応している。
続いてヒストグラムの取得処理を行う場合(ステップS319に移行する場合)、前の垂直転送期間V5で生成されたVRAMデータ(ExpA[0]での露光に対応)の輝度ヒストグラムが垂直転送期間V6のうちに得られる。すなわち、垂直転送期間V6で得られる輝度ヒストグラムはExpA[0]での露光に対応するものとなる。なお、ステップS311でヒストグラム露出HistExpを記憶しているが、ステップS311は垂直転送期間V3にて実行されるため、HistExpとしてExpA[0]が記憶されている。そのため、ステップS320で設定する露出差分はExpB[0]とHistExp(=ExpA[0])の差分となる。ステップS314でのブロック積分結果取得に用いる画像データの露光条件はExpB[0]であり、ステップS319でのヒストグラム取得に用いる画像データの露光条件はExpA[0](=HistExp)となるからである。
ステップS324で輝度差分が大きい場合は続いてステップS326で露出を制御することになる。ここでは滑らかな露出制御を目的として、露出を3つ(ExpC[0]、ExpC[1]、ExpC[2])設定する。垂直転送期間V6で露出を3つ設定すると、次の垂直転送期間V7からVD1周期毎に3つの露出が順に変化する。
すなわち、垂直転送期間V7では露出ExpC[0]に、垂直転送期間V8では露出ExpC[1]に、垂直転送期間V9では露出ExpC[2]に変化する。ステップS326で3つの露出設定が終わった次の垂直転送期間V7の先頭で次のブロック積分取得処理(ステップS327)に進む。
垂直転送期間V7においてシステム制御部60は、ブロック積分結果の取得を開始する。次の垂直転送期間V8で読み出された画像データ(ExpC[0]での露光に対応)の積分結果が、さらに次の垂直転送期間V9の先頭付近で得られる。すなわち、垂直転送期間V9で得られるブロック積分結果は、垂直転送期間V7においてExpC[0]で露光された画像データに対応するものとなる。このような、垂直転送期間V7からV9で実行されるブロック積分結果の取得は、前述したステップS327に対応している。
続いて輝度ヒストグラムの取得処理を行う場合(ステップS332に移行する場合)、前の垂直転送期間V8で生成されたVRAMデータ(ExpB[0]での露光に対応)の輝度ヒストグラムが垂直転送期間V9のうちに得られる。すなわち、垂直転送期間V9で得られる輝度ヒストグラムはExpB[0]での露光に対応するものとなる。なお、ステップS323でヒストグラム露出HistExpを記憶しているが、ステップS323は垂直転送期間V6にて実行されるため、HistExpとしてExpB[0]が記憶されている。そのため、ステップS333で設定する露出差分はExpC[0]とHistExp(=ExpB[0])の差分となる。ステップS327でのブロック積分結果取得に用いる画像データの露光条件はExpC[0]であり、ステップS332でのヒストグラム取得に用いる画像データの露光条件はExpB[0](=HistExp)となるからである。
ステップS337で輝度差分が大きい場合はステップS326でもう一度露出を制御することになる。垂直転送期間V9にて露出制御を開始し、垂直転送期間V10で露出ExpD[0]に、垂直転送期間V11で露出ExpD[1]に、垂直転送期間V12で露出ExpD[2]に変化するよう設定する。
続いて、垂直転送期間V10においてシステム制御部60はブロック積分結果の取得を開始する。次の垂直転送期間V11で読み出された画像データ(ExpD[0]での露光に対応)の積分結果が、さらに次の垂直転送期間V12の先頭付近で得られる。すなわち、垂直転送期間V12で得られるブロック積分結果は垂直転送期間V10においてExpD[0]で露光された画像データに対応するものとなる。このような、垂直転送期間V10からV12で実行されるブロック積分結果の取得は、前述したステップS327に対応している。
さらに、輝度ヒストグラムの取得処理を行う場合(ステップS332に移行する場合)、前の垂直転送期間V11で生成されたVRAMデータ(ExpC[2]での露光に対応)のヒストグラムが垂直転送期間V12のうちに得られる。すなわち、垂直転送期間V12で得られる輝度ヒストグラムはExpC[2]での露光に対応するものとなる。なお、ステップS336でヒストグラム露出HistExpを記憶しているが、ステップS336は垂直転送期間V12にて実行されるため、HistExpとしてExpC[2]が記憶されている。そのため、ステップS333で設定する露出差分はExpD[0]とHistExp(=ExpC[2])の差分となる。ステップS327でのブロック積分結果取得に用いる画像データの露光条件はExpD[0]であり、ステップS332でのヒストグラム取得に用いる画像データの露光条件はExpC[2](=HistExp)となるからである。
以上のように、ブロック積分結果が得られた垂直転送期間中に輝度ヒストグラムを取得しようとすると、ブロック積分結果を取得するために用いる画像データと輝度ヒストグラムを取得するために用いる画像データとの露光タイミングが異なってしまう。しかしながら、それぞれの画像データの露出差分を考慮することで、輝度ヒストグラムの取得を次の垂直転送期間まで待つことなくD−補正量を用いた露出制御を正しく行うことができる。そのため、撮像素子で撮像して得られる画像を逐次表示しながら繰り返し露出制御を行う場合であっても、輝度ヒストグラムの結果を反映させて好適な露出制御を行うことができる。
また、露出制御を行う直前に取得されるブロック積分結果を用いてD−補正量を算出することで、より適切なD−補正量を算出することができる。
なお、本実施例において、露出補正ライブ画像表示モードでは、シャッタースイッチSW1が押される前(ステップS207に移行する前)は、D−補正量の算出は行わず、D−補正量を反映させて露出制御は行わない。そして、シャッタースイッチSW1が押された後は、ステップS208においてステップS325〜S337の処理などを行い適正露出にして求めたD−補正量を反映させて以降の露出制御を行うことになる。これは、シャッタースイッチSW1が押される前は、露出補正ライブ画像表示モードではユーザが設定した露出補正値を反映した露出に制御しているため、D−補正量を正確に算出することができない場合があるからである。
前述したように、D−補正量は高輝度領域の輝度に基づいて算出される値であるが、ユーザの設定によりプラス方向に露出補正した場合、高輝度領域の信号が飽和して高輝度領域の情報が失われ、D−補正量が正しく算出できない。そのため、シャッタースイッチSW1が押されるまではD−補正量の算出および反映は行わず、シャッタースイッチSW1が押された後に適正露出となるように露出制御を行ってD−補正量を決定する。その後、シャッタースイッチSW1の保持中はD−補正量およびユーザが設定した露出補正値をともに反映した露出にすることで、実際に撮影される画像のプレビューを実現している。
なお、シャッタースイッチSW1が押される前はユーザが設定した露出補正値を反映した露出に制御しているため、そのような状態において測光のたびにD−補正量を決定するために適正露出に制御すると、たびたびライブ画像の連続性が失われてしまう。そこで、シャッタースイッチSW1が押される前は測光のたびに適正露出にするような露出制御は行わないようにしているので、連続性が失われることなくライブ画像の表示を行うことができる。
また、本実施例では、露出差分を用いて輝度ヒストグラムに基づいて決定される値を補正したが、露出差分を用いてブロック積分結果に基づいて決定される値を補正してもよい。
また、ステップS305やステップS309などにおいて、被写体輝度に対して露出補正を反映させず、ステップS206やステップS211などの露出制御処理において、ユーザに設定された露出補正値及びD−補正量の分だけ目標とする露出を補正してもよい。