本発明の特徴は、検出された被写体の少なくとも一部のサイズの変化量であって被写体の向きの変化に依らない変化量に基づき被写体距離の変化があるかを判断し、その判断に基づき、被写体距離の変化に対応させた追従駆動動作を行うか制限するかを決定することにある。この考え方に基づき、本発明の自動焦点調節装置及び方法は、課題を解決するための手段のところで述べた様な基本的構成を有する。
被写体距離の変化の有無を判断する距離変化判断手段としては、例えば、次の様な形態のものが挙げられる。まず、第1の実施形態で説明する様に、距離変化判断手段は、被写体検出手段によって検出された被写体のサイズを検出する被写体サイズ検出手段と、被写体検出手段によって検出された被写体の向きの変化を判断する向き変化判断手段と、を含み、被写体サイズ検出手段によって検出された被写体のサイズの変化量が所定値より大きくかつ向き変化判断手段によって被写体の向きが変化していないと判断されるときに被写体距離の変化があると判断する。次に、第2の実施形態で説明する様に、距離変化判断手段は、被写体検出手段によって検出された体の部位を基に人体を検出する人体検出手段と、人体検出手段によって検出された人体の長さを検出する長さ検出手段と、を含み、長さ検出手段によって検出される人体の長さの変化量が所定値より大きい場合に被写体距離の変化があると判断する。また、第3の実施形態で説明する様に、距離変化判断手段は、被写体検出手段によって検出された顔の部位の複数の位置を検出する位置検出手段と、顔の部位の位置間の距離を算出する距離算出手段と、撮像画面に対する顔の傾き度合を検出する傾き検出手段と、顔の部位の位置間の距離を、撮像画面に対する顔の傾きの軸に対して水平及び垂直方向に分解した複数の成分を検出する成分検出手段と、成分検出手段の検出出力から複数の成分の変化量を検出する成分変化量検出手段と、を含み、成分変化量検出手段の検出出力が全て変化した場合に被写体距離の変化があると判断する。
以下、本発明の実施形態を説明する。以下に説明する実施形態は、本発明の実現手段としての一例であり、本発明が適用される装置の構成や各種条件によって適宜修正又は変更されるべきものであり、本発明は以下の実施形態に限定されるものではない。
<第1の実施形態>
図1は、本発明の第1の実施形態における画像処理機能を有する撮像装置の装置構成を示すブロック図である。図1に示すように、本実施形態のデジタルビデオカメラ10は、撮像レンズ11から画像信号を取得できるように構成されており、以下の部分を備えている。すなわち、撮像素子121、CDS/AGC122、タイミングジェネレータ(TG)123、画像入力コントローラ124、信号処理部125、被写体領域検出部126、変倍レンズ駆動部131、絞り駆動部132、フォーカシング駆動部133、操作部134、システム制御部14、バス15、記録媒体制御部161、記録媒体162、表示制御部163、表示部164、AF検出部165、SDRAM166、ROM167、フラッシュROM168、振れ検出部17を備えている。
システム制御部14は、ビデオカメラ全体の動作を統括制御する制御手段として機能し、操作部134からの入力に基づき所定の制御プログラムに従って各部を制御する。バス15を介して接続されたROM167には、システム制御部14が実行する制御プログラム及び制御に必要な各種データ等が格納され、フラッシュROM168には、ユーザ設定情報等のデジタルビデオカメラ10の動作に関する各種設定情報等が格納されている。SDRAM166は、システム制御部14の演算作業用領域として利用されるとともに、画像データの一時記憶領域として利用される。
変倍レンズ112は、変倍レンズ駆動部131に駆動されて光軸に沿って前後移動する。フォーカスコンペレンズ115(フォーカスレンズとも記す)は、フォーカシング駆動部133に駆動されて光軸に沿って前後移動する。システム制御部14は、変倍レンズ駆動部131とフォーカシング駆動部133を制御することにより、変倍レンズ112の位置とフォーカスコンペレンズ115の位置を制御し、撮影光学系である撮影レンズ11のズーミングとフォーカシングを行う。絞り113は、例えば、アイリス絞りで構成されており、絞り駆動部132に駆動されて動作する。システム制御部14は、絞り駆動部132を制御することにより、絞り113の開口量(絞り値)を制御し、撮像素子121への入射光量を制御する。
撮像素子121は、CMOSセンサやCCDセンサにより構成される光電変換素子である。撮影レンズ11によって撮像素子121の受光面上に結像された被写体の光学像は、このフォトダイオードによって入射光量に応じた信号電荷に変換される。各フォトダイオードに蓄積された信号電荷は、システム制御部14の指令に従ってTG123から与えられる駆動パルスに基づいて、信号電荷に応じた電圧信号(画像信号)として撮像素子121から順次読み出される。本実施形態では、撮像素子としてCMOSセンサを用いているが、CCDセンサ等の他の構成の撮像素子を用いることもできる。CSD/AGC122は、撮像素子121から出力された画像信号に含まれるリセットノイズ(低周波)を除去するための相関二重サンプリング回路(CDS)と、画像信号を増幅し一定レベルの大きさにコントロールするためのAGC回路である。つまり、撮像素子121から出力される画像信号を相関二重サンプリング処理するとともに増幅する。撮像素子121やCSD/AGC122などにより、被写体像を光電変換して撮像信号を生成する撮像手段が構成される。
画像入力コントローラ124は、CSD/AGC122から出力された画像信号を取り込んで、SDRAM166に格納する。信号処理部125は、システム制御部14からの指令に従いSDRAM166に格納された画像信号を取り込み、所定の信号処理を施して輝度信号Yと色差信号Cr、CbとからなるYUV信号を生成する。被写体領域検出部126は、画像信号に対して被写体検出処理を施し、撮影画面内の被写体領域を特定する。そして、その検出結果をシステム制御部14に送信する。システム制御部14は、AF検出部165に上記検出結果を送信し、AF検出部165は、撮影画面内の被写体領域を含む位置を焦点検出に用いられる領域(焦点検出領域)として設定する。次に、AF検出部165は、設定した焦点検出領域の合焦度合い表す焦点信号を計算し、システム制御部14に送信する。結果を受信したシステム制御部14は、受信した合焦度合いに応じてフォーカシング駆動部133を制御し、フォーカシング駆動部133はフォーカスレンズ115を駆動制御する。
ここで、上述した被写体検出処理の一例として顔検出機能が挙げられる。これは、顔検出機能によって検出された撮影画面内の顔に対してオートフォーカス(AF)を行う顔優先AFを行う場合等に利用される。以下、顔検出機能について説明する。システム制御部14は、顔検出対象の画像データを信号処理部125に送る。信号処理部125は当該画像データを被写体領域検出部126に送り、被写体領域検出部126は、当該画像データに水平方向バンドパスフィルタを作用させる。また、被写体領域検出部126は、処理された画像データに垂直方向バンドパスフィルタを作用させる。これら水平及び垂直方向のバンドパスフィルタにより、画像データのエッジ成分が検出される。その後、信号処理部125は、検出されたエッジ成分に関してパターンマッチングを行い、目及び鼻、口、耳の候補を抽出する。そして、信号処理部125は、抽出された目の候補群の中から、予め設定された条件(例えば、2つの目の距離、傾き等)を満たすものを、目の対と判断し、目の対があるもののみ目の候補群として絞り込む。そして、信号処理部125は絞り込まれた目の候補群とそれに対応する顔を形成するほかのパーツ(鼻、口、耳)を対応付け、また、予め設定した非顔条件フィルタを通すことで、顔を検出する。信号処理部125は顔の検出結果に応じて上記顔情報を出力し、処理を終了する。このとき、顔のサイズや顔の数などの特徴量をSDRAM166に記録する。
以上のようにライブビュー表示あるいは再生表示される画像データを画像解析して、画像データの特徴量を抽出して被写体情報を検出することが可能である。本実施例では被写体情報として顔情報を例に挙げたが、動物等、人物以外の顔の特徴等の様々な被写体情報がある。また、全ての顔を検出するのではなく、予め登録した顔の特徴量に当てはまるものを被写体として検出するシステムや、ユーザーがタッチパネル等の操作部134から指定した特徴量を分析し、検出を行うシステムでも良い。
次に、上記構成を有する撮像装置10の第1の実施形態における動作について図2から図6を用いて説明する。図2は、第1の実施形態におけるシステム制御部14で行うAF処理を表すフローチャートである。ステップS1はAF処理の開始を表している。ステップS2において、システム制御部14はバス15を介してフラッシュROM168から各種設定情報を読み出し、読み出した各種設定情報の中から顔検出を行うモードなのか否かを判断する。顔検出を行うモードであった場合、ステップS3の顔検出処理に進み、顔検出を行わないモードの場合は処理をステップS6に進める。
ステップS2で顔検出モードであった場合に進むステップS3では、読み出した画像データから被写体の顔を検出する顔検出処理を行い、ステップS4に進める。ステップS4では、被写体領域検出部126で検出した顔領域を、AF検出部165によって焦点検出領域として設定し、ステップS5に進める。ステップS5では、検出被写体優先AF制御を行うための処理を行い、S8で処理を終える。ステップS5の詳細は図3で後述する。
ステップS2で顔検出モードでなかった場合に進む進むS6では、ROM167から読み出した情報を基に、事前に設定してある位置に焦点検出領域を設定する。また、ユーザが焦点検出領域を設定していれば、事前に設定してある焦点検出領域でなく、フラッシュROM168から読み出したユーザ設定情報を基に、焦点検出領域を設定してもよい。ステップS6で焦点検出領域を設定したら進むステップS7では、通常のAF制御を行い、ステップS8で処理を終了する。
本実施形態における通常AF制御の一例としては、「微小振動駆動」によって合焦させる手法がある。この手法では、焦点検出領域中のコントラスト値を基に至近側・無限側とフォーカスレンズ115を微小振動駆動させることで、コントラスト値が高くなる方向を合焦方向として、順次振動の中心を合焦方向に移動させる。また、上述した微小振動駆動で一定方向に振動中心を移動している場合、そちらに合焦方向があるとして、振動中心を移動している方向に、コントラスト値が増加し続ける間、駆動させ続ける「山登り駆動」といった手法などもある。しかし、このようなAF制御のみであると、被写体が近づいてきたとき、あるいは遠ざかったときに追従しきれず、ボケてしまうといったことがあった。このような被写体の近づき、遠ざかりといった被写体距離の変化がある場合には、ボケを抑えてフォーカスを追従できるように、通常のAF制御とは異なるような特殊なAF制御を用いる手法が挙げられる。この手法の一例について、次に図3を用いて説明する。
図2のステップS5で行われる上記特殊なAF制御処理の動作を図3を用いて説明する。図3は、システム制御部14で行われる検出被写体優先AF時の動作を示すフローチャートである。ステップS51では、被写体距離に変化があるかどうかを判定する処理を行い、ステップS52へ進む。ステップS51の被写体距離有無判定については、図4を用いて後述する。ステップS52では、ステップS51で得た被写体距離変化の有無に関する情報を基に、被写体距離変化がある場合はステップS53へ進み、被写体距離変化がない場合はステップS54へ進む。ステップS53では、被写体距離変化があったとして、被写体距離の変化に追従しやすいAF制御を行い処理を終了する。一方、ステップS54では、図2のステップS7で説明した通常のAF制御を行い、処理を終了する。
本発明における追従AF制御の一例として、被写体距離変化がある方向に追従しやすくするために、上述した通常AF制御における「微小振動駆動」において、被写体距離変化がある方向にのみ振動中心を駆動するようにする制御が挙げられる。また、振動中心の駆動量を大きくする制御がある。さらに、上述した通常AF制御における「山登り駆動」を、「微小振動駆動」による合焦方向探索をせずに、被写体距離変化がある方向に向かって行うといった制御も挙げられる。このように被写体距離変化がある場合は、被写体距離変化がある方向に追従しやすくするような、通常のAF制御時とは異なる特殊なAF制御を行うことで、フォーカスのボケを抑えて被写体の動きに追従できる。
次に、図3のステップS51で行われる被写体距離変化有無判定処理を、図4を用いて説明する。これは本発明の特徴的な部分である。ステップS511では、図2のステップS3で検出した顔のサイズの履歴を基に、時間方向の顔サイズの変化量を計算し、ステップS512へ進む。この時間方向の顔サイズの変化量とは、顔サイズを時間で1次微分したものに相当する。ステップS512では、検出した顔の向きの変化があるかどうかを判定し、ステップS513へ進む。ステップS512の詳細は、図5を用いて後述する。ステップS513では、ステップS511で計算した顔サイズの変化量が所定より大きいかどうかを判断し、所定より大きい場合はステップS514、そうでない場合はステップS516へ進む。ここで、設定する所定量としては、例えば被写体の被写界深度分移動したときに対応する顔サイズの変化量が挙げられる。ステップS513において、顔サイズの変化量が所定より大きいときに進むステップS514では、ステップS512によって判定した顔の向き変化の有無を基に、向き変化が無い場合にはステップS515、そうでない場合はステップS516へ進む。
上述したように、ステップS513で顔サイズの変化量が所定より大きく、ステップS514で顔の向き変化が無いと判断した場合に、被写体距離変化があると判定する。被写体距離変化があると判断した場合は、ステップS515で被写体距離の変化方向を判定して処理を終了する。ステップS515の被写体距離変化方向判定については、図6を用いて後述する。また、ステップS513で顔サイズの変化量が所定より大きくないと判断した場合、ステップS516で被写体距離の変化がないとする。また、ステップS513で顔サイズの変化量が所定より大きいと判断したがステップS514で向きの変化が無いと判断した場合も、ステップS516で被写体距離の変化がないとする。そして、処理を終了する。
このように、顔サイズの変化量が所定より大きく顔の向きの変化が無い場合に、被写体距離変化があると判定し、その上で、図3のステップS53で説明したような追従AF制御を行う理由について、図7を用いて説明する。図7は、顔被写体が近づいたとき、及び、向きが変わったときのそれぞれの顔エリアのサイズについて表した図である。まず「近づき」について説明すると、顔が近づいたときは、図7のように近づくにつれて目の間隔が広くなるため顔エリアのサイズも大きくなる。このような場合は、被写体距離の変化が大きいため、追従AF制御を行い、ボケを抑えて追従するのが好ましい。図7の「近づき」のように正面を向いていれば、顔サイズの変化量が大きいかどうかを判断すれば被写体距離の変化が大きいか否かが判断できる。しかし、「向き変更」について説明すると、図7のように横を向いた状態から正面を向いたときは、目の間隔が広くなるために顔エリアのサイズも大きくなる。この際、「向き変更」は「近づき」の場合と異なり、被写体距離の変化は殆どない。よって、顔サイズの変化量だけを考慮して追従AF制御を行うと、「向き変更」の場合は被写体距離の変化が無いために、フォーカスがボケたりフワついたりしてしまう。よって、正確に被写体距離の変化があるかどうかを判定するために、顔サイズの変化量が大きいかどうかだけでなく、顔の向きの変化の有無を考慮する。これにより、向きが変わっていない場合のみ被写体距離が変わったとすることで、上述したフォーカスのボケやフワつきを防ぐことができるのである。
次に、図4のステップS512で行われる向き変化有無判定処理を図5を用いて説明する。これは、本発明の特徴とする部分である。ステップS5121では、事前にSDRAM166に保持した、図2のステップS3で検出した顔のサイズの履歴を基に、時間方向の顔サイズの変化の急峻度合を計算し、ステップS5122へ進む。この時間方向の顔サイズの変化の急峻性は、顔サイズを時間で2次微分したものに相当する。ステップS5122では、ステップS5121で計算した顔サイズの変化の急峻度合が所定より大きいかどうかを判断し、所定より大きい場合はステップS5123、そうでない場合はステップS5124へ進む。ステップS5122で顔サイズの変化の急峻度合が所定より大きい場合に進むステップS5123では、顔の向きの変化があったとして処理を終了する。「顔の近づき/遠ざかり」と「顔の向き変更」のそれぞれの顔サイズの変化の急峻度合を考えると、前者よりも後者の方が少しの動作で目の間隔の変化が大きくなるため、顔サイズの変化が急峻に起こりやすい。よって、顔サイズの変化量が大きくても顔サイズの変化が急峻であったときは、向きが変わったと判断する。このときに、顔サイズの変化の急峻度合の閾値として設定する値は、走って近づいてきたときの変化の急峻度合よりやや大きくするといった程度の値が一例として挙げられる。この閾値は、どのくらいの被写体距離変化に追従できるようにするかによってチューニングを行う必要がある。
次に、ステップS5122で顔サイズの変化の急峻度合が所定より小さいときに進むステップS5124では、顔サイズの変化の急峻度合の履歴を見て、前回の値と正負が反転しているかどうかを判断し、反転している場合はステップS5125へ進む。そうでない場合は、ステップS5126へ進む。ステップS5125では、今回の駆動シーケンスでは顔サイズの変化の急峻度合の値の正負の反転が起きたとして記憶し、ステップS5126へ進む。なお、過去の駆動シーケンスについても、顔サイズの変化の急峻度合の値の正負の反転が起きたかどうかを記憶しておく。ステップS5126では、所定時間内の間に、顔サイズの変化の急峻度合の正負反転回数が所定回以上かどうかを判断し、所定回以上であればステップS5123へ進み、そうでない場合はステップS5127へ進む。ステップS5126で、所定時間内に顔サイズの変化の急峻度合が所定回数以上だった場合は、ステップS5123で顔の向きの変化があるとして処理を終了する。一方、ステップS5126で、所定時間内に顔サイズの変化の急峻度合が所定回数以上でない場合は、ステップS5127で向きの変化がなかったとして処理を終了する。
ステップS5122では、顔サイズの変化の急峻度合が大きいかどうかを判断して、顔の向きが変化したかどうかを判断した。しかし、例えばゆっくりと顔の向きを変化させた場合は、顔サイズの変化が急峻にならないため、顔の向きが変わったと判定できない。そこで、ステップS5124からS5126までの処理を用いて、顔の向きがゆっくり変わった場合でも、顔サイズの変化の急峻度合の正負反転回数を用いて、向きが変わったと判定できるようにしている。先ほど述べたように、「顔の近づき/遠ざかり時」は、少し移動したとしても目の間隔の変化は小さいが、「顔の向きを変えた時」は少し向きを変えただけで目の間隔変化が大きくなりやすい。よって、「顔の向きを変えた時」は「顔の近づき/遠ざかり時」と比べて、顔の大きさの変化量のバラつきが多いと考える。故に、この顔の大きさの変化量のバラつきの単位時間の多さを判断するために、顔の大きさの変化の急峻度合が、一定時間内に多くゼロクロス(正負反転)しているときにはバラつきが多いと判断し、このときは顔の向きが変わったと判断する。ここで設定する、所定時間と、顔サイズの変化の急峻度合の正負反転回数のスレッシュは、それぞれ「顔の近づき/遠ざかり時」と「顔の向きを変えた時」のデータを基に、「顔の向きを変えた時」を正しく判定できるようにチューニングする必要がある。以上の様に、向き変化判断手段は、被写体のサイズの変化の急峻度合を検出し、被写体のサイズの変化の急峻度合が所定度合より大きい場合に被写体の向きが変化したと判断したり、被写体のサイズの変化の急峻度合を検出し、被写体のサイズの変化の急峻度合が所定時間内に増減を繰り返して変動している場合に被写体の向きが変化したと判断したりする。
次に、図4のステップS515で行われる被写体距離変化方向判定処理を図6を用いて説明する。この処理は、被写体距離の変化があったと判断した際に、被写体距離の変化が至近方向か無限方向かどうかを判断するものである。ステップS5151では、顔サイズの変化量を基に、顔サイズが大きくなっているかどうかを判断し、顔サイズが大きくなってる場合はステップS5152へ進み、そうでない場合はステップS5153へ進む。ステップS5151で顔サイズが大きくなっている場合に進むステップS5152では、被写体距離は至近方向に変化しているとして処理を終了する。これはすなわち、顔が近づいていることを意味する。一方、ステップS5151で顔サイズが小さくなっている場合に進むステップS5153では、被写体距離は無限方向に変化しているとして処理を終了する。これはすなわち、顔が遠ざかっていることを意味する。ここで得た被写体距離の変化方向を基に、追従AF制御で追従しやすくする方向を決定する。
以上説明したように、システム制御部14は、フラッシュROM168の設定が顔優先AFモードである場合は、被写体領域検出部126で検出した被写体領域を基にAF検出部165に焦点調節エリアを設定する。そして、AF制御を行うことでフォーカシング駆動部133によってフォーカスレンズ115を駆動する。その際、顔サイズの変化量だけでなく、顔サイズの変化の急峻度合によって向きが変わったのかどうかを判断することで、被写体距離が変化しているのかどうかを正確に判断することができる。被写体距離の変化がある場合には、被写体距離変化方向に追従しやすくするような特殊なAF制御を行うことで、こうした被写体に対してボケを抑えて追従することができる。さらには、顔の向きが変わったときに被写体距離変化があると誤判定してしまうことを防ぎ、不用意なフォーカスのボケやフワつきを軽減することができる。
<第2の実施形態>
次に、第2の実施形態を説明する。装置構成については、第1の実施形態で図1を用いて説明したものと同様なので説明を省略する。ただし、本実施形態における被写体領域検出部126は、顔だけでなく被写体の人体も検出できるものとする。
以下、人体検出について説明する。システム制御部14は、人体検出対象の画像データを信号処理部125に送る。信号処理部125は当該画像データを被写体領域検出部126に送り、被写体領域検出部126は、当該画像データに水平方向バンドパスフィルタを作用させる。また、被写体領域検出部126は、処理された画像データに垂直方向バンドパスフィルタを作用させる。これら水平及び垂直方向のバンドパスフィルタにより、画像データのエッジ成分が検出される。その後、信号処理部125は、検出されたエッジ成分に関してパターンマッチングを行い、頭及び胴体、腕、足の候補を抽出する。そして、信号処理部125は、これら候補群を対応付けて人体を検出する。信号処理部125は人体の検出結果に応じて上記人体情報を出力し、処理を終了する。このとき、人体のサイズや人体の数などの特徴量をSDRAM166に記録する。
次に、第2の実施形態における撮像装置10の動作について図8、図9を用いて説明する。図8は、第2の実施形態における、システム制御部14で行うAF処理を表すフローチャートである。図8のステップS11及びステップS18、S19は、第1の実施形態において図2のステップS1及びステップS6、S7でそれぞれ説明した内容と同様なので省略する。ステップS12において、システム制御部14はバス15を介してフラッシュROM168から各種設定情報を読み出し、読み出した各種設定情報の中から顔検出/人体検出を行うモードなのか否かを判断する。顔検出/人体検出を行うモードであった場合はステップS13に進み、そうでない場合はステップS18に進める。ステップS13では、読み出した画像データから被写体の顔を検出する顔検出処理を行い、ステップS14に進める。ステップS14では、読み出した画像データから被写体の人体を検出する人体検出処理を行い、ステップS15に進める。このとき行う人体検出処理は、被写体の体の部位、例えば頭部、胴体、脚、腕等を検出して、それらを組み合わせることで人体として検出する。
一例として、例えば撮像画面中から人の頭部と胴体を検出したときに、頭部と胴体を含むような形で人体として検出する。また、撮像画面中に映っている体の部位によって、人体として検出するエリアを可変としてもよい。図16は、撮像画面内に人物の全長が映っている状態と、人物の頭部から胴体までが映り脚が映っていない状態という2つの状態を表した図である。前者の場合は、例えば胴体と脚の領域を人体領域として検出し、後者の場合は胴体の領域を人体領域として検出する。このようにすることで、撮像画面での人物の映り方がどのような場合でも、体の部位が検出できれば、人体検出を行うことができる。また、このとき、人体検出を行うエリアは、撮像画面全体に対して設定という条件に限らず、撮像画面のある一部のエリアや、撮像画面全体の所定の割合の範囲でのみといったように、人体検出を利用したいエリアを任意に設定してもよい。
ステップS14で人体検出を行った後に進むステップS15では、被写体領域検出部126で検出した顔領域を、AF検出部165によって焦点検出領域として設定し、ステップS16に進める。ステップS16では、被写体領域検出部126で検出した人体領域についても、AF検出部165によって焦点検出領域として設定し、ステップS17に進める。ステップS17では、検出被写体優先AF制御を行うための処理を行い、ステップS20で処理を終える。なお、図8のステップS17の処理は、第1の実施形態において図3を用いて説明した、検出被写体優先AF制御処理と同じなのでその説明は省略する。
次に、本実施形態における、図3のステップS51で行われる被写体距離変化有無判定処理を、図9を用いて説明する。これは本発明の特徴的な部分である。なお、図9におけるステップS524、S525は、第1の実施形態で説明した図4におけるステップS515、S516とそれぞれ同様の処理なので、説明は省略する。ステップS521では、図8のステップS14で検出した人体のサイズの履歴を基に、時間方向の人体サイズの変化量を検出し、ステップS522へ進む。この時間方向の人体サイズの変化量とは、人体サイズを時間で1次微分したものに相当する。ステップS522では、撮像画面の所定領域内に人体検出している領域があるかどうかを判断し、領域がある場合はステップS523、領域がない場合はステップS526へ進む。撮像画面内の所定領域で人体の検出がない場合とは、例えば被写体の顔のアップを撮影しているような状態である。このように、そもそも人体が検出できないような画角である場合は、ステップS526へ進み、ここで第1の実施形態の図4のような顔検出手段をもって被写体距離変化の有無を判断する手法をとる必要がある。
それに対して、ステップS522で人体検出している領域があると判断した場合に進むS523では、人体サイズの変化量が所定より大きいかどうかを判断して、所定より大きい場合はステップS524へ進み、そうでない場合はステップS525へ進む。人体サイズの変化量が所定より大きい場合は、被写体距離変化があるとして、ステップS524で被写体距離の変化方向の判定を行い、処理を終了する。ステップS524の処理は、第1の実施形態で図6を用いて説明した内容と同様なので、説明を省略する。人体サイズの変化量が所定以下であれば、ステップS525で被写体距離変化が無いとして、処理を終了する。
このように人体検出を行っている場合は、顔検出の情報を必要とせず、人体サイズの変化量によって被写体距離の変化があるかどうかを判断することができる。この詳細について、図10を用いて説明する。図10は、人物が近づいたとき、及び、向きが変わったときのそれぞれの顔エリアと人体エリアのサイズについて表した図である。まず「近づき」について説明すると、顔が近づいたときは、顔エリアのサイズが大きくなると共に人体エリアのサイズが大きくなる。一方、「向き変更」について説明すると、図10のように横を向いた状態から正面を向いたときは、顔エリアのサイズは近づき時と同様に大きくなってしまうものの、人体エリアのサイズは変化していない。上述したように、顔サイズの変化量だけでは近づき/遠ざかりと向きを変えた時との違いを切り分けることができないが、人体サイズを用いれば、向きの変化に関らずサイズ変化が大きいかどうかを見ることで、被写体距離の変化があるか否かを切り分けられる。また、人体が検出できないような撮影シーンでは、図9のステップS526の説明で先述したように、第1の実施形態のような顔の情報を用いて被写体距離変化の有無を判定すればよい。
以上に説明した様に、本実施形態では、被写体検出手段は、被写体の体の部位の頭、胴体、脚、腕のうちの少なくとも1つを検出し、制御手段中の人体検出手段は、撮像画面の所定の範囲内で検出している体の部位を組み合わせて人体を構成して検出する。そして、人体検出手段によって検出された人体の長さを検出する制御手段中の長さ検出手段は、人体検出手段によって検出された人体を構成する体の部位の長さを加算して人体の長さを検出する。
ここで、図16の上段の図ように撮像画面中に人の全長が映っている状態から、下段の図のように脚が映らない状態まで近づいてきた場合について説明する。例えば、人体検出のシステムが人の「全長」を検出できるシステムであるとする。その場合、図16の上段の図の状態では被写体距離変化の有無を判定することができるが、下段の図の状態のように脚が映らない状態になってしまうと、検出する人体のサイズ変化がなくなってしまうか、そもそも全長を検出することができないため、被写体距離変化の有無を判定できなくなってしまう。しかし、図8のステップS14の説明で先述したように、検出する人体とは、検出した体の部位から構成するものである。なので、全長が映っている状態から脚が映らない状態に変わっても、図16のように人体検出するエリアを、胴体+脚から胴体のみに変更することで、体の部位のいづれかが検出できる状態であれば人体エリアのサイズ変化がわかるため人体検出を行うことができる。このように、被写体の撮影画面の映り方が変わっても、人体検出できるエリアを検出部位よって変えて、そのサイズの変化量を監視することで被写体距離の変化の有無を判定することができる。なお、以上の説明では人体検出が有効なエリアを撮影画面全体としたが、このエリアを撮影画面のある一定のエリアという風に絞っても、上記と同様に検出する人体として構成する体の部位を変えていくことで、被写体距離変化の有無を判定できる。
以上説明したように、人体が検出できる撮影状態であれば、人体サイズの変化量を監視することで、顔の向きの情報を取得せずに被写体距離が変化しているのかどうかを正確に判断することができる。また、被写体の近づき/遠ざかり等によって、検出している人体の部位が、人体検出有効なエリアに映らなくなってしまっても、新たに検出している部位から人体のエリアを構成して、その人体サイズの変化量を監視することで被写体距離変化の有無を判断できる。第1の実施形態で説明したように、被写体距離の変化がある場合には、被写体距離変化方向に追従しやすくするような、特殊なAF制御を行うことで、被写体距離変化がある被写体に対してボケを抑えて追従することができる。さらには、顔の向きが変わったときに被写体距離変化があると誤判定してしまうことを防ぎ、不用意なフォーカスのボケやフワつきを軽減することができる。
<第3の実施形態>
次に、第3の実施形態を説明する。装置構成については、第1の実施形態で図1を用いて説明したものと同様なので説明を省略する。ただし、本実施形態における被写体領域検出部126は、顔の部位を検出できるものする。顔の部位とは、目、鼻、口、耳、眉毛といった、顔のパーツのことである。
次に、第3の実施形態における撮像装置10の動作について図11から図13を用いて説明する。図11は、第3の実施形態における、システム制御部14で行うAF処理を表すフローチャートである。図11のステップS21及びステップS27、S28は、第1の実施形態において図2のステップS1及びステップS6、S7で説明した内容と同様なので説明を省略する。ステップS22において、システム制御部14はバス15を介してフラッシュROM168から各種設定情報を読み出し、読み出した各種設定情報の中から顔部位検出を行うモードなのか否かを判断する。顔部位検出を行うモードであった場合はステップS23に進み、そうでない場合はステップS27に進める。ステップS23では、読み出した画像データから被写体の顔の部位を検出する顔部位検出処理を行い、ステップS24に進める。ここで検出する顔の部位は、少なくとも2つ以上である必要がある。
ステップS24では、被写体領域検出部126で検出した顔の部位の位置を基に、顔領域をAF検出部165によって焦点検出領域として設定し、ステップS25に進める。ステップS25では、ステップS23で検出した顔の部位の位置を保持して、ステップS26へ進む。ステップS26では、検出被写体優先AF制御を行うための処理を行い、ステップS29で処理を終える。このように、本実施形態では、被写体の顔の部位を検出し、後述するように被写体距離変化の有無を判定する。なお、図11のステップS26の処理は、第1の実施形態において図3を用いて説明した検出被写体優先AF制御処理と同じなので説明を省略する。
次に、本実施形態における、図3のステップS51で行われる被写体距離変化有無判定処理を、図12を用いて説明する。これは本発明の特徴的な部分である。ステップS531では、図11のステップS25で保持した顔部位の位置を基に、各顔部位間の距離を或る基準軸に対して水平/垂直方向に分解した成分を計算し、ステップS532へ進む。ステップS531の処理については、図13の説明で後述する。ステップS532では、ステップS531で計算した各顔部位間の距離を水平/垂直方向に分割した成分を基に、分割したそれぞれの成分の変化量を検出し、ステップS533へ進む。ステップS533では、ステップS532で計算したそれぞれの成分の変化量が、全て所定値より増加または減少しているかどうかを判定して、増加または減少している場合はステップS534へ進み、変化していない場合はステップS535へ進む。なお、ステップS533で条件判定に利用する、各顔部位間の距離を或る基準軸に対して水平/垂直方向に分解した成分の変化量については、図14の説明で後述する。ステップS534では、被写体距離変化があると判断して、被写体距離変化方向判定を行い、処理を終了する。ステップS535では、被写体距離変化が無いと判断し、処理を終了する。ステップS534で行われる被写体距離変化方向判定処理は、第1の実施形態で図6を用いて説明したものと同様なので説明を省略する。
本実施形態では、各顔部位間の距離を水平/垂直方向に分解した成分の変化量を基に、被写体距離変化があるかどうかを判定する。この判定方法について図14を用いて説明する。図14は、顔被写体が近づいたとき、及び、向きが変わったときの各顔部位間の距離を或る基準軸に対して水平/垂直方向に分解した成分の変化について表した図である。図14の説明においては、水平/垂直方向に分解する基準軸を撮像画面とする。また、検出している部位の一例として、図14では両目と鼻の計3つで、水平成分は両目の位置間の長さ、垂直成分は片方の目と鼻との位置間の長さとする。
まず「近づき」について説明すると、顔が近づくにつれて、顔部位間の距離を分解した水平成分及び垂直成分が変化する。一方、「向き変更」について説明すると、横を向いた状態から正面を向いたときは、顔部位間の距離を分解した水平成分は変化するが、垂直成分は変化しない。また、図14には示していないが、例えば上を向いた状態から正面を向いたときは、顔部位間の距離を分解した垂直成分は変化するが、水平成分は変化しない。つまり、顔の部位間の距離の水平成分及び垂直成分が双方とも変化したかどうかを見ることで、被写体距離の変化があるのか、向きが変わっただけなのかを切り分けることができる。このように、本実施形態のような顔の部位検出が可能なシステムにおいて、検出した顔の部位間の距離を分解した水平方向及び垂直方向の成分の双方の変化の有無を監視することで、被写体距離の変化の有無を判定することができる。
次に、本実施形態における、図12のステップS531で行われる各顔部位間の距離の水平/垂直成分計算処理について、図13を用いて説明する。これは本発明の特徴的な部分である。ステップS5311では、撮像画面に対する顔の傾き度合を検出し、ステップS5312へ進む。ステップS5312では、ステップS5311で検出した顔の傾き度合を基に、撮像画面に対する顔の傾きの軸に対して、各顔部位間の距離を水平方向に分解した成分を計算し、ステップS5313へ進む。ステップS5313では、ステップS5311で検出した顔の傾き度合を基に、撮像画面に対する顔の傾きの軸に対して、各顔部位間の距離を垂直方向に分解した成分を計算し、処理を終了する。
図13のステップS5311からS5312において、撮像画面に対する顔の傾き具合を考慮することについて、図15を用いて説明する。図15は、顔被写体が顔を傾けたときに、各顔部位間の距離を水平/垂直方向に分解する基準軸が撮像画面である場合と、撮像画面に対する顔の傾きである場合を表した図である。検出している部位の一例として、図15では両目と鼻の計3つで、水平成分は両目の位置間の長さ、垂直成分は片方の目と鼻との位置間の長さとする。まず「基準軸が撮像画面」である場合に顔を傾けたことを考えると、顔を傾けたことで、水平成分と垂直成分が共に変化する。この場合、被写体距離の変化はないにも拘らず、水平成分及び垂直成分が共に変化するので、被写体距離が変化したと誤判定してしまう。それに対して、「基準軸が撮像画面に対する顔の傾き」である場合に顔を傾けたことを考えると、顔を傾けても水平成分と垂直成分は変化しない。つまり、顔の部位間の距離の水平及び垂直成分の双方の変化を見るだけでなく、その水平及び垂直成分を分解するための基準軸として、撮像画面でなく顔の傾きを考慮することで、顔を傾けた際にも、被写体距離変化を誤ることなく判断することができる。
上述した実施形態における処理のために、各機能を具現化したソフトウェアのプログラムコードを記録した記憶媒体をシステム或いは装置に提供してもよい。そして、そのシステム或いは装置のコンピュータ(又はCPUやMPU)が記憶媒体に格納されたプログラムコードを読み出し実行することによって、前述した実施形態の機能を実現することができる。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フロッピィ(登録商標)ディスク、ハードディスク、光ディスク、光磁気ディスクなどを用いることができる。或いは、CD−ROM、CD−R、磁気テープ、不揮発性のメモリーカード、ROMなどを用いることもできる。また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけではない。そのプログラムコードの指示に基づき、コンピュータ上で稼動しているOS(オペレーティングシステム)などが実際の処理の一部又は全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれている。さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリーに書きこまれてもよい。その後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部又は全部を行い、その処理によって前述した実施形態の機能が実現される場合も含むものである。