以下、本発明を適用した好適な実施形態を、添付図面を参照しながら詳細に説明する。
先ず、本発明の第1の実施形態について説明する。図1は、本発明の実施形態に係る電子カメラの構成を示すブロック図である。図1(a)は、本実施形態に係る電子カメラの全体構成を示しており、図1(b)は、本実施形態に係る電子カメラが主被写体の変化判断を実行するための構成を示している。図1(a)において、101はズーム機構を含む撮影レンズである。102は光量を制御する絞り及びシャッタである。103はAE処理部である。104は後述する撮像素子上に焦点をあわせるためのフォーカスレンズである。105はAF処理部である。106はフォーカスレンズ104を介して入力される被写体からの反射光を電気信号に変換する撮像素子である。107は撮像素子106の出力ノイズを除去するCDS回路やA/D変換前に行う非線形増幅回路を含むA/D変換部である。108は画像処理部である。109はフォーマット変換部である。110は高速な内蔵メモリ(例えばランダムアクセスメモリ等、以下DRAMと称す)である。111はメモリカード等の記録媒体とそのインタフェースからなる画像記録部である。112は撮影シーケンス等のシステムを制御するシステム制御部である。113は画像表示用メモリ(以下、VRAMと称す)である。114は、操作補助のための表示や主被写体が動いているか否か等を示す表示、撮影時には撮影画面と測距領域の表示を行う操作表示部である。115は光学ズーム動作や電子ズーム動作等、カメラを外部から操作するための操作部である。116は顔検出モードをON又はOFFに切り替える等の設定を行う撮影モードスイッチである。117はシステムに電源を投入するためのメインスイッチである。118はAFやAE等の撮影スタンバイ動作を行うためのスイッチ(以下、SW1と称す)である。119はSW1の操作後、撮影を行うためのスイッチ(以下、SW2と称す)である。120は画像処理部108で処理された画像信号を用いて顔検出を行い、検出した一つ又は複数の顔情報(位置・大きさ)をシステム制御部112に送る顔検出モジュールである。DRAM110は一時的な画像記憶手段としての高速バッファ、或いは画像の圧縮伸張における作業用メモリ等に使用される。操作部115には、例えば、撮像装置の撮影機能や画像再生時の設定等の各種設定を行うメニュースイッチ、撮影レンズのズーム動作を指示するズームレバー、撮影モードと再生モードの動作モード切換えスイッチ等が含まれる。なお、本実施形態に係る電子カメラは、本発明の自動合焦装置の適用例となる構成である。
図1(b)において、130は入力データに対して過去の履歴を数回バッファリングし、平滑化処理するローパスフィルタのブロックである。131はローパスフィルタリング後のデータに対して過去の履歴を数回バッファリングし、ディレイ分前の入力との差分をとるハイパスフィルタのブロックである。
以下、本発明の実施形態の動作について、図2〜図17を参照しながら詳述する。図2は、本発明の実施形態に係る電子カメラの動作を示すフローチャートである。
図2は、本発明の実施形態に係る電子カメラの動作を表すフローチャートである。まずメインスイッチ117がONになると、ステップ201へと進む。ステップ201において、システム制御部112は、後述する図3のフローチャートに従って主被写体の変化判断を行い、ステップ202へと進む。ステップ202において、システム制御部112は、輝度が所定値以下か否かを判定する。輝度が所定値以下であればステップ207へ進み、輝度が所定値以下でなければステップ203へと進む。これにより、後述するサーボAFにおいて必要なAF精度が得られない低照度条件時にサーボAFを行わずコンティニュアスAFを行うようにすることができる。ステップ203において、システム制御部112は、ステップ201のサブルーチンで判断した結果、主被写体が動いていると判定されたか否かを判定する。主被写体が動いていると判定された場合、ステップ204へと進み、そうでなければステップ207へと進む。ステップ204において、システム制御部112は、主被写体が動いていることを示す動きアイコンを画面上の所定位置に表示して、ステップ205へと進む。ステップ205において、システム制御部112は、後述する図7のフローチャートに従いサーボAFを行ってステップ209へと進む。ステップ207において、システム制御部112は、画面上の所定位置に主被写体が動いていることを示す動きアイコンが表示されていれば、非表示にしてステップ208へと進む。ステップ208において、システム制御部112は、後述する図6のフローチャートに従いコンティニュアスAFを行ってステップ209へと進む。なお、ステップ205、ステップ208は、本発明の焦点調整手段の処理例である。ステップ201は、本発明の動き検出手段の処理例である。また、ステップ201における主被写体(被写体像)の変化(動き)検出結果に応じてステップ205、ステップ208の処理を制御する処理は、本発明の制御手段の処理例である。さらに、コンティニュアスAFは、本発明の第1の焦点調整動作の適用例となる処理であり、サーボAFは、本発明の第2の焦点調整動作の適用例となる処理である。また、ステップ204、207は、本発明の表示制御手段の処理例である。
ステップ209において、システム制御部112は、スイッチSW1の状態を判定する。ONであればステップ210へと進み、ONでなければステップ201へと進む。ステップ210において、システム制御部112は、画像処理部108の出力からAE処理部103にAE処理を行わせてステップ211へと進む。ステップ211において、システム制御部112は、合焦フラグの状態を判定する。合焦フラグがTRUEであればステップ213へと進み、合焦フラグがFALSEであればステップ212へと進む。ステップ212において、システム制御部112は、後述する図10のフローチャートに従い通常AF動作を行ってステップ213へと進む。ステップ213において、システム制御部112は、サーボAFモードに設定されているか否かを判定する。サーボAFモードに設定されていればステップ214へと進み、サーボAFモードに設定されていなければステップ215へと進む。ステップ214において、システム制御部112は、後述する図7のフローチャートに従いサーボAFを行ってステップ215へと進む。ステップ215において、システム制御部112は、スイッチSW1の状態を判定する。ONであればステップ216へと進み、ONでなければステップ201へと進む。ステップ216において、システム制御部112は、スイッチSW2の状態を判定する。ONであればステップ217へと進み、ONでなければステップ213へと進む。ステップ217において、システム制御部112は撮影動作を行ってステップ201へと進む。ここで、ステップ217の撮影動作では、AFやAE等の撮影スタンバイ動作が行われた後、撮像され画像処理された画像データが電子カメラ内のメモリ、または電子カメラに装着された外部記憶媒体へと転送され記憶される。
以下、図2のフローチャートにおけるステップ201の主被写体の変化判断のサブルーチンについて、図3のフローチャートを参照しながら説明する。
まずステップ301において、顔検出モジュール120は顔検出したか否かを判定する。顔検出していればステップ302へと進み、顔検出していなければこのサブルーチンを終了し、ステップ202へと進む。ステップ302において、システム制御部112は、画角が変化するような設定があったか否かを判定する。画角が変化する設定とは、光学ズーム、電子ズーム、撮影画像のアスペクト比を変更するような設定である。画角が変化するような設定があった場合にはステップ303へと進み、そうでなければステップ304へと進む。このように光学ズームの変更設定、電子ズームの変更設定、撮影画像のアスペクト比の変更設定があった場合には、人物である被写体に変化がなくても顔サイズや画面内の顔位置が変化してしまう。そのため、システム制御部112は、ステップ303において、システム制御部112は顔サイズや顔位置の履歴を消去する。ここで消去するデータは、図1(b)における各フィルタのバッファリングデータである。後述する変動フラグや動きアイコンの状態は前回の状態(設定変更前の状態)を継続したままとする。特に動きアイコンは、画角が変化する設定前の状態で表示させておき、新たに被写体の動きが検出された際にその表示を更新するものとする。ステップ304において、システム制御部112は、後述する図4のフローチャートに従い顔サイズの変化判断を行ってステップ305へと進む。ステップ305において、システム制御部112は、後述する図5のフローチャートに従い顔位置の変化判断を行ってステップ306へと進む。ステップ306において、システム制御部112は、顔サイズ変動フラグがTRUEか否かを判定する。TRUEであればステップ309へと進み、そうでなければステップ307へと進む。ステップ307において、システム制御部112は、顔位置変動フラグがTRUEであるか否かを判定する。TRUEであればステップ308へと進み、そうでなければステップ309へと進む。ステップ309において、システム制御部112は主被写体が動いていると判断してこのサブルーチンを終了し、ステップ202へと進む。一方、ステップ308においては、システム制御部112は主被写体が動いていないと判断してこのサブルーチンを終了し、ステップ202へと進む。
以下、図3のフローチャートにおけるステップ304の顔サイズの変化判断のサブルーチンについて、図1(b)及び図4を参照しながら説明する。
まずステップ401において、システム制御部112は、顔検出モジュール120で検出された顔サイズ情報を取得してステップ402へ進む。ステップ402において、システム制御部112は、図1(b)のローパスフィルタ130によって時間軸方向で顔サイズ情報のローパス処理を施し、顔検出モジュール120の誤差の低減を図る。図1(b)ではローパスフィルタのタップ数を4としているが、このパラメータは顔検出モジュール120の精度によって変更できる。さらにステップ403において、システム制御部112は、図1(b)のハイパスフィルタ131によって顔サイズ情報のハイパス処理を施し、時間軸方向での顔サイズ変化の差分を算出する。ステップ404ではハイパス処理後の顔サイズ変化の差分の絶対値が予め設定した変化判定の閾値以上か否かを判定する。変化判定の閾値以上であればステップ405へ進み、そうでなければステップ407へ進む。ここで変化判定の閾値は、被写体距離が変化していない時の顔検出の誤差によって変化判定してしまわないように設定する。ステップ405において、システム制御部112は、顔サイズ変動フラグをTRUEにしてステップ406へ進む。ステップ406において、システム制御部112は、顔サイズ安定カウンタを初期化する。
ステップ407において、システム制御部112は、顔サイズ安定カウンタをインクリメントする。ステップ408において、システム制御部112は、顔サイズ安定カウンタが予め設定した安定回数の閾値以上であるか否かを判定する。安定回数の閾値以上であればステップ409へ進み、そうでなければこのサブルーチンを終了し、ステップ305へ進む。ここで安定回数の閾値は、被写体距離が変化している時に誤って安定したと判定してしまわないように設定する。ステップ409では、顔サイズ変動フラグをFALSEにしてこのサブルーチンを終了し、ステップ305へ進む。
以下、図3のフローチャートにおけるステップ305の顔位置の変化判断のサブルーチンについて、図5のフローチャートを参照しながら説明する。
まずステップ501において、システム制御部112は、顔検出モジュール120で検出した顔位置のX座標、Y座標の情報を取得してステップ502へ進む。ステップ502において、システム制御部112は、図1(b)のローパスフィルタ130によって時間軸方向でローパス処理を施し、顔検出モジュール120の誤差の低減を図る。さらにシステム制御部112は、ステップ503において、図1(b)のハイパスフィルタ131によってハイパス処理を施し、時間軸方向での顔位置変化の差分を算出する。ステップ504において、システム制御部112は、顔位置変化の差分の絶対値が予め設定した変化判定の閾値以上か否かを判定する。変化判定の閾値以上であれば、ステップ505へ進み、そうでなければステップ507へ進む。ここで変化判定の閾値は、被写体距離が変化していない時の顔検出の誤差や、手ぶれによる画面内の動きによって誤って変化判定してしまわないように設定する。ステップ506において、システム制御部112は、顔位置安定カウンタを初期化する。ステップ508において、システム制御部112は、顔位置安定カウンタが予め設定した安定回数の閾値以上か否かを判定する。安定回数の閾値以上であれば、ステップ509へ進み、そうでなければこのサブルーチンを終了してステップ306へ進む。ここで、安定回数の閾値は、被写体距離が変化している時に誤って安定したと判定してしまわないように設定する。ステップ508では、顔位置変動フラグをFALSEにしてこのサブルーチンを終了してステップ306へすすむ。
以下、図2のフローチャートにおけるステップ208のコンティニュアスAFのサブルーチンについて、図6のフローチャートを参照しながら説明する。コンティニュアスAFは、フォーカスレンズを所定量駆動する毎に、フォーカスレンズの次回の駆動方向を決定するAF方式である。
まず、ステップ601において、顔検出モジュール120は顔検出したか否かを判定する。顔検出していればステップ602へと進み、顔検出していなければステップ604へと進む。ステップ602において、システム制御部112は、顔検出モジュール120で検出した顔位置・顔サイズ等の顔情報を取得してステップ603へと進む。ステップ603において、システム制御部112は、顔検出していることを示す顔検出フラグをTRUEにしてステップ604へと進む。ステップ604において、システム制御部112は、顔検出フラグの状態を判定する。顔検出フラグがTRUEであれば、ステップ605へと進み、顔検出フラグがFALSEであれば、ステップ606へと進む。ステップ605において、システム制御部112は、最新の顔検出位置にAF枠を設定してステップ607へと進む。ここで、顔検出されているときのAF枠のサイズは、所定のサイズにしてもよいし、顔検出サイズに基づいて決定してもよい。ステップ606において、システム制御部112は、中央領域等の所定位置にAF枠を設定してステップ607へと進む。ステップ607において、システム制御部112は、ステップ605又はステップ606で設定したAF枠において焦点評価値及び輝度値を取得してステップ608へと進む。
ステップ608において、システム制御部112は、後述するステップ609の山登りAFにおいてピークが検出されたことを示す、ピーク検出フラグの状態を判定する。ピーク検出フラグがTRUEであれば、ステップ610へと進み、ピーク検出フラグがFALSEであれば、ステップ609へと進む。ステップ609において、システム制御部112は、後述する図8のフローチャートに従い山登りAFを行ってステップ209へと進む。ステップ610において、システム制御部112は、後述する図9のフローチャートに従い被写体距離の変化判定を行って、ステップ611へと進む。ステップ611において、システム制御部112は、被写体距離が変化したことを示す距離変化フラグの状態を判定する。距離変化フラグがTRUEであれば、ステップ612へと進み、距離変化フラグがFALSEであれば、ステップ613へと進む。ステップ612において、システム制御部112は、ピーク検出フラグ及び距離変化フラグをFALSEにする。そしてシステム制御部112は、ステップ609の山登りAFのサブルーチンで用いる焦点評価値の最大値、ピーク位置、焦点評価値の増加を示す増加カウンタをリセットしてステップ613へと進む。ステップ613において、システム制御部112は、フォーカスレンズをそのまま停止させてステップ209へと進む。
以下、図2のフローチャートにおけるステップ205、ステップ214のサーボAFのサブルーチンについて、図7のフローチャートを参照しながら説明する。サーボAFは、過去に検出した合焦位置に基づく駆動範囲内でフォーカスレンズを駆動するAF方式である。なお、サーボAFは、コンティニュアスAFよりもフォーカスレンズの駆動速度が速い(単位時間あたりのフォーカスレンズの駆動量が多い)。
まず、ステップ701において、顔検出モジュール120は顔検出しているか否かを判定する。顔検出していればステップ702へと進み、顔検出していなければステップ704へと進む。ステップ702において、システム制御部112は、顔検出モジュール120で検出した顔位置・顔サイズ等の顔情報を取得してステップ703へと進む。ステップ703において、システム制御部112は、顔検出していることを示す顔検出フラグをTRUEにしてステップ704へと進む。ステップ704において、システム制御部112は、顔検出フラグの状態を判定する。顔検出フラグがTRUEであればステップ705へと進み、顔検出フラグがFALSEであればステップ706へと進む。ステップ705において、システム制御部112は、最新の検出位置にAF枠を設定してステップ707へと進む。ここで、顔検出されているときのAF枠のサイズは、所定のサイズにしてもよいし、顔検出サイズに基づいて決定してもよい。ステップ706において、システム制御部112は、中央領域等の所定位置にAF枠を設定してステップ707へと進む。ステップ707において、システム制御部112は、ステップ705又はステップ706で設定したAF枠において焦点評価値及び輝度値を取得してステップ708へと進む。
ステップ708において、システム制御部112は、後述するステップ713の山登りAFにおいてピークが検出されたことを示す、ピーク検出フラグの状態を判定する。ピーク検出フラグがTRUEであればステップ710へと進み、ピーク検出フラグがFALSEであればステップ709へと進む。ステップ709において、システム制御部112は、後述する図8のフローチャートに従い山登りAFを行ってステップ707へと進む。ステップ710において、システム制御部112は、被写体距離が変化したことを示す距離変化フラグの状態を判定する。距離変化フラグがTRUEであればステップ712へと進み、距離変化フラグがFALSEであればステップ711へと進む。ステップ711において、システム制御部112は、合焦フラグがTRUEであるか否かを判定する。合焦フラグがTRUEであればステップ713へと進み、合焦フラグがFALSEであればステップ712へと進む。ステップ712において、システム制御部112は、後述する図11のフローチャートに従いサーボ中AF動作を行って、ステップ209又はステップ215へと進む。ステップ713において、システム制御部112は、後述する図9のフローチャートに従い被写体距離変化判定を行ってステップ209又はステップ215へと進む。
以下、図6のフローチャートにおけるステップ609及び図7のフローチャートにおけるステップ709の山登りAFのサブルーチンについて、図8のフローチャートを参照しながら説明する。
まずステップ801において、システム制御部112は、フォーカスレンズ104の現在位置を取得してステップ802へと進む。ステップ802において、システム制御部112は、焦点評価値・輝度値の取得及びフォーカスレンズ104の現在位置の取得をカウントするための取得カウンタに1を加えてステップ803へと進む。この取得カウンタは、初期化動作(図示略)において予め0に設定されているものとする。ステップ803において、システム制御部112は、取得カウンタの値が1か否かを判定する。取得カウンタの値が1ならばステップ806へと進み、取得カウンタの値が1でなければステップ804へと進む。ステップ804において、システム制御部112は、「今回の焦点評価値」が「前回の評価値」よりも大きいか否かを判定する。「今回の焦点評価値」が「前回の焦点評価値」よりも大きければステップ805へと進み、そうでなければステップ812へと進む。ステップ805において、システム制御部112は、「今回の焦点評価値」が「前回の評価値」よりも大きいことを示す増加カウンタに1を加えてステップ806へと進む。この増加カウンタは、初期化動作(図示略)において予め0に設定されているものとする。ステップ806において、システム制御部112は、今回の焦点評価値を焦点評価値の最大値としてシステム制御部112に内蔵される図示しない演算メモリに記憶して、ステップ807へと進む。ステップ807において、システム制御部112は、フォーカスレンズ104の現在の位置を焦点評価値のピーク位置としてシステム制御部112に内蔵される図示しない演算メモリに記憶して、ステップ808へと進む。ステップ808において、システム制御部112は、今回の焦点評価値を前回の焦点評価値としてシステム制御部112に内蔵される図示しない演算メモリに記憶してステップ809へと進む。ステップ809において、システム制御部112は、フォーカスレンズ104の現在位置が測距範囲の端にあるか否かを判定する。測距範囲の端にあればステップ810へと進み、測距範囲の端になければステップ811へと進む。ステップ810において、システム制御部112は、フォーカスレンズ104の移動方向を反転してステップ811へと進む。ステップ811において、システム制御部112は、フォーカスレンズ104を所定量移動してステップ209又はステップ215へと進む。
ステップ812において、システム制御部112は、「焦点評価値の最大値−今回の焦点評価値」が所定量より大きいか否かを判定する。所定量より大きければステップ813へと進み、そうでなければステップ808へと進む。ここで、「焦点評価値の最大値−今回の焦点評価値」が所定量より大きいこと、即ち最大値から所定量減少していれば、その最大値をピントのピーク位置での値とみなす。ステップ813において、システム制御部112は、増加カウンタが0より大きいか否かを判定する。増加カウンタが0より大きければステップ814へと進み、そうでなければステップ808へと進む。ステップ814において、システム制御部112は、フォーカスレンズ104をステップ807で記憶した焦点評価値が最大値となったピーク位置へ移動させて、ステップ815へと進む。ステップ815において、システム制御部112は、ピーク検出フラグをTRUEにしてステップ816へと進む。ステップ816において、システム制御部112は、取得カウンタを0としてステップ209又はステップ215へと進む。
以下、図6のフローチャートにおけるステップ610及び図7のフローチャートにおけるステップ713の被写体距離変化判定のサブルーチンについて、図9のフローチャートを参照しながら説明する。
まずステップ901において、顔検出モジュール120は、顔検出しているか否かを判定する。顔検出していればステップ902へと進み、顔検出していなければステップ906へと進む。ステップ902において、システム制御部112は、今回検出した顔サイズが前回検出した顔サイズに対して所定割合以上変化したか否かを判定する。所定割合以上変化していればステップ903へと進み、所定割合以上変化していなければステップ906へと進む。ステップ903において、システム制御部112は、顔検出サイズ変化回数に1を加えてステップ904へと進む。ステップ904において、システム制御部112は、顔サイズ変化回数が閾値以上か否かを判定する。閾値以上であればステップ905へと進み、そうでなければステップ906へと進む。ステップ906において、システム制御部112は、前回取得した輝度値に対して、今回取得した輝度値が所定値以上変化したか否かを判定する。所定値以上変化していればステップ907へと進み、所定値以上変化していなければステップ909へと進む。ステップ907において、システム制御部112は、輝度値変化回数に1を加えてステップ908へと進む。ステップ908において、システム制御部112は、輝度値変化回数が閾値以上か否かを判定する。閾値以上であればステップ905へと進み、そうでなければステップ909へと進む。ステップ909において、システム制御部112は、前回取得した焦点評価値に対して、今回取得した焦点評価値が所定値以上変化したか否かを判定する。所定値以上変化していればステップ910へと進み、所定値以上変化していなければステップ912へと進む。ステップ910において、システム制御部112は、焦点評価値変化回数に1を加えてステップ911へと進む。ステップ911において、システム制御部112は、焦点評価値変化回数が閾値以上か否かを判定する。閾値以上であればステップ905へと進み、そうでなければステップ912へと進む。ステップ912において、システム制御部112は、角速度センサ部125で検出したカメラの動作量が所定値以上変化したか否かを判定する。所定値以上変化していればステップ913へと進み、そうでなければステップ915へと進む。ステップ913において、システム制御部112は、カメラ動作回数に1を加えてステップ914へと進む。ステップ914において、システム制御部112は、カメラ動作回数が閾値以上か否かを判定する。閾値以上であればステップ905へと進み、そうでなければステップ915へと進む。ステップ915において、システム制御部112は、動体検出部124で被写体の動作量が所定値以上であるか否かを判定する。所定値以上であればステップ916へと進み、そうでなければステップ918へと進む。ステップ916において、システム制御部112は、被写体動作回数に1を加えてステップ917へと進む。ステップ917において、システム制御部112は、被写体動作回数が閾値以上か否かを判定する。閾値以上であればステップ905へと進み、そうでなければステップ918へと進む。
ステップ905において、システム制御部112は、合焦フラグをFALSEにし、距離変化フラグをTRUEにして被写体距離変化判定を終了し、ステップ611又はステップ209、ステップ215へと進む。ステップ918において、システム制御部112は、顔検出サイズ・輝度値・焦点評価値のいずれの評価値も変化しておらず、カメラ動作量、被写体動作量が所定値以上となっていないか否かを判定する。いずれの評価値も変化しておらず、いずれの動作量も所定値以上となっていなければステップ919へと進む。どれかの評価値が変化している、又は、どれかの動作量が所定値以上となっていれば、被写体距離変化判定を終了してステップ611又はステップ209、ステップ215へと進む。ステップ913において、システム制御部112は、顔サイズ変化回数・輝度値変化回数・焦点評価値変化回数の全てを0にして被写体距離変化判定を終了し、ステップ611又はステップ209、ステップ215へと進む。
以下、図2のフローチャートにおけるステップ212の通常AF動作のサブルーチンについて、図10のフローチャートを参照しながら説明する。
まず、ステップ1001において、顔検出モジュール120は顔検出したか否かを判定する。顔検出していればステップ1002へと進み、顔検出していなければステップ1004へと進む。ステップ1002において、システム制御部112は、顔検出モジュール120で検出した顔位置・顔サイズ等の顔情報を取得してステップ1003へと進む。ステップ1003において、システム制御部112は、顔検出していることを示す顔検出フラグをTRUEにしてステップ1004へと進む。ステップ1004において、システム制御部112は、顔検出フラグの状態を判定する。顔検出フラグがTRUEであればステップ1005へと進み、顔検出フラグがFALSEであれば、ステップ1006へと進む。ステップ1005において、システム制御部112は、最新の顔検出位置にAF枠を設定してステップ1007へと進む。ここで、顔検出されているときのAF枠のサイズは、所定のサイズにしてもよいし、顔検出サイズに基づいて決定してもよい。ステップ1006において、システム制御部112は、中央領域等の所定位置にAF枠を設定してステップ1007へと進む。ステップ1007において、システム制御部112は、AFモードがコンティニュアスAFモードであるかシングルAFモードであるか否かを判定する。コンティニュアスAFモードであればステップ1008へと進み、シングルAFモードであればステップ1010へと進む。
ステップ1008において、システム制御部112は、ピーク検出フラグがTRUEか否かを判定する。ピーク検出フラグがTRUEであればステップ1011へと進み、ピーク検出フラグがFALSEであればステップ1010へと進む。ステップ1010において、システム制御部112は、スキャン範囲設定を全域に設定してステップ1012へと進む。ステップ1011において、システム制御部112は、スキャン範囲をフォーカスレンズ104の現在位置を中心とした所定範囲と設定してステップ1012へと進む。ステップ1012において、システム制御部112は、後述する図15のフローチャートに従いスキャンを行って、ステップ1013へと進む。ステップ1013において、システム制御部112は、後述する図16のフローチャートに従い合焦判定を行って、ステップ1014へと進む。
ステップ1014において、システム制御部112は、ステップ1013における合焦判定の結果が○判定か否かを判定する。○判定であればステップ1015へと進み、○判定でなければステップ1017へと進む。ステップ1015において、システム制御部112は、フォーカスレンズ104をステップ1012でのスキャンで計算したピーク位置へ移動してステップ1016へと進む。ステップ1016において、システム制御部112は、ピーク検出フラグ及び合焦フラグをTRUEにして、距離変化フラグをFALSEにして通常AF動作を終了し、ステップ1013へと進む。ステップ1017において、システム制御部112は、フォーカスレンズ104を予め設定している位置(定点)へと移動してステップ1018へと進む。ここで、定点は被写体の存在確率の高い距離に設定する。顔が検出されていれば、顔サイズより人物の距離を推定して算出した距離に設定してもよい。ステップ1018において、システム制御部112は、ピーク検出フラグ及び距離変化フラグをFALSEにして通常AF動作を終了し、ステップ213へと進む。
以下、図7のフローチャートにおけるステップ712のサーボ中AF動作のサブルーチンについて、図11のフローチャートを参照しながら説明する。
まずステップ1101において、システム制御部112は、現在の時刻と次回のスキャンにかかる時間とから、次回のスキャンにおいてフォーカスレンズ104の位置がスキャン範囲の中心に位置するときの時刻を算出してPreTimeとする。そして処理はステップ1102へと進む。なお、上記次回のスキャンとは後述するステップ1110のスキャンのことである。ステップ1102において、システム制御部112は、後述する図12のフローチャートに従い予測可能判定を行って、ステップ1103へと進む。
ステップ1103において、システム制御部112は、ステップ1102の予測可能判定における予測可能判定結果が○判定か否かを判定する。○判定であればステップ1104へと進み、○判定でなければステップ1105へと進む。ステップ1104において、システム制御部112は、後述する図13のフローチャートに従い被写体位置予測を行って、ステップ1107へと進む。ステップ1105において、システム制御部112は、後述する過去の動体予測用のデータScanTime[0]〜ScanTime[i-1]及びHokanPeak[0]〜HokanPeak[i-1]をクリアする。そしてシステム制御部112は、さらに連続して予測可能判定となった回数を示すiを0にしてステップ1106へと進む。ステップ1106において、システム制御部112は、フォーカスレンズ104の現在位置をスキャン中心位置に設定して、ステップ1107へと進む。
ステップ1107において、システム制御部112は、合焦フラグがTRUEか否かを判定する。合焦フラグがTRUEであればステップ1108へと進み、合焦フラグがFALSEであればステップ1109へと進む。ステップ1108において、システム制御部112は、スキャン範囲を所定範囲に設定してステップ1110へと進む。ステップ1109において、システム制御部112は、ステップ1108で設定する所定範囲よりも広い範囲にスキャン範囲を設定してステップ1110へと進む。ステップ1110において、システム制御部112は、後述する図15のフローチャートに従いスキャンを行って、ステップ1111へと進む。ステップ1111において、システム制御部112は、後述する図16のフローチャートに従い合焦判定を行って、ステップ1112へと進む。
ステップ1112において、システム制御部112は、ステップ1111で判定した合焦判定結果が○判定か否かを判定する。○判定であればステップ1113へと進み、○判定でなければステップ1125へと進む。ステップ1113において、システム制御部112は、合焦フラグをTRUEにしてステップ1114へと進む。ステップ1114において、連続して合焦判定が○判定でなかった回数を示す×countを0にしてステップ1115へと進む。
ステップ1115において、システム制御部112は、ステップ1110におけるスキャン結果(ピーク位置)とスキャン中心位置の差が所定値より小さいか否かを判定する。所定値より小さければステップ1116へと進み、そうでなければステップ1119へと進む。ステップ1116において、システム制御部112は、連続してステップ1110におけるピーク位置とスキャン中心位置の差が所定値より小さくなった回数を示すStCountに1を加えてステップ1117へと進む。ステップ1117において、システム制御部112は、StCountが閾値以上であるか否かを判定する。閾値以上であればステップ1118へと進み、そうでなければステップ1120へと進む。ステップ1118において、システム制御部112は、被写体の距離変化がなくなったと判断して、距離変化フラグをFALSEにしてサーボ中AF動作を終了し、ステップ209又はステップ215へと進む。これにより、被写体距離が変化しない場合には、無駄にスキャンを繰り返すことなくフォーカスレンズを停止させることができる。
ステップ1119において、システム制御部112は、StCountを0にクリアしてステップ1120へと進む。ステップ1120において、システム制御部112は、ステップ1110における今回のスキャン中心位置に対する今回のピーク位置の方向と、前回のスキャン中心位置に対する前回のピーク位置の方向とが同方向であるか否かを判定する。同方向であればステップ1121へと進み、同方向でなければステップ1122へと進む。ステップ1121において、システム制御部112は、同方向移動フラグをTRUEにしてステップ1123へと進む。ステップ1122において、システム制御部112は、同方向移動フラグをFALSEにしてステップ1123へと進む。ステップ1123において、システム制御部112は、今回のスキャンにおいてフォーカスレンズ104の位置がスキャン範囲の中心に位置した時刻をScanTime[i]とする。そしてシステム制御部112は、今回のスキャンにおけるピーク位置をHokanPeak[i]としてステップ1124へと進む。ステップ1124において、システム制御部112は、iに1を加えてサーボAF動作を終了し、ステップ209またはステップ215へと進む。ステップ1125において、システム制御部112は、合焦フラグをFALSEにしてステップ1126へと進む。ステップ1126において、システム制御部112は、×Countに1を加えてステップ1127へと進む。ステップ1127において、システム制御部112は、×Countが所定値よりも大きいか否かを判定する。所定値より大きければステップ1128へと進み、そうでなければサーボAF動作を終了し、ステップ209又はステップ215へと進む。ステップ1128において、システム制御部112は、ピーク検出フラグ及び距離変化フラグをFALSEにしてサーボAF動作を終了し、ステップ209又はステップ215へと進む。
以下、図11のフローチャートにおけるステップ1102の予測可能判定のサブルーチンについて、図12のフローチャートを参照しながら説明する。
まずステップ1201において、システム制御部112は、i=0か否かを判定する。0であればステップ1205へと進み、そうでなければステップ1202へと進む。ステップ1202において、システム制御部112は、PreTimeとScanTime[i-1]との差が所定時間よりも短いか否かを判定する。所定時間よりも短ければステップ1203へと進み、そうでなければステップ1205へと進む。これより、前回のスキャンから今回のスキャンまでの間の時間が分かり、前回のスキャン結果を使用した予測の信頼性があるのか否かを判断することができる。ステップ1203において、システム制御部112は、同方向移動フラグがTRUEか否かを判定する。同方向移動フラグがTRUEであればステップ1204へと進み、同方向移動フラグがFALSEであればステップ1205へと進む。これにより、被写体が距離方向で同方向に移動していると判断したときにのみ予測を行うことで、誤測距の結果を使用することによる誤った予測を低減することができる。ステップ1204において、システム制御部112は、予測可能判定の結果を○判定として、予測可能判定フローを終了し、ステップ1103へと進む。ステップ1205において、システム制御部112は、予測可能判定の結果を×判定として、予測可能判定フローを終了し、ステップ1103へと進む。
以下、図11のフローチャートにおけるステップ1104の被写体位置予測のサブルーチンについて、図13及び図14を参照しながら説明する。
まずステップ1301において、システム制御部112は、iが2より小さいか否かを判定する。iが2より小さければステップ1302へと進み、そうでなければステップ1303へと進む。ステップ1302において、システム制御部112は、スキャン中心位置を前回のスキャンのピーク位置に設定して被写体位置予測フローを終了し、ステップ1107へと進む。ステップ1303において、システム制御部112は、i=2であるか否かを判定する。i=2であればステップ1304へと進み、iが2より大きければステップ1306へと進む。ステップ1304において、システム制御部112は、図14(a)に示すように下記の動体予測式(1)を使って、(ScanTime[0],HokanPeak[0])と、(ScanTime[1],HokanPeak[1])の2点より、PreTime時の被写体の予測位置PrePositionを算出してステップ1005へと進む。
PrePosition=(PreTime−ScanTime[0])×(HokanPeak[1]−HokanPeak[0])/(ScanTime[1] - ScanTime[0])+HokanPeak[0] ・・・動体予測式(1)
ステップ1305において、システム制御部112は、ステップ1304で算出した被写体の予測位置PrePositionをスキャン中心位置に設定して被写体位置予測フローを終了し、ステップ1107へと進む。ステップ1306において、システム制御部112は、図14(b)に示すように下記の動体予測式(2)を使って、(ScanTime[i-2],HokanPeak[i-2])、(ScanTime[i-1],HokanPeak[i-1])、(ScanTime[i],HokanPeak[i])の3点より、PreTime時の被写体の予測位置PrePositionを算出してステップ1307へと進む。
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]
・・・動体予測式(2)
ステップ1307において、システム制御部112は、ステップ1306で算出した被写体の予測位置PrePositionをスキャン中心位置に設定して被写体位置予測フローを終了し、ステップ1107へと進む。
以下、図10のフローチャートにおけるステップ1012及び図11のフローチャートにおけるステップ1110のスキャンのサブルーチンを、図15のフローチャートを参照しながら説明する。
まずステップ1501において、システム制御部112は、フォーカスレンズ104をスキャン開始位置に移動する。スキャン開始位置は設定されたスキャン範囲の一端に設定される。ステップ1502において、システム制御部112は、撮影画面内に設定される測距領域の焦点評価値とフォーカスレンズ104の位置をシステム制御部112に内蔵される図示しない演算メモリに記憶する。ステップ1503において、システム制御部112は、レンズ位置がスキャン終了位置にあるか否かを判定する。終了位置であればステップ1505へ、そうでなければステップ1504へ進む。スキャン終了位置は、設定されたスキャン範囲の他端に設定される。ステップ1504において、システム制御部112は、フォーカスレンズ104を駆動して所定の方向へ所定量動かしてステップ1502へと進む。ステップ1505において、システム制御部112は、ステップ1502で記憶した焦点評価値とそのレンズ位置から、焦点評価値のピーク位置を計算する。
以下、図10のフローチャートにおけるステップ1013及び図11のフローチャートにおけるステップ1111の合焦判定のサブルーチンを、図16〜図17を参照しながら説明する。
焦点評価値は遠近競合等の特殊な場合を除けば、横軸にフォーカスレンズ位置、縦軸に焦点評価値をとるとその形は図17に示すような山状になる。そこで焦点評価値が山状になっているか否かを、焦点評価値の最大値と最小値の差、一定値(SlopeThr)以上の傾きで傾斜している部分の長さ、傾斜している部分の勾配から判断する。これにより、合焦判定を行うことができる。合焦判定における判定結果は、以下に示すように○×で出力される。
○:焦点評価値のピーク位置から、被写体の焦点調節が可能である。
×:被写体のコントラストが不十分、もしくはスキャンした距離範囲外の距離に被写体が位置する。
ここで図17に示すように、山の頂上(A点)から傾斜が続いていると認められる点をD点、E点とし、D点とE点の幅を山の幅L、A点とD点の焦点評価値の差SL1とA点とE点の焦点評価値の差SL2の和SL1+SL2をSLとする。
図16は、図10のフローチャートにおけるステップ1013及び図11のフローチャートにおけるステップ1111の合焦判定のサブルーチンのフローチャートである。
まずステップ1601において、システム制御部112は、焦点評価値の最大値と最小値、及び最大値を与えるスキャンポイントioを求めてステップ1602へと進む。次にステップ1602において、システム制御部112は、焦点評価値の山の幅を表す変数L、山の勾配を表す変数SLをともに零に初期化してステップ1603へと進む。ステップ1603において、システム制御部112は、最大値を与えるスキャンポイントioがスキャンを行った所定範囲における遠側端の位置か否かを判定する。遠側端位置でないならばステップ1604へ進み、システム制御部112は無限遠方向への単調減少を調べる。遠側端位置であったならば、この処理をスキップしステップ1605に進む。ステップ1605において、システム制御部112は、最大値を与えるスキャンポイントioがスキャンを行った所定範囲における至近端の位置か否かを判定する。至近端位置でないならばステップ1606へ進み、システム制御部112は至近端方向への単調減少を調べる。至近端位置であったならば、システム制御部112はこの処理をスキップしステップ1607に進む。
無限遠方向および至近端方向への単調減少をチェックする処理が終了したならば、システム制御部112は、得られた焦点評価値が山状になっているか否か、諸係数をそれぞれのしきい値と比較し、○×の判定を行う。ステップ1607において、システム制御部112は、焦点評価値の最大値を与えるスキャンポイントioがスキャンを行った所定範囲における至近端であり、かつ至近端スキャンポイントnにおける焦点評価値の値d[n]と、nより1スキャンポイント分無限遠よりのスキャンポイントn−1における焦点評価値の値d[n−1]との差が所定値SlopeThr以上であればステップ1611へ進み、そうでなければステップ1608へ進む。ステップ1608において、システム制御部112は、焦点評価値の最大値を与えるスキャンポイントioがスキャンを行った所定範囲における遠側端であり、かつ遠側端スキャンポイント0における焦点評価値の値d[0]と、0より1スキャンポイント分至近端よりのスキャンポイント1における焦点評価値の値d[1]との差が所定値SlopeThr以上であればステップ1611へ進み、そうでなければステップ1609へ進む。
ステップ1609において、システム制御部112は、一定値以上の傾きで傾斜している部分の長さLが所定値Lo以上であり、かつ傾斜している部分の傾斜の平均値SL/Lが所定値SLo/Lo以上であり、かつ焦点評価値の最大値と最小値の差が所定値以上であるか否かを判定する。この判定において真と判定されれば、ステップ1310へ進み、偽と判定されればステップ1611へ進む。ステップ1610において、得られた焦点評価値が山状となっていて、被写体の焦点調節が可能であるため判定結果を○としている。ステップ1611において、得られた焦点評価値が山状となっておらず、被写体の焦点調節が不可能であるため判定結果を×としている。以上のようにして、図10のフローチャートにおけるステップ1013及び図11のフローチャートにおけるステップ1111の合焦判定を行う。
上述した実施形態においては、被写体像の動きが検出されなかった場合にはコンティニュアスAFを行い、被写体像の動きが検出された場合にはサーボAFを行うようにしている。従って、できるだけライブ画像の見栄えを損ねることなく、動いている被写体にピント追従し続けることが可能となる。また、撮影する画角が変化する設定がなされた場合、被写体の動き検出に使用される、被写体の位置及びサイズの履歴を消去するとともに、当該設定前の動き検出結果(変動フラグ)を用いるように構成している。従って、画角が変更される度にAFの制御が頻繁に切り替わることを回避し、ライブ画像の見栄えを損ねることがない。
上述した実施形態においては、できるだけライブ画像の見栄えを損ねることなく動いている被写体にピント追従し続けることが可能となる。以上、本発明を適用した好適な実施形態について説明したが、本発明はこれらの実施形態に限定されず、その要旨の範囲内で種々の変形及び変更が可能である。
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。