以下、図面を参照し、本発明の好適な実施の形態について詳細に説明する。本実施の形態では、本発明の追尾装置をデジタルカメラに適用した場合を例にとって説明する。なお、この実施の形態によって本発明が限定されるものではない。また、各図面の記載において、同一部分には同一の符号を付して示している。
(実施の形態)
図1は、デジタルカメラ1の背面図である。図1に示すように、デジタルカメラ1は、カメラ本体2の上面に配設された撮影タイミングを指示するためのレリーズスイッチ(シャッタースイッチ)3、カメラ本体2の背面に配設された電源スイッチ4やメニュースイッチ5、上下左右の各方向スイッチ(上スイッチ、下スイッチ、左スイッチおよび右スイッチ)を有する十字キー6、操作内容を確定する等のためのOKスイッチ7、撮影モードや再生モードといった各種モードを切り換えるモードダイヤル8、各種画面を表示する表示部24等を備えている。レリーズスイッチ3は、例えば二段階式の押下ボタンであり、半押しされるとファーストレリーズスイッチがONし、全押しされるとセカンドレリーズスイッチがONするようになっている。また、図示しないが、カメラ本体2の前面には、フラッシュや撮像レンズ等が配設されている。
このデジタルカメラ1において電源スイッチ4を押下し、電源をONすると、モードダイヤル8で撮影モードが選択されている場合であれば、デジタルカメラ1は撮影可能な状態となる。撮影モードでは、撮像レンズを通して入射する被写体像が1フレーム(例えば1/30秒)毎に出力され、ライブビュー画像として表示部24にリアルタイムに表示されるようになっており、ユーザは、ライブビュー画像を見ながらレリーズスイッチ3を押下して、静止画や動画の撮影を行う。一方、電源ON時、モードダイヤル8で再生モードが選択されていれば、デジタルカメラ1は再生モードとなる。この再生モードでは、ユーザは、デジタルカメラ1で撮影された静止画や動画を表示部24に表示(再生)して楽しむ。
先ず、本実施の形態のデジタルカメラ1の機能の1つである顔検出機能の概要について説明する。本実施の形態のデジタルカメラ1は、画像中に映る人物等の顔を検出する顔検出部17(図8参照)を備えており、1フレーム毎に取り込まれるライブビュー画像を画像処理して顔検出を行う。そして、検出した顔を示す顔枠をライブビュー画像上に表示する処理を行う。
図2は、表示部24に更新表示される4枚のライブビュー画像の一例を時系列に沿って示した図である。上記したように、顔検出技術は、テンプレートマッチング法によって画像中の顔の位置を検出し、目や鼻、口等の顔の特徴点の位置を検出するものであり、顔が横や後ろを向いている場合や、顔が大きく傾いている場合等において検出精度が低下する場合がある。例えば、図2(a)のフレームI11では、ライブビュー画像中に映る人物Pの顔が正面を向いているため顔検出に成功し、顔枠N11が表示されている。これに対し、図2(b)のように人物Pが動いたフレームI13では、顔が横を向いており、角度も大きく傾いているため顔検出に失敗し、顔枠が表示されていない。続く図2(c)のフレームI15でも人物Pの顔が検出できず、顔枠が表示されない状態が継続している。そして、図2(d)に示すフレームI17では、人物Pの顔検出に成功し、顔枠N14が表示されている。
このように、フレーム間で顔の向きや角度が変化すると、顔枠の表示・非表示が繰り返される場合がある。特に、人物が激しく動くような場合にこのような事態が生じ、顔枠がちらついて見難い。また、顔検出結果は、露出やフォーカスの制御に利用されるが、これらの制御が安定しないという問題もある。本実施の形態は、ライブビュー画像中の顔検出と併せて顔エリア(顔領域)の動き検出を行い、顔検出に失敗した場合であっても、顔を見失わずに追尾できるようにするものである。
図3は、5人の人物の顔F1〜F5が映る3枚のライブビュー画像の一例を時系列に沿って模式的に示した図であり、図3では、各フレームI21,I23,I25においてそれぞれ顔検出で検出された顔を一点鎖線で囲んで示している。ここで、フレームI21,I23,I25は、ライブビュー画像に映る各顔の向きや傾き等が時系列に沿って変化する様子を示したものであり、連続するフレームのライブビュー画像を示したものではない。例えば図3(a)のフレームI21では、顔検出によって5人全ての顔F1〜F5が検出されている。一方、図3(b)のフレームI23では、向かって左上の顔F1について顔が大きく傾いたために顔検出に失敗している。また、図3(c)のフレームI25では、図3(b)と同様に顔F1について顔検出に失敗しているのに加えて、向かって左下及び右下の顔F2,F5についても顔が後ろを向いてしまったために顔検出に失敗している。
また、図4は、図3と同様の3枚のライブビュー画像の一例を示す図であり、図4では、各フレームI21,I23,I25においてそれぞれ顔検出で検出された顔を一点鎖線で囲んで示すとともに、各フレームI21,I23,I25においてそれぞれ動き検出で検出された顔エリアを二点鎖線で囲んで示している。詳細は後述するが、動き検出は、顔検出によって検出された顔を含む顔領域(顔エリア)を動き検出エリア(対象領域)として隣接するフレーム間でパタンマッチングを行い、その移動量を算出するものであり、フレーム間で動き検出エリアが対応付けられれば、顔の向きや傾きに関係なく顔を見失わずに追尾できる。例えば、図4に示す例では、(a)〜(c)に示す各フレームI21〜I25で、それぞれ5人全ての顔が検出できている。
ここで、テンプレートマッチング法を適用した顔検出では、1枚の画像中に映る複数の顔(例えば数十個)を同時に検出できる。一方で、複数の顔エリアについて動き検出を実施する場合には、各顔エリアを動き検出エリアとし、それぞれ個別にパタンマッチングを行う必要があり、これらを同時に行うと処理負荷が増大する。このため、必要な処理速度を確保するためには、例えば動き検出をハードウェアで実現する場合であれば、回路規模が増大してしまうという問題があった。
そこで、本実施の形態では、予め同時に動き検出を実施可能な動き検出エリア数を定めておく。そして、顔検出結果をもとにその顔の優先度を採点し、動き検出エリア数よりも多い数の顔がライブビュー画像中に出現した場合には、採点の高い顔から順番に動き検出エリア数の顔エリアを選択して動き検出エリアとする。図5〜図7は、動き検出エリアの設定原理を説明する図であり、各図において、図3(a)〜(c)および図4(a)〜(c)でそれぞれ示した5人の人物の顔F1〜F5が映る3枚のライブビュー画像を示している。なお、ここでは、動き検出エリア数を「3」として説明するが、この動き検出エリア数は、実際のデジタルカメラ1の処理能力に応じて適宜定めることができる。
例えば、図5中に一点鎖線で囲んで示すように、顔検出によって顔F1〜F5が検出された場合、各顔F1〜F5について優先度を採点する。優先度の採点の詳細については後述するが、その顔についての顔検出結果をもとに、次のフレームで行う顔検出の検出難易度が高いと想定されるほど優先度が高くなるように採点を行う。すなわち、本実施の形態では、このようにして優先度を採点することで、顔検出によって検出された各顔の検出難易度を評価する。例えば、顔検出の結果、その顔の向きが正面から外れていたり、顔が傾いている場合、あるいは過去のフレームと比較して顔の向きや角度の変化が大きいといった場合には、次のフレームでその顔の顔検出に失敗する可能性が高いと考えられるので、このような顔について優先度を高く採点する。そして、採点した優先度をもとに、動き検出エリアとする顔エリアを選択する。
例えば、図5に示す顔F1〜F5についてそれぞれ優先度を採点した結果、実線で囲んで示した3つの顔F1,F4,F5について優先度が高く採点された場合には、フレームI21中の各顔F1,F4,F5の顔エリアを動き検出エリアとする。そして、各動き検出エリアについて、例えば次のフレームとの間で動き検出を行うことにより、これらの各顔F1,F4,F5を追尾する。
このようにして各フレームで顔検出を行うとともに、動き検出エリアとした顔エリアについて動き検出を行った結果、例えばフレームI23では、図6(a)中に二点鎖線で囲んで示すように、顔F1,F4,F5の顔エリアが動き検出によってそれぞれ検出され、追尾されている。一方、顔検出は、顔F2〜F5については成功し、顔F1については失敗している。これによれば、結果的にフレームI23で顔検出に失敗した顔F1に対する顔枠の表示を、動き検出結果をもとに継続して行うことができる。
また、本実施の形態では、次のフレームとの間で行う動き検出で動き検出エリアとする顔エリアを例えばその都度選択する。このとき、例えば図6(a)の顔F1のように、動き検出で検出できたが顔検出に失敗した顔エリアについては必ず動き検出エリアとして選択する。そして、動き検出エリアとして選択した顔エリアの数が動き検出エリア数に満たない場合には、顔検出結果をもとに、各顔について採点した優先度が高い顔エリアをさらに選択する。
例えば、図6(a)の例では、動き検出で検出できたが顔検出に失敗した顔エリアは1つ(顔F1)であり、動き検出エリア数「3」に満たないため、顔検出に成功している顔F2〜F5のうちの2つの顔の顔エリアについて動き検出を行うことが可能である。例えば、フレームI23について行った顔検出結果をもとに各顔F2〜F5についてそれぞれ優先度を採点した結果、顔F5,F2,F4,F3の順に優先度が高く採点されたとする。ここで、前回動き検出エリアとして選択した顔の優先度が低く採点される場合がある。例えば、例示した顔F5,F2,F4,F3の順の優先度の採点結果では、前回動き検出エリアとして選択した顔F4よりも顔F2の優先度が高く採点されている。これは、フレームI23において、直前のフレームとの間で顔F4と比較して顔F2が大きく変化しているためである。この場合には、図6(b)中に実線で囲んで示す各顔F1,F2,F5の顔エリアを動き検出エリアとし、各動き検出エリアについて、次のフレームとの間で動き検出を行うことにより、これらの各顔F1,F2,F5を追尾する。
この結果、例えば、図7中に二点鎖線で囲んで示すように、フレームI25では、動き検出によって顔F1,F2,F5の顔エリアがそれぞれ検出され、追尾されている。一方、顔検出は、顔F3,F4については成功し、顔F1,F2,F5については失敗している。これによれば、結果的にフレームI25で顔検出に失敗した各顔F1,F2,F5に対する顔枠の表示を、動き検出結果をもとに引き続き行える。このように、フレーム毎に顔検出によって検出された各顔の優先度を採点し、優先度の高い顔の顔エリアを動き検出エリアとして設定することで、動き検出エリアを適切に設定することができる。したがって、動き検出エリア数を所定数(動き検出エリア数)に制限して処理負荷の増大を許容範囲内に抑えつつ、顔検出し難い顔が出現した場合であっても安定した追尾が実現できる。
次に、このデジタルカメラ1の構成について説明する。図8は、デジタルカメラ1の構成例を示す概略ブロック図である。図8に示すように、デジタルカメラ1は、撮像光学系11、撮像素子12、AFE(Analog Front End)13、フレームメモリ14、動き検出部15、画像処理部16、顔検出部17、顔領域選択部および動き検出対象設定部としての顔エリア選択部18、記録媒体I/F19、記録媒体保持部20、記録媒体21、ビデオエンコーダ22、表示ドライバ23、表示部24、ビデオ信号出力端子25、操作部26、RAM27、ROM28、表示処理部および撮像条件設定部としてのコントローラ29等を備える。
撮像光学系11は、撮像レンズ、絞り、シャッター等を含み、入射される被写体像を撮像素子12に結像する。撮像素子12は、例えばCCD(Charge Coupled Device)やCMOS(Complementary Metal Oxide Semiconductor)等の固体撮像素子であり、被写体からの光束を撮像光学系11を介して受光し、光電変換することによってフレーム単位の画像データ(アナログ電気信号)を得るものである。AFE13は、撮像素子12によって得られる画像データに対してCDS(Correlated Double Sampling)やAGC(Automatic Gain Control)等のアナログ信号処理を施した後、A/D変換処理を施してデジタル電気信号に変換する。AFE13によってデジタル化された画像データは、フレームメモリ14および動き検出部15に出力されるとともに、RAM27に一時的に記録される。
フレームメモリ14は、動き検出部15による作業用メモリとして用いられる。このフレームメモリ14は、2フレーム分の画像データを格納するための領域を備え、ライブビュー画像の表示時において、現フレームのライブビュー画像(現フレーム画像)の画像データと、直前に取り込まれた直前フレームのライブビュー画像(直前フレーム画像)の画像データとが記録される。
動き検出部15は、AFE13からの画像データをもとに、フレーム間の動きを検出するためのものであり、例えば1フレーム毎に撮像素子12から取り込まれてAFE13から出力される画像間で動き検出エリアの動きベクトルを求めることによって、フレーム間での動き検出エリアの動きを検出する。具体的には、動き検出部15は、顔エリア選択部18によって選択される顔エリアを動き検出エリアとする。そして、動き検出部15は、AFE13から随時入力されてフレームメモリ14に記録される直前フレーム画像と現フレーム画像との間でパタンマッチングを行い、各動き検出エリアについてそれぞれその移動量を表す動きベクトルを算出する。
図9は、直前フレーム画像に設定される動き検出エリアの一例を示す図であり、直前フレーム画像の画角範囲Evに対し、顔エリア選択部18によって選択された顔エリアを動き検出エリアEa1として設定した様子を示している。また、図10は、直前フレーム画像に設定される動き検出エリアの他の例を示す図であり、図9と比較してサイズの大きい顔エリアを動き検出エリアEa2として設定した様子を示している。なお、図9および図10中では1つの動き検出エリアを示しているが、実際には、顔エリア選択部18は予め定められた動き検出エリア数の顔エリアを選択するようになっており、動き検出部15は、各顔エリアを動き検出エリアとして設定する。
そして、動き検出部15は、図9,図10に示したように直前フレーム画像に設定した動き検出エリアEa1,Ea2について、現フレーム画像との間でパタンマッチングを行う。ここで、パタンマッチングは、精度を高めるため、動き検出エリア内に複数のマクロブロックを設定し、マクロブロック毎にその動きベクトルを求めることにより行う。例えば、図9に示す例では、動き検出エリアEa1内に4個のマクロブロックBを設定している。一方、図10に示す例では、動き検出エリアEa2内に25個のマクロブロックBを設定しており、動き検出エリアのサイズに応じた数のマクロブロックBが設定されるようになっている。なお、動き検出エリア内に設定するマクロブロックの数は同数であってもよく、また、マクロブロックのサイズについても適宜設定することができる。
顔検出部17は、図8に示すように、AFE13によってデジタル化されてRAM27に記録された画像データを処理して顔を検出し、顔検出結果をRAM27に一時的に記録する。例えば、顔検出部17は、テンプレートマッチング法によってライブビュー画像中の顔の位置を検出し、目や鼻、口等の顔の特徴点の位置を検出することによって、顔の大きさや向き、角度等を検出する。この顔検出部17による顔検出によって、例えばライブビュー画像中の顔の有無、顔の位置、顔の大きさ、顔の向き、顔の角度(傾き)等が顔検出結果として得られる。なお、顔検出結果は、検出した各顔についてそれぞれ少なくとも最新の顔検出結果を保持しておくようになっている。
顔エリア選択部18は、動き検出エリア数の顔エリアを選択し、選択結果をもとに次のフレームとの間で動き検出を行う動き検出エリアを切り換えて設定する。本実施の形態では、顔エリア選択部18は、顔検出部17が検出した各顔についてコントローラ29の優先度採点部293が採点した優先度をもとに、優先度が高い顔の顔エリアを優先的に選択し、選択した各顔の顔エリアをそれぞれ動き検出エリアとして設定する。
画像処理部16は、RAM27に一旦記録された画像データを読み出し、この画像データに対して各種の画像処理を施すとともに、記録用、あるいは表示用等に適した画像データに変換する処理を行う。例えば、撮影画像の画像データを記録する際、あるいは記録されている画像データを表示する際等に、JPEG(Joint Photographic Experts Group)方式等に基づく画像データの圧縮処理や伸張処理を行う。この画像処理部16で画像処理された画像データは、記録媒体I/F19に出力されて記録媒体21に記録され、あるいはビデオエンコーダ22に出力されて表示部24に表示される。
ビデオエンコーダ22は、表示用に変換された画像データを表示ドライバ23に送出する。例えば撮影モードでは、1フレーム毎に撮像素子12から取り込まれて画像処理部16によって画像処理された画像をフレーム単位で表示部24に切換表示させ、ライブビュー画像の表示を行う。一方、再生モードでは、記録媒体21から読み出されて画像処理部16よって画像処理された撮影画像を表示部24に表示させる。また、このビデオエンコーダ22は、ビデオ信号出力端子25に接続された外部機器に対し、必要に応じて表示用の画像データを出力する。表示部24は、撮影画像やライブビュー画像の他、デジタルカメラ1の各種設定情報等を表示するためのものであり、LCD(Liquid Crystal Display)やELディスプレイ(Electroluminescence Display)等の表示装置で実現される。
記録媒体I/F19は、記録媒体保持部20によって挿脱自在に保持される記録媒体21に対して、記録用に変換された画像データ等の書き込みや、記録された画像データの読み出し等を行う。記録媒体21は、例えばxD−ピクチャーカード(登録商標)やコンパクトフラッシュ(登録商標)カード等のメモリカードである。
操作部26は、撮影タイミングの指示、撮影モードや再生モード等のモードの設定操作、撮影条件の設定操作等、ユーザによる各種操作を受け付けて操作信号をコントローラ29に通知するためのものであり、各種機能が割り当てられたボタンスイッチ、ダイヤル、各種センサ等で実現される。この操作部26は、図1のレリーズスイッチ3、電源スイッチ4、メニュースイッチ5、十字スイッチ6、OKスイッチ7およびモードダイヤル8を含む。
ROM28は、デジタルカメラ1を動作させ、このデジタルカメラ1が備える種々の機能を実現するための各種のカメラプログラムや、このカメラプログラムの実行中に使用されるデータ等を予め記録する。RAM27は、画像処理部16やコントローラ29の作業用メモリとして用いられる。例えば、AFE13からの画像データ等が一時的に記録され、表示部24に表示するライブビュー画像の画像データを生成する際の作業用や撮影画像を記録媒体21に記録する際の作業用等に用いられる。
コントローラ29は、操作部26からの操作信号等に応じてROM28からカメラプログラムを読み出して実行し、デジタルカメラ1を構成する各部の動作制御やメモリ制御を行ってデジタルカメラ1全体の動作を統括的に制御する。また、AF(自動焦点)、AE(自動露出)、AWB(自動ホワイトバランス)等の処理を行う。このコントローラ29は、撮影開始指示部291と、難易度評価部としての優先度採点部293、顔領域設定部としての動き検出候補設定部295と、顔領域確定部としての顔エリア確定部297とを含む。撮影開始指示部291は、撮影処理の開始タイミングを指示する。優先度採点部293は、顔検出結果をもとに検出された顔の優先度を採点する。本実施の形態では、優先度採点部293は、顔の大きさ、顔の位置、顔の向き、顔の向き変化、顔の重なり、顔の角度および顔の角度変化を評価パラメータとし、先ず各評価パラメータの採点値を求める。そして、優先度採点部293は、各評価パラメータに予め設定された重み係数を用いて求めた各評価パラメータの採点値をそれぞれ重み付けして合算し、優先度とする。なお、評価パラメータとしては、例示したものに限定されない。例えば、顔検出結果をもとに顔の移動速度や顔の移動速度を判定し、これらの値を評価パラメータとして用いることとしてもよい。動き検出候補設定部295は、顔検出結果に基づく顔エリアと動き検出結果に基づく顔エリアとをもとに次回の動き検出候補を設定する。顔エリア確定部297は、現フレームのライブビュー画像中における顔エリアを確定する。
次に、デジタルカメラ1が行う処理手順について説明する。図11は、デジタルカメラ1が行う基本処理の手順を示すフローチャートである。電源投入時、デジタルカメラ1は、モードダイヤル8によって選択されているモードに応じた処理を行う。すなわち、図11に示すように、現在選択されているモードが撮影モードの場合には(ステップa1:Yes)、コントローラ29は、撮像素子12に結像されている被写体像の画像(ライブビュー画像)を取り込み(ステップa3)、顔エリア検出処理に移る(ステップa5)。顔エリア検出処理では、ステップa3で取り込んだ現フレームのライブビュー画像中の顔エリアを顔検出と動き検出とによって検出し、このライブビュー画像中における顔エリアを確定する。
顔エリア検出処理を終えると、続いてコントローラ29は、ライブビュー画像を表示部24に表示する処理を行う(ステップa7)。このとき、ステップa5で確定した顔エリアに顔を示す顔枠を表示したライブビュー画像が表示部24に表示される。また、コントローラ29は、ステップa5で確定された顔エリアがあれば(ステップa9:Yes)、この確定した顔エリアをもとに撮像条件を設定してAF、AE、AWB等の処理を行う(ステップa11)。具体的には、コントローラ29は、ステップa5で確定された顔エリアの顔について得られている最新の顔検出結果を用いて撮像条件を設定する。すなわち、確定された顔エリアのうち、顔検出結果に基づく顔エリア(今回顔検出に成功した顔の顔エリア)についてはその顔検出結果を用い、動き検出結果に基づく顔エリア(今回顔検出に失敗した顔の顔エリア)についてはその顔について前回成功したときの顔検出結果を用い、撮像条件を設定する。一方、コントローラ29は、ステップa5で確定された顔エリアがない場合には(ステップa9:No)、通常範囲(例えば画面全体)でAF、AE、AWB等の処理を行う(ステップa13)。
そして、レリーズスイッチ3が一段階押下され、ファーストレリーズスイッチがONされるまでの間(ステップa15:No)、ステップa3に戻って1フレーム毎に処理を繰り返す。
レリーズスイッチ3が一段階押下され、ファーストレリーズスイッチがONされた場合には(ステップa15:Yes)、続いてコントローラ29は、ステップa3と同様にして、撮像素子12に結像されている被写体の画像を取り込む(ステップa17)。その後、顔検出処理に移る(ステップa19)。顔エリア検出処理では、ステップa17で取り込んだ現フレームのライブビュー画像中の顔エリアを顔検出と動き検出とによって検出し、このライブビュー画像中における顔エリアを確定する。
そして、顔検出処理の後、続いてコントローラ29は、ライブビュー画像を表示部24に表示する処理を行う(ステップa21)。このとき、ステップa19で確定した顔エリアに顔を示す顔枠を表示したライブビュー画像が表示部24に表示される。また、コントローラ29は、ステップa19で確定された顔エリアがあれば(ステップa23:Yes)、この確定した顔エリアをもとに撮像条件を設定してAF、AE、AWB等の処理を行う(ステップa25)。具体的には、コントローラ29は、ステップa11と同様に、ステップa19で確定された顔エリアの顔について得られている最新の顔検出結果を用いて撮像条件を設定する。一方、コントローラ29は、ステップa19で確定された顔エリアがない場合には(ステップa23:No)、通常範囲でAF、AE、AWB等の処理を行う(ステップa27)。
そして、レリーズスイッチ3が二段階押下され、セカンドレリーズスイッチがONされるまでの間(ステップa29:No)、ステップa17に戻って1フレーム毎に処理を繰り返す。
レリーズスイッチ3が二段階押下され、セカンドレリーズスイッチがONされた場合には(ステップa29:Yes)、撮影処理に移る(ステップa31)。具体的には、撮影開始指示部291が、セカンドレリーズスイッチがONされたタイミングを撮影タイミングとして撮影処理の開始を指示する。これによって撮影処理が開始され、撮影画像の画像データを生成する。生成した撮影画像の画像データは、記録媒体21に記録される。なお、この撮影処理が開始されると、ライブビュー画像の表示が一旦停止される。このライブビュー画像の表示は、露光の後、画像データの転送処理や画像処理を終えると復帰するようになっている。
続いてステップa33に移り、コントローラ29は、撮影モードの終了判定を行う。撮影モードを終了する場合には(ステップa33:Yes)、ステップa43に移る。撮影モードを終了しない場合には(ステップa33:No)、ステップa3に戻る。
一方、現在選択されているモードが撮影モードでなく(ステップa1:No)、再生モードの場合には(ステップa35:Yes)、コントローラ29は、過去に撮影されて記録媒体21に記録されている静止画や動画の画像データを例えばサムネイル形式で一覧表示する処理を行い、ユーザ操作に従って一覧の中から再生画像を選択する(ステップa37)。そして、コントローラ29は、選択した再生画像を表示部24に表示する処理を行う(ステップa39)。
続いてステップa41に移り、コントローラ29は、再生モードの終了判定を行う。再生モードを終了する場合には(ステップa41:Yes)、ステップa43に移る。再生モードを終了しない場合には(ステップa41:No)、ステップa37に戻る。
そして、ステップa43では、コントローラ29は、基本処理を終了するか否かを判定する。例えば、電源スイッチ4が押下されて電源OFFが指示された場合に、本処理を終える(ステップa43:Yes)。一方、終了しない場合には(ステップa43:No)、ステップa1に戻る。
次に、図11のステップa5およびステップa19で行う顔エリア検出処理について説明する。図12は、顔エリア検出処理の詳細な処理手順を示すフローチャートである。顔エリア検出処理では、先ずコントローラ29が、動き検出候補の有無を判定する。ここで、図12中のステップb15で、動き検出候補が設定される。このため、撮影モードが選択されて最初に行う顔エリア検出処理では動き検出候補はなく(ステップb1:No)、ステップb9に移る。すなわち、顔検出部17が現フレーム画像中の顔検出を行い(ステップb9)、顔検出結果をRAM27に記録する(ステップb11)。
続いて、優先度採点部293が、優先度採点処理を実行する(ステップb13)。図13は、優先度採点処理の詳細な処理手順を示すフローチャートである。この優先度採点処理は、図12のステップb9で検出された全ての顔についてそれぞれ行われ、優先度採点部293は、各顔の優先度をその顔についての顔検出結果をもとに採点する。
すなわち、優先度採点部293は、図12のステップb9の顔検出結果をもとに、先ず顔の大きさを採点する(ステップc1)。サイズの大きい顔は、サイズの小さい顔に比べて重要度が高い。そこで、例えば優先度採点部293は、顔が大きいほど採点値を大きく設定する。
続いて優先度採点部293は、顔の位置を採点する(ステップc3)。顔の位置が画角範囲の中心に近いほど重要度が高い。一方、顔の位置が画角範囲の端部に位置している場合、その顔は次のフレームでフレームアウトする可能性があるため、重要度は低い。そこで、例えば優先度採点部293は、顔の位置が画角範囲の中心に近いほど採点値を大きく設定する。
続いて優先度採点部293は、顔の向きを採点する(ステップc5)。顔が正面向きから外れた方向を向いている場合、次のフレームでもその顔が正面向きから外れた方向を向いている可能性が高く、顔検出に失敗する確率が高い。そこで、例えば優先度採点部293は、顔が正面を向いている場合の採点値を小さくし、顔の向きが正面から外れるほど採点値を大きく設定する。
続いて優先度採点部293は、顔の向き変化を採点する(ステップc7)。ここで、RAM27内には、直近の数フレーム分についての結果を保持しておくようになっている。優先度採点部293は、RAM27内に保持されている過去数フレーム分の顔検出結果を参照して顔の向きの変化を算出し、算出した向き変化を採点する。すなわち、過去数フレームにおいて顔の向きが変化していれば、次のフレームでもその顔の向きが変化する可能性が高い。そして、向き変化が大きいほど次のフレームで大きく顔の向きが変化する可能性が高いため、顔検出に失敗する可能性も高い。そこで、例えば優先度採点部293は、顔の向き変化が大きいほど採点値を大きく設定する。
続いて優先度採点部293は、次のフレームで顔同士が重なる場合を推定する(ステップc9)。図14は、顔の重なり推定を説明する図であり、3人の人物の顔F11〜F13が映る3枚のライブビュー画像の一例を時系列に沿って模式的に示している。ここで、顔F11,F12に着目すると、図14(a)のフレームI31と図14(b)のフレームI33との間で顔F11,F12が接近し、図14(c)のフレームI35で各顔F11,F12が重なっている。重なり推定では、このような状態を推定する。すなわち、優先度採点部293は、過去数フレーム分の顔検出結果を参照する。そして、優先度採点部293は、各顔の位置、向き、大きさをもとに移動方向(向きが変化する方向)やその移動速度(移動量)を判定し、顔の重なりを推定する。例えば、図14(a)のフレームI31では、各顔F11〜F13の位置が離れており、次のフレームでは各顔F11〜F13は重ならないと推定する。一方、図14(b)のフレームI33では、顔F11,F12が接近しており、その移動方向や移動速度をもとに、この顔F11,F12について次のフレームI35で重なると例えば推定する。
そして、図13に示すように、続いて優先度採点部293は、重なり推定の結果をもとに、顔の重なりを採点する(ステップc11)。具体的には、優先度採点部293は、顔が重なると推定された各顔についての顔検出結果をもとに、重なったときに後ろに隠れる顔について採点値を小さく設定する。推定の通りにその顔が次のフレームで他の顔と重なり、他の顔の後ろに隠れてしまった場合、顔枠の表示が必要なく、その顔についての露出やフォーカスの制御も必要ないため、重要度が低いためである。ここで、顔同士が重なった際、どちらが後方に隠れるのかについては、顔の大きさで判定できる。すなわち、サイズの大きい顔は手前側に存在し、顔が重なった場合、サイズの大きい顔の後方にサイズの小さい顔が隠れると考えられる。例えば図14(c)のフレームI35では、サイズの大きい顔F11の後方にサイズの小さい顔F12が隠れている。このような顔の採点値を他の顔の採点値よりも小さく設定する。
続いて優先度採点部293は、顔の角度を採点する(ステップc13)。ライブビュー画像の縦方向に対して顔が傾いている場合、次のフレームでもその顔が傾いている可能性が高く、顔検出に失敗する確率が高い。そこで、例えば優先度採点部293は、顔が傾いていない場合の採点値を小さくし、顔が角度が大きいほど採点値を大きく設定する。
続いて優先度採点部293は、顔の角度変化を採点する(ステップc15)。優先度採点部293は、過去数フレーム分の顔検出結果を参照して顔の角度の変化を算出し、算出した角度変化を採点する。すなわち、過去数フレームにおいて顔の角度が変化していれば、次のフレームでもその顔の角度が変化する可能性が高い。そして、角度変化が大きいほど次のフレームで大きく顔の角度が変化する可能性が高いため、顔検出に失敗する可能性も高い。そこで、例えば優先度採点部293は、顔の角度変化が大きいほど採点値を大きく設定する。
続いて、優先度採点部293は、各採点値に対する重み付けを行う(ステップc17)。ここで行う重み付けは、例えば、顔の大きさ、顔の位置、顔の向き、顔の向き変化、顔の重なり、顔の角度および顔の角度変化の各評価パラメータについて予め重み係数を設定しておき、各採点値に重み係数を乗じて行う。重み係数は、評価パラメータの重要度に応じて適宜設定しておくことができる。例えば、顔検出部17の検出精度が低下する要因となる評価パラメータである顔の向きや顔の角度の重み係数を大きく設定しておけば、これらの採点値が高い顔の優先度を高くすることができる。
そして、優先度採点部293は、重み付けした各採点値の総和を優先度として算出する(ステップc19)。その後、図12のステップb13にリターンし、ステップb15に移る。なお、上記した優先度採点処理は一例であって、採点方法や評価パラメータはこれに限定されず、顔検出の仕様等に応じて適宜設定できる。
続く図12のステップb15では、動き検出候補設定部295が、動き検出候補設定処理を実行する。図15は、動き検出候補設定処理の詳細な処理手順を示すフローチャートである。
動き検出候補設定処理では、動き検出候補設定部295は先ず、動き検出結果をもとに顔エリアを設定する(ステップd1)。上記のように、撮影モードが選択されて最初に行う顔エリア検出処理では、図12のステップb15の動き検出が未だ行われていない。このため、ステップd1でも顔エリアは設定されない。一方、後述するように2回目以降の顔エリア検出処理において、ステップb1で動き検出候補があると判定されてステップb5で動き検出を行った場合には、動き検出候補設定部295は、このステップd1において、動き検出の結果算出された各動き検出エリアの動きベクトルをもとに現フレーム中における各動き検出エリアの位置をそれぞれ算出し、動き検出結果に基づく顔エリアとして設定する。続いて、動き検出候補設定部295は、顔検出の結果検出された顔の領域を顔検出結果に基づく顔エリアとして設定する(ステップd3)。
そして、動き検出候補設定部295は、現フレーム中の動き検出結果に基づく顔エリアと、顔検出結果に基づく顔エリアとを次回の動き検出候補として設定する(ステップd5)。
続いて動き検出候補設定部295は、次回の動き検出候補とした動き検出に基づく顔エリアの位置と、顔検出結果に基づく顔エリアの位置とを比較する。そして、動き検出候補設定部295は、顔検出結果に基づくいずれかの顔エリア位置が、動き検出結果に基づくいずれかの顔エリアの位置と一致している場合、すなわち動き検出結果に基づく顔エリアと顔検出結果に基づく顔エリアとが重複している場合には(ステップd7:Yes)、これらの顔エリアのうち、動き検出結果に基づく顔エリアを次回の動き検出候補から除外する(ステップd9)。その後、図12のステップb15にリターンし、ステップb17に移る。
そして、ステップb17では、ステップb15の動き検出候補設定処理の結果設定した次回の動き検出候補を現フレーム中の顔エリアとして確定する。その後、図11のステップa5にリターンし、ステップa7に移る。あるいはステップa19にリターンし、ステップa21に移る。そしてこの結果、ステップa7やステップa21において表示されるライブビュー画像上で、この顔エリア検出処理で検出された顔エリアに顔枠が表示される。また、検出された顔エリアが露出やフォーカスの制御に用いられる。
また、撮影モードが選択された後、2回目以降に行う顔エリア検出処理では、図12に示すように、前回の顔エリア検出処理においてステップb15で次回の動き検出候補が設定されていれば(ステップb1:Yes)、ステップb3に移り、顔エリア選択部18が顔エリア選択処理を実行する。図16は、顔エリア選択処理の詳細な処理手順を示すフローチャートである。
顔エリア選択処理では、顔エリア選択部18は先ず、設定されている動き検出候補の数を予め設定される動き検出エリア数Nと比較する。そして、顔エリア選択部18は、動き検出候補の数が動き検出エリア数N以下であれば(ステップe1:No)、全ての動き検出候補を選択する(ステップe3)。そして、図12のステップb3にリターンし、その後ステップb5に移る。
また、顔エリア選択部18は、動き検出候補の数が動き検出エリア数Nより多い場合には(ステップe1:Yes)、ステップe5に移る。そして、顔エリア選択部18は、動き検出結果に基づく顔エリアの数Lが「0」であれば(ステップe5:Yes)、ステップe7に移る。すなわち、動き検出結果に基づく顔エリアの数Lが「0」ということは、設定されている動き検出候補は全て顔検出結果に基づく顔エリアである。ステップe7では、顔エリア選択部18は、この顔検出結果に基づく顔エリアの中から、その顔について採点した優先度が高いものから順にN個の顔の顔エリアを選択する。そして、図12のステップb3にリターンし、その後ステップb5に移る。
また、顔エリア選択部18は、動き検出結果に基づく顔エリアの数Lが「0」でない場合には(ステップe5:No)、ステップe9に移る。そして、顔エリア選択部18は、顔検出結果に基づく顔エリアの数が「0」であれば(ステップe9:Yes)、ステップe11に移る。すなわち、顔検出結果に基づく顔エリアの数が「0」ということは、設定されている動き検出候補は全て動き検出結果に基づく顔エリアであって、かつその数はN個である。ステップe11では、顔エリア選択部18は、この動き検出結果に基づく顔エリアを全て選択する。そして、図12のステップb3にリターンし、その後ステップb5に移る。
また、顔エリア選択部18は、顔検出結果に基づく顔エリアの数が「0」でない場合には(ステップe9:No)、ステップe13に移る。そして、顔エリア選択部18は、動き検出結果に基づく顔エリアを全て選択するとともに、N個に満たない場合には、顔検出結果に基づく顔エリアのうちの優先度の高いものから順番に選んだN−L個を選択する。そして、図12のステップb3にリターンし、その後ステップb5に移る。
そして、ステップb5では、動き検出部15が、ステップb3の顔エリア選択処理で選択した各顔エリアをそれぞれ動き検出エリアとして現フレーム画像中の動き検出を行い、その後動き検出結果をRAM27に記録する(ステップb7)。その後、ステップb9に移る。
以上説明したように、本実施の形態によれば、顔検出によってライブビュー画像中の顔を検出するとともに、顔検出結果に従って各顔の優先度を採点することができる。例えば人物の動きが激しく場合等、次のフレームで行う顔検出の検出難易度が高いと想定される顔について優先度を高く設定することができる。そして、顔検出の結果、ライブビュー画像中から動き検出が可能な数(動き検出エリア数)よりも多い顔が検出された場合には、優先度の高い顔を含む顔エリアを選択して動き検出を行うことができる。すなわち、顔検出の検出難易度が高いと想定される顔を優先的に選択し、動き検出によってその顔エリアの動きを検出することができるので、処理の負荷を増大させることなく、連続する画像中に出現する顔を見失わずに安定して追尾できる。
そして、本実施の形態では、ライブビュー画像上の最終的に確定した顔エリアに、顔を示す顔枠を表示させることができる。したがって、安定した見易い顔枠の表示が実現でき、顔枠の表示・非表示が繰り返されてちらつく等の不具合を防止することができる。
なお、上記した実施の形態では、予め設定される動き検出エリア数の顔エリアを動き検出エリアとして選択し、選択した動き検出エリアについて動き検出を行うこととした。そして、顔検出結果に基づく顔エリアを動き検出エリアとして選択する際には、顔検出結果をもとに各顔について採点した優先度が高いものから順番に、動き検出エリアとする顔エリアを選択することとした。これに対し、顔検出によって検出された各顔のうち、優先度の低い顔の顔エリアを選択し、選択した顔エリアについて動き検出を行わない設定を行う構成としてもよい。
また、上記した実施の形態では、動き検出で検出できたが顔検出に失敗した顔エリアについては必ず動き検出エリアとして選択することとした。これに対し、動き検出結果の信頼度を加味して動き検出エリアを設定するようにしてもよい。すなわち、例えば、動き検出エリアに設定したマクロブロックB(図9,図10を参照)の数に対してマッチング失敗数が多い場合や、得られたマクロブロックB毎の動きベクトルの方向に統一性がない場合、動き検出結果の信頼性が低いと考えられる。このような場合には、該当する顔エリアを次回の動き検出エリアから外すようにしてもよい。図7を参照して説明すれば、例えば、顔F2の顔エリアを動き検出エリアとして行った動き検出結果の信頼度が低かったとする。この場合には、次のフレームとの間で行う動き検出の対象から顔F2の顔エリアを外す。そして、顔検出結果に基づく顔エリアである顔F3および顔F4の顔エリアのうち、優先度の高い顔を選択して動き検出エリアとしてもよい。図示の例では、例えば顔F4が動き検出エリアとして選択されることとなる。
また、上記した実施の形態では、顔検出および動き検出を1フレーム毎に行うこととしたが、所定のフレーム間隔で行うこととしてもよい。また、顔検出および動き検出を行うフレーム間隔は適宜個別に設定できる。例えば、動き検出を1フレーム毎に行い、顔検出については数フレーム毎に行うといったことも可能である。
また、顔エリア選択部18や画像処理部16、コントローラ29を構成する撮影開始指示部291や優先度採点部293、動き検出候補設定部295は、ハードウェアで実現する構成としてもよいし、所定のプログラムを実行することによってソフトウェアとして実現することとしてもよい。ソフトウェアとして実現する場合には、例えば、図12や図13、図15、図16等に示した処理の一部または全部を実現するためのプログラムをROM28に記録しておく。そして、コントローラ29がこのプログラムを読み出して実行することによって、顔エリア選択部18や画像処理部16、撮影開始指示部291、優先度採点部293、動き検出候補設定部295の構成を実現するようにしてもよい。
また、上記した実施の形態では、本発明の追尾装置をデジタルカメラに適用した例について説明したが、適用対象はデジタルカメラに限定されず、携帯電話機に付属のカメラやPC付属のカメラに適用してもよい。また、パソコン等を用いて人物等の顔が映る動画を再生する場合に適用することもできる。