以下に、本発明を実施するための形態について詳細に説明する。尚、以下に説明する実施の形態は、本発明を実現するための一例であり、本発明が適用される装置の構成や各種条件によって適宜修正又は変更されるべきものであり、本発明は以下の実施の形態に限定されるものではない。また、後述する各実施形態の一部を適宜組み合わせて構成しても良い。
以下、本発明の画像処理装置を、撮影機能を備えたデジタルスチルカメラに適用した例を説明するが、これに限られず、デジタルビデオカメラや、画像処理機能を備えたパーソナルコンピュータ等に適用しても良い。また、AF制御を切り換えるために被写体の動き判定を行う例をあげて説明を行うが、上述したように、AF制御のみに限らず、露出制御や画像処理制御においても適用することが可能である。
<装置構成>
図1を参照して、本実施形態の撮像装置の構成について説明する。
図1において、101はズーム機構を含む撮影レンズである。102は光量を制御する絞り及びシャッターである。103はAE処理部、104は被写体像を撮像する撮像素子106上に焦点を合わせるためのフォーカスレンズである。105はAF処理部、106は被写体からの反射光を電気信号に変換する受光手段又は光電変換手段としての撮像素子である。107は出力ノイズを除去するCDS回路やA/D変換前に行う非線形増幅回路を含むA/D変換部である。108は画像処理部、109はフォーマット変換部、110は内蔵メモリ(例えばランダムアクセスメモリ、以下、DRAM)である。111はメモリカードなどの外部記憶媒体とそのインタフェースからなる画像記録部である。112は後述する合焦動作を含む撮影シーケンスなどを実行するように制御するシステム制御部である。113は画像表示用メモリ(以下、VRAM)、114は画像表示の他、操作補助のための表示やカメラ状態の表示の他、撮影時には撮影画面と測距領域を表示する操作表示部である。115は装置を外部から操作するための操作部、116は撮影の条件設定を行う撮影モードスイッチ、117はシステムに電源を投入するためのメインスイッチである。118はAFやAE等の撮影スタンバイ動作を行うためのスイッチ(以下、SW1)、119はSW1の操作後、撮影を行う撮影スイッチ(以下、SW2)である。
120は画像処理部108で処理された画像信号を用いて被写体の検出を行い、検出した1つ又は複数の被写体情報をシステム制御部112に送出する被写体検出モジュールである。被写体検出モジュールは2種類の検出方法を併用して被写体を検出するものであり、顔を検出するための顔検出と、不特定被写体を検出するための不特定被写体検出を行う。被写体情報は、被写体が人物の場合は顔の位置、および大きさ、不特定被写体の場合は位置のみとなる。
顔検出の方法としては、例えば、画像信号を色成分や輝度成分に分解し、周知のパターン認識技術を用いて、予め記憶させて顔のパーツ(目、鼻、口等)に一致する領域を抽出し、それらを包含する領域を顔として検出する方法がある。複数の顔が検出された場合には、顔のサイズが大きいほど、顔の位置が画像の中心に近いほど大きな値となるように、各顔に対して評価値を付与し、最も評価値の高い顔を主被写体とする。
また、不特定被写体検出の方法としては、画像信号を色成分や輝度成分といった類似の信号成分ごと分類し、分類された領域ごとにそのサイズや位置に応じて評価値を付与し、相対的に評価値の高い領域を選択する方法がある。例えば、画像信号を所定数のブロックに分割し、各ブロックにおける色相を取得し、色相ヒストグラムを作成する。色相ヒストグラムでは、ヒストグラムの山の頂点を中心に、ヒストグラムが谷に当たるまでの範囲の色を同一グループとみなす動作を繰り返していくことで、全ての色相をグループ分けする。そして、隣接ブロックが同一グループの場合に同一領域と判定する処理を画像信号全体に渡って行うことで、画像信号を複数の被写体候補領域に分類する。そして、分類された領域のうち、画像の上端、右端、あるいは左端に接する面積が閾値以上の領域、および、その領域の形状の偏平度が高い(長細い)領域を、背景である可能性が高いと判断し、被写体の対象から除外する。そして残った被写体候補領域のうち、サイズが大きいほど、画像の中心位置に近いものほど高い評価値を与え、最も評価値の高い被写体候補領域を不特定被写体として選択する。この不特定被写体検出によれば、顔検出と異なり、画像中にどのような被写体が存在するかによって、主被写体として検出される対象が変化する。
なお、顔検出および不特定被写体検出の両方で主被写体が検出された場合には、顔検出による主被写体を最終的な主被写体として選択する。あるいは、顔検出および不特定被写体検出のそれぞれの主被写体に対して付与された評価値を比較し、評価値が大きい主被写体を最終的な主被写体として選択する。
DRAM110は一時的な画像記憶手段としての高速バッファとして、あるいは画像の圧縮伸張における作業用メモリなどに使用される。操作部115には、例えば、撮像装置の撮影機能や画像再生時の設定などの各種設定を行うメニュースイッチ、撮影レンズのズーム動作を指示するズームレバー、撮影モードと再生モードの動作モード切換えスイッチなどが含まれる。
<動作説明>
次に、図2乃至20を参照して、本実施形態の撮像装置の動作について説明する。なお、以下に説明する処理は、システム制御部112がROMに格納された制御プログラムをRAMに読み出して実行することにより実行される。
図2において、メインスイッチ117がONになると、ステップS201へ進む。ステップS201では、後述する図3での処理に従って、主被写体情報の変化判断処理を行い、ステップS202へ進む。ステップS202では、輝度が所定値以下か判定し、所定値以下であればステップS207へ進み、所定値以下でなければステップS203へ進む。これにより、後述するServoAFに必要なAF精度が得られない低照度条件時に、ServoAFを行わずContinuousAFを行う。ステップS203では、ステップS201で判断した結果、主被写体が動いているか判定し、主被写体が動いているならばステップS204へ進み、動いていなければステップS207へ進む。ステップS204では、主被写体が動いていることを示す動きアイコンを画面内の所定位置に表示して、ステップS205へ進む。ステップS205では、後述する図7での処理に従って、ServoAFを行ってステップS209へ進む。ステップS207では、画面内の所定位置に主被写体が動いていることを示す動きアイコンが表示されていれば、非表示にしてステップS208へ進む。ステップS208では、後述する図6での焦点調節動作に従って、ContinuousAFを行ってステップS209へ進む。
ステップS209では、SW1の状態がONであればステップS210へ進み、ONでなければステップS201へ進む。ステップS210では、AE処理部103で画像処理部108の出力からAE処理を行ってステップS211へ進む。ステップS211では、合焦フラグの状態がTRUEであればステップS213へ進み、FALSEであればステップS212へ進む。ステップS212では、後述する図10での焦点調節動作に従って、通常AF動作を行ってステップS213へ進む。ステップS213では、ServoAFモードに設定されているか判定し、ServoAFモードに設定されていればステップS214へ進み、ServoAFモードに設定されていなければステップS215へ進む。ステップS214では、後述する図7での焦点調節動作に従って、ServoAFを行ってステップS215へ進む。ステップS215では、スイッチSW1の状態がONであればステップS216へ進み、ONでなければステップS201へ進む。ステップS216では、スイッチSW2の状態がONであればステップS217へ進み、ONでなければステップS213へ進む。ステップS217では、後述する図20での処理に従って撮影動作を行ってステップS201へ進む。
<主被写体情報の変化判断処理>
図3を参照して、図2のS201における主被写体情報の変化判断処理について説明する。
図3において、ステップS301では、被写体検出モジュール120が被写体を検出したか判定し、被写体を検出していればステップS302へ進み、被写体を検出していなければ処理を終了し、ステップS202へ進む。ステップS302では、画角が変化するような設定があったか判定する。画角が変化する設定とは光学ズーム、または、電子ズーム動作、記録画像のアスペクト比を変更するような場合である。画角変化設定があればステップS303へ進み、なければステップS304へ進む。このように光学ズームや電子ズームの動作中、記録画像のアスペクト比変換時は、被写体に変化がなくても顔サイズや画面内の被写体の位置が変化してしまうため、ステップS303にてDRAM110に記憶した顔サイズや顔/不特定被写体の位置情報の履歴を消去する。後述する変動フラグや、動きアイコンの状態は前回の状態を継続したままとする。
ステップ304では検出された被写体が顔であるか判別する。検出された被写体が顔の場合はステップS305へ進み、顔以外の不特定被写体であればステップS308へ進む。ステップS305では記憶した不特定被写体の位置情報を消去する。S306では、後述する図4Aでの処理に従って、顔サイズの変化判断を行ってステップS307へ進む。ステップS307では、後述する図4Bでの処理に従って、顔位置の変化判断を行ってステップS310へ進む。ステップS308では、記憶した顔のサイズ、位置情報を消去する。S309では、後述する図5での処理に従って、不特定被写体位置の変化判断を行ってステップS310へ進む。ステップS310では、顔サイズ変動フラグがTRUEであればステップS314へ進み、そうでなければステップS311へ進む。ステップS311では、顔位置変動フラグがTRUEであればステップS314へ進み、そうでなければステップS312へ進む。ステップS312では、不特定被写体位置変動フラグがTRUEであればステップS314へ進み、そうでなければステップS313へ進む。ステップS314では、主被写体が動いていると判定して処理を終了し、ステップS202へ進む。ステップS313では、主被写体が動いていないと判定して処理を終了し、ステップS202へ進む。このように、本実施形態では、主被写体が顔であるか不特定被写体であるかに応じて、主被写体が動いたか否かを判定する基準を異ならせている。
<顔サイズの変化判断処理>
図4Aを参照して、図3のS306における顔サイズの変化判断処理について説明する。
図4Aにおいて、ステップS401では、被写体検出モジュール120で検出した顔サイズ情報を取得してステップS402へ進む。ステップS402では、顔サイズ情報に対して時間軸方向でローパス処理を施し被写体検出モジュール120の誤差の低減を図る。ローパスフィルタのパラメータは被写体検出モジュール120での変化判定閾値に応じて変更できる。次にステップS403では時間軸方向でハイパスフィルタ処理を施し、時間軸方向での顔サイズ変化の差分を算出する。ステップS404ではハイパス処理後の顔サイズ変化の絶対値が予め設定した変化判定閾値以上か判定し、変化判定閾値以上であればステップS405へ進み、変化判定閾値未満であればステップS407へ進む。ここで、変化判定閾値は、被写体距離が変化していないときに検出誤差などによって誤って変化したと判定することがないように設定する。ステップS405では、顔サイズ変動フラグをTRUEにしてステップS406へ進む。ステップ406では顔サイズ安定カウンタを初期化する。
ステップS407では顔サイズ安定カウンタをインクリメントする。ステップS408では、顔サイズ安定カウンタが予め設定した安定回数閾値以上であるか判定し、安定回数閾値以上であればステップS409へ進み、安定回数閾値未満であれば処理を終了し、ステップS305へ進む。ここで、安定回数閾値は、被写体距離が変化しているときに誤って安定したと判定することがないように設定する。ステップS409では、顔サイズ変動フラグをFALSEにして処理を終了し、ステップS305へ進む。
<顔位置の変化判断処理>
図4Bを参照して、図3のS307における顔位置の変化判断処理について説明する。
図4Bにおいて、ステップS421では、被写体検出モジュール120で検出した顔位置のX座標、Y座標の情報を取得してステップS422へ進む。ステップS422では、顔位置情報に対して時間軸方向でローパス処理を施し被写体検出モジュール120の誤差の低減を図る。ステップS423では時間軸方向でハイパスフィルタ処理を施し、時間軸方向での顔位置変化の差分を算出する。ステップS424では、顔位置変化の絶対値が予め設定した変化判定閾値以上か判定し、変化判定閾値以上であれば、ステップS425へ進み、変化判定閾値未満であればステップS427へ進む。ここで、変化判定閾値は、被写体距離が変化していないときに検出誤差や手ぶれによる画面内の動きによって誤って変化したと判定することがないように設定する。ステップS426では顔位置安定カウンタを初期化する。ステップS428では、顔位置安定カウンタが予め設定した安定回数閾値以上か判定し、安定回数閾値以上であれば、ステップS429へ進み、安定回数閾値未満であれば処理を終了してステップS306へ進む。ここで、安定回数閾値は、被写体距離が変化しているときに誤って安定したと判定することがないように設定する。ステップS429では、顔位置変動フラグをFALSEにして処理を終了してステップS306へ進む。
<不特定被写体位置の変化判断処理>
図5を参照して、図3のS309における不特定被写体位置の変化判断処理について説明する。
図5において、ステップS501では、被写体検出モジュール120で検出した不特定被写体位置のX座標、Y座標の情報を取得してステップS502へ進む。ステップS502では、不特定被写体位置情報に対して時間軸方向でローパス処理を施し被写体検出モジュール120の誤差の低減を図る。ステップS503では時間軸方向でハイパスフィルタ処理を施し、時間軸方向での不特定被写体位置変化の差分を算出する。ステップS504では、不特定被写体位置変化の絶対値が予め設定した変化判定閾値以上か判定し、変化判定閾値以上であれば、ステップS505へ進み、変化判定閾値未満であればステップS507へ進む。ここで、変化判定閾値は、被写体距離が変化していないときに検出誤差や手ぶれによる画面内の動きによって誤って変化したと判定することがないように設定し、顔の変化判定閾値と異ならせてもよい。本実施形態としては、人物の顔のように距離と相関性が高い被写体に対して(図4A参照)、顔以外の距離とサイズの相関性が低い不特定被写体の場合は、変化判定閾値を判定しにくくなる方向、すなわち、より大きな値に設定する。これは図4Bのように不特定被写体は見る角度によって重心位置が変わり、顔に比べて動いたと判定されやすいためである。
ステップS506では不特定被写体位置安定カウンタを初期化する。ステップS508では、不特定被写体位置安定カウンタが予め設定した安定回数閾値以上か判定し、安定回数閾値以上であれば、ステップS509へ進み、安定回数閾値未満であれば処理を終了してステップS306へ進む。ここで、安定回数閾値は、被写体距離が変化しているときに誤って安定したと判定することがないように設定する。ステップS509では、不特定被写体位置変動フラグをFALSEにして処理を終了してステップS306へ進む。
<ContinuousAF制御>
図6を参照して、図2のS208におけるContinuousAF制御について説明する。
図6において、ステップS601では、被写体検出モジュール120が被写体検出したか判定し、被写体検出していればステップS602へ進み、被写体検出していなければステップS604へ進む。ステップS602では、被写体検出モジュール120で検出した位置・サイズなどの情報を取得してステップS603へ進む。ステップS603では、被写体検出していることを示す被写体検出フラグをTRUEにしてステップS604へ進む。ステップS604では、被写体検出フラグの状態がTRUEであればステップS605へ進み、FALSEであれば、ステップS606へ進む。ステップS605では、最新の被写体検出位置にAF枠を設定してステップS607へ進む。ここで、被写体検出されているときのAF枠のサイズは、所定のサイズにしてもよいし、被写体検出サイズに基づいて決定してもよい。ステップS606では、中央領域などの所定位置にAF枠を設定してステップS607へ進む。ステップS607では、ステップS605、またはステップS606で設定したAF枠において焦点評価値及び輝度値を取得してステップS608へ進む。ステップS608では、後述するステップS609の山登りAFにおいてピークが検出されたことを示すピーク検出フラグの状態がTRUEであればステップS610へ進み、FALSEであればステップS609へ進む。ステップS609では後述する図8での処理に従って山登りAFを行ってステップS209へ進む。ステップS610では、後述する図9での処理に従って被写体距離変化判定を行って、ステップS611へ進む。ステップS311では、被写体距離が変化したことを示す距離変化フラグの状態がTRUEであればステップS612へ進み、FALSEであれば、ステップS613へ進む。ステップS612では、ピーク検出フラグ及び距離変化フラグをFALSEにし、ステップS609の山登りAF制御で用いる焦点評価値の最大値、ピーク位置、焦点評価値の増加を示す増加カウンタをリセットしてステップS613へ進む。ステップS613では、フォーカスレンズをそのまま停止させてステップS209へ進む。
<ServoAF制御>
図7を参照して、図2のS205,S214におけるServoAF制御について説明する。
図7において、ステップS701では、被写体検出モジュール120が被写体検出したか判定し、被写体検出していればステップS702へ進み、被写体検出していなければステップS704へ進む。ステップS702では、被写体検出モジュール120で検出した位置・サイズなどの情報を取得してステップS703へ進む。ステップS703では、被写体検出していることを示す被写体検出フラグをTRUEにしてステップS704へ進む。ステップS704では、被写体検出フラグの状態がTRUEであればステップS705へ進み、FALSEであればステップS706へ進む。ステップS705では、最新の検出位置にAF枠を設定してステップS707へ進む。ここで、被写体検出されているときのAF枠のサイズは、所定のサイズにしてもよいし、被写体検出サイズに基づいて決定してもよい。ステップS706では、中央領域などの所定位置にAF枠を設定してステップS707へ進む。ステップS707では、ステップS705、またはステップS706で設定したAF枠において焦点評価値及び輝度値を取得してステップS708へ進む。ステップS708では、後述するステップS713の山登りAFにおいてピークが検出されたことを示すピーク検出フラグの状態がTRUEであればステップS710へ進み、FALSEであれば、ステップS709へ進む。ステップS709では、後述する図8での処理に従って山登りAFを行ってステップS707へ進む。ステップS710では、被写体距離が変化したことを示す距離変化フラグの状態がTUREであればステップS712へ進み、FALSEであればステップS711へ進む。ステップS711では、合焦フラグがTRUEであればステップS713へ進み、FALSEであればステップS712へ進む。ステップS712では、後述する図11での処理に従ってServo中AF動作を行って、ステップS209またはステップS215へ進む。ステップS713では後述する図9での処理に従って被写体距離変化判定を行ってステップS209または、ステップS215へ進む。
<山登りAF制御>
図8を参照して、図6のS609及び図7のS709における山登りAF制御について説明する。
図8において、ステップS801では、フォーカスレンズ104の現在位置を取得してステップS802へ進む。ステップS802では、焦点評価値・輝度値の取得及びフォーカスレンズ104の現在位置の取得をカウントするための取得カウンタに1を加えてステップS803へ進む。この取得カウンタは、初期化動作(図示略)において予め0に設定されているものとする。ステップS803では、取得カウンタの値が1か判定し、取得カウンタの値が1ならば、ステップS806へ進み、取得カウンタの値が1でなければステップS804へ進む。ステップS804では、「今回の焦点評価値」が「前回の焦点評価値」よりも大きいか判定し、「今回の焦点評価値」が「前回の焦点評価値」よりも大きければステップS805へ進み、そうでなければステップS812へ進む。ステップS805では、「今回の焦点評価値」が「前回の焦点評価値」よりも大きいことを示す増加カウンタに1を加えてステップS806へ進む。この増加カウンタは、初期化動作(図示略)において予め0に設定されているものとする。ステップS806では、今回の焦点評価値を焦点評価値の最大値としてシステム制御部112に内蔵される図示しない演算メモリに記憶して、ステップS807へ進む。ステップS807では、フォーカスレンズ104の現在の位置を焦点評価値のピーク位置としてシステム制御部112に内蔵される図示しない演算メモリに記憶して、ステップS808へ進む。ステップS808では、今回の焦点評価値を前回の焦点評価値としてシステム制御部112に内蔵される図示しない演算メモリに記憶してステップS809へ進む。ステップS809では、フォーカスレンズ104の現在位置が測距範囲の端にあるか判定し、測距範囲の端にあればステップS810へ進み、測距範囲の端になければステップS811へ進む。ステップS810では、フォーカスレンズ104の移動方向を反転してステップS811へ進む。ステップS811では、フォーカスレンズ104を所定量移動してステップS209、またはステップS215へ進む。
ステップS812では、「焦点評価値の最大値−今回の焦点評価値」が所定量より大きいか判定し、所定量より大きければステップS813へ進み、そうでなければステップS808へ進む。ここで、「焦点評価値の最大値−今回の焦点評価値」が所定量より大きいこと、即ち最大値から所定量減少していれば、その最大値を合焦状態のピーク位置での値とみなす。ステップS813では、増加カウンタが0より大きいか判定し、増加カウンタが0より大きければステップS814へ進み、そうでなければステップS808へ進む。ステップS814では、フォーカスレンズ104を前記ステップS807で記憶した焦点評価値が最大値となったピーク位置へ移動させて、ステップS815へ進む。ステップS815では、ピーク検出フラグをTRUEにしてステップS816へ進む。ステップS816では、取得カウンタを0としてステップS209、またはステップS215へ進む。
<被写体距離変化判定処理>
図9を参照して、図6のS610及び図7のS713における被写体距離変化判定処理について説明する。
図9において、ステップS901では、図3の主被写体情報の変化判断処理において被写体が動いたか判定する。次に、ステップS902へ進み、被写体が動いているならばステップS911へ進み、被写体が動いていないならばステップS903へ進む。ステップS903では、前回取得した輝度値に対して、今回取得した輝度値が所定値以上変化したか判定し、所定値以上変化していればステップS904へ進み、所定値以上変化していなければステップS906へ進む。ステップS904では、輝度値変化回数に1を加えてステップS905へ進む。ステップS905では、輝度値変化回数が閾値以上か判定し、閾値以上であればステップS911へ進み、そうでなければステップS906へ進む。ステップS906では、前回の焦点評価値に対して、今回の焦点評価値が所定値以上変化したか判定し、所定値以上変化していればステップS907へ進み、所定値以上変化していなければステップS909へ進む。ステップS907では、焦点評価値変化回数に1を加えてステップ908へ進む。ステップS908では、焦点評価値変化回数が閾値以上か判定し、閾値以上であればステップS911へ進み、そうでなければステップS909へ進む。
ステップS911では、合焦フラグをFALSE、距離変化フラグをTRUEにして処理を終了し、ステップS611またはステップS209、ステップS215へ進む。ステップS918では、被写体情報・輝度値・焦点評価値のいずれも変化していなければステップS910へ進み、どれかの評価値が変化していれば処理を終了してステップS611またはステップS209、ステップS215へ進む。ステップS913では、輝度値変化回数・焦点評価値変化回数を0にして処理を終了し、ステップS611またはステップS209、ステップS215へ進む。
<通常AF動作&焦点検出処理>
図10を参照して、図2のS212における通常AF動作について説明する。
図10において、ステップS1001では、被写体検出モジュール120が被写体検出したか判定し、被写体検出していればステップS1002へ進み、被写体検出していなければステップS1004へ進む。ステップS1002では、被写体検出モジュール120で検出した位置・サイズなどの情報を取得してステップS1003へ進む。ステップS1003では、被写体検出していることを示す被写体検出フラグをTRUEにしてステップS1004へ進む。ステップS1004では、被写体検出フラグの状態がTRUEであればステップS1005へ進み、FALSEであればステップS1006へ進む。ステップS1005では、最新の被写体検出位置にAF枠を設定してステップS1007へ進む。ここで、被写体検出されているときのAF枠のサイズは、所定のサイズにしてもよいし、被写体検出サイズに基づいて決定してもよい。
ステップS1006では、中央領域などの所定位置にAF枠を設定してステップS1007へ進む。ステップS1007では、AFモードがContinuousAFであるかSingleAFモードであるか判定し、ContinuousAFモードであればステップS1008へ進み、SingleAFモードであればステップS1010へ進む。ステップS1008ではピーク検出フラグがTRUEであればステップS1011へ進み、FALSEであればステップS1010へ進む。ステップS1010では、スキャン範囲を全域に設定してステップS1012へ進む。ステップS1011では、スキャン範囲をフォーカスレンズ104の現在位置を中心とした所定範囲に設定してステップS1012へ進む。ステップS1012では、後述する図15での処理に従ってスキャンを行って、ステップS1013へ進む。ステップS1013では、後述する図16での処理に従って合焦状態の判定を行って、ステップS1014へ進む。ステップS1014では、ステップS1013における合焦状態の判定結果が○判定か判定し、○判定であればステップS1015へ進み、○判定でなければステップS1017へ進む。
ステップS1015では、フォーカスレンズ104をステップS1012で計算したピーク位置へ移動してステップS1016へ進む。ステップS1016では、ピーク検出フラグ及び合焦フラグをTRUE、距離変化フラグをFALSEにして通常AF動作を終了し、ステップS1013へ進む。ステップS1017では、フォーカスレンズ104を予め設定している位置(定点)へと移動してステップS1018へ進む。ここで、定点は被写体の存在確率の高い距離に設定する。顔が検出されていれば、顔サイズより人物の距離を推定して算出した距離に設定してもよい。ステップS1018では、ピーク検出フラグ及び距離変化フラグをFALSEにして通常AF動作を終了し、ステップS213へ進む。
<Servo中AF動作>
図11を参照して、図7のS712におけるServo中AF動作について説明する。
図11において、ステップS1101では、現在の時刻と、次回のスキャン(S1110でのスキャン)にかかる時間から、次回スキャン時にフォーカスレンズ104の位置がスキャン範囲の中心に位置する予測時刻PreTimeを算出する。次にステップS1102では、後述する図12での処理に従って予測可能判定を行って、ステップS1103へ進む。ステップS1103では、ステップS1102の予測可能判定における予測可能判定結果が○判定であればステップS1104へ進み、○判定でなければステップS1105へ進む。
ステップS1104では、後述する図13での処理に従って被写体位置予測を行って、ステップS1107へ進む。ステップS1105では、後述する過去の動体予測用のデータScanTime[0]〜ScanTime[i−1]及びHokanPeak[0]〜HokanPeak[i−1]をクリアする。更に連続して予測可能判定となった回数を示すiを0にしてステップS1106へ進む。ステップS1106では、フォーカスレンズ104の現在位置をスキャン中心位置に設定して、ステップS1107へ進む。ステップS1107では、合焦フラグがTRUEであればステップS1108へ進み、FALSEであればステップS1109へ進む。ステップS1108では、スキャン範囲を所定範囲に設定してステップS1110へ進む。
ステップS1109では、ステップS1108で設定する所定範囲よりも広い範囲にスキャン範囲を設定してステップS1110へ進む。ステップS1110では、後述する図15での処理に従ってスキャンを行って、ステップS1111へ進む。ステップS1111では、後述する図16での処理に従って合焦状態の判定を行って、ステップS1112へ進む。ステップS1112では、ステップS1111で判定した合焦状態の判定結果が○判定であればステップS1113へ進み、○判定でなければステップS1125へ進む。ステップS1113では、合焦フラグをTRUEにしてステップS1114へ進む。ステップS1114では、連続して合焦状態の判定結果が○判定でなかった回数を示す×countを0にしてステップS1115へ進む。
ステップS1115では、ステップS1110におけるスキャン結果(ピーク位置)とスキャン中心位置の差が所定値より小さいか判定し、所定値より小さければステップS1116へ進み、そうでなければステップS1119へ進む。ステップS1116では、連続してステップS1110におけるピーク位置とスキャン中心位置の差が所定値より小さくなった回数を示すStCountに1を加えてステップS1117へ進む。ステップS1117では、StCountが閾値以上であるか判定し、閾値以上であればステップS1118へ進み、そうでなければステップS1120へ進む。ステップS1118では、被写体の距離変化がなくなったと判断して、距離変化フラグをFALSEにしてServo中AF動作を終了し、ステップS209またはステップS215へ進む。これにより、被写体距離が変化しない場合には、無駄にスキャンを繰り返すことなくフォーカスレンズを停止させることができる。
ステップS1119では、StCountを0にクリアしてステップS1120へ進む。ステップS1120では、ステップS1110における今回のスキャン中心位置に対する今回のピーク位置の方向と、前回のスキャン中心位置に対する前回のピーク位置の方向とが同方向であるか判定する。そして、同方向であればステップS1121へ進み、同方向でなければステップS1122へ進む。ステップS1121では、同方向移動フラグをTRUEにしてステップS1123へ進む。ステップS1122では、同方向移動フラグをFALSEにしてステップS1123へ進む。ステップS1123では、今回のスキャンにおいてフォーカスレンズ104の位置がスキャン範囲の中心に位置した時刻をScanTime[i]として、今回のスキャンにおけるピーク位置をHokanPeak[i]としてステップS1124へ進む。ステップS1124では、iに1を加えてServo中AF動作を終了し、ステップS209またはステップS215へ進む。
ステップS1125では、合焦フラグをFALSEにしてステップS1126へ進む。ステップS1126では×Countに1を加えてステップS1127へ進む。ステップS1127では、×Countが所定値よりも大きいか判定し、所定値より大きければステップS1128へ進み、そうでなければServo中AF動作を終了し、ステップS209またはステップS215へ進む。ステップS1128では、ピーク検出フラグ及び距離変化フラグをFALSEにしてServo中AF動作を終了し、ステップS209またはステップS215へ進む。
<予測可能判定処理>
図12を参照して、図11のS1102における予測可能判定処理について説明する。
図12において、ステップS1201では、i=0か判定し、0であればステップS1205へ進み、そうでなければステップS1202へ進む。ステップS1202では、PreTimeとScanTime[i−1]の差が所定時間よりも短いか判定し、所定時間よりも短ければステップS1203へ進み、そうでなければステップS1205へ進む。これより、前回のスキャンから今回のスキャンまでの間の時間が分かり、前回のスキャン結果を使用した予測の信頼性があるのか判断することができる。ステップS1203では同方向移動フラグがTRUEか判定し、同方向移動フラグがTRUEであればステップS1204へ進み、FALSEであればステップS1205へ進む。これにより、被写体が距離方向で同方向に移動しているときにのみ予測を行うことで、誤測距の結果を使用することによる誤った予測を低減することができる。ステップS1204では、予測可能判定の結果を○判定として処理を終了し、ステップS1103へ進む。ステップS1205では、予測可能判定の結果を×判定として処理を終了し、ステップS1103へ進む。
<被写体位置予測処理>
図13及び図14を参照して、図11のS1104における被写体位置予測処理について説明する。
図13において、ステップS1301では、iが2より小さいか判定し、iが2より小さければステップS1302へ進み、そうでなければステップS1303へ進む。ステップS1302ではスキャン中心位置を前回のスキャンのピーク位置に設定して処理を終了し、ステップS1107へ進む。ステップS1303では、i=2であるか判定し、i=2であればステップS1304へ進み、iが2より大きければステップS1306へ進む。
ステップS1304では、図14(a)に示すように、動体予測式1を使って2点で1次近似処理を行う。具体的には、(ScanTime[0],HokanPeak[0])と、(ScanTime[1],HokanPeak[1])の2点より、PreTime時の被写体の予測位置PrePositionを算出してステップS1305へ進む。
(動体予測式1)
PrePosition=(PreTime−ScanTime[0])×(HokanPeak[1]−HokanPeak[0])/(ScanTime[1]−ScanTime[0])+HokanPeak[0]
ステップS1305では、ステップS1304で算出した被写体の予測位置PrePositionをスキャン中心位置に設定して処理を終了し、ステップS1107へ進む。
ステップS1306では、図14(b)に示すように、動体予測式2を使って3点で2次近似処理を行う。具体的には、(ScanTime[i−2],HokanPeak[i−2])、(ScanTime[i−1],HokanPeak[i−1])、(ScanTime[i],HokanPeak[i])の3点より、PreTime時の被写体の予測位置PrePositionを算出してステップS1307へ進む。
(動体予測式2)
PrePosition=(t3/t2)×{(t3−t2)×(t2×Pos1−t1×Pos2)/t1/(t1−t2)+Pos2}+HokanPeak[i−2]
t1=ScanTime[i−1]−ScanTime[i−2]
t2=ScanTime[i]−ScanTime[i−2]
t3=PreTime−ScanTime[i−2]
Pos1=HokanPeak[i−1]−HokanPeak[i−2]
Pos2=HokanPeak[i]−HokanPeak[i−2]
ステップS1307では、ステップS1306で算出した被写体の予測位置PrePositionをスキャン中心位置に設定して処理を終了し、ステップS1107へ進む。
<スキャン動作>
図15を参照して、図10のS1012及び図11のS1110におけるスキャン動作について説明する。
図15において、ステップS1501ではフォーカスレンズ104をスキャン開始位置に移動する。スキャン開始位置は設定されたスキャン範囲の一端に設定される。ステップS1502では、撮影画面内に設定される測距領域の焦点評価値とフォーカスレンズ104の位置をシステム制御部112に内蔵される図示しない演算メモリに記憶する。ステップS1503ではレンズ位置がスキャン終了位置にあるか判定し、終了位置であればステップS1505へ、そうでなければステップS1504へ進む。スキャン終了位置は、設定されたスキャン範囲の他端に設定される。ステップS1504ではフォーカスレンズ104を駆動して所定の方向へ所定量動かしてステップS1502へ進む。ステップS1505では、ステップS1502で記憶した焦点評価値とそのレンズ位置から、焦点評価値のピーク位置を計算する。
<合焦状態判定処理>
図16乃至図19を参照して、図10のS1013及び図11のS1111における合焦状態判定処理について説明する。
焦点評価値は遠近競合などの特殊な場合を除けば、横軸にフォーカスレンズ位置、縦軸に焦点評価値をとると図19に示すような山状になる。そこで焦点評価値が山状になっているか否かを、焦点評価値の最大値と最小値の差、一定値(SlopeThr)以上の傾きで傾斜している部分の長さ、傾斜している部分の勾配から判断することにより、合焦状態の判定を行うことができる。合焦状態の判定結果は、以下に示すように○×で出力される。
○:焦点評価値のピーク位置から、被写体の焦点調節が可能である。
×:被写体のコントラストが不十分、もしくはスキャンした距離範囲外の距離に被写体が位置する。
ここで図19に示すように、山の頂上(A点)から傾斜が続いていると認められる点をD点、E点とし、D点とE点の幅を山の幅L、A点とD点の焦点評価値の差SL1とA点とE点の焦点評価値の差SL2の和SL1+SL2をSLとする。
図16において、ステップS1601では、焦点評価値の最大値と最小値、及び最大値を与えるスキャンポイントioを求めてステップS1602へ進む。ステップS1602では、焦点評価値の山の幅を表す変数L、山の勾配を表す変数SLをともに零に初期化してステップS1603へ進む。ステップS1603では、最大値を与えるスキャンポイントioがスキャンを行った所定範囲における遠側端の位置か判定し、遠側端位置でないならばステップS1604へ進み無限遠方向への単調減少チェックを行う。遠側端位置であったならば、無限遠方向の単調減少チェックをスキップしステップS1605に進む。
<無限遠方向の単調減少チェック>
ここで、図17を参照して、S1604での無限遠方向への単調減少チェックについて説明する。図17において、ステップS1701では、カウンタ変数iをioに初期化してステップS1702へ進む。ステップS1702では、スキャンポイントiにおける焦点評価値の値d[i]と、iより1スキャンポイント分無限遠よりのスキャンポイントi−1における焦点評価値の値d[i−1]の差を所定値SlopeThrと比較する。d[i]−d[i−1]≧SlopeThrであれば、無限遠方向への単調減少が生じていると判断し、ステップS1703に進む。
一方、d[i]−d[i−1]≧SlopeThrでなければ、無限遠方向への単調減少は生じていないと判断し、無限遠方向への単調減少チェックを終了し、ステップS1605へ進む。
無限遠方向への単調減少をチェックする処理を継続する場合はステップS1703へ進む。ステップS1703では、焦点評価値が一定値以上の傾きで傾斜している部分の長さ(山の幅)を表す変数L、単調減少区間における減少量を表す変数SLを以下の式に従い更新してステップS1704へ進む。
L=L+1
SL=SL+(d[i]−d[i−1])
ステップS1704では、i=i−1として、検出をする点を1スキャンポイント無限遠側に移してステップS1705へ進む。ステップS1705では、カウンタiがスキャンを行った所定範囲における遠側端位置の値(=0)になったかチェックする。カウンタiの値が0、すなわち単調減少を検出する開始点がスキャンを行った所定範囲における遠側端位置に達したならば、無限遠方向への単調減少チェックを終了し、ステップS1605へ進む。
以上のようにしてi=ioから無限遠方向への単調減少をチェックする。
ステップS1605では、最大値を与えるスキャンポイントioがスキャンを行った所定範囲における至近端の位置か判定し、至近端位置でないならばステップS1606へ進み至近端方向への単調減少をチェックする。至近端位置であったならば、至近端方向の単調減少チェックをスキップしステップS1607に進む。
<至近端方向の単調減少チェック>
ここで、図18を参照して、S1606での至近端方向への単調減少チェックについて説明する。図18において、ステップS1801において、カウンタ変数iをioに初期化してステップS1802へ進む。ステップS1802では、スキャンポイントiにおける焦点評価値の値d[i]と、iより1スキャンポイント分至近端よりのスキャンポイントi+1における焦点評価値の値d[i+1]の差を所定値SlopeThrと比較する。d[i]−d[i+1]≧SlopeThrであれば、至近端方向への単調減少が生じていると判断し、ステップS1803に進む。
一方、d[i]−d[i+1]≧SlopeThrでなければ、至近端方向への単調減少は生じていないと判断し、至近端方向への単調減少チェックを終了し、ステップS1607へ進む。
至近端方向への単調減少をチェックする処理を継続する場合はステップS1803へ進む。ステップS1803では、焦点評価値が一定値以上の傾きで傾斜している部分の長さ(山の幅)を表す変数L、単調減少区間における減少量を表す変数SLを以下の式に従い更新してステップS1804へ進む。
L=L+1
SL=SL+(d[i]−d[i+1])
ステップS1804では、i=i+1として、検出をする点を1スキャンポイント至近端側に移してステップS1805へ進む。
ステップS1805では、カウンタiがスキャンを行った所定範囲における至近端位置の値(=N)になったかチェックする。カウンタiの値がN、すなわち単調減少を検出する開始点がスキャンを行った所定範囲における至近端位置に達したならば、至近端方向への単調減少チェックを終了し、ステップS1607へ進む。
以上のようにしてi=ioから至近端方向への単調減少をチェックする。
無限遠方向および至近端方向への単調減少チェックが終了したならば、得られた焦点評価値が山状になっているか否か、諸係数をそれぞれの閾値と比較し、○×の判定を行う。
ステップS1607では、焦点評価値の最大値を与えるスキャンポイントioがスキャンを行った所定範囲における至近端であり、かつ至近端スキャンポイントnにおける焦点評価値の値d[n]と、nより1スキャンポイント分無限遠よりのスキャンポイントn−1における焦点評価値の値d[n−1]の差が所定値SlopeThr以上であればステップS1611へ進み、そうでなければステップS1608へ進む。ステップS1608では、焦点評価値の最大値を与えるスキャンポイントioがスキャンを行った所定範囲における遠側端であり、かつ遠側端スキャンポイント0における焦点評価値の値d[0]と、0より1スキャンポイント分至近端よりのスキャンポイント1における焦点評価値の値d[1]の差が、所定値SlopeThr以上であればステップS1611へ進み、そうでなければステップS1609へ進む。
ステップS1609では、一定値以上の傾きで傾斜している部分の長さLが所定値Lo以上、かつ傾斜している部分の傾斜の平均値SL/Lが所定値SLo/Lo以上、かつ焦点評価値の最大値と最小値の差が所定値以上であれば、ステップS1610へ進む。そうでなければステップS1611へ進む。ステップS1610では、得られた焦点評価値が山状となっていて、被写体の焦点調節が可能であるため判定結果を○としている。ステップS1611では、得られた焦点評価値が山状となっておらず、被写体の焦点調節が不可能であるため判定結果を×としている。
以上のようにして、図10のS1013及び図11のS1111の合焦状態判定処理を行う。
<撮影動作>
図20を参照して、図2のS217における撮影動作について説明する。
図20において、ステップS2001では、被写体輝度を測定してステップS2001へ進む。ステップS2002ではステップS2001で測定した被写体輝度に応じて撮像素子106への露光を行ってステップS2003へ進む。撮像素子面上に結像された像は光電変換されてアナログ信号となり、ステップS2003にてA/D変換部107へと送られ、撮像素子106の出力ノイズ除去や非線形処理などの前処理の後にデジタル信号に変換される。ステップS2004では、A/D変換部107からの出力信号を画像処理部108でホワイトバランス調整し、適正な出力画像信号としてステップS2005へ進む。ステップS2005では、出力画像信号をフォーマット変換部109でJPEGフォーマット等へのフォーマット変換を行い、DRAM110に一時的に記憶してステップS2006へ進む。ステップS2006では、DRAM110のデータを画像記録部111にて撮像装置内のメモリ、または撮像装置に装着されたメモリカードなどの外部記憶媒体へと転送・記憶して撮影動作を終了し、ステップS201へと戻る。
以上説明したように、本実施形態によれば、画像信号から被写体を検出する方法に応じて、その被写体に適した動き判定を行うことができる。なお、本実施形態では、動き判定結果に応じてContinuousAF制御とServoAF制御を切り換える例をあげて説明を行ったが、本発明はこれに限られるものではない。
例えば、この動き判定を露出制御に適用すれば、被写体が動いていると判定した場合には、そうでない場合に比較して、露光時間を短くしたり、画面中の測光重点領域のサイズを拡大したりすることが考えられる。あるいは、ノイズリダクション制御に適用すれば、被写体が動いていると判定した場合には、そうでない場合に比較して、巡回係数の値を小さくしたり、演算の計算式自体を簡略化したりすることが考えられる。あるいは、監視カメラなどのセキュリティ制御に適用すれば、被写体が動いていると判定した場合には、そうでない場合に比較して、撮影感度を高くしたり、被写体領域の画像の表示倍率を拡大したりすることが考えられる。
このように、被写体の動きの有無を判定し、その判定結果を用いて制御を切り換えることはすでに様々な技術分野に応用されており、本実施形態における動き判定方法は、これらのいずれの技術分野にも適用することが可能である。
[他の実施形態]
本発明は、以下の処理を実行することによっても実現される。即ち、上記実施形態の機能を実現するソフトウェア(プログラム)をネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(又はCPUやMPU等)がプログラムコードを読み出して実行する処理である。この場合、そのプログラム、及び該プログラムを記憶した記憶媒体は本発明を構成することになる。