以下、添付図面を参照して実施形態を詳しく説明する。なお、以下の実施形態は特許請求の範囲に係る発明を限定するものではない。実施形態には複数の特徴が記載されているが、これらの複数の特徴の全てが発明に必須のものとは限らず、また、複数の特徴は任意に組み合わせられてもよい。さらに、添付図面においては、同一若しくは同様の構成に同一の参照番号を付し、重複した説明は省略する。
図1は本発明の撮像装置の一実施形態であるデジタルカメラの構成を示すブロック図である。
デジタルカメラ100は、撮影光学系として、ズーム機構を含む撮影レンズ101、光量を制御する絞り及びシャッター102、撮像素子108上に焦点を合わせるためのフォーカスレンズ104を備える(配置されている)。AE処理部103は、絞り及びシャッター102を制御して露出を調整する。AF処理部105は、フォーカスレンズ104を駆動して撮影光学系の焦点を合わせる。ストロボ106は、EF処理部107の制御により、被写体を照明する。
撮像素子108は、被写体からの反射光(被写体像)を電気信号に変換する多数の光電変換素子を有する。A/D変換部109は、撮像素子108の出力ノイズを除去するCDS回路、A/D変換前に行う非線形増幅回路、そしてアナログ信号をデジタル信号に変換するA/D変換器を含む。画像処理部110は、デジタル信号に変換された画像信号に信号処理を施す。WB処理部111は、デジタル画像信号に対してホワイトバランス処理を行う。フォーマット変換部112は、画像処理部110で処理された画像データに対してフォーマット変換を行う。DRAM113は、画像データの一時保存などに用いられる高速アクセスが可能な内蔵メモリ(例えばランダムアクセスメモリなど)である。画像記録部114は、メモリーカードなどの記録媒体とそのインターフェースからなる。
システム制御部115は、撮影シーケンス制御などのデジタルカメラ100全体の制御を司る。VRAM116は、表示用の画像を記憶する画像表示用メモリである。操作表示部117は、画像表示、操作補助のための表示、カメラの状態の表示などの他、撮影時には撮影画面と焦点検出領域を表示する。操作部118は、ユーザーがカメラを外部から操作するための操作部材を有する。撮影モードスイッチ119は、顔検出モードをONまたはOFFに切り替えたり、撮影モードを選択する等の操作を行うためのスイッチである。メインスイッチ120は、デジタルカメラ100の電源を投入するためのスイッチである。
スイッチSW1(121)は、レリーズボタン130が半押しされることによりONとなり、AFやAE等の撮影スタンバイ動作が行われる。また、スイッチSW2(122)は、スイッチSW1がONされた後、レリーズボタン130がさらに押し込まれる(全押しされる)ことによりONとなり、実際の撮影動作が実行される。顔検出モジュール123は、画像処理部110で処理された画像信号を用いて顔検出を行い、検出した一つ又は複数の顔情報(位置・大きさ・信頼度)をシステム制御部115に送る。なお、顔の検出方法は、公知の方法が用いられるが、本発明の主眼点ではないため詳細な説明は省略する。
物体検出モジュール124は、画面内の顔以外の物体を検出して検出情報をシステム制御部115に送る。具体的には、画面内の色・輝度などの特徴量から主被写体と推定される領域を自動的に検出する。もしくは、操作表示部117がタッチパネル等により画面操作を受け付ける場合は、ユーザーが指定した表示部の座標から一定範囲内において、色・輝度などの特徴量から被写体を検出して追尾する。タッチパネル等が非搭載の場合は、操作表示部117に被写体指定用のGUI等を表示させて操作部118で被写体を指定し、特徴量を算出して追尾できるような構成とする。こちらも本発明の主眼点ではないため詳細な説明は省略する。角速度センサ部125は、カメラ自体の動きを検出して、カメラの動き情報をシステム制御部115に送る。
なお、DRAM113は、一時的に画像を記憶する高速バッファとして、あるいは画像の圧縮伸張における作業用メモリなどとして使用される。操作部118は、例えば次のようなものが含まれる。撮像装置の撮影機能や画像再生時の設定などの各種設定を行うメニュースイッチ、撮影レンズのズーム動作を指示するズームレバー、撮影モードと再生モードの動作モード切換えスイッチ、などである。
以下、本実施形態におけるデジタルカメラ100の動作について説明する。図2は、本実施形態のデジタルカメラ100の全体動作を示すフローチャートである。
まず、メインスイッチ120がONされると、ステップS201へと進む。ステップS201では、スイッチSW1の状態を判定し、ONであればステップS202へと進み、ONでなければステップS201を継続的に実行する。
ステップS202では、AE処理部103が画像処理部110の出力からAE処理(露出制御処理)を行ってステップS203へと進む。ステップS203では、後述する図6のフローチャートに従って、通常AF動作が行われ、ステップS204へと進む。
ステップS204では、ServoAFモードに設定されているか否かを判定し、ServoAFモードに設定されていればステップS205へと進み、ServoAFモードに設定されていなければステップS206へと進む。ここで、ServoAFモードとは、被写体に一旦焦点が合った後も、被写体を追尾して焦点を合わせ続けるAFモードである。
ステップS205では、後述する図3に従って、ServoAFを行ってステップS206へと進む。ステップS206では、スイッチSW1の状態を判定し、ONであればステップS207へと進み、ONでなければステップS201へと戻る。
ステップS207では、スイッチSW2の状態を判定し、ONであればステップS208へと進み、ONでなければステップS204へと戻る。ステップS208では、後述する図16のフローチャートに従って、撮影動作を行ってステップS201へと戻る。
図3は、図2のフローチャートのステップS205におけるServoAF動作のサブルーチンのフローチャートである。
まず、ステップS301では、顔検出モジュール123と物体検出モジュール124により、被写体を検出したか否かを判定する。ステップS301において被写体が検出されていればステップS302へ進み、被写体が検出されていなければS303へ進む。
ステップS302では、被写体として顔が検出されていればステップS304へと進み、検出された被写体が顔でない場合はステップS305へと進む。
ステップS304では、顔検出モジュール123で検出した顔の位置、顔のサイズなどの顔情報を取得してステップS306へと進む。ステップS306では、最新の顔検出位置にAF枠(焦点検出枠)を設定してステップS308へと進む。ここで、顔が検出されている場合のAF枠のサイズは、予め設定された所定のサイズにしてもよいし、検出された顔のサイズに基づいて決定してもよい。本実施形態では、検出された顔のサイズに基づいて決定することとする。このイメージを図4(a)に示す。
ステップS305では、物体検出モジュール124で検出した物体の位置、物体のサイズなどの情報を取得してステップS307へと進む。ステップS307では、最新の物体検出位置を中心に3×3の所定サイズの9つのAF枠を設定してステップS308へと進む。ここで、物体が検出されているときのAF枠のサイズは、予め設定された所定のサイズにしてもよいし、検出サイズに基づいて決定してもよい。本実施形態では、顔以外の被写体では、動いている場合に検出サイズの変動が発生しやすいため、AF評価値への影響を考慮して所定サイズで固定することとする。このイメージを図4(b)に示す。
ステップS303では、画面の中央領域などの所定位置にAF枠を設定してステップS308へと進む。
ステップS308では、設定したAF枠において焦点評価値及び輝度値を取得してステップS309へと進む。
ステップS309では、後述するステップS311のServo中AF動作においてピークが検出されたことを示す、ピーク検出フラグの状態を調べる。ピーク検出フラグがTRUEであればステップS310へと進み、ピーク検出フラグがFALSEであれば、ステップS311へと進む。
ステップS311では、後述する図7のフローチャートに従ってServo中AFの動作を行って、図2のステップS206へと進む。
ステップS310では、後述する図5のステップS405において設定される被写体距離が変化したことを示す距離変化フラグの状態を調べる。距離変化フラグがTUREであればステップS314へと進み、距離変化フラグがFALSEであれば、ステップS312へと進む。
ステップS312では、後述する図6のステップS508において設定される合焦フラグがTRUEであるか否かを判定し、合焦フラグがTRUEであればステップS313へと進み、合焦フラグがFALSEであればステップS314へと進む。ステップS313では後述する図5のフローチャートに従って被写体距離変化判定処理を行う。
ステップS314では、一度でも焦点評価値が所定値以上変化したか否かを判定する。ステップS314の条件を満たした場合はステップS315へ進み、満たさない場合はステップS316へ進む。
ステップS315では、後述の図16のステップS1501におけるフォーカスレンズ104の停止状態での撮影指示後の再スキャン判定(再度のスキャンの判定)に用いる再スキャン判定フラグ(以後再スキャンFlg)をTRUEにしてServoAFの処理を終了する。また、ステップS316では再スキャン判定フラグをFALSEにしてServoAFの処理を終了する。この再スキャンFlgは図2におけるステップS201のスイッチSW1のON時にFALSEで初期化するが図示は省略する。
図5は、図3のフローチャートにおけるステップS313の被写体距離変化判定処理のサブルーチンを示す図である。
まず、ステップS401では、顔検出モジュール123により、顔が検出されているか否かを判定し、顔が検出されていればステップS402へと進み、顔が検出されていなければステップS406へと進む。
ステップS402では、今回検出した顔サイズが前回検出した顔サイズに対して所定割合以上変化したか否かを判定し、所定割合以上変化していればステップS403へと進み、所定割合以上変化していなければステップS406へと進む。ステップS403では、顔検出サイズ変化回数に1を加えてステップS404へと進む。
ステップS404では、顔サイズ変化回数が閾値以上か否かを判定し、閾値以上であればステップS405へと進み、そうでなければステップS406へと進む。
ステップS406では、前回取得した輝度値に対して、今回取得した輝度値が所定値以上変化したか否かを判定し、所定値以上変化していればステップS407へと進み、所定値以上変化していなければステップS409へと進む。ステップS407では、輝度値変化回数に1を加えてステップS408へと進む。
ステップS408では、輝度値変化回数が閾値以上か否かを判定し、閾値以上であればステップS405へと進み、そうでなければステップS409へと進む。
ステップS409では、前回取得した焦点評価値に対して、今回取得した焦点評価値が所定値以上変化したか否かを判定し、所定値以上変化していればステップS410へと進み、所定値以上変化していなければステップS412へと進む。ステップS410では、焦点評価値変化回数に1を加えてステップ411へと進む。
ステップS411では、焦点評価値変化回数が閾値以上か否かを判定し、閾値以上であればステップS405へと進み、そうでなければステップS412へと進む。
ステップS412では、角速度センサ部125で検出したカメラの動作量が所定値以上変化したか否かを判定し、所定値以上変化していればステップS413へと進み、そうでなければステップS415へと進む。ステップS413では、カメラ動作回数に1を加えてステップS414へと進む。
ステップS414では、カメラ動作回数が閾値以上か否かを判定し、閾値以上であればステップS405へと進み、そうでなければステップS415へと進む。
ステップS415では、物体検出モジュール124により被写体の動作量が所定値以上であるか否かを判定し、所定値以上であればステップS416へと進み、そうでなければステップS418へと進む。ステップS416では、被写体動作回数に1を加えてステップS417へと進む。
ステップS417では、被写体動作回数が閾値以上か否かを判定し、閾値以上であればステップS405へと進み、そうでなければステップS418へと進む。
ステップS405では、合焦フラグをFALSEにし、距離変化フラグをTRUEにして被写体距離変化判定処理を終了し、図3のステップS314へと進む。
ステップS418では、顔検出サイズ・輝度値・焦点評価値のいずれの評価値も変化せず、カメラ動作量、被写体動作量が所定値以上となっていないかを判定する。いずれの評価値も変化しておらず、いずれの動作量も所定値以上となっていなければステップS419へと進む。前述のどれかの評価値が変化している、または、どれかの動作量が所定値以上となっていれば、被写体距離変化判定処理を終了する。
ステップS419では、顔サイズ変化回数・輝度値変化回数・焦点評価値変化回数・カメラ動作回数・被写体動作回数の全てを0にして被写体距離変化判定処理を終了する。
図6は、図2のフローチャートにおけるステップS203の通常AF動作のサブルーチンを示す図である。
まず、ステップS501では、顔検出モジュール123で顔検出、もしくは物体検出モジュール124により被写体が検出されたか否かを判定し、被写体が検出されていればステップS503へと進み、検出されていなければステップS502へと進む。
ステップS503では、顔検出モジュール123、もしくは物体検出モジュール124で検出した被写***置・サイズなどの情報を取得して、最新の被写体検出位置にAF枠を設定する。ここで、被写体が検出されている場合のAF枠のサイズは、予め設定された所定のサイズにしてもよいし、検出サイズに基づいて決定してもよい。本実施形態では、被写体検出サイズに基づいて一つのAF枠を設定する。顔が検出されている場合のイメージは、ServoAFの場合と同様に図4(a)のようになる。物体が検出されている場合は、図4(c)のようになる。
ステップS502では、画面の中央領域などの所定位置にAF枠を設定してステップS504へと進む。ステップS504では、後述する図11のフローチャートに従ってフォーカスレンズ104のスキャンを行って、ステップS505へと進む。
ステップS505では、後述する図12のフローチャートに従って合焦判定を行って、ステップS506へと進む。
ステップS506では、ステップS505における合焦判定の結果が、OK判定であるか否かを判定し、OK判定であればステップS507へと進み、OK判定でなければステップS509へと進む。
ステップS507では、フォーカスレンズ104をステップS504でのスキャンで検出したピーク位置へ移させしてステップS508へと進む。ステップS508では、ピーク検出フラグ及び合焦フラグをTRUEにして、距離変化フラグをFALSEにして通常AF動作を終了し、図2のステップS204へと進む。
ステップS509では、フォーカスレンズ104を予め設定している位置(定点)へと移動させてステップS510へと進む。ここで、定点は被写体の存在確率の高い距離に設定する。顔が検出されていれば、顔サイズから人物の距離を推定し、推定した距離に設定してもよい。ステップS510では、ピーク検出フラグ及び合焦フラグ、さらに距離変化フラグをFALSEにして通常AF動作を終了する。
図7は、図3のフローチャートにおけるステップS311のServo中AF動作のサブルーチンを示す図である。
まず、ステップS601では、現在の時刻と、次回のスキャン(後述するステップS610のスキャン)までの時間と、次回のスキャンにかかる時間とから、次回のスキャンにおいてフォーカスレンズ104の位置がスキャン範囲の中心に位置するときの時刻(予測時刻)を算出して、PreTimeとする。
ステップS602では、後述する図8のフローチャートに従って予測可能判定を行って、ステップS603へと進む。
ステップS603では、ステップS602の予測可能判定における予測可能判定結果がOK判定であるか否かを判定し、OK判定であればステップS604へと進み、OK判定でなければステップS605へと進む。
ステップS604では、後述する図9のフローチャートに従って被写***置予測処理を行って、ステップS607へと進む。
ステップS605では、後述する過去の動体予測用のデータScanTime[0]~ScanTime[i-1]及びHokanPeak[0]~HokanPeak[i-1]をクリアし、さらに連続して予測可能判定となった回数を示すiを0にしてステップS606へと進む。ステップS606では、フォーカスレンズ104の現在位置をスキャン中心位置に設定して、ステップS607へと進む。
ステップS607では、合焦フラグがTRUEか否かを判定し、合焦フラグがTRUEであればステップS608へと進み、合焦フラグがFALSEであればステップS609へと進む。ステップS608では、スキャン範囲を所定範囲に設定してステップS610へと進む。ステップS609では、ステップS608で設定する所定範囲よりも広い範囲にスキャン範囲を設定してステップS610へと進む。
ステップS610では、後述する図11のフローチャートに従ってスキャンを行って、ステップS611へと進む。
ステップS611では、後述する図12のフローチャートに従って合焦判定を行って、ステップS612へと進む。
ステップS612では、物体検出モジュール124により被写体が検出されたか否かを判定する。被写体が検出されていれば複数のAF枠を生成しているので、ステップS613において後述する図17に従って合焦枠の選択を行う。
ステップS614では、ステップS611において判定した合焦判定結果がOK判定か否かを判定し、OK判定であればステップS615へと進み、OK判定でなければステップS627へと進む。
ステップS615では、合焦フラグをTRUEにしてステップS616へと進む。ステップS616では、連続して合焦判定がOK判定でなかった回数を示すNGcountを0にしてステップS617へと進む。
ステップS617では、ステップS610におけるスキャン結果(ピーク位置)とスキャン中心位置の差が所定値より小さいか否かを判定し、所定値より小さければステップS618へと進み、そうでなければステップS621へと進む。ステップS618では、連続してステップS610におけるピーク位置とスキャン中心位置の差が所定値より小さくなった回数を示すStCountに1を加えてステップS619へと進む。
ステップS619では、StCountが閾値以上であるか否かを判定し、閾値以上であればステップS620へと進み、そうでなければステップS622へと進む。ステップS620では、被写体の距離変化がなくなったと判断して、距離変化フラグをFALSEにしてServo中AF動作を終了する。これにより、被写体距離が変化しない場合には、無駄にスキャンを繰り返すことなくフォーカスレンズを停止させることができる。
ステップS621では、StCountを0にクリアしてステップS622へと進む。ステップS622では、ステップS610における今回のスキャン中心位置に対する今回のピーク位置の方向と、前回のスキャン中心位置に対する前回のピーク位置の方向とが同方向であるか否かを判定する。そして、同方向であればステップS623へと進み、同方向でなければステップS624へと進む。
ステップS623では、同方向移動フラグをTRUEにしてステップS625へと進む。ステップS624では、同方向移動フラグをFALSEにしてステップS625へと進む。
ステップS625では、今回のスキャンにおいてフォーカスレンズ104の位置がスキャン範囲の中心に位置した時刻をScanTime[i]として、今回のスキャンにおけるピーク位置をHokanPeak[i]としてステップS626へと進む。ステップS626では、iに1を加えてServo中AF動作を終了する。
ステップS627では、合焦フラグをFALSEにしてステップS628へと進む。ステップS628ではNGCountに1を加えてステップS629へと進む。ステップS629では、NGCountが所定値よりも大きいか否かを判定し、所定値より大きければステップS630へと進み、そうでなければServo中AF動作を終了する。ステップS630では、ピーク検出フラグ及び距離変化フラグをFALSEにしてServo中AF動作を終了する。
図8は、図7のフローチャートにおけるステップS602の予測可能判定処理のサブルーチンを示すフローチャートである。
まず、ステップS701では、i=0か否かを判定し、0であればステップS705へと進み、そうでなければステップS702へと進む。
ステップS702では、PreTimeとScanTime[i-1]の差が所定時間よりも短いか否かを判定し、所定時間よりも短ければステップS703へと進み、そうでなければステップS705へと進む。これにより、前回のスキャンから今回のスキャンまでの間の時間が分かり、前回のスキャン結果を使用した予測の信頼性があるのか否かを判断することができる。
ステップS703では同方向移動フラグがTRUEか否かを判定し、同方向移動フラグがTRUEであればステップS704へと進み、同方向移動フラグがFALSEであればステップS705へと進む。これにより、被写体が遠近方向で同方向に移動していると判断したときにのみ予測を行うことで、誤測距の結果を使用することによる誤った予測を抑制することができる。
ステップS704では、予測可能判定の結果をOK判定として、予測可能判定フローを終了する。ステップS705では、予測可能判定の結果をNG判定として、予測可能判定フローを終了する。
図9は、図7のフローチャートにおけるステップS604の被写***置予測処理のサブルーチンを示すフローチャートである。図10は、被写***置の予測を示す図である。
まず、ステップS801では、iが2より小さいか否かを判定し、iが2より小さければステップS802へと進み、そうでなければステップS803へと進む。ステップS802では、スキャン中心位置を前回のスキャンのピーク位置に設定して被写***置予測フローを終了する。
ステップS803では、i=2であるか否かを判定し、i=2であればステップS804へと進み、iが2より大きければステップS806へと進む。
ステップS804では、図10(a)に示すように、下記の動体予測式1を使って、(ScanTime[0],HokanPeak[0])と、(ScanTime[1],HokanPeak[1])の2点から、PreTime時の被写体の予測位置PrePositionを算出し、ステップS805へと進む。
<動体予測式1>
PrePosition=(PreTime-ScanTime[0])×(HokanPeak[1]-HokanPeak[0])
/(ScanTime[1]-ScanTime[0])+HokanPeak[0]
ステップS805では、ステップS804で算出した被写体の予測位置PrePositionをスキャン中心位置に設定して被写***置予測フローを終了する。
ステップS806では、図10(b)に示すように、下記の動体予測式2を使って、(ScanTime[i-2],HokanPeak[i-2])、(ScanTime[i-1],HokanPeak[i-1])、(ScanTime[i],HokanPeak[i])の3点から、PreTime時の被写体の予測位置PrePositionを算出し、ステップS807へと進む。
<動体予測式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]
ステップS807では、ステップS806で算出した被写体の予測位置PrePositionをスキャン中心位置に設定し、被写***置予測フローを終了する。
図11は、図6のフローチャートにおけるステップS504、及び図7のフローチャートにおけるステップS610のスキャン動作のサブルーチンを示すフローチャートである。
まず、ステップS1001では、フォーカスレンズ104をスキャン開始位置に移動させる。スキャン開始位置は設定されたスキャン範囲(所定の移動範囲)の一端に設定される。ステップS1002では、撮影画面内に設定される焦点検出領域の焦点評価値(合焦状態の程度を示す評価値)とフォーカスレンズ104の位置をシステム制御部115に内蔵される図示しない演算メモリに記憶する。
ステップS1003では、フォーカスレンズ104の位置がスキャン終了位置にあるか否かを判定し、終了位置であればステップS1005へ、そうでなければステップS1004へ進む。スキャン終了位置は、設定されたスキャン範囲の他端に設定される。ステップS1004ではフォーカスレンズ104を所定の方向へ所定量(所定の移動範囲)動かしてステップS1002へと戻る。ステップS1005では、ステップS1002で記憶した焦点評価値とそのレンズ位置とから、焦点評価値のピーク位置を算出する。
図12は、図6のフローチャートにおけるステップS505、及び図7のフローチャートにおけるステップS611の合焦判定処理のサブルーチンを示すフローチャートである。図13は、焦点評価値の変化を示す図である。
焦点評価値は遠近競合などの特殊な場合を除けば、横軸にフォーカスレンズ位置、縦軸に焦点評価値をとるとその形は図13に示すような山状になる。そこで焦点評価値が山状になっているか否かを、焦点評価値の最大値と最小値の差、一定値(SlopeThr)以上の傾きで傾斜している部分の長さ、傾斜している部分の勾配から判断することにより、合焦判定を行うことができる。合焦判定における判定結果は、以下に示すようにOK、NGで出力される。
OK:焦点評価値のピーク位置から、被写体の焦点調節が可能である。
NG:被写体のコントラストが不十分、もしくはスキャンした距離範囲外の距離に被写体が位置する。
ここで図13に示すように、山の頂上(A点)から傾斜が続いていると認められる点をD点、E点とし、D点とE点の幅を山の幅L、A点とD点の焦点評価値の差SL1とA点とE点の焦点評価値の差SL2の和SL1+SL2をSLとする。
まず、図12のステップS1101において、焦点評価値の最大値と最小値、及び最大値を与えるスキャンポイントioを求めてステップS1102へと進む。ステップS1102では、焦点評価値の山の幅を表す変数L、山の勾配を表す変数SLをともに零に初期化してステップS1103へと進む。ステップS1103では、最大値を与えるスキャンポイントioがスキャンを行った所定範囲における遠側端の位置か否かを調べ、遠側端位置でないならばステップS1104へ進み無限遠方向への単調減少を調べる。遠側端位置であったならば、この処理をスキップしステップS1105に進む。
ここで、ステップS1104における無限遠方向への単調減少を調べる処理について説明する。図14にそのフローチャートを示す。
まず、ステップS1201において、カウンタ変数iをioに初期化してステップS1202へと進む。ステップS1202では、スキャンポイントiにおける焦点評価値の値d[i]と、iより1スキャンポイント分無限遠寄りのスキャンポイントi-1における焦点評価値の値d[i-1]の差を所定値SlopeThrと比較する。d[i]-d[i-1]≧SlopeThrであれば、無限遠方向への単調減少が生じていると判断し、ステップS1203に進む。一方、d[i]-d[i-1]≧SlopeThrでなければ、無限遠方向への単調減少は生じていないと判断し、無限遠方向への単調減少をチェックする処理を終了する。
ステップS1203では、焦点評価値が一定値以上の傾きで傾斜している部分の長さ(山の幅)を表す変数L、単調減少区間における減少量を表す変数SLを以下の式に従い更新してステップS1204へと進む。
L=L+1
SL=SL+(d[i]-d[i-1])
ステップS1204では、i=i-1として、検出をする点を1スキャンポイント無限遠側に移してステップS1205へと進む。ステップS1205では、カウンタiがスキャンを行った所定範囲における遠側端位置の値(=0)になったか否かを判定する。カウンタiの値が0、すなわち単調減少を検出する開始点がスキャンを行った所定範囲における遠側端位置に達したならば、無限遠方向への単調減少をチェックする処理を終了する。以上のようにしてi=ioから無限遠方向への単調減少をチェックする。
図12の説明に戻って、ステップS1105では、最大値を与えるスキャンポイントioがスキャンを行った所定範囲における至近端の位置か否かを判定し、至近端位置でないならばステップS1106へ進み至近端方向への単調減少を調べる。至近端位置であったならば、この処理をスキップしステップS1107に進む。
ここで、ステップS1106における至近端方向への単調減少を調べる処理について説明する。図15にそのフローチャートを示す。
まず、ステップS1301において、カウンタ変数iをioに初期化してステップS1302へと進む。ステップS1302では、スキャンポイントiにおける焦点評価値の値d[i]と、iより1スキャンポイント分至近端寄りのスキャンポイントi+1における焦点評価値の値d[i+1]の差を所定値SlopeThrと比較する。d[i]-d[i+1]≧SlopeThrであれば、至近端方向への単調減少が生じていると判断し、ステップS1303に進む。一方、d[i]-d[i+1]≧SlopeThrでなければ、至近端方向への単調減少は生じていないと判断し、至近端方向への単調減少をチェックする処理を終了する。
ステップS1303では、焦点評価値が一定値以上の傾きで傾斜している部分の長さ(山の幅)を表す変数L、単調減少区間における減少量を表す変数SLを以下の式に従い更新してステップS1304へと進む。
L=L+1
SL=SL+(d[i]-d[i+1])
ステップS1304では、i=i+1として、検出をする点を1スキャンポイント至近端側に移してステップS1305へと進む。ステップS1305では、カウンタiがスキャンを行った所定範囲における至近端位置の値(=N)になったか否かを判定する。カウンタiの値がN、すなわち単調減少を検出する開始点がスキャンを行った所定範囲における至近端位置に達したならば、至近端方向への単調減少をチェックする処理を終了する。以上のようにしてi=ioから至近端方向への単調減少をチェックする。
無限遠方向および至近端方向への単調減少をチェックする処理が終了したならば、得られた焦点評価値が山状になっているか否か、諸係数をそれぞれのしきい値と比較し、OK、NGの判定を行う。
ステップS1107において、焦点評価値の最大値を与えるスキャンポイントioがスキャンを行った所定範囲における至近端であり、かつ至近端スキャンポイントnにおける焦点評価値の値d[n]と、nより1スキャンポイント分無限遠寄りのスキャンポイントn-1における焦点評価値の値d[n-1]の差が、所定値SlopeThr以上であればステップS1111へ進み、そうでなければステップS1108へ進む。
ステップS1108では、焦点評価値の最大値を与えるスキャンポイントioがスキャンを行った所定範囲における遠側端であり、かつ遠側端スキャンポイント0における焦点評価値の値d[0]と、0より1スキャンポイント分至近端よりのスキャンポイント1における焦点評価値の値d[1]の差が、所定値SlopeThr以上であればステップS1111へ進み、そうでなければステップS1109へ進む。
ステップS1109では、一定値以上の傾きで傾斜している部分の長さLが所定値Lo以上であり、かつ傾斜している部分の傾斜の平均値SL/Lが所定値SLo/Lo以上であり、かつ焦点評価値の最大値と最小値の差が所定値以上であれば、ステップS1110へ進み、そうでなければステップS1111へ進む。
ステップS1110では、得られた焦点評価値が山状となっていて、被写体の焦点調節が可能であるため判定結果をOKとしている。ステップS1111では、得られた焦点評価値が山状となっておらず、被写体の焦点調節が不可能であるため判定結果をNGとしている。また、複数のAF枠を設定している場合は設定したAF枠ごとに同様の判定を行う。
以上のようにして、図6のフローチャートにおけるステップS505、及び図7のフローチャートにおけるステップS611の合焦判定を行う。
次に、図16は、図2のフローチャートにおけるステップS208の撮影動作を示すサブルーチンである。
まず、ステップS1501では、前述した図3のステップS315もしくはステップS316で設定された再スキャンFlgがTRUEであるか否かを判定する。再スキャンFlgがTRUEであるはS1502へ進み、TRUEでない場合はS1503へ進む。
ステップS1502では、前述した図11のスキャンを実行する。このスキャンは、前述した図3のステップS309の条件を満たし、かつ被写体が動いた直後に撮影指示されたことを想定して最終的にピントを追い込めるよう実施する。すなわち被写体が動いたにもかかわらず前述した図3のステップS311が実行されないまま撮影されてしまうことを防ぐ。
次にステップS1503において被写体輝度を測定してステップS1504へと進む。ステップS1504では、ステップS1503で測定した被写体輝度に応じて撮像素子108への露光を行ってステップS1505へと進む。撮像素子面上に結像された像は光電変換されてアナログ信号となり、ステップS1505においてA/D変換部109へと送られ、撮像素子108の出力ノイズ除去や非線形処理などの前処理の後にデジタル信号に変換される。
ステップS1506では、A/D変換部109からの出力信号をWB処理部111と画像処理部110によりホワイトバランス調整し、適正な出力画像信号としてステップS1507へと進む。
ステップS1507では、出力画像信号をフォーマット変換部112でJPEGフォーマット等へフォーマット変換を行い、DRAM113に一時的に記憶してステップS1508へと進む。ステップS1508では、DRAM113内のデータを画像記録部114においてカメラ内のメモリ、またはカメラに装着されたメモリカードなどの外部記憶媒体へと転送し記憶して撮影動作を終了する。
次に、図17は、図7のフローチャートにおけるステップS613の合焦枠選択処理のサブルーチンを示すフローチャートである。
まず、ステップS1701において、3×3枠中の中心のAF枠における輝度値変化が所定値以内であることと、図7のステップS611での合焦判定結果がOKか否かを判定する。ここで輝度変化が所定値以内であるか否かを判断するのは、スキャン中にAF枠内に輝度の異なる被写体の出入りがあった場合、所望の合焦位置が算出できない場合があるためである。ステップS1701で上記の条件を満たした場合はステップS1702へ進み、そうでなければS1703へ進む。
S1702では、中心のAF枠を選択し、このAF枠で得られたピーク位置を採用する。次にステップS1736ではステップS1704において後述する被写体の移動方向を検出するための情報として選択したAF枠のピーク位置を保存し、合焦枠選択を終了する。
ステップS1703では、スキャン中に物体検出モジュール124において検出された被写体が非検出状態になっているか否かを判定する。スキャン中に被写体が非検出状態になっていればステップS1723へ進み、そうでなければステップS1704へ進む。
ステップS1704では、被写体の移動方向を判定する。本実施形態では、前述したステップS1736で保存した過去にスキャンして求めたピーク位置を使用する。このピーク位置のスキャン3回分(スキャンを複数回行う)を、SetPosition1(3回前)、SetPosition2(前々回)、SetPosition3(前回)として保存し、スキャンを実行し、ピーク位置を検出するごとに更新しておく構成とする。また、フォーカスレンズ位置の値が大きくなるほど被写体がデジタルカメラ100側へ近くなる構成とすると、ピーク位置が以下の条件式3を満たした場合に近方向(デジタルカメラ100へ近づく方向)へ移動したと判定する。
SetPosition3>SetPosition2 かつ SetPosition2>SetPosition1 …(式3)
また、ピーク位置が以下条件式4を満たした場合に遠方向(デジタルカメラ100から遠ざかる方向)へ移動したと判定する。
SetPosition3<SetPosition2 かつ SetPosition2<SetPosition1 …(式4)
スキャン試行回数が3回未満、もしくはスキャン試行回数が3回以上であり上記の式3、式4のいずれも満たさなかった場合は移動方向が未検出の状態とする。
ステップS1705では、被写体が近方向へ移動したか否かを判定する。S1705を満たした場合はステップS1706へ進み、満たさない場合はステップS1707へ進む。ステップS1706ではAF枠選択に必要な変数の初期化を行う。ここで後述するIndexをインクリメントしながら、設定した3×3全てのAF枠に対して合焦結果を判定していく。
ステップS1708では、参照しているAF枠の合焦判定がOKかつ、前回スキャンしたピーク位置(前回合焦した位置)に対して所定以内のピーク位置か否かを判定する。ここで前回のピーク位置に対して所定以内(所定深度以内)のピーク位置か否かを判定するのは被写体の出入りなどで異なる被写体や背景に対して誤ってピーク位置を算出した結果を使用しないためである。ステップS1708の条件を満たした場合はステップS1709へ進み、満たさなければステップS1711へ進む。
ステップS1709では、今回参照しているAF枠のピーク位置がステップS1708からステップS1712のルーチンにおいて選択されているAF枠(以後SelectFrame)のピーク位置よりも近側であるか否かを判定する。ステップS1709を満たした場合はステップS1710に進み、S1709を満たさない場合はステップS1711へ進む。
ステップS1710では、今回参照しているAF枠を選択枠候補として保存する。ここでIdexは今回参照しているAF枠を表し、Indexで選択枠候補を表すSelectFrameを更新する構成とする。さらにステップS1710においてAF枠が選択できたことを示すフラグSelectFlgをTRUEにする。
ステップS1711では、AF枠を参照するためのIndexをインクリメントする。ステップS1712ではAF枠を参照するためのIndexが設定されたAF枠数-1に達している、つまり全AF枠について選択判定されたか否かを判断する。ステップS1712を満たした場合は、ステップS1713へ進み、満たさない場合はS1708へ戻る。
ステップS1713では、前述したSelectFlgがFALSEであるか否かを判定する。ステップS1713を満たす場合はS1714へ進み、満たさない場合は処理を終了する。ステップS1714では焦点検出評価値の極大値が最も近側に算出されたAF枠を選択し、処理を終了する。
ステップS1707では、被写体が遠方向へ移動したか否かを判定する。S1707を満たした場合はステップS1715へ進み、満たさない場合はステップS1723へ進む。ステップS1715ではAF枠選択に必要な変数の初期化を行う。ステップS1716では参照しているAF枠の合焦判定がOKかつ、前回スキャンしたピーク位置に対して所定以内のピーク位置か否かを判定する。ステップS1716の条件を満たした場合はステップS1717へ進み、満たさなければステップS1719へ進む。
ステップS1717では今回参照しているAF枠のピーク位置がステップS1716からステップS1720のルーチンにおいて選択されているSelectFrameのピーク位置よりも遠側であるか否かを判定する。ステップS1717を満たした場合はステップS1718に進み、S1717を満たさない場合はステップS1719へ進む。
ステップS1718では、ステップS1710と同様に、今回参照しているAF枠を選択枠候補として保存し、AF枠が選択できたことを示すフラグSelectFlgをTRUEにする。
ステップS1719では、AF枠を参照するためのIndexをインクリメントする。ステップ1720では、AF枠を参照するためのIndexが設定されたAF枠数-1に達しているか否かを判定する。ステップS1720を満たした場合は、ステップS1721へ進み、満たさない場合はS1716へ戻る。
ステップS1721では、前述したSelectFlgがFALSEであるか否かを判定する。ステップS1721を満たす場合はS1722へ進み、満たさない場合は処理を終了する。ステップS1722では焦点検出評価値の極大値が最も遠側に算出されたAF枠を選択し、処理を終了する。
ステップS1707において条件を満たさない場合は被写体の移動方向が検出されていないとしてステップS1723へ進む。ステップS1723ではAF枠選択に必要な変数の初期化を行う。ステップS1724では参照しているAF枠の合焦判定がOKか否かを判定する。ステップS1724の条件を満たした場合はステップS1725へ進み、満たさない場合はステップS1730へ進む。
ステップS1725では、前述した図7のステップS610におけるServo中AFのスキャンが2回以上実行されているか否かを判定する。ステップS1725の条件を満たした場合はS1726へ進み、満たさなければステップS1727へ進む。
ステップS1726では、前回スキャンしたピーク位置に対して所定以内のピーク位置か否かを判定する。ステップS1727では前述した図2のステップS203の通常AFにおいて算出したピーク位置に対して所定以内のピーク位置か否かを判定する。ステップS1726、もしくはステップS1727の条件を満たした場合はステップS1728へ進み、満たさなければステップS1730へ進む。
ステップS1728では、今回参照しているAF枠のピーク位置がステップS1724からステップS1731のルーチンにおいて選択されているSelectFrameのピーク位置よりも前回スキャンしたピーク位置に近いか否かを判定する。ステップS1728を満たした場合はステップS1729に進み、S1728を満たさない場合はステップS1730へ進む。
ステップS1729では、ステップS1710と同様に今回参照しているAF枠を選択枠候補として保存し、AF枠が選択できたことを示すフラグSelectFlgをTRUEにする。ステップS1730では、AF枠を参照するためのIndexをインクリメントする。
ステップS1731では、AF枠を参照するためのIndexが設定されたAF枠数-1に達しているか否かを判定する。ステップS1731の条件を満たした場合は、ステップS1732へ進み、満たさない場合はS1724へ戻る。
ステップS1732では、前述したSelectFlgがFALSEであるか否かを判定する。ステップS1732を満たす場合はS1733へ進み、満たさない場合は処理を終了する。ステップS1733では、前述したステップS1725同様にServo中AFのスキャンが2回以上実行されているか否かを判定する。ステップS1733の条件を満たした場合はステップS1734へ進み、満たさない場合はステップS1735へ進む。
ステップS1734では、焦点検出評価値の極大値が最も前回スキャンしたピーク位置に近いピーク位置が算出されたAF枠を選択し、処理を終了する。ステップS1735では、焦点検出評価値の極大値が最も通常AFのピーク位置に近いピーク位置が算出されたAF枠を選択し、処理を終了する。
以上説明したように、本実施形態によれば、AF枠に対して別の被写体が入った、もしくは被写体がAF枠から外れてしまったなどの原因により、信頼性の低い合焦位置を求めてしまった場合に、 誤った合焦位置を採用しにくくする。これにより、被写体への追従不能を軽減させることができる。また、被写体が遠近方向に動いていないと判断した場合に、次に動くまでフォーカスレンズを停止させることにより、無駄なレンズ駆動を軽減させることができ、ライブ画像の見栄えの低下及び電池消耗を軽減させることができる。
(他の実施形態)
また本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現できる。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現できる。
発明は上記実施形態に制限されるものではなく、発明の精神及び範囲から離脱することなく、様々な変更及び変形が可能である。従って、発明の範囲を公にするために請求項を添付する。