以下、この発明の実施の形態について図を参照して説明するが、この発明は以下の実施の形態に限定されない。また、この発明の実施の形態は発明の最も好ましい形態を示すものであり、発明の範囲を限定するものではない。
図1は、本実施形態に係る撮像装置1の構成を示すブロック図である。図1に示すように、撮像装置1は、撮影レンズ101、絞り及びシャッター102、フォーカスレンズ104などの撮影光学系を介して結像される画像を撮像素子108で撮影する電子スチルカメラである。また、撮像装置1は、制御部115の制御の下でフォーカスレンズ104を駆動させるAF処理部105を含み、撮像素子108で撮像された画像データに基づいてフォーカスレンズ104を駆動させて焦点調整を行う自動合焦装置も含む構成である。
撮影レンズ101は、ズーム機構などを含む光学レンズである。絞り及びシャッター102は、AE処理部103(AE:自動露光)の制御に従って被写体からの光量を制御する。AE処理部103は、制御部115の制御の下、絞り及びシャッター102の絞り量やシャッタースピードを制御する。フォーカスレンズ104は、AF処理部105の制御に従って駆動するアクチュエータ(特に図示しない)により光軸に沿って移動されることで、撮像素子108に結像される画像の焦点調整を行う。焦点調整手段としてのAF処理部105は、制御部115の制御の下、フォーカスレンズ104の移動を制御する(詳細は後述する)。従って、撮像素子108には、被写体からの反射光が撮影レンズ101から入射された後に絞り及びシャッター102を介して露光量が調節され、フォーカスレンズ104により結像される。
ストロボ106は、EF処理部107(EF:フラッシュプリ発光)の制御に従って被写体へ補助光を照射する。EF処理部107は、制御部115の制御の下、ストロボ106の発光を制御する。例えば、EF処理部107は、制御部115の制御の下で行われる撮像素子108による本撮影の前にストロボ106にプリ発光を行わせ、被写体からの反射光量をセンサ(図示しない)で検出して本発光時の発光量を計算する。次いで、本撮影時において、EF処理部107は、計算された発光量でストロボ106を発光させることで、被写体を適正に露光させる。
撮像素子108は、フォーカスレンズ104により結像される画像を、光電変換によりアナログ電気信号に変換した画像データとして出力する。具体的には、撮像素子108は、CCDやCMOSイメージセンサなどである。A/D変換部109は、撮像素子108から出力されるアナログ画像データをデジタル画像データに変換する。なお、A/D変換部109は、撮像素子108の出力ノイズを除去するCDS(Correlated Double Sampling:相関二重サンプリング)回路やA/D変換前に行う非線形増幅回路を含む構成であってよい。
画像処理部110は、A/D変換部109より出力されたディジタル画像データに対して各種の画像処理を行い、処理済みのディジタル画像データを出力する。WB処理部111は、画像処理部110より出力された画像処理済みのデジタル画像データに対してホワイトバランス処理を行う。フォーマット変換部112は、画像処理部110から出力された画像処理済みのデジタル画像データのデータフォーマットをJPEG(Joint Photographic Experts Group)などの所定の画像形式へ変換する。
DRAM113(Dynamic Random Access Memory)は、フォーマット変換部112により所定の画像形式に変換された画像データを一時記憶する。また、DRAM113は、制御部115の作業領域や画像データの圧縮伸長における作業領域として使用されてもよい。画像記録部114は、メモリーカードなどの記録媒体とそのインターフェース(いずれも図示しない)などである。画像記録部114は、制御部115の制御の下、撮像素子108で撮像されてDRAM113に一時記憶されたデジタル画像データを記録媒体に記録する。なお、画像記録部114の記録媒体は、インターフェースにより撮像装置1に対して着脱可能であってよい。
制御手段としての制御部115は、撮像装置1の各部の動作を中央制御する。具体的には、制御部115は、CPU(Central Processing Unit)、ROM(Read Only Memory)などで構成される。制御部115は、CPUがROMに記憶されたプログラムデータを読み出して画像記録部114の作業領域に展開し、そのプログラムデータを順次実行することで、上記中央制御を実現する。例えば、制御部115は、撮像素子108による撮影シーケンスなどのシステム処理を操作部118や撮影モードSW119で設定された動作モードに従って制御する。
VRAM116(Video RAM)は、操作表示部117の表示用として制御部115から出力された画像データを一時記憶する。操作表示部117は、制御部115の制御の下で画像を表示するLCDなどの表示用デバイスである。操作表示部117は、操作補助のための表示や撮像装置1の状態表示の他、撮影時にはEVFによる撮影画面やその撮影画面において予め設定された測距領域の表示などを行う。
操作部118は、ユーザからの操作指示を受け付けて制御部115に操作信号を出力するボタンや操作表示部117の画面上に配置されたタッチパネルなどである。具体的には、操作部118は、撮像装置1の撮影機能や画像再生時の設定などの各種設定を行うメニュースイッチ、撮影レンズ101のズーム動作を指示するズームレバー、撮影モードと再生モードの動作モード切換えスイッチなどがある。撮影モードSW119は、撮像装置1の撮影モードの切り替え指示をユーザから受け付けて制御部115へ出力するスイッチである。例えば、撮影モードSW119は、撮影画像から顔検出を行う顔検出モードのON又はOFFの切り替え指示をユーザから受け付ける。また、撮影モードSW119は、AFモードの切り替え指示をユーザから受け付けてもよい。
メインスイッチ120は、電源のON/OFFをユーザから受け付けて制御部115へ出力するスイッチである。第1スイッチ121は、AF処理やAE処理を予め開始する等の撮影スタンバイ動作の開始指示をユーザから受け付けて制御部115へ出力するスイッチである。第2スイッチ122は、第1スイッチ121の操作後に撮影の開始指示をユーザから受け付けて制御部115へ出力するスイッチである。なお、第1スイッチ121、第2スイッチ122は、シャッターボタン(図示しない)の半押しにより第1スイッチ121がONされ、シャッターボタンの全押しにより第2スイッチ122がONされる構成であってもよい。
顔検出モジュール123は、画像処理部110により出力された画像処理済みのデジタル画像データから人物の顔領域の検出を行い、検出した一つ又は複数の顔情報(顔領域の位置、そのサイズ、信頼度など)を制御部115へ出力する(顔検出手段)。人物の顔検出方法は、公知の技術を適用可能であり、本発明と直接関係しないため、詳細な説明は省略する。
なお、公知の顔検出技術としては、ニューラルネットワークなどを利用した学習に基づく手法、テンプレートマッチングを用いて目、鼻、口等の形状に特徴のある部位を画像から探し出し、類似度が高ければ顔とみなす手法などがある。また、他にも、肌の色や目の形といった画像特徴量を検出し、統計的解析を用いた手法等、多数提案されている。一般的には、これらの手法を複数組み合わせ、顔検出の精度を向上させている。具体的な例としては特開2002−251380号公報に記載されるような、ウエーブレット変換と画像特徴量を利用して顔検出する方法などが挙げられる。
動体検出部124は、撮像素子108で連続的に撮影された複数の撮影画像を互いに比較することで、被写体及び背景が動いているか否かを検出してその動体情報を制御部115へ出力する(第1の動き量検出手段)。具体的には、動体検出部124は、画像処理部110により出力された画像処理済みのデジタル画像データのうち、時系列的に並んだ2枚の撮影画像を比較し、その差分情報から被写体や背景の動体情報(動き量、位置、範囲)を検出して制御部115へ出力する。
角速度センサ部125は、撮像装置1自体の動き(角速度)を検出してその動き情報(動き量)を制御部115へ出力する(第2の動き量検出手段)。具体的には、角速度センサ部125は、円い空洞の中の球体の位置を検出して鉛直方向に対する撮像装置1の姿勢を検出する重力センサやジャイロセンサ等であってよい。
次に、制御部115の制御の下で行われる撮像装置1の動作について、図2〜図17を参照して説明する。ここで、図2は、撮像装置1の動作を示すフローチャートである。なお、制御部115は、以下に示すフローチャートにおいて、DRAM113の作業領域に動作用の変数情報を格納し、各ステップでその変数情報の読み出しや更新を行いながら処理を実行している。DRAM113の作業領域に格納される変数情報としては、フラグデータや算出値やカウンタ値などの数値データなどがある。
[変数情報について]
フラグデータとしては、合焦フラグ、ピーク検出フラグ、距離変化フラグ、同方向移動フラグ、顔検出フラグなどがある。合焦フラグは、合焦判定における判定結果を示すフラグデータであり、TRUEである場合に被写体に合焦されていることを示し、FALSEである場合に被写体に合焦されていないことを示す。顔検出フラグは、顔検出モジュール123において顔検出したか否かを示すフラグデータであり、TRUEである場合に顔検出していることを示し、FALSEである場合に顔検出していないことを示す。ピーク検出フラグは、山登りAF(AFスキャン)において焦点評価値が最大となるピークが検出されたことを示すフラグデータである。ピーク検出フラグがTRUEである場合にはピークが検出されたことを示し、FALSEである場合にはピークが検出されていないことを示す。距離変化フラグは、自装置である撮像装置1と被写体との間の被写体距離が変化したことを示すフラグデータである。距離変化フラグがTRUEである場合には被写体距離が変化したことを示し、FALSEである場合には被写体距離が変化していないことを示す。同方向移動フラグは、今回のAFスキャンにおけるスキャン中心位置に対するピーク位置の方向と、前回のAFスキャンにおけるスキャン中心位置に対するピーク位置の方向とが同方向であるか否かを示すフラグデータである。同方向移動フラグがTRUEである場合には同方向であることを示し、FALSEである場合には同方向でないことを示す。
また、数値データとしては、前述した焦点評価値、取得カウンタ、増加カウンタ、顔検出サイズ変化回数、輝度値変化回数、焦点評価値変化回数、カメラ動作回数、被写体動作回数、×count値、StCount値などがある。取得カウンタは、フォーカスレンズ104の現在位置を取得した回数を示す数値データである。増加カウンタは、山登りAFにおいて、直近の処理で取得した焦点評価値がその前の処理で取得した焦点評価値より大きいこと(その回数など)を示す数値データである。顔検出サイズ変化回数は、AF枠の画像領域において顔検出モジュール123で検出した顔のサイズが変化した回数を示す数値データである。輝度値変化回数は、AF枠の画像領域において輝度値が変化した回数を示す数値データである。焦点評価値変化回数は、AF枠の画像領域において焦点評価値が変化した回数を示す数値データである。カメラ動作変化回数は、撮像装置1の動作量(動き量)が予め設定された所定値以上変化した回数を示す数値データである。被写体動作変化回数は、被写体の動作量が予め設定された所定値以上変化した回数を示す数値データである。×count値は、合焦判定が連続して○判定でなかった回数(×判定の回数)を示す数値データである。StCount値は、ピーク位置とスキャン中心位置との差が所定値より連続して小さくなった回数を示す数値データである。
[メインルーチンについて]
図2に示すように、撮像装置1は、メインスイッチ120がONとなり電源が投入されることで、制御部115が制御して行う処理を開始する。処理が開始されると、S201で制御部115は、画像記録部114における記録媒体の残容量を調べ、残容量が0であればS202へと進み、残容量が0でなければS203へと進む。なお、S201では、残容量の検出に先立って、画像記録部114における記録媒体の有無を検出し、記録媒体が接続されていない場合にS201へ処理を進めてもよい。
画像記録部114の記憶媒体の残容量が0である場合、制御部115は、S202において画像記録部114の残容量が0であることを操作表示部117に警告表示してS201へと戻る。なお、S202では、アンプ及びスピーカから構成された音声出力部(図示しない)から警告音を出力してもよいし、操作表示部117による警告表示と音声出力部による警告音の出力の両方を行ってもよい。
S203で制御部115は、AFモードがContinuousAFモードであるかSingleAFモードであるかを調べる。制御部115は、ContinuousAFモードであればステップS204へと処理を進め、SingleAFモードであればステップS207へと処理を進める。上述したAFモードは、撮影モードSW119を介したユーザからの指示により予め設定される。なお、SingleAFモードは撮影の直前に一回AFスキャンを行って被写体への合焦させるAFモードである。ContinuousAFモードは、撮影前からAFスキャンを繰り返し行って被写体へ合焦させるAFモードである。ContinuousAFモードには、EVF表示の見栄えよりもAFスキャンを優先して行うServoAFモードがある。すなわち、ContinuousAFモード又はServoAFモードがフォーカスレンズの位置の調整を連続的に行う動作モードである。
S204で制御部115は、操作部118を介したユーザからの指示において、EVF表示の見栄えを優先するかAFスキャンを繰り返し行うAF追従を優先するかを調べる。制御部115は、EVF表示の見栄えを優先する場合はS205へと処理を進め、AF追従を優先する場合はS206へと処理を進める。
S205で制御部115は、後述する図3のフローチャートに従ってContinuousAFを行い、S207へと処理を進める。S206で制御部115は、後述する図4のフローチャートに従ってServoAFを行い、S207へと処理を進める。
S207で制御部115は、第1スイッチ121の状態を調べ、ONであればS208へと処理を進め、ONでなければS201へと処理を進める。S208で制御部115は、AE処理部103で画像処理部110の出力からAE処理を行ってS209へと処理を進める。S209で制御部115は、合焦フラグの状態を調べ、合焦フラグがTRUEであればS211へと処理を進め、合焦フラグがFALSEであればS210へと処理を進める。
S210で制御部115は、後述する図7のフローチャートに従って、通常AF動作を行ってS211へと処理を進める。S211で制御部115は、ServoAFモードに設定されているか否かを調べる。制御部115は、ServoAFモードに設定されていればS212へと処理を進め、ServoAFモードに設定されていなければS213へと処理を進める。S212で制御部115は、後述する図4に従って、ServoAFを行ってS213へと処理を進める。
S213で制御部115は、第1スイッチ121の状態を調べ、ONであればS214へと処理を進め、ONでなければS201へと処理を進める。S214で制御部115は、第2スイッチ122の状態を調べ、ONであればS215へと処理を進め、ONでなければS211へと処理を進める。S215で制御部115は、後述する図17のフローチャートに従って、撮影動作を行ってS201へと処理を進める。
上述した処理により、撮像装置1では、電源が投入されて第1スイッチ121がONされるまではS201〜S207の処理がループして行われることとなる。また、撮像装置1では、第1スイッチ121がONされるとS208〜S213までの処理が行われ、第1スイッチ121がONのままで第2スイッチ122がOFFの状態ではS211〜S213の処理がループして行われることとなる。そして、第1スイッチ121がONの状態で第2スイッチ122がONされると撮影が行われることとなる。
[ContinuousAFについて]
次に、図2のフローチャートにおけるS205のContinuousAFのサブルーチンについて、図3のフローチャートを参照しながら説明する。図3に示すように、ContinuousAFが開始されると、S301で制御部115は、顔検出モジュール123において顔検出したか否かを調べる。制御部115は、顔検出していればS302へと処理を進め、顔検出していなければS304へと処理を進める。
S302で制御部115は、顔検出モジュール123で検出した顔位置・顔サイズなどの顔情報を取得してS303へと処理を進める。S303で制御部115は、顔検出していることを示す顔検出フラグをTRUEにしてS304へと処理を進める。
S304で制御部115は、顔検出フラグの状態を調べる。制御部115は、顔検出フラグがTRUEであればS305へと処理を進め、顔検出フラグがFALSEであればS306へと処理を進める。
S305で制御部115は、顔検出モジュール123で検出された最新の顔検出位置にAF枠(焦点検出領域)を設定してS307へと処理を進める。ここで、顔検出されているときのAF枠のサイズは、ROMなどに予め設定された所定のサイズに設定してもよいし、顔検出モジュール123で検出した顔サイズに応じたサイズに設定してもよい。S306で制御部115は、中央領域などの予め設定された所定位置にAF枠を設定してS307へと処理を進める。S307で制御部115は、S305、又は、S306で設定したAF枠内の画像領域における焦点評価値(コントラスト値)及び輝度値を取得してS308へと処理を進める(輝度取得手段)。
S308で制御部115は、後述するS309の山登りAFにおいてピークが検出されたことを示す、ピーク検出フラグの状態を調べる。制御部115は、ピーク検出フラグがTRUEであればS310へと処理を進め、ピーク検出フラグがFALSEであればS309へと処理を進める。S309で制御部115は、後述する図5のフローチャートに従って山登りAFを行った後にContinuousAFのサブルーチンを終了し、S207へ処理を進める。
S310で制御部115は、後述する図6のフローチャートに従って被写体距離変化判定を行って、ステップS311へと処理を進める。S311で制御部115は、被写体距離が変化したことを示す距離変化フラグの状態を調べる。制御部115は、距離変化フラグがTRUEであればステップS312へと処理を進め、距離変化フラグがFALSEであればS313へと処理を進める。
S312で制御部115は、ピーク検出フラグ及び距離変化フラグをFALSEにしてリセットする。また、制御部115は、S309の山登りAFのサブルーチンで用いる焦点評価値の最大値、ピーク位置、焦点評価値の増加を示す増加カウンタをリセットしてS313へと処理を進める。S313で制御部115は、フォーカスレンズをそのまま停止させてS207へと処理を進める。
[ServoAFについて]
次に、図2のフローチャートにおけるS206やS212のServoAFのサブルーチンについて、図4のフローチャートを参照しながら説明する。図4に示すように、ServoAFが開始されると、S401で制御部115は、顔検出モジュール123において顔検出したか否かを調べる。制御部115は、顔検出していればS402へと処理を進め、顔検出していなければS404へと処理を進める。
S402で制御部115は、顔検出モジュール123で検出した顔位置・顔サイズなどの顔情報を取得してS403へと処理を進める。S403で制御部115は、顔検出していることを示す顔検出フラグをTRUEにしてS404へと処理を進める。
S404で制御部115は、顔検出フラグの状態を調べる。制御部115は、顔検出フラグがTRUEであればS405へと処理を進め、顔検出フラグがFALSEであればS406へと処理を進める。
S405で制御部115は、顔検出モジュール123で検出された最新の顔検出位置にAF枠を設定してS407へと処理を進める。ここで、顔検出されているときのAF枠のサイズは、予め設定された所定のサイズに設定してもよいし、検出した顔サイズに応じたサイズに設定してもよい。S406で制御部115は、中央領域などの予め設定された所定位置にAF枠を設定してS407へと処理を進める。S407で制御部115は、S405、又は、S406で設定したAF枠内の画像領域における焦点評価値及び輝度値を取得してS408へと処理を進める(輝度取得手段)。
S408で制御部115は、後述するS409の山登りAFにおいてピークが検出されたことを示す、ピーク検出フラグの状態を調べる。制御部115は、ピーク検出フラグがTRUEであればS410へと処理を進め、ピーク検出フラグがFALSEであればS409へと処理を進める。S409で制御部115は、後述する図5のフローチャートに従って山登りAFを行った後にServoAFのサブルーチンを終了し、S207又はS213へ処理を進める。
S410で制御部115は、被写体距離が変化したことを示す距離変化フラグの状態を調べる。制御部115は、距離変化フラグがTUREであればS412へと処理を進め、距離変化フラグがFALSEであればS411へと処理を進める。S411で制御部115は、合焦フラグがTRUEであるか否かを調べる。制御部115は、合焦フラグがTRUEであればS413へと処理を進め、合焦フラグがFALSEであればS412へと処理を進める。
S412で制御部115は、後述する図8のフローチャートに従って、Servo中AF動作を行った後にServoAFのサブルーチンを終了し、S207又はS213へ処理を進める。S413で制御部115は、後述する図6のフローチャートに従って被写体距離変化判定を行った後にServoAFのサブルーチンを終了し、S207又はS213へ処理を進める。
[山登りAFについて]
次に、図3のフローチャートにおけるS309、図4のフローチャートにおけるS409の山登りAFのサブルーチンについて、図5のフローチャートを参照しながら説明する。図5に示すように、山登りAFが開始されると、S501で制御部115は、フォーカスレンズ104の現在位置を取得してS502へと処理を進める。
S502で制御部115は、設定されたAF枠内の画像領域における焦点評価値・輝度値の取得し、フォーカスレンズ104の現在位置の取得をカウントするための取得カウンタをインクリメントしてS503へと処理を進める。なお、取得カウンタは、初期化動作(図示しない)において予め0(又はNULL値)に設定されているものとする。
S503で制御部115は、取得カウンタの値が1か否かを調べる。制御部115は、取得カウンタの値が1ならばS506へと処理を進め、取得カウンタの値が1でなければS504へと処理を進める。
S504で制御部115は、直近の処理で取得した「今回の焦点評価値」がその前の処理で取得した「前回の焦点評価値」よりも大きいか否かを調べる。制御部115は、「今回の焦点評価値」が「前回の焦点評価値」よりも大きければS505へと処理を進め、それ以下であればS512へと処理を進める。
S505で制御部115は、「今回の焦点評価値」が「前回の焦点評価値」よりも大きいことを示す増加カウンタに1を加えてS505へと処理を進める。この増加カウンタは、前述した初期化動作において予め0(又はNULL値)に設定されているものとする。
S506で制御部115は、今回の焦点評価値を焦点評価値の最大値(ピーク評価値)として制御部115に内臓される演算メモリ(図示しない)に記憶して、S507へと処理を進める。S507で制御部115は、フォーカスレンズ104の現在の位置を焦点評価値のピーク位置として制御部115に内臓される演算メモリに記憶して、S508へと処理を進める。S508で制御部115は、今回の焦点評価値を前回の焦点評価値として制御部115に内臓される演算メモリに記憶して、S509へと処理を進める。
S509で制御部115は、フォーカスレンズ104の現在位置が予め設定された測距範囲の端にあるか否かを調べる。制御部115は、測距範囲の端にあればS510へと処理を進め、測距範囲の端になければS511へと処理を進める。なお、測距範囲は、後述する処理により設定されるフォーカスレンズ104の駆動範囲であり、標準状態ではフォーカスレンズ104の可動範囲が予め設定されているものとする。山登りAF等のスキャンは、設定された測距範囲内(駆動範囲内)でフォーカスレンズ104を駆動することで行われる。
S510で制御部115は、フォーカスレンズ104の移動方向を反転してS511へと処理を進める。S511で制御部115は、フォーカスレンズ104を予め設定された所定量移動した後に後に山登りAFのサブルーチンを終了する。
S512で制御部115は、演算メモリに記憶されたピーク評価値を読み出し、「ピーク評価値−今回の焦点評価値」が予め設定された所定量(閾値)より大きいか否かを調べる。制御部115は、所定量より大きければS513へと処理を進め、所定量以下であればS508へと処理を進める。ここで、「ピーク評価値−今回の焦点評価値」が所定量より大きく、ピーク評価値から所定量減少していれば、そのピーク評価値を被写体へ合焦している際の焦点評価値とみなす。すなわち、フォーカスレンズ104を測距範囲内で駆動した際に、焦点評価値が増加から減少に転じる変曲点が被写体へ合焦している焦点評価値とみなされることとなる。
S513で制御部115は、増加カウンタが0より大きいか否かを調べる。制御部115は、増加カウンタが0より大きければS514へと処理を進め、増加カウンタが0以下であればS508へと処理を進める。
S514で制御部115は、フォーカスレンズ104をS507で記憶した焦点評価値が最大値となったピーク位置へ移動させて、S515へと処理を進める。S515で制御部115は、ピーク検出フラグをTRUEにしてS516へと処理を進める。S516で制御部115は、取得カウンタを0としてS207へと処理を進める。
[被写体距離変化判定について]
次に、図3のフローチャートにおけるS310、及び、図4のフローチャートにおけるS413の被写体距離変化判定のサブルーチンについて、図6のフローチャートを参照しながら説明する。図6に示すように、被写体距離変化判定が開始されると、S601で制御部115は、顔検出モジュール123において顔検出したか否かを調べる。制御部115は、顔検出していればS602へと処理を進め、顔検出していなければS606へと処理を進める。
S602で制御部115は、今回の処理で検出した顔サイズが前回の処理で検出した顔サイズに対して予め設定された所定割合以上変化したか否かを調べる。すなわち、S602では、フォーカスレンズの位置の調整を連続的に行う動作モード時において、連続的に取得された人物の顔領域のサイズ変化が所定割合以上変化したか否かにより被写体との距離の変化の有無を検出している。制御部115は、所定割合以上変化していればS603へと処理を進め、所定割合以上変化していなければS606へと処理を進める。S603で制御部115は、顔検出サイズ変化回数をインクリメントしてS604へと処理を進める。S604で制御部115は、顔サイズ変化回数が予め設定された閾値以上であるか否かを調べ、閾値以上であればS605へと処理を進め、閾値未満であればS606へと処理を進める。S605で制御部115は、合焦フラグをFALSEにし、距離変化フラグをTRUEにして被写体距離変化判定のサブルーチンを終了する。
S606で制御部115は、前回の処理で取得した輝度値に対して、今回の処理で取得した輝度値が予め設定された所定値以上変化したか否かを調べる。すなわち、S606では、フォーカスレンズの位置の調整を連続的に行う動作モード時において、連続的に取得された輝度値の変化量が所定値以上変化したか否かにより被写体との距離の変化の有無を検出している。制御部115は、所定値以上変化していればS607へと処理を進め、所定値以上変化していなければS609へと処理を進める。S607で制御部115は、輝度値変化回数をインクリメントしてS608へと処理を進める。S608で制御部115は、輝度値変化回数が予め設定された閾値以上か否かを調べ、閾値以上であればS605へと処理を進め、閾値未満であればS609へと処理を進める。
S609で制御部115は、前回の処理で取得した焦点評価値に対して、今回の処理で取得した焦点評価値が予め設定された所定値以上変化したか否かを調べる。すなわち、S609では、フォーカスレンズの位置の調整を連続的に行う動作モード時において、連続的に取得された焦点評価値の変化量が所定値以上変化したか否かにより被写体との距離の変化の有無を検出している。制御部115は、所定値以上変化していればS610へと処理を進め、所定値以上変化していなければS612へと処理を進める。S610で制御部115は、焦点評価値変化回数をインクリメントしてS611へと処理を進める。S611で制御部115は、焦点評価値変化回数が予め設定された閾値以上か否かを調べ、閾値以上であればS605へと処理を進め、閾値未満であればS612へと処理を進める。
S612で制御部115は、角速度センサ部125で検出した撮像装置1の動作量が予め設定された所定値以上変化したか否かを調べる。すなわち、S612では、フォーカスレンズの位置の調整を連続的に行う動作モード時において、自装置の動作量により被写体との距離の変化の有無を検出している。制御部115は、所定値以上変化していればS613へと処理を進め、所定値以上変化していなければS615へと処理を進める。S613で制御部115は、カメラ動作回数をインクリメントしてS614へと処理を進める。S614で制御部115は、カメラ動作回数が予め設定された閾値以上か否かを調べ、閾値以上であればS605へと処理を進め、閾値未満であればS615へと処理を進める。
S615で制御部115は、動体検出部124で検出した被写体の動作量が予め設定された所定値以上であるか否かを調べる。すなわち、S615では、フォーカスレンズの位置の調整を連続的に行う動作モード時において、被写体の動作量により被写体との距離の変化の有無を検出している。制御部115は、所定値以上であればS616へと処理を進め、所定値以上でなければS618へと処理を進める。S616で制御部115は、被写体動作回数をインクリメントしてS617へと処理を進める。S617で制御部115は、被写体動作回数が予め設定された閾値以上か否かを調べ、閾値以上であればS605へと処理を進め、閾値未満であればS618へと処理を進める。
S618で制御部115は、顔検出サイズ・輝度値・焦点評価値のいずれの評価値も変化しておらず、カメラ動作量、被写体動作量が所定値以上となっていないか否かを調べる。制御部115は、いずれの評価値も変化しておらず、いずれの動作量も所定値以上となっていなければS619へと処理を進める。また、制御部115は、どれかの評価値が変化している、又は、どれかの動作量が所定値以上となっていれば、被写体距離変化判定のサブルーチンを終了する。S619で制御部115は、顔サイズ変化回数・輝度値変化回数・焦点評価値変化回数、カメラ動作回数、被写体動作回数の全てを0(又はNULL値)にして被写体距離変化判定のサブルーチンを終了する。
上述したように、距離変化検出手段としての制御部115は、ContinuousAFモード又はServoAFモード時において、被写体と自装置との距離変化を有無を検出する被写体距離変化判定のサブルーチンを行う。これにより、撮像装置1では、フォーカスレンズの位置の調整を連続的に行う動作モード時に、被写体と自装置との距離変化の有無を検出した検出結果である距離変化フラグを下に、フォーカスレンズの駆動を制御することが可能となる。例えば、被写体と自装置との距離が変化した際には、距離変化フラグをTRUEとすることで、停止していたフォーカスレンズの駆動を再開させることが可能となる。
[通常AF動作について]
次に、図2のフローチャートにおけるS210の通常AF動作のサブルーチンについて、図7のフローチャートを参照しながら説明する。図7に示すように、通常AF動作が開始されると、S701で制御部115は、顔検出モジュール123において顔検出したか否かを調べる。制御部115は、顔検出していればS702へと処理を進め、顔検出していなければS704へと処理を進める。
S702で制御部115は、顔検出モジュール123で検出した顔位置・顔サイズなどの顔情報を取得してS703へと処理を進める。S703で制御部115は、顔検出していることを示す顔検出フラグをTRUEにしてS704へと処理を進める。
S704で制御部115は、顔検出フラグの状態を調べる。制御部115は、顔検出フラグがTRUEであればS705へと処理を進め、顔検出フラグがFALSEであればS706へと処理を進める。
S705で制御部115は、最新の顔検出位置にAF枠を設定してS707へと処理を進める。ここで、顔検出されているときのAF枠のサイズは、予め設定された所定のサイズに設定してもよいし、検出した顔サイズに応じたサイズに設定してもよい。S706で制御部115は、中央領域などの予め設定された所定位置にAF枠を設定してS707へと処理を進める。
S707で制御部115は、撮影モードSW119により設定されたAFモードがContinuousAFであるか、又は、SingleAFモードであるかを調べる。制御部115は、ContinuousAFモードであればS708へと進み、SingleAFモードであればステップS710へと進む。
S708で制御部115は、ピーク検出フラグがTRUEかどうかを調べる。制御部115は、ピーク検出フラグがTRUEであればS711へと処理を進め、ピーク検出フラグがFALSEであればS710へと処理を進める。S710で制御部115は、測距範囲をフォーカスレンズ104の可動範囲の全域(第1の範囲)に設定してS712へと処理を進める。S711で制御部115は、フォーカスレンズ104の現在位置を中心として予め設定された所定範囲(第2の範囲)を測距範囲として設定してS712へと進む。
S711では、被写体へ合焦しているピーク評価値が検出されているため、そのピーク評価値となるフォーカスレンズ104のレンズ位置を中心とし、第1の範囲よりも狭く絞り込んだ第2の範囲が測距範囲として設定される。従って、撮像装置1では、S711による測距範囲の設定により、通常AF動作時におけるスキャン(AFスキャン)をより効率的に行うことが可能となる。
S712で制御部115は、後述する図12のフローチャートに従ってスキャンを行って、S713へと処理を進める。S713で制御部115は、後述する図13のフローチャートに従って合焦判定を行って、S714へと処理を進める。
S714で制御部115は、S713における合焦判定(詳細は後述する)の結果が○判定か否かを調べる。制御部115は、○判定であればS715へと処理を進め、×判定であればS717へと処理を進める。
S715で制御部115は、フォーカスレンズ104をS712でのスキャンで計算したピーク位置へ移動してS716へと処理を進める。S716で制御部115は、ピーク検出フラグ及び合焦フラグをTRUEにし、距離変化フラグをFALSEにして通常AF動作のサブルーチンを終了する。
S717で制御部115は、フォーカスレンズ104を予め設定されている位置(定点)へと移動してS718へと処理を進める。ここで、定点は被写体の存在確率の高い距離に設定する。顔が検出されていれば、顔サイズより人物の距離を推定して算出した距離に設定してもよい。S718で制御部115は、ピーク検出フラグ及び距離変化フラグをFALSEにして通常AF動作のサブルーチンを終了する。
[Servo中AF動作について]
次に、図4のフローチャートにおけるS412のServo中AF動作のサブルーチンについて、図8のフローチャートを参照しながら説明する。図8に示すように、S801で制御部115は、RTC部(Real Time Clock(図示しない))から現在の時刻を取得し、次回のスキャン(後述するS810のスキャン)にかかる時間を算出する。次いで、制御部115は、次回のスキャンにおいてフォーカスレンズ104の位置が測距範囲の中心に位置するときの時刻(予測時刻)、を算出してPreTimeとし、S802へと処理を進める。S802で制御部115は、後述する図9のフローチャートに従って予測可能判定を行って、S803へと処理を進める。
S803で制御部115は、S802の予測可能判定における予測可能判定結果が予測可能か否かを調べる。制御部115は、予測可能であればS804へと処理を進め、予測可能でなければS805へと処理を進める。
S804で制御部115は、後述する図10のフローチャートに従って被写体位置予測を行って、S807へと処理を進める。S805で制御部115は、後述する過去の動体予測用のデータScanTime[0]〜ScanTime[i-1]及びHokanPeak[0]〜HokanPeak[i-1]をクリアする。さらに、制御部115は、連続して予測可能判定となった回数を示す変数iを0にしてS806へと処理を進める。S806で制御部115は、フォーカスレンズ104の現在位置をスキャン中心位置に設定して、S807へと処理を進める。
S807で制御部115は、合焦フラグがTRUEかどうかを調べ、合焦フラグがTRUEであればS808へと処理を進め、合焦フラグがFALSEであればS809へと処理を進める。S808で制御部115は、測距範囲を予め設定された所定範囲(第3の範囲)に設定してS810へと処理を進める。S809で制御部115は、S808で設定する第3の範囲よりも広い範囲(第4の範囲)に測距範囲を設定してS810へと処理を進める。S809では、被写体へ合焦しているピーク評価値が検出されていないことが合焦フラグから明らかであるため、第3の範囲よりも広い第4の範囲に測距範囲を設定してスキャンを行うことで、被写体へ合焦を的確に行わせる。
S810で制御部115は、後述する図12のフローチャートに従ってスキャンを行って、S811へと処理を進める。S811で制御部115は、後述する図13のフローチャートに従って合焦判定を行って、S812へと処理を進める。
S812で制御部115は、S811で判定した合焦判定結果が○判定か否かを調べる。制御部115は、○判定であればS813へと処理を進め、×判定であればS825へと処理を進める。
S813で制御部115は、合焦フラグをTRUEにしてS814へと処理を進める。S814で制御部115は、連続して合焦判定が○判定でなかった回数(×判定の回数)を示す×countを0にしてS815へと処理を進める。
S815で制御部115は、S810におけるスキャン結果(ピーク位置)とスキャン中心位置の差が予め設定された所定値より小さいか否かを調べる。制御部115は、、所定値より小さければS816へと処理を進め、所定値より小さくなければS819へと処理を進める。
S816で制御部115は、S810におけるピーク位置とスキャン中心位置との差が所定値より連続して小さくなった回数を示すStCountに1をインクリメントしてS817へと処理を進める。S817で制御部115は、StCountが予め設定された閾値以上であるか否かを調べ、閾値以上であればS818へと処理を進め、閾値未満であればS820へと処理を進める。すなわち、制御部115は、Servo中AF動作によるフォーカスレンズ104の調整結果に基づいて決定した基準位置(スキャン中心位置)に対して、予め設定された範囲内に焦点評価値が最大となるフォーカスレンズ位置が含まれるか否かを判定する。そして、制御部115は、予め設定された範囲内に焦点評価値が最大となるフォーカスレンズ位置が含まれることが、予め設定された回数繰り返されるか否かを判定して、距離変化の有無を検出している距離変化検出手段である。
S818で制御部115は、被写体の距離変化がなくなったと判断して、距離変化フラグをFALSEにする。S818aで制御部115は、フォーカスレンズ104の駆動を停止させて、Servo中AF動作のサブルーチンを終了する。これにより、撮像装置1では、ServoAF時においても、被写体距離が変化しない場合にはフォーカスレンズを停止させることで、ServoAFにおけるスキャンが無駄に繰り返されることを無くすことができる。
S819で制御部115は、StCountを0にクリアしてS820へと処理を進める。S820で制御部115は、S810における今回のスキャン中心位置に対する今回のピーク位置の方向と、前回のスキャン中心位置に対する前回のピーク位置の方向とが同方向であるか否かを調べる。制御部115は、同方向であればS821へ処理を進め、同方向でなければS822へと処理を進める。
S821で制御部115は、同方向移動フラグをTRUEにしてS823へと処理を進める。S822で制御部115は、同方向移動フラグをFALSEにしてS823へと処理を進める。
S823で制御部115は、今回のスキャンにおいてフォーカスレンズ104の位置が測距範囲の中心に位置した時刻をScanTime[i]とし、今回のスキャンにおけるピーク位置をHokanPeak[i]としてS824へと処理を進める。S824で制御部115は、iをインクリメントしてServo中AF動作のサブルーチンを終了する。
S825で制御部115は、合焦フラグをFALSEにしてS826へと処理を進める。S826で制御部115は×CountをインクリメントしてS827へと処理を進める。
S827で制御部115は、×Countが予め設定された所定値よりも大きいか否かを調べる。制御部115は、所定値より大きければS828へと処理を進め、所定値より大きくなければServo中AF動作のサブルーチンを終了する。S828で制御部115は、ピーク検出フラグ及び距離変化フラグをFALSEにしてServo中AF動作のサブルーチンを終了する。
[予測可能判定について]
次に、図8のフローチャートにおけるS802の予測可能判定のサブルーチンについて、図9のフローチャートを参照しながら説明する。図9に示すように、S901で制御部115は、Servo中AF動作における変数iについて、i=0か否かを調べる。制御部115は、iが0であればS905へと処理を進め、iが0でなければS902へと処理を進める。
S902で制御部115は、PreTimeとScanTime[i-1]の差が予め設定された所定時間よりも短いか否かを調べる。制御部115は、所定時間よりも短ければS903へと処理を進め、所定時間よりも長ければS905へと処理を進める。これより、前回のスキャンから今回のスキャンまでの間の時間が分かり、前回のスキャン結果を使用した予測の信頼性があるのかどうかを判断することができる。例えば、所定時間よりも長く時間がかかる場合には、予測の信頼性がないとすることができる。
S903で制御部115は、同方向移動フラグがTRUEかどうかを調べ、同方向移動フラグがTRUEであればS904へと処理を進め、同方向移動フラグがFALSEであればS905へと処理を進める。これにより、被写体が距離方向で同方向に移動していると判断したときにのみ予測の信頼性があるとすることで、誤測距の結果を使用することによる誤った予測を低減することができる。
S904で制御部115は、予測可能判定の結果を予測可能として、予測可能判定のサブルーチンを終了し、S803へと処理を進める。S905で制御部115は、予測可能判定の結果を予測不可能として、予測可能判定のサブルーチンを終了し、S803へと処理を進める。
[被写体位置予測について]
次に、図8のフローチャートにおけるS804の被写体位置予測のサブルーチンについて、図10のフローチャート、及び、図11(a)、(b)の説明図を参照しながら説明する。図10に示すように、S1001で制御部115は、Servo中AF動作における変数iについて、iが2より小さいか否かを調べる。制御部115は、iが2より小さければS1002へと処理を進め、iが2以上であればS1003へと処理を進める。S1002で制御部115は、スキャン中心位置を前回のスキャンのピーク位置に設定して被写体位置予測のサブルーチンを終了し、S807へと処理を進める。
S1003で制御部115は、i=2であるか否かを調べる。すなわち、S1003では、動体予測用のデータが2点であるか否かを調べ、2点である場合と、3点以上ある場合とを判定している。制御部115は、i=2であればS1004へと処理を進め、iが2より大きければS1006へと処理を進める。
S1004で制御部115は、図11(a)に示すように、次に示す第1の動体予測式(1)を使って、2点分の動体予測用のデータから被写体の予測位置を算出して、S1005へと処理を進める。具体的には、(ScanTime[0],HokanPeak[0])と、(ScanTime[1],HokanPeak[1])の2点より、PreTime時の被写体の予測位置PrePositionを算出する。
PrePosition = (PreTime - ScanTime[0])×(HokanPeak[1] - HokanPeak[0])/(ScanTime[1] - ScanTime[0]) + HokanPeak[0] ……(1)
S1005で制御部115は、S1004で算出した被写体の予測位置PrePositionをスキャン中心位置に設定して被写体位置予測のサブルーチンを終了し、S807へと処理を進める。
S1006で制御部115は、図11(b)に示すように、次に示す第2の動体予測式(2)を使って、3点分の動体予測用のデータから被写体の予測位置を算出して、S1007へと処理を進める。3点分の動体予測用のデータは、(ScanTime[i-2],HokanPeak[i-2])、(ScanTime[i-1],HokanPeak[i-1])、(ScanTime[i],HokanPeak[i])である。従って、上述した3点より、PreTime時の被写体の予測位置PrePositionを算出する。
PrePosition = ( t3 / t2 )×{ (t3 - t2)×(t2×Pos1 - t1×Pos2)
/t1/(t1 - t2) + Pos2 } + HokanPeak[i-2] ……(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]
とする。
S1007で制御部115は、S1006で算出した被写体の予測位置PrePositionをスキャン中心位置に設定して被写体位置予測のサブルーチンを終了し、S807へと処理を進める。
次に、図7のフローチャートにおけるS712、及び、図8のフローチャートにおけるS810のスキャンのサブルーチンを、図12のフローチャートを参照しながら説明する。図12に示すように、S1201で制御部115は、フォーカスレンズ104をスキャン開始位置に移動する。なお、スキャン開始位置は設定された測距範囲の一端に設定される。
S1202で制御部115は、撮影画面内におけるAF枠に応じた画像領域の焦点評価値とフォーカスレンズ104の位置を制御部115に内蔵された演算メモリに記憶し、S1203へと処理を進める。
S1203で制御部115は、フォーカスレンズ104のレンズ位置がスキャン終了位置にあるか否かを調べる。制御部115は、レンズ位置が終了位置であればS1205へ処理を進め、レンズ位置が終了位置でなければS1204へ処理を進める。なお、スキャン終了位置は、スキャン開始位置として設定された測距範囲の一端とは反対側の測距範囲の他端に設定される。
S1204で制御部115は、予め設定された所定の方向へ所定量だけフォーカスレンズ104を移動させてS1202へと処理を進める。S1205で制御部115は、S1202で演算メモリに記憶した焦点評価値とそのレンズ位置を順次読み出して焦点評価値のピーク位置を計算し、スキャンのサブルーチンを終了する。
[合焦判定について]
次に、図7のフローチャートにおけるS713、及び、図8のフローチャートにおけるS811の合焦判定のサブルーチンを、図13〜図16を参照しながら説明する。
焦点評価値は遠近競合などの特殊な場合を除けば、横軸にフォーカスレンズ位置、縦軸に焦点評価値をとるとそのグラフは、図13に示すような山状になる。そこで撮像装置1では、焦点評価値が山状になっているか否かを、焦点評価値の最大値と最小値の差、一定値(SlopeThr)以上の傾きで傾斜している部分の長さ、傾斜している部分の勾配から判断することにより、合焦判定を行うことができる。合焦判定における判定結果は、次に示すように○×で出力される。
○判定:焦点評価値のピーク位置から、被写体の焦点調節が可能である。
×判定:被写体のコントラストが不十分、もしくはスキャンした距離範囲外の距離に被写体が位置する。
ここで図13に示すように、山の頂上(A点)から傾斜が続いていると認められる点をD点、E点とし、D点とE点の幅を山の幅L、A点とD点の焦点評価値の差SL1とA点とE点の焦点評価値の差SL2の和SL1+SL2をSLとする。
図14は、合焦判定のサブルーチンを示すフローチャートである。図14に示すように、S1301において、制御部115は、焦点評価値の最大値と最小値、及び、最大値を与えるスキャンポイントioを前述したスキャンの結果から求めてS1302へと処理を進める。
次に、S1302で制御部115は、焦点評価値の山の幅を表す変数L、山の勾配を表す変数SLなどの変数をともに零に初期化してS1303へと処理を進める。S1303で制御部115は、最大値を与えるスキャンポイントioがスキャンを行った測距範囲における遠側端の位置か否かを調べる。制御部115は、遠側端位置でないならばS1304へ処理を進め、無限遠方向への単調減少を調べる。また、制御部115は、遠側端位置であったならば、S1304の処理をスキップしS1305へ処理を進める。
ここで、S1304における無限遠方向への単調減少を調べる処理について説明する。図15に示すように、まずS1401において、制御部115は、カウンタ用の変数iをioに初期化してS1402へと処理を進める。
S1402で制御部115は、スキャンポイントiにおける焦点評価値の値d[i]と、iより1スキャンポイント分無限遠よりのスキャンポイントi−1における焦点評価値の値d[i−1]の差を予め設定された所定値SlopeThrと比較する。制御部115は、d[i]−d[i−1]>=SlopeThrであれば、無限遠方向への単調減少が生じていると判断し、S1403へ処理を進める。一方、制御部115は、d[i]−d[i−1]>=SlopeThrでなければ、無限遠方向への単調減少は生じていないと判断し、無限遠方向への単調減少を調べる処理を終了し、S1305へ処理を進める。
無限遠方向への単調減少をチェックする処理を継続する場合、制御部115はS1403へと処理を進める。S1403で制御部115は、焦点評価値が一定値以上の傾きで傾斜している部分の長さ(山の幅)を表す変数L、単調減少区間における減少量を表す変数SLを次の式に従い更新してS1404へと処理を進める。
L = L+1
SL= SL+(d[i]−d[i−1])
S1404で制御部115は、i=i−1として、検出をする点を1スキャンポイント無限遠側に移してS1405へと処理を進める。S1405で制御部115は、カウンタiがスキャンを行った所定の測距範囲における遠側端位置の値(=0)になったか否かをチェックする。制御部115は、カウンタiの値が0、すなわち単調減少を検出する開始点がスキャンを行った所定の測距範囲における遠側端位置に達したならば、無限遠方向への単調減少を調べる処理を終了し、S1305へ処理を進める。以上のようにして、撮像装置1は、i=ioから無限遠方向への焦点評価値の単調減少をチェックする。
図14に戻って、合焦判定のサブルーチンの続きを説明する。S1305で制御部115は、最大値を与えるスキャンポイントioがスキャンを行った所定の測距範囲における至近端の位置か否かを調べる。制御部115は、至近端位置でないならばS1306へ処理を進め、至近端方向への単調減少を調べる。また、制御部115は、至近端位置であったならば、S1306の処理をスキップしS1307へ処理を進める。
ここで、S1306における至近端方向への単調減少を調べる処理について説明する。図16に示すように、まずS1501において、制御部115は、カウンタ変数iをioに初期化してS1502へと処理を進める。
S1502で制御部115は、スキャンポイントiにおける焦点評価値の値d[i]と、iより1スキャンポイント分至近端よりのスキャンポイントi+1における焦点評価値の値d[i+1]の差を所定値SlopeThrと比較する。制御部115は、d[i]−d[i+1]>=SlopeThrであれば、至近端方向への単調減少が生じていると判断し、S1503へ処理を進める。一方、制御部115は、d[i]−d[i+1]>=SlopeThrでなければ、至近端方向への単調減少は生じていないと判断し、至近端方向への単調減少を調べる処理を終了し、S1307へ処理を進める。
至近端方向への単調減少をチェックする処理を継続する場合、制御部115はS1503へと処理を進める。S1503で制御部115は、焦点評価値が一定値以上の傾きで傾斜している部分の長さ(山の幅)を表す変数L、単調減少区間における減少量を表す変数SLを次の式に従い更新してS1504へと処理を進める。
L = L+1
SL= SL+(d[i]−d[i+1])
S1504で制御部115は、i=i+1として、検出をする点を1スキャンポイント至近端側に移してS1505へと処理を進める。S1505で制御部115は、カウンタiがスキャンを行った所定の測距範囲における至近端位置の値(=N)になったか否かをチェックする。制御部115は、カウンタiの値がN、すなわち単調減少を検出する開始点がスキャンを行った所定の測距範囲における至近端位置に達したならば、至近端方向への単調減少をチェックする処理を終了し、S1307へ処理を進める。以上のようにして、撮像装置1は、i=ioから至近端方向への焦点評価値の単調減少をチェックする。
図14に戻って、合焦判定のサブルーチンの続きを説明する。合焦判定では、無限遠方向および至近端方向への単調減少をチェックする上記処理が終了したならば、得られた焦点評価値が山状になっているか否か、諸係数をそれぞれのしきい値と比較し、○×の判定を行う。具体的には、以下に説明するS1307〜S1309の処理により、○×の判定が行われる。
S1307において、制御部115は、焦点評価値の最大値を与えるスキャンポイントioがスキャンを行った所定の測距範囲における至近端であるか否かを調べる。至近端である場合は、至近端スキャンポイントnにおける焦点評価値の値d[n]と、nより1スキャンポイント分無限遠よりのスキャンポイントn−1における焦点評価値の値d[n−1]の差が、所定値SlopeThr以上であるか否かを調べる。制御部115は、至近端であり、かつ所定値SlopeThr以上である場合、S1311へ処理を進め、その条件を満たさない場合、S1308へ処理を進める。
S1308で制御部115は、焦点評価値の最大値を与えるスキャンポイントioがスキャンを行った所定の測距範囲における遠側端であるか否かを調べる。遠側端である場合は、遠側端スキャンポイント0における焦点評価値の値d[0]と、0より1スキャンポイント分至近端よりのスキャンポイント1における焦点評価値の値d[1]の差が、所定値SlopeThr以上であるか否かを調べる。制御部115は、遠側端であり、かつ所定値SlopeThr以上である場合、S1311へ処理を進め、その条件を満たさない場合、S1309へ処理を進める。
S1309で制御部115は、一定値以上の傾きで傾斜している部分の長さLが予め設定された所定値Lo以上であるか否かを調べる。所定値Lo以上である場合は、傾斜している部分の傾斜の平均値SL/Lが予め設定された所定値SLo/Lo以上であり、かつ焦点評価値の最大値と最小値の差が予め設定された所定値以上であるか否かを調べる。制御部115は、傾斜している部分の長さLが所定値Lo以上、かつ傾斜している部分の傾斜の平均値SL/Lが所定値SLo/Lo以上、かつ焦点評価値の最大値と最小値の差が所定値以上である場合にS1310へ処理を進める。一方、制御部115は、上記の条件を満たさない場合、S1311へ処理を進める。
S1310で制御部115は、S1307〜S1309の判定条件をすべて満たしており、得られた焦点評価値が山状となっていて、被写体の焦点調節が可能であるため判定結果を○判定としている。S1311で制御部115は、S1307〜S1309の判定条件のいずれかを満たさずに、得られた焦点評価値が山状となっておらず、被写体への焦点調節が不可能であるため判定結果を×判定としている。以上のようにして、撮像装置1は、図7のフローチャートにおけるS713、及び、図8のフローチャートにおけるS811の合焦判定を行う。
次に、図2のフローチャートにおけるS215の撮影動作のサブルーチンについて、図17のフローチャートを参照しながら説明する。図17に示すように、S1701で制御部115は、被写体輝度を測定してS1701へと処理を進める。S1702で制御部115は、S1701で測定した被写体輝度に応じてAE処理部103を制御し、撮像素子108への露光を行ってS1703へと処理を進める。
S1702における露光により、撮像素子108の撮像面に結像された被写体像は光電変換されてアナログ信号(アナログ画像データ)としてA/D変換部109へ出力される。S1703にて、A/D変換部109では、撮像素子108からのアナログ画像データを、撮像素子108の出力ノイズ除去や非線形処理などの前処理の後にデジタル画像データへ変換して出力する。
S1704で制御部115は、A/D変換部109から出力されたデジタル画像データを、WB処理部111のホワイトバランス調整や画像処理部110の画像処理などにより、適正なデジタル画像データへ変換して、S1705へと処理を進める。S1705で制御部115は、適正に変換されたデジタル画像データをフォーマット変換部112でJPEGフォーマット等への画像フォーマット変換を行った後、DRAM113に一時的に記憶してS1706へと処理を進める。S1706で制御部115は、DRAM113内のデータを画像記録部114でメモリカードなどの記録媒体へと記憶して、撮影動作のサブルーチンを終了する。
以上、説明したように、本実施形態では、被写体が距離方向に動いていないと判断した場合に、次に被写体が動いて被写体との距離が変化するまでフォーカスレンズを停止させることで、無駄なレンズ駆動を軽減させることができる。このため、EVF表示の見栄えの低下や、電池消耗を軽減させることができる。また、本実施形態では、信頼性の低い合焦位置または誤った合焦位置が求められてしまった場合に、被写体位置予測を行わないようにすることで、被写体へ追従した合焦が不能となることを軽減できる。
なお、上述した実施の形態における記述は、一例を示すものであり、これに限定するものではない。上述した実施の形態における構成及び動作に関しては、適宜変更が可能である。
(他の実施形態)
上述の実施形態は、システム或は装置のコンピュータ(或いはCPU、MPU等)によりソフトウェア的に実現することも可能である。従って、上述の実施形態をコンピュータで実現するために、該コンピュータに供給されるコンピュータプログラム自体も本発明を実現するものである。つまり、上述の実施形態の機能を実現するためのコンピュータプログラム自体も本発明の一つである。
なお、上述の実施形態を実現するためのコンピュータプログラムは、コンピュータで読み取り可能であれば、どのような形態であってもよい。例えば、オブジェクトコード、インタプリタにより実行されるプログラム、OSに供給するスクリプトデータ等で構成することができるが、これらに限るものではない。上述の実施形態を実現するためのコンピュータプログラムは、記憶媒体又は有線/無線通信によりコンピュータに供給される。プログラムを供給するための記憶媒体としては、例えば、フレキシブルディスク、ハードディスク、磁気テープ等の磁気記憶媒体、MO、CD、DVD等の光/光磁気記憶媒体、不揮発性の半導体メモリなどがある。
有線/無線通信を用いたコンピュータプログラムの供給方法としては、コンピュータネットワーク上のサーバを利用する方法がある。この場合、本発明を形成するコンピュータプログラムとなりうるデータファイル(プログラムファイル)をサーバに記憶しておく。プログラムファイルとしては、実行形式のものであっても、ソースコードであっても良い。そして、このサーバにアクセスしたクライアントコンピュータに、プログラムファイルをダウンロードすることによって供給する。この場合、プログラムファイルを複数のセグメントファイルに分割し、セグメントファイルを異なるサーバに分散して配置することも可能である。つまり、上述の実施形態を実現するためのプログラムファイルをクライアントコンピュータに提供するサーバ装置も本発明の一つである。
また、上述の実施形態を実現するためのコンピュータプログラムを暗号化して格納した記憶媒体を配布し、所定の条件を満たしたユーザに、暗号化を解く鍵情報を供給し、ユーザの有するコンピュータへのインストールを許可してもよい。鍵情報は、例えばインターネットを介してホームページからダウンロードさせることによって供給することができる。また、上述の実施形態を実現するためのコンピュータプログラムは、すでにコンピュータ上で稼働するOSの機能を利用するものであってもよい。さらに、上述の実施形態を実現するためのコンピュータプログラムは、その一部をコンピュータに装着される拡張ボード等のファームウェアで構成してもよいし、拡張ボード等が備えるCPUで実行するようにしてもよい。