本発明の特徴は、自動焦点調節に際して、所定の被写体(人物の顔など)の大きさの変化率などを監視して被写体の距離変化の増減すなわち被写体の減速状態を判断することである。そして、被写体の減速を検知したときは、フォーカスレンズを駆動制御して被写体の距離変化に追従させる追従駆動動作を禁止して焦点調節を行う。この考え方に基づき、本発明の焦点調節装置及び方法は、それぞれ、課題を解決するための手段のところで述べた様な基本的な構成を有する。
以下、本発明の実施例を説明する。図1は、本発明の実施例である自動焦点調節装置を含むビデオカメラ(撮像装置)の構成を示す。以下の実施例では、ビデオカメラについて説明するが、本発明はデジタルスチルカメラ等の他の撮像装置にも適用できる。
図1において、101は第1固定レンズ、102は光軸方向に移動して変倍を行う変倍レンズ、103は絞りである。また、104は第2固定レンズ、105は変倍に伴う焦点面の移動を補正する機能とフォーカシングの機能とを兼ね備えたフォーカスコンペンセータレンズ(本明細書では、フォーカスレンズともいう)である。第1固定レンズ101、変倍レンズ102、絞り103、第2固定レンズ104、及びフォーカスレンズ105により被写体からの光を結像するための撮像光学系が構成される。106は、CCDセンサやCMOSセンサにより構成される光電変換素子としての撮像素子である。撮像素子106は、結像された光を光電変換して電気信号に変換する。107は、撮像素子106の出力をサンプリングし、ゲイン調整するCDS/AGC回路である。108はカメラ信号処理回路であり、CDS/AGC回路107からの出力信号に対して各種の画像処理を施し、映像信号を生成する。109はLCD等により構成されるモニタであり、カメラ信号処理回路108からの映像信号を表示する。115は記録部であり、カメラ信号処理回路108からの映像信号を磁気テープ、光ディスク、半導体メモリ等の記録媒体に記録する。
110は、変倍レンズ102を移動させるためのズーム駆動源である。111は、フォーカスレンズ105を移動させるためのフォーカシング駆動源である。ズーム駆動源110及びフォーカシング駆動源111は、夫々、ステッピングモータ、DCモータ、振動型モータ、及びボイスコイルモータ等のアクチュエータにより構成される。112は、CDS/AGC回路107からの全画素の出力信号のうち焦点検出に用いられる領域(焦点検出領域)の信号のみを通すAFゲートである。AF信号処理回路113は、AFゲート112を通過した信号から高周波成分を抽出してAF評価値を生成する。つまり、AF信号処理回路113は、電気信号の映像信号に対して設定された焦点検出領域からAF評価値を生成する生成手段を構成する。AF評価値は、制御手段であるカメラ/AFマイコン114に出力される。AF評価値は、撮像素子106からの出力信号に基づいて生成される映像の鮮鋭度(コントラスト状態)を表すものであるが、鮮鋭度は撮像光学系の焦点状態(合焦の程度)によって変化するので、結果的に撮像光学系の焦点状態を表す信号となる。制御手段としてのカメラ/AFマイコン114は、ビデオカメラ全体の動作の制御を司るとともに、AF評価値に基づいて、フォーカシング駆動源111を制御してフォーカスレンズ105を移動させ焦点調節を行うAF制御をも行う。
本実施例の顔検出部116は、画像信号に対して公知の顔検出処理を施し、撮影画面内の人物の顔領域を検出する。すなわち、顔検出部116は、電気信号から予め定められた被写体(ここでは顔)を検出する被写体検出手段を構成する。その検出結果はカメラ/AFマイコン114に送信される。カメラ/AFマイコン114は、上記検出結果に基づき、撮影画面内の顔領域を含む位置に焦点検出領域を設定するようにAFゲート112へ情報を送信する。顔検出処理としては、画像データで表される各画素の階調色から肌色領域を抽出し、予め用意する顔の輪郭プレートとのマッチング度で顔を検出する方法や、周知のパターン認識技術を用いて、目、鼻、口等の顔の特徴点を抽出することで顔検出を行う方法等がある。
さらに、顔検出部116では、顔の信頼度と、横顔の信頼度の算出を行っている。顔の信頼度の算出は、例えば、顔の輪郭プレートとのマッチング度に基づいて算出され、マッチング度が高い順に5段階で表現される。また、横顔らしさを表す信頼度の算出は、図13に示すように、検出されている顔の両目の中心位置(図中の点線)を基準に顔検出枠を左右に分割するように領域を抽出する。そして、左右領域に含まれる肌色領域を抽出し、肌色領域の画素数をカウントすることで面積を算出する。横顔らしさを表す信頼度は、左右の画面に含まれる肌色領域の比を用いて算出される。左右の肌色の領域が同じ比率であった場合は、横顔の可能性が低いとして、横顔らしさを表す信頼度を低く設定し、比率が大きく異なる場合は、横顔の可能性が高いとして、信頼度を高く設定する。本実施例では、この比率に応じで信頼度を5段階に設定する。
117は絞り駆動源であり、絞り103を駆動させるためのアクチュエータ及びそのドライバを含む。CDS/AGC回路107によって読み出された信号からは、画面内の測光枠の輝度値を取得するため、輝度情報検波・演算回路118により測光値が取得され、測光した測光値が演算により正規化される。そして、カメラ/AFマイコン114で、測光値と適正な露出が得られるように設定された目標値との差分が算出される。その後、算出した差分から絞りの補正駆動量を算出し、カメラ/AFマイコン114により絞り駆動源117の駆動が制御される。
次に、カメラ/AFマイコン114で行われるAF制御について、図2を用いて説明する。このAF制御は、カメラ/AFマイコン114内に格納されたコンピュータプログラムに従って実行される。Step201は処理の開始を示している。Step202で微小駆動動作を行い、合焦か、合焦でないならどちらの方向に合焦点があるかを判別する。細かい動作の説明は後述する。Step203においては、Step202で合焦と判定された場合はStep209へ行き合焦処理を行い、Step202で合焦と判定されなかった場合はStep204へ行く。Step204においては、Step202で方向判別ができている場合はStep205へ行き山登り駆動動作を行い、Step202で方向判別ができていない場合はStep202へ戻り微小駆動動作を継続する。Step205では、AF評価値が大きくなる方向へ高速でレンズを駆動させる山登り駆動をする。細かい動作の説明は後述する。
Step206においては、Step205でAF評価値のピークを越えたと判定された場合はStep207へ行き、Step206でAF評価値のピークを越えたと判定されない場合はStep205へ戻り山登り駆動を継続する。Step207では、山登り駆動中のAF評価値がピークとなるレンズ位置にレンズを戻す。Step208においては、Step207でピークのレンズ位置に戻った場合はStep202へ戻り再び微小駆動動作を行い、Step207でピークのレンズ位置に戻っていない場合はStep207へ戻りピークのレンズ位置に戻す動作を継続する。
次に、Step209からの合焦動作について説明する。Step209ではAF評価値を保持する。Step210では、最新のAF評価値を取得する。Step211では、Step209で保持したAF評価値とStep210で新たに取得したAF評価値とを比較し、所定レベル以上差があれば再起動と判定し、Step202へ行き微小駆動動作を再開する。Step211で再起動と判定されていなければStep212へ行く。Step212では、レンズを停止しStep210へ戻り再起動判定を継続する。
次に、微小駆動動作について図3で説明する。Step301は処理の開始を示している。Step302では、最新の顔検出位置/大きさを取得すると共に、それらの情報に基づいて焦点検出領域であるAF枠を設定し、AF評価値を取得する。Step303では、取得された顔サイズから被写体の移動を判定する処理を行う。この処理については図7を用いて説明する。Step304では、被写体の至近または無限側の方向への移動があったかを判定し、被写体の移動があった場合はStep305へ進み、そうでなければStep306へ進む。本実施例では、変化量を監視する被写体の大きさは、被写体検出手段である顔検出部116により得られる人物の顔(体の他の部位などであってもよい)の大きさである。よって、後述する様に、顔サイズの変化量が所定量以内である場合には被写体の距離変化がないと判断され、前記変化量が所定量より大きい場合には被写体の距離変化があると判断される。そして、カメラ/AFマイコン114は、被写体の距離変化がないと判断されたときは、追従制御手段による追従制御を禁止して焦点調節を行い、被写体の距離変化があると判断されたときは、追従制御手段による追従制御を許可して焦点調節を行う。こうした切り替えが上記Step304で行われる。
Step305では、移動判定の結果が近づきか遠ざかりかを判定する。近づきの場合は、Step314へ進み至近方向への山登りを決定し、Step313へ進み処理を終了する。そうでなければStep315へ進み無限方向への山登りを決定し、Step313へ進み処理を終了する。被写体の移動方向に応じて山登りの方向を切り替える駆動が、被写体の追従駆動ないし追従制御であり、追従駆動を行うことにより、AFの応答性と精度が向上する。この機能を実行するために、制御手段のカメラ/AFマイコン114は、被写体検出手段である顔検出部116による検出結果に基づき被写体の距離変化の有無を判別する判別手段と、判別結果に応じてフォーカスレンズを被写体の距離変化に追従させる追従制御手段を含む。
続いて、Step306においては、Step302で取り込んだAF評価値が前回のAF評価値より大きければStep307へ進み、Step302で取り込んだAF評価値が前回のAF評価値より小さければStep308へ進む。Step307では、前回の順方向に所定量フォーカスレンズを駆動する。一方、Step308では前回の逆方向に所定量フォーカスレンズを駆動する。上記レンズ動作の時間経過を示したのが図4である。ここで、Aの間にCCD(撮像素子)に蓄積された電荷に対するAF評価値AがTAで取り込まれ、Bの間にCCDに蓄積された電荷に対するAF評価値BがTBで取り込まれる。TBでは、AF評価値A、Bを比較し、A<Bであればそのまま順方向に移動し、一方、A>Bであれば逆方向にする。Step309においては、所定回数連続して合焦方向と判断される方向が同一であればStep310へ進み、所定回数連続して同一方向に進んでいなければStep311へ進む。Step311においては、所定回数フォーカスレンズが所定範囲で往復を繰り返していればStep312へ進み、所定時間フォーカスレンズが所定範囲にいなければStep313へ進み処理を終了する。この結果、図2のStep202の微小駆動動作に戻ることになる。Step310では、方向判別できたとして、Step313へ進み、処理を終了し図2のStep205の山登り駆動へ移行する。Step312では、合焦判別できたとして処理を終了し図2のStep210以降の再起動判定ルーチンへ移行する。
次に、山登り駆動動作について図5を用いて説明する。Step501は処理の開始を示している。Step502では、最新の顔検出位置/大きさを取得し、その情報に基づいてAF枠(焦点検出領域)を設定し、AF評価値を取得する。Step503においては、Step502で取り込んだAF評価値が前回のAF評価値より大きければStep504へ進み、Step502で取り込んだAF評価値が前回のAF評価値より小さければStep505へ進む。Step504では前回の順方向に所定の速度でフォーカスレンズを駆動し、Step508へ進み処理を終了する。一方、Step505においては、AF評価値がピークを越えて減っていればStep506へ進みピークを越えたとして、Step508へ進み処理を終了し、図2のStep206などを経てStep202の微小駆動へ移行する。Step505で、AF評価値がピークを越えて減っていなければStep507へ進み、前回と逆方向に所定の速度でフォーカスレンズを駆動し、Step508へ進む。
上記レンズ動作を説明したのが図6である。ここで、Aの場合は、AF評価値がピークを越えて減少しているので、合焦点があるとして山登り駆動動作を終了し、微小駆動動作に移行する。一方、Bの場合は、AF評価値がピーク無しで減少しているので、方向を間違えたものとして反転し、山登り駆動動作を続ける。一定時間あたりの移動量、つまりは駆動速度は前記の微小駆動の駆動速度よりも大きな値となる。顔検出の大きさが連続的に増加している場合には、山登り駆動時の駆動速度を大きく設定することで、AFの応答性を向上させることができる。
以上説明したように、カメラ/AFマイコン114は、再起動判定→微小駆動→山登り駆動→微小駆動→再起動判定を繰り返しながらフォーカスレンズを移動させAF評価値を大きくするように、制御を行っている。
次に、被写体の至近または無限方向の移動判定処理について、図7〜図16を用いて説明する。まず、図3のStep303の移動判定処理を図7を用いて説明する。Step701は移動判定処理の開始を示している。Step702では、検出された顔サイズの平均を算出する処理を行う。検出された顔サイズはカメラ/AFマイコン内のメモリに蓄積され、移動平均法を用いて蓄積個数が10ずつの平均が算出される。平均された顔サイズは、FaceAveSizeに格納することとする。このFaceAveSizeは20個の配列を持ち、平均値が算出される毎にFaceAveSize[0]〜[19]に履歴が保存される。ここでは、FaceAveSize[0]に最新の平均値を格納することとする。Step721では、Step302において取得した顔検出位置が揺れているか否かを判断する。この処理の詳細は図14〜図16を用いて説明する。
Step703では、移動判定フラグの有無を判定する。後述の処理で決定される移動判定フラグがSETされている場合は、Step704に遷移する。そうでない場合は、Step703’に遷移し、移動判定領域設定処理に移行する。Step703’の処理については図18を用いて後述する。移動判定領域設定処理によって、移動判定を行う画面内の領域の設定が完了した場合、Step703’’に遷移する。Step703’’では、被写体であるFacePosの値が、移動判定領域JudgeFaceAreaの内側にあるかの判定を行い、被写体が領域内に居る場合は、Step707に遷移する。そうでない場合は、Step720に遷移して、処理を終了する。
Step707では、Step702において算出した平均顔サイズFaceAveSizeが安定している値か否かを判断する。この処理の詳細は図8を用いて後述する。Step708では、Step707で決定される安定フラグとStep721で決定される揺れフラグを判定し、安定フラグがSETされており且つ揺れフラグもSETされている場合はStep709に遷移する。そうでない場合はStep720に遷移し、処理を終了する。
ここで、安定フラグがCLEARか若しくは揺れフラグがCLEARの場合は、被写体の状態が安定していないため、移動判定を行えないことを意味している。この場合、図3のStep304を経てStep306以降に進むことになる。Step709では、顔基準サイズが設定されているかの判定を行う。顔基準サイズFaceBaseSizeとは、移動判定を行う際の基準となる顔のサイズのことである。顔基準サイズFaceBaseSizeが0の場合は、値が設定されていないため、Step719に遷移し、Step719において、FaceBaseSizeにFaceAveSize[0]を代入する。この場合も、図3のStep304を経てStep306以降に進むことになる。
顔基準サイズFaceBaseSizeが0でない場合は、Step710に遷移する。Step710では、移動判定閾値設定処理を行う。この処理は、撮影パラメータと被写体の状態に応じて、移動判定に用いる顔のサイズ変化の閾値を設定する処理である。この処理の詳細については、図9を用いて後述する。続いて、Step711では、顔基準サイズFaseBaceSizeと現在の顔サイズFaceAveSize[0]との大きさの比較を行う。現在の顔サイズが小さい場合は、遠ざかりの可能性があるため、Step712に遷移する。そうでない場合は、近づきの可能性があるので、Step713に遷移する。Step712では、遠ざかりの判定を行う。顔基準サイズFaseBaceSizeと現在の顔サイズFaceAveSize[0]との差がTHfar以上であれば、被写体が遠ざかったと判定し、Step717に遷移する。Step712でTHfarを越えなかった場合は、Step714に遷移する。Step717では、被写体が遠ざかった事を意味する移動判定フラグの遠ざかりフラグをSETした後、Step720に遷移し処理を終了する。この場合、図3のStep304を経てStep305以降に進むことになる。Step713は、近づきの判定を行う。顔基準サイズFaseBaceSizeと現在の顔サイズFaceAveSize[0]との差がTHnear以上であれば、被写体が近づいたと判定し、Step718に遷移する。Step713でTHnearを越えなかった場合は、Step714に遷移する。Step718では、被写体が近づいた事を意味する移動判定フラグの近づきフラグをSETした後、Step720に遷移し処理を終了する。この場合も、図3のStep304を経てStep305以降に進むことになる。
Step714では、顔基準サイズが設定され且つ安定状態の時に、移動判定を何回繰り返しているかのタイマーFaceJudgeTimerをインクリメントし、Step715に遷移する。Step715では、FaceJudgeTimerがTimerTH以下かの判定を行う。この処理は、移動判定を約2秒間継続した状態が続いたにも関わらず、被写体の移動が無かった場合は判定処理を初期化する目的の処理である。よって、TimerTHには、2秒間に相当する値である120を設定し、この値を越えたかの判定を行う。本実施例では、1秒間に60回の処理を行うシステムを想定しているので、2秒間に相当する値は120である。FaceJudgeTimerがTimerTHを越えている場合は、Step716に遷移し初期化処理を行う、そうでない場合は、Step720に遷移し処理を終了する。この場合、Step702に戻って移動判定を継続する。Step716ではFaceJudgeTimerを0に初期化し、Step705に遷移する。Step705では、FaseBaceSizeを0に初期化し、Step706に遷移する。Step706では、移動判定フラグをクリアし初期化を行う。上記の初期化処理の終了後、Step720に遷移し、処理を終了する。この場合、図3のStep304を経てStep306以降に進むことになる。
Step703で移動判定フラグがSETされている場合は、被写体の移動が終了したか否かを判定するために、Step704に遷移する。Step704の処理については図17を用いて後述する。次に、Step704’では、Step704において被写体の移動が終了した旨の判断がされたのか、被写体の移動が継続している旨の判断がされたのかを判定する。被写体の移動が終了した場合は、Step705に移動し、初期化処理を行う。そうでない場合は、Step720に遷移し、処理を終了する。この場合、Step702に戻って移動判定を継続する。
次に、移動の終了判定処理について、図17を用いて説明する。図17のStep1701は処理の開始を示している。次にStep1702において、カメラ/AFマイコン114は平均顔サイズの2次微分値を算出する。以下に2次微分値の具体的な算出方法を示す。まず、カメラ/AFマイコン114は、図7のStep702で算出した平均顔サイズと所定時間前に算出した平均顔サイズとの差を計算することで、1次微分値を算出し、カメラ/AFマイコン114内のメモリに記録する。次に、カメラ/AFマイコン114は、メモリに記録されている該1次微分値と所定時間前に算出してメモリに記録した1次微分値との間の変化量を計算することで2次微分値を算出する。算出した2次微分値は、所定時間前の平均顔サイズの1次微分値に対して今回算出した平均顔サイズの1次微分値がどれだけ変化しているかを示す値である。
次に、Step1703においては、今回検出された顔サイズが前回検出された顔サイズと比較して小さくなっているか大きくなっているかを判断するために、FaceAveSizeの比較を行う。現在のFaseAveSize[0]と一つ前の履歴であるFaseAveSize[1]との差を求めるため、FaseAveSizeDiff=FaseAveSize[0]-FaseAveSize[1]の計算を行い、Step1704に遷移する。次にStep1704において、現在、近付きが要因となって移動判定フラグがSETされているのか、遠ざかりが要因となって移動判定フラグがSETされているのかを判別する。近付きが要因となって移動判定フラグがSETされている場合はStep1705に遷移し、遠ざかりが要因となって移動判定フラグがSETされている場合はStep1709に遷移する。
次にStep1705において、顔サイズが小さくなる(FaceAveSizeDiffが負の値)場合に、移動が減速または終了したと判定し、Step1706に遷移する。一方、顔サイズが大きくなっている(FaceAveSizeDiffが0以上)の場合は、Step1707に遷移する。Step1706においては、カメラ/AFマイコン114は被写体の移動が減速または終了していると判断し、Step1713に遷移して処理を終了する。一方、Step1707においては、Step1702で求めた平均顔サイズの2次微分値と近付き減速閾値とを比較して、平均顔サイズの2次微分値が近付き減速閾値以下の場合はStep1706に遷移し、近付き減速閾値よりも大きい場合にはStep1708に遷移する。Step1708において、カメラ/AFマイコン114は被写体の移動が継続していると判断し、Step1713に遷移して処理を終了する。
次に、Step1709において、顔サイズが大きくなる(FaceAveSizeDiffが正の値)場合に、移動が減速または終了したと判定し、Step1710に遷移する。一方、顔サイズが小さくなっている(FaceAveSizeDiffが0以下)の場合は、Step1711に遷移する。Step1710においては、カメラ/AFマイコン114は被写体の移動が減速または終了していると判断し、Step1713に遷移して処理を終了する。一方、Step1711においては、Step1702で求めた平均顔サイズの2次微分値と遠ざかり減速閾値とを比較して、平均顔サイズの2次微分値が遠ざかり減速閾値以上の場合はStep1710に遷移し、遠ざかり減速閾値よりも小さい場合にはStep1712に遷移する。Step1712において、カメラ/AFマイコン114は被写体の移動が継続していると判断し、Step1713に遷移して処理を終了する。
ここで近付き減速閾値とは、被写体がある速度で近付いている状態から減速または移動が終了したときに、カメラ/AFマイコン114が減速または移動が終了したと判断するときの変化率である。また、遠ざかり減速閾値とは、被写体がある速度で遠ざかっている状態から減速または移動が終了したときに、カメラ/AFマイコン114が減速または移動が終了したと判断するときの変化率である。本実施例において、上記近付き減速閾値と遠ざかり減速閾値は経験的に顔サイズの10%とし、近付き減速閾値は0以下の値、遠ざかり減速閾値は0以上の値とする。また、近付き減速閾値の絶対値と遠ざかり減速閾値の絶対値は同じ値であっても良いし、異なる値であっても良い。さらに、上記所定時間前とは、2次微分値が減速または停止しているか否かを前記近付き減速閾値と遠ざかり減速閾値によって判断できる値として、15フレーム前とする。ただし、設定した近付き減速閾値と遠ざかり減速閾値と所定時間は、システムによって自由に変更することができる値である。
以上の図17の処理においては、平均顔サイズによって被写体が減速または移動が終了しているか否かを判断しているが、顔や人体などの位置に関して2次微分値を算出して、減速または移動が終了しているか否かを判断する方法でも良い。また、目や口が検出できるシステムである場合は、両目(又は目と口)の間隔に関して2次微分値を算出して、減速または移動が終了しているか否かを判断する方法でも良い。さらには、両目の間隔に対する目と口の間隔の比率を算出し、算出した比率に関して2次微分値を算出して減速または移動が終了しているか否かを判断する方法でも良い。要は、予め定めた被写体の動きの減速や終了を判断できる情報であれば、所定部位のサイズ、複数の部位間の距離、複数のサイズや距離の間の比率についての相対的情報など、被写体のどの様な形状的情報であってもよい。以上の様に、制御手段であるカメラ/AFマイコン114内の終了判定手段は、検出手段により検出される被写体の大きさの変化の急峻度合いが所定値以下である場合に被写体の距離変化が終了していると判断する。また、終了判定手段は、検出された被写体の大きさを記憶する被写体情報記憶手段と、差分算出手段と、差分算出手段による差分値の算出結果を記憶する差分記憶手段を有する。差分算出手段は、検出された被写体の最新の大きさと時間間隔を置いて前に被写体情報記憶手段に記憶された被写体の大きさとの差分値を算出する。そして、被写体の大きさの変化の急峻度合いは、差分記憶手段に記憶している最新の差分値と時間間隔を置いて前に記憶された差分値との変化量により測られる。
続いて、図7のStep707の被写体安定判定処理を図8を用いて説明する。図8のStep801は処理の開始を示している。次にStep802において、カメラ/AFマイコン114は平均顔サイズの2次微分値を算出する。次にStep803において、カメラ/AFマイコン114はStep802で算出した2次微分値が閾値以下であるか否かを判断する。算出した2次微分値が閾値以下である場合は、所定時間前の平均顔サイズの1次微分値に対して今回算出した平均顔サイズの1次微分値の変化量が小さいため、被写体は安定していると判断してStep804へ進む。一方、算出した2次微分値が閾値より大きい場合は、所定時間前の平均顔サイズの1次微分値に対して今回算出した平均顔サイズの1次微分値の変化量が大きいため、被写体は安定していないと判断してStep807へ進む。
本実施例において、上記閾値は経験的に平均顔サイズの10%の値とする。また、上記所定時間前とは、2次微分値が安定しているか否かを前記閾値によって判断できる値として15フレーム前とする。ただし、本実施例において、設定した閾値と所定時間は、システムによって自由に変更することができる値である。次にStep804において、カメラ/AFマイコン114はStableTimerをカウントアップしStep805へ進む。ただし、StableTimerは、算出された平均顔サイズが連続して安定している期間をカウントする変数である。従って、StableTimerが所定期間(以降、StableTHとする)を超えた以降の平均顔サイズは安定している平均顔サイズであると判断することができる。ここで、StableTHは本実施例においては15フレームとする。また、StableTHは、平均顔サイズが連続して安定している期間をカウントする変数であるため、2次微分値を算出するときに用いられる所定時間(本実施例においては15フレーム)以下の期間である必要がある。Step807では、平均顔サイズの2次微分値が閾値より大きい値であるので、カメラ/AFマイコン114はStableTimerをクリア(本実施例では0)する。
次に、Step805において、カメラ/AFマイコン114はStableTimerがStableTH未満であるか否かを判断し、StableTH未満である場合はStep806に進み、StableTH以上である場合はStep808に進む。Step806においては、カメラ/AFマイコン114は、Step702において算出した平均顔サイズは、StableTimerがStableTHを越えるまでは連続して安定していないと判断し、安定フラグをOFFにして図8の処理を終了する。一方、Step808においては、カメラ/AFマイコン114は、Step702において算出した平均顔サイズは、StableTimerがStableTH以上の期間連続して安定している値であると判断し、安定フラグをONにして図8の処理を終了する。
以上の図8の処理においても、平均顔サイズによって被写体が安定しているか否かを判断しているが、顔や人体などの位置に関して2次微分値を算出して、安定しているか否かを判断する方法でも良い。また、目や口が検出できるシステムである場合は、両目(又は目と口)の間隔に関して2次微分値を算出して、安定しているか否かを判断する方法でも良い。さらには、両目の間隔に対する目と口の間隔の比率を算出し、算出した比率に関して2次微分値を算出して安定しているか否かを判断する方法でも良い。要は、予め定めた被写体の動きの安定度を判断できる情報であれば、所定部位のサイズ、複数の部位間の距離、複数のサイズや距離の間の比率についての相対的情報など、被写体のどの様な形状的情報であってもよい。
続いて、図7のStep710の移動判定閾値設定処理を図9を用いて説明する。図9のStep901は処理の開始を示している。Step902においては、変倍レンズ(ズームレンズ)102のレンズ位置を取得する処理である。変倍レンズの駆動源がステップモーターであるとした場合は、そのステップ数であり、レンズがテレ側、ワイド側のどの位置にいるかを判断するために用いる。続いて、Step903においては、図10に示すズームレンズ位置と基準移動判定閾値Thの関係グラフから、現在のズーム位置に応じた基準移動判定閾値Thを取得する。図10は、縦軸を顔サイズの変化の割合(%)、横軸をズームレンズ位置としている。このズームレンズ位置と基準移動判定閾値Thとの関係は、絞り値Fbaseを一定にした状態で、各ズームレンズ位置においての被写界深度の前端と顔サイズの変化量の関係から算出したグラフである。
予め定めた被写体にピントが合っている状態で被写体が移動した場合、被写界深度を超えた時点から画面上にボケが認識され始めるため、基準移動判定閾値は被写界深度よりも小さい値を設定する。これにより、被写体がボケ始める前に、移動の有無を判定し、フォーカスレンズを駆動することが可能になり、被写体への追従性能が向上する。実際の基準移動判定閾値Thの算出の際は、各ズームレンズ位置に応じた基準移動判定閾値Thのテーブルをカメラ/AFマイコン114内に持ち、ズームレンズ位置に対応する閾値Thを決定する。
被写界深度の算出は、以下の式1を用いて算出する。被写体の距離をs、被写界深度の前端・後端をそれぞれDnとDfすると以下の通りとなる。
Dn=s(H-f)/(H+s-2f)・・・式1a
Df=s(H-f)/(H-s)・・・式1b
過焦点距離Hは、レンズの焦点距離をf、レンズの絞り値をN、許容錯乱円の直径をcとすると式2のようになる。
H=f*f/N*c・・・式2
続いてStep904において、現在の絞り値Fnoの取得を行う。絞り値は絞り103の駆動量からF値を取得する。Step905では、基準移動判定閾値に対して絞りに応じた補正を行う。被写界深度は、絞り値に応じて変化するため、取得した現在の絞り値Fnoと図10の基準移動判定閾値を算出した際の絞り値Fbaseを比較する。式3に基づいて補正後の移動判定閾値Th2を算出する。
Th2=(現在の絞り値Fno/基準絞り値Fbase)*基準移動判定閾値Th・・・式3
この様に、前記閾値ないし所定量は、被写界深度により決定され、被写体が被写界深度の分を移動した場合の被写体の大きさの変化量よりも小さい量に設定されることを特徴としている。
続いて、Step906において、基準顔サイズFaceBaseSizeの取得を行う。Step907では、基準顔サイズFaceBaseSizeに応じて基準移動判定閾値の補正を行う。図11は基準顔サイズと補正係数Kの関係グラフであり、縦軸を顔サイズの変化の割合(%)、横軸を基準顔サイズとしている。基準顔サイズFaceBaseSizeが大きくなると、検出される顔サイズのバラツキが大きくなるため、補正を行う必要がある。取得した基準顔サイズと補正係数Kのグラフより、式4に基づいて補正後の移動判定閾値Th3を算出する。
Th3=補正係数K*移動判定閾値Th2・・・式4
この様に、被写体状況とは、上記検出手段により検出された被写体の大きさであり、前記閾値ないし所定量は、被写体の大きさに応じて変更され、被写体の大きさの基準値との差に応じて変更される。
続いてStep908において、顔検出部116の信号から顔信頼度の取得を行う。前述の通り、顔の信頼度は1〜5の5段階で評価され、評価5が信頼度が一番高く、評価1が信頼度が一番低い。Step909では、顔信頼度を用いて、移動判定閾値の補正を行う。信頼度が低い場合は、検出された顔サイズのバラツキが大きくなることや、少ないとしても誤検出している可能性があるため、閾値補正を行い閾値を高く設定する必要がある。本実施例では、顔信頼度が3以下の場合には、補正係数K’に1.5を設定し、取得した顔信頼度を用いて式5に基づいて補正後の移動判定閾値Th4を算出する。
Th4=補正係数K’移動判定閾値Th3・・・式5
この様に、被写体状況とは、上記検出手段により検出された顔の確からしさを表す信頼度であり、前記閾値ないし所定量は、顔の確からしさを表す信頼度に応じて変更され、信頼度が低い場合は、大きい量に変更される。
次にStep910において、顔検出部116の信号から横顔らしさの信頼度の取得を行う。前述の通り、横顔らしさの信頼度は1〜5の5段階で評価され、評価5が横顔の可能性が一番高く、評価1が横顔の可能性が一番低い。Step911では、横顔らしさの信頼度を用いて、移動判定閾値の補正を行う。横顔の信頼度が高い場合は、検出された顔サイズのバラツキが大きくなることや、少ないとしても誤検出している可能性があるため、閾値の補正を行い閾値を高く設定する必要がある。本実施例では、横顔らしさの信頼度が3以上の場合には、補正係数K’’に1.5を設定し、取得した横顔らしさの信頼度を用いて式6に基づいて補正後の移動判定閾値Th5を算出する。
Th5=補正係数K’’*移動判定閾値Th4・・・式6
この様に、被写体状況とは、上記検出手段により検出された顔が横を向いているかを表す信頼度であり、前記閾値ないし所定量は、顔が横を向いているかを表す信頼度に応じて変更され、信頼度が高い場合は、大きい量に変更される。
続いてStep912において、カメラ/AFマイコン114内の情報から撮影モードの取得を行う。一般的な撮像装置は撮影シーンに最適な撮影パラメータを設定するために、図12に示すような撮影モードを複数持っている。Step913では、撮影モードに応じて移動判定閾値の補正を行う。図12は撮影モードと補正係数K’’’の関係を示した表である。被写体の動きが多いと想定される撮影モードでは、閾値を低く設定するように係数K’’’を1以下の値にし、オートフォーカスの応答性を高くしている。また、被写体の動きが少ないと想定される撮影モードでは、移動判定の閾値を高くするように、係数K’’’の値を高く設定し、オートフォーカスの安定性を重視する。取得した撮影モードと、図12から決定される補正係数K’’’より、式7に基づいて補正後の移動判定閾値Th6を算出する。
Th6=補正係数K’’’*移動判定閾値Th5・・・式7
この様に、撮影パラメータとは、撮影モードであり、前記閾値ないし所定量は、撮影モードに応じて変更され、撮影モードが動きの多い被写体を撮影するモードに設定されている場合は、大きい量に変更され、撮影モードが動きの少ない被写体を撮影するモードに設定されている場合は、小さい量に変更される。
続いてStep914では、合焦度合の取得を行う。合焦度合の算出方法は、評価枠内のAF評価値のピークホールドした値を、各ラインの輝度レベルの最大値と最小値の差で割った値である。この合焦度合は0〜1で表され、合焦している被写体の場合、AF評価値のピークホールドと輝度レベルの差が同じ値になる傾向があるため、合焦度合は1に近づく。合焦度合が低い被写体は、ボケが発生している可能性が高く、顔サイズの信頼性が低くなることがあるため、移動判定の閾値を高くなるように設定する。例えば、取得した合焦度合を用いて、合焦度合が0.5以下である場合に、補正係数K’’’’を1.5と設定し、式8に基づいて補正後の移動判定閾値Th7を算出する。
Th7=補正係数K’’’’*移動判定閾値Th6・・・式8
この様に、撮影パラメータとは、AF評価値のレベルの状態とフォーカスレンズの駆動状態から推定される合焦度合であり、前記閾値ないし所定量は、合焦度合に応じて変更され、合焦度合が低い場合は、大きい量に変更される。なお、以上のこれらの補正係数はカメラに応じて十分な測定を行ったうえで決定するものであり、この値に限定されるものではない。
続いてStep916では、Step915で算出された移動判定閾値Th7にリミットを設定する。上記補正方法の場合、補正の積み重ねにより、移動判定閾値が基準移動判定閾値の数倍になってしまい、移動判定の閾値としては適当でない場合がある。よって、閾値の上限を設定する。移動判定閾値Th7が、基準移動判定閾値Thの2倍以上である場合は、Step918へ遷移し、そうでない場合はStep917に遷移する。本実施例では、移動判定の精度を維持するためにリミットを2倍に設定したが、この値は、十分な測定を行い誤判定が軽減される値を任意に設定することが可能である。Step917においては、移動判定閾値THfaceにTh7を代入し、Step919に遷移する。Step918では、移動判定閾値が大き過ぎるため、閾値にリミットを設定する。最終的な移動判定閾値THfaceには基準移動判定閾値Thを2倍したものを代入し、Step919に遷移する。
Step919では、移動判定閾値THfaceを基に、遠ざかり判定と近づき判定の閾値を変更する。顔検出は目の間隔を基に顔サイズを決定している手法がある。人物が横を向いた場合に、目の間隔が小さくなることにより、被写体までの距離が変化してないにも関わらず、検出された顔サイズが小さくなる。そのため、被写体の遠ざかり検出を行ってしまう事がある。そこで、近づき検出閾値THnearよりも、遠ざかり検出閾値THfarを大きく設定することで、横顔撮影時のサイズ変化による誤判定を低減する。本実施例では、遠ざかり検出の閾値を1.5倍に大きくしているが、この値は、十分な測定を行い誤判定が軽減される値を設定することとする。この様に、被写体状況とは、上記判別の結果であり、前記閾値ないし所定量は、判別の結果が遠ざかりである場合と近づきである場合で異なる値が設定され、遠ざかりである場合は、近づきである場合よりも大きい量が設定される。
以上が移動判定閾値設定の処理フローであり、近づき検出閾値THnear及び遠ざかり検出閾値THfarを算出する処理である。この処理の際に使用した係数や式は一例であり、これに限定するものではない。
次に、移動判定領域設定処理に関して図18を用いて説明する。図18のStep1801は処理の開始を示している。Step1802では次の処理を行う。ユーザーが、検出された被写体に対して、いわゆる主顔ロック機能、主顔固定機能、あるいは個人認証機能を用いて、意図的に他の顔が主顔になるような移り変わりを禁止している場合は、移動判定領域を設定する必要はない。よって、Step1802において、主顔固定されている場合はStep1810へ遷移し、そうでない場合はStep1803に遷移する。Setp1803では、顔の検出位置をカメラ/AFマイコン114から取得する。取得された顔位置は配列のFacePosX[0]とFacePosY[0]に格納される。同時に、1処理前のデータはFacePosX[1]とFacePosY[1]に移動する。続いて、Step1804では、焦点距離を取得する。本実施例では、35mm換算された焦点距離FocalLength値をカメラ/AFマイコン114から取得する。
続いて、Step1805では、図19に示すグラフから、基準となる判定領域FaceAreaXとFaceAreaYを参照する。なお、判定領域は、ワイドの方が小さく、テレの方が大きい。その理由として、以下の3つがあげられる。
・ワイドの方が、画角が広いため、狙った被写体以外が画面内に存在する可能性がある。
・ワイドの方が、被写界深度が深いため、積極的に移動判定を行わなくても良い。
・ワイドの方が、手振れなどによって、被写体が画面中央から大きく外れることが少ない。
本実施例の場合は、広角側では、被写体距離が数メートルの被写体に対して、バストアップが入る程度の大きさを考慮し、X方向を約30%、Y方向を約70%に制限している。また、図19に示すように、焦点距離が120mm付近で、主被写体以外の被写体が入る可能性が低くなると想定し、判定領域の制限を行わないこととしている。
続いて、Step1806では、カメラ/AFマイコン114から顔検出個数の取得を行う。Step1807では、顔検出の個数に応じて、補正係数Jを設定する。本実施例の場合、通常、主被写体1ないし2個であると考えられるため、5個以上の顔が検出されている場合は、人ごみでの撮影である可能性が高いと予想し、判定の領域を小さく設定する。よって、補正係数に0.8を設定する。そうでない場合は、補正係数を1.0に設定して補正は行わない。下記の式において、移動判定領域を算出する。
FaceAreaX’=補正係数J*FaceAreaX・・・式9a
FaceAreaY’=補正係数J*FaceAreaY・・・式9b
続いて、Step1808では、顔の横の移動量を算出する。顔の移動量を算出するために、顔位置の二つの差分をFaceDiffX=FacePosX[0]-FacePosX[1]に格納する。Step1809では、顔の横の移動量に応じて、補正係数J’を設定する。本実施例の場合、移動量FaceDiffXが画面に対して20%以上であった場合、被写体が画面外に抜けていく可能性があるため、判定の領域を小さく設定する。よって、補正係数に0.8を設定する。そうでない場合は、補正係数を1.0に設定して補正は行わない。下記の式において、移動判定領域を算出する。
FaceAreaX’’=補正係数J’*FaceAreaX’・・・式10a
FaceAreaY’’=補正係数J’*FaceAreaY’・・・式10b
一方、Step1810では、主顔ロックがされているため、FaceAreaX’’とFaceAreaY’’にそれぞれ1.0を設定し、判定領域は制限しないことする。Step1811では、判定領域の4隅の位置を以下の式を用いて算出する。まず、判定枠の中心位置(x、y)を設定する。この値は任意の値で良いが、本実施例では、図20に示すように、画面中央よりも少し上に設定する。これは、被写体が入る可能性が高いからである。
JudgeFaceAreaX_Left=中心位置x-(X方向画素数×FaceAreaX’’÷2)
JudgeFaceAreaX_Right=中心位置x+(X方向画素数×FaceAreaX’’÷2)
JudgeFaceAreaY_Up=中心位置y-(Y方向画素数×FaceAreaY’’÷2)
JudgeFaceAreaY_Down=中心位置y+(Y方向画素数×FaceAreaY’’÷2)
・・・ 式11
上記求めた座標に囲まれた範囲が、移動判定領域であり、この領域内に顔が検出された場合のみ、移動判別を行うこととする。上記の処理が終了した場合、Step1812に遷移し、処理を終了する。
続いて、揺れ検出処理を図14〜図16を用いて説明する。本実施例では、制御手段のカメラ/AFマイコン114に含まれる揺れ検出手段が揺れ検出処理を実行する。揺れ検出処理は、人物がカメラに向かって歩いたり走ったりして近づいて来るときに、顔や体が上下と左右に周期的に振動することに着目する。そして、取得した顔検出位置の結果を横方向と縦方向の座標に分解して、それぞれの方向の位置が振動しているか否かを検出する処理である。まず、人物がカメラに向かって歩いたり走ったりして近付いてくるときの顔や体の振動について図15を用いて説明する。本実施例において、顔検出位置の横方向の座標をx座標、縦方向の座標をy座標とする。また、画像の左上を原点として、x座標は画像の右端に近付くほど、y座標は画像の下端に近付くほど夫々大きな座標値を取ることとする。本実施例では、監視する被写体の位置を顔検出位置(例えば、顔の中心)とするが、体の他の部位の中心、人物の顔に配置されている器官(目、耳、鼻、口など)のうちの少なくとも2つの器官間の中心位置などであってもよい。
人物が二足歩行する場合、顔や体は左右と上下に揺れる。ここで、検出した顔や体の位置座標の軌跡は、図15(a)に示すような所謂8の字形状や、図15(b)に示すような所謂Uの字形状を描く。図15(a)をx座標とy座標に分解して時間方向にそれぞれプロットすると、図15(c)のような軌跡となる。図15(c)より、縦方向の振動は、横方向の振動の2倍の周波数(2分の1の周期)で振動していることが分かる。したがって、体が左右方向に1往復揺れるとき、上下方向には2往復揺れるという特徴がある。また、図15(c)のy座標の軌跡を例えば1/2周期ずつ遅らせていくと、x、y座標において図15(b)の軌跡をA→B→C→D→A→・・・の順番で周期的に辿ることになる。さらに、x座標の軌跡とy座標の軌跡の位相は人物によって異なる。以上より、人物が歩行しているのを捉える為には、軌跡の形状が図15(a)、(b)に示すものに限らず如何なる様なものであっても、縦方向と横方向に周期的に振動しており且つ縦方向の周期が横方向の周期の1/2であるという特徴を捉えることが必要である。つまり、揺れ検出手段は、被写体検出手段から得られる被写体の位置が電気信号の映像信号中においてこうした所定の動作特性を満たした場合、揺れていると判定することができる。以下で、取得した顔検出位置のx座標から横方向の揺れを検出するシステムを説明するが、縦方向の揺れを検出するシステムは、取得した顔検出位置のy座標から以下のシステムと同じシステムを用いて実現できることは明らかである。以下の説明中では、横方向の揺れを検出するシステムと縦方向の揺れを検出するシステムとが異なる場合のみ、縦方向の揺れを検出するシステムについても記述する。
次に、揺れ検出処理の処理フローを図14のフローチャートを用いて説明する。Step1401は処理の開始を示している。Step1402においては、最新の顔検出位置/大きさ(以下、現在位置/現在顔サイズとする)を取得する。Step1403においては、現在位置が記憶している最大位置よりも大きい座標の場合は、Step1405に遷移し、そうでない場合はStep1404に遷移する。Step1404において、現在位置が記憶している最小位置よりも小さい座標の場合は、Step1406に遷移し、そうでない場合はStep1407に遷移する。Step1405において、現在位置を最大位置として更新し、Step1413に遷移する。一方、Step1406においては、現在位置を最小位置として更新し、Step1413に遷移する。
Step1407において、極大位置を検出したか否かの判断を行う。ここで極大位置とは、画像中の右方向に移動している顔の位置が左方向に移動方向を変えた時のx座標の最大値である。極大位置の検出方法を具体的に説明する。まず、現在位置と記憶している最大位置との差分を算出する。次に、算出した差分と予め決められた閾値とを比較し、算出した差分が閾値を超えている場合は、記憶している最大位置が極大位置であると判断してStep1408に遷移する。つまり、検出している顔の位置が画像中において、右に移動している状態から左に移動している状態に折り返したと判断する。一方、Step1407において、算出した差分が閾値以下である場合は、記憶している最大値は極大値ではないと判断してStep1410に遷移する。ここで、極大位置を検出するために差分と比較される閾値は、現在顔サイズから求める値で、本実施例においては現在顔サイズの10%の値とする。この値は、十分な測定を行って決定する値であり、撮影環境や表情等の影響により顔検出位置がバラつくことで極大位置を誤判定してしまうことがない値とする。
Step1408においては、以降で極小値を探索するために、記憶している最小位置をクリアしてStep1409に遷移する。本実施例では現在位置を最小位置に代入することでクリアとする。ただし、最小位置は設定可能な最大の値でもよいし、x座標の場合は画面の右端、y座標の場合は画面の下端の値を代入してもよい。Step1409においては、極大位置Countを開始する。また、既にカウントを開始している場合はカウント値をリセットしてカウントを再開する。ここで、極大位置Countとは、Step1407において極大位置が検出されてからの経過時間を計測するための値であり、極大位置Countがカウントアップ中は「所定の期間内に移動方向が右から左に反転した」と判断する。ここで、該所定の期間は本実施例において、横方向に関しては2秒としている。これは、十分な測定を行い、人物の歩行を基準として決定した。また、縦方向に関しては横方向のおよそ半分の周期で振動するため、1秒を該所定の期間として設定する。
Step1410においては、極小位置を検出したか否かの判断を行う。ここで極小位置とは、画像中の左方向に移動している顔の位置が右方向に移動方向を変えた時のx座標の最小値である。極小位置の検出方法を具体的に説明する。まず、現在位置と記憶されている最小位置との差分を算出する。次に、算出した差分と予め決められた閾値とを比較し、算出した差分が閾値を超えている場合は、記憶されている最小位置が極小位置であると判断してStep1411に遷移する。つまり、検出している顔の位置が画像中において、左に移動している状態から右に移動している状態に折り返したと判断する。一方、Step1410において、算出した差分が閾値以下である場合は、記憶している最小値は極小値ではないと判断してStep1413に遷移する。ここで、極小位置を検出するために差分と比較される閾値は、現在顔サイズから求める値で、本実施例においては現在顔サイズの10%の値とする。この値は、十分な測定を行って決定する値であり、撮影環境や表情等の影響により顔検出位置がバラつくことで極小位置を誤判定してしまうことがない値とする。
Step1411においては、以降で極大値を探索するために、記憶している顔位置の最大位置をクリアしてStep1412に遷移する。本実施例では現在位置を最大位置に代入することでクリアとする。ただし、最大位置は設定可能な最小の値でもよいし、x座標の場合は画面の左端、y座標の場合は画面の上端の値を代入してもよい。Step1412においては、極小位置Countを開始する。また、既にカウントを開始している場合はカウント値をリセットしてカウントを再開する。ここで、極小位置Countとは、Step1410において極小位置が検出されてからの経過時間を計測するための値であり、極小位置Countがカウントアップ中は「所定の期間内に移動方向が左から右に反転した」と判断する。ここで、該所定の期間は本実施例において、横方向に関しては2秒としている。これは、十分な測定を行い、人物の歩行を基準として決定した。また、縦方向に関しては横方向のおよそ半分の周期で振動するため、1秒を該所定の期間として設定する。
次に、Step1413において、極大位置Countが2秒(縦方向の場合は1秒)を超えているか否かを判断する。2秒(縦方向の場合は1秒)を超えている場合はStep1414に遷移し、そうでない場合はStep1416に遷移する。Step1414においては、極大位置Countを初期値にクリアしてカウントアップを終了し、Step1415に遷移する。Step1415において、最小位置を現在位置で更新してStep1417に遷移する。一方、Step1416において、極大位置CountをカウントアップしStep1417に遷移する。次に、Step1417において、極小位置Countが2秒(縦方向の場合は1秒)を超えているか否かを判断する。2秒(縦方向の場合は1秒)を超えている場合はStep1418に遷移し、そうでない場合はStep1420に遷移する。Step1418においては、極小位置Countを初期値にクリアしてカウントアップを終了し、Step1419に遷移する。Step1419において、最大位置を現在位置で更新してStep1421に遷移する。一方、Step1420において、極小位置CountをカウントアップしStep1421に遷移する。
次に、Step1421において、極大位置Countと極小位置Countとがどちらもカウント中であるか否かを判断する。どちらもカウント中であると判断した場合はStep1422に遷移し、そうでない場合は、Step1423に遷移する。Step1422において、揺れフラグをONにして処理を終了し、一方、Step1423において、揺れフラグをOFFにして処理を終了する。
以上の様に、本実施例では、判別手段は、前記被写体の大きさの変化量を監視して、前記変化量に変化が発生した場合であって揺れ検出手段が被写体の揺れを検出している場合には被写体の距離変化があると判断する。他方、前記変化量に変化が発生した場合であっても揺れ検出手段が被写体の揺れを検出していない場合には被写体の距離変化はないと判断する。そして、制御手段は、被写体の距離変化がないと判断されたときは、追従制御手段による追従制御を禁止して焦点調節を行い、被写体の距離変化があると判断されたときは、追従制御手段による追従制御を許可して焦点調節を行う。前記所定の動作特性は、電気信号中において被写体の位置について、第一の所定期間内に縦方向に極大値と極小値を含む所定の振幅以上の振動があり且つ第二の所定期間内に横方向に極大値と極小値を含む所定の振幅以上の振動があるという特徴を有する。この所定の振幅は、被写体検出手段から得られる被写体の大きさに対して所定の割合の大きさを有する。また、第一の所定期間(周期)は、第二の所定期間(周期)よりも短く、例えば、第一の所定期間は第二の所定期間の略半分の期間である。
上記の揺れ検出処理を説明したのが図16である。まず、T1のタイミングにおいて、現在位置と最大位置との差分は折り返し検出閾値以上となっている。したがって、T1のタイミングにおいて記憶している最大位置が極大位置であると判断できるため、T1から極大位置Countが開始される。また、T2のタイミングにおいて、現在位置と最小位置との差分が折り返し検出閾値以上となっている。したがって、T2のタイミングにおいて記憶している最小位置が極小位置であると判断できるため、T2から極小位置Countが開始される。次に、T3のタイミングにおいて、現在位置と最大位置との差分は折り返し検出閾値以上となっている。したがって、T3のタイミングにおいて記憶している最大位置が極大位置であると判断できるため、T3において極大位置Countが初期化されカウントが再開される。T4のタイミングにおいては、極小位置Countが閾値を超えるため極小位置Countをクリアしてカウントを終了する。T5のタイミングにおいても、極大位置Countが閾値を超えるため極大位置Countをクリアしてカウントを終了する。以上の処理により図16中のT2からT4の期間において、極大位置Countと極小位置Countがともにカウント中であるため、該期間では検出している顔が揺れていると判断できる。
以上のように、上記実施例では、顔検出を用いて被写体の人物にAF評価値でピント合わせを行うと共に、被写体の検出結果に加えて被写体の位置の揺れの検出結果に基づき被写体の距離変化の有無を判断する。そして、検出した顔の位置が所定の動作をしている場合にのみ被写体が近づいていると判断する。このことで、精度の高く安定した被写体の移動判定が可能になる。そして、その情報を用いて、フォーカスを被写体の無限または至近の移動に追従駆動させることにより、合焦精度を高めることができる。
上述した実施例における処理のために、各機能を具現化したソフトウェアのプログラムコードを記録した記憶媒体をシステム或いは装置に提供してもよい。そして、そのシステム或いは装置のコンピュータ(又はCPUやMPU)が記憶媒体に格納されたプログラムコードを読み出し実行することによって、前述した実施例の機能を実現することができる。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フロッピィ(登録商標)ディスク、ハードディスク、光ディスク、光磁気ディスクなどを用いることができる。或いは、CD−ROM、CD−R、磁気テープ、不揮発性のメモリーカード、ROMなどを用いることもできる。また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施例の機能が実現されるだけではない。そのプログラムコードの指示に基づき、コンピュータ上で稼動しているOS(オペレーティングシステム)などが実際の処理の一部又は全部を行い、その処理によって前述した実施例の機能が実現される場合も含まれている。さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリーに書きこまれてもよい。その後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部又は全部を行い、その処理によって前述した実施例の機能が実現される場合も含むものである。
以上、本発明の好ましい実施形態ないし実施例について説明したが、本発明は上記実施形態ないし実施例に限定されず、その要旨の範囲内で種々の変形及び変更が可能である。