図1を参照して、この実施例の画像処理システム10は、ディジタルカメラ(以下、単に「カメラ」という。)12およびサーバ14を含み、カメラ12とサーバ14とは互いに通信可能に接続される。また、サーバ14には、スピーカ16が接続される。
カメラ12は、CPU20を含み、CPU20には、バス22を介してカメラ処理回路24、JPEGコーデック26、距離センサ28、メモリ制御回路30、LCDドライバ32、インターフェイス(I/F)34,36およびRAM38が接続される。また、カメラ処理回路24には、イメージセンサ40が接続され、このイメージセンサ40には図示しない光学レンズなどを含む光学系42が接続される。さらに、CPU20には、モータドライバ52が接続され、このモータドライバ52は、CPU20の指示の下、光学系42に含まれるフォーカスモータ(図示せず)、ズームモータ(図示せず)または絞りモータ(図示せず)などを駆動する。
光学系42を通して入射された光(光学像)は、CCD(Charge Coupled Device)イメージセンサやCMOS(Complementary Metal-Oxide Semiconductor)イメージセンサのようなイメージセンサ40の受光面に照射され、光電変換によって光学像に対応する電気信号が生成される。この電気信号は、カメラ処理回路24で、A/D変換、YUV変換、ガンマ補正、色補正などの各種の処理を施され、これによって、YUV形式に従ったディジタルの画像データが生成される。たとえば、イメージセンサ40からの電気信号は所定のフレームレートで読み出され、各フレームの画像データ(この実施例では、静止画像の画像データを意味する。以下、同じ。)が生成されるのである。
撮影モードにおいて、LCD44をビューファインダとして用いてスルー画像(リアルタイム同画像)を表示する場合には、CPU20の指示の下、メモリ制御回路30の制御によって、フレーム毎の画像データは順次SDRAM44に書き込まれ、その後、メモリ制御回路30によってSDRAM44から順次読み出される。そして、SDRAM44から読み出された画像データは、CPU20の指示の下、LCDドライバ32の制御に従ってLCD46に出力される。LCD46の撮影画像表示領域46a(図5参照)には、フレーム毎に更新される画像データが出力され、したがって動画像のスルー画像が表示されるのである。
また、撮影モードにおいて、たとえば、オートフォーカス機能がオンにされている場合には、入力装置50に含まれるレリーズボタン(シャッタボタン)が半押しされると、距離センサ28によって検出された被写体18とカメラ12との距離に応じて、CPU20はモータドライバ52を制御して、フォーカスモータを駆動し、焦点(距離)を調整する。また、ユーザが、入力装置50に含まれる図示しないズームボタンないしズームスイッチを操作すると、これに応じて、CPU20はモータドライバ52を制御して、ズームモータを駆動し、ズームアウトまたはズームインする。
シャッタボタンが半押しされた状態からさらに押し込まれる(全押しされる)と、撮影指示がCPU20に与えられ、そのときの画像データが上述のようにして生成され、生成された画像データは、メモリ制御回路30の制御によって、SDRAM44に書き込まれる。次に、CPU20の指示の下、メモリ制御回路30の指示に従ってSDRAM44から画像データが読み出され、読み出された画像データはJPEGコーデック26に与えられる。JPEGコーデック26では、画像データがJPEG方式で圧縮され、圧縮された画像データ(圧縮画像データ)はCPU20の指示に従ってRAM38に記憶される。
ただし、この実施例では、カメラ12にSDカードやMMCのようなメモリカード(外部記憶媒体)48が装着されているため、圧縮画像データを、I/F回路34を介してその外部記憶媒体48に記憶するようにしてもよい。または、ユーザ(撮影者)の操作に従って、RAM38に記憶された圧縮画像データを外部記憶媒体48に移動またはコピーしたり、逆に、外部記憶媒体48に記憶された圧縮画像データをRAM38に移動またはコピーしたりすることもできる。
なお、図示は省略するが、そのような移動ないしコピーの指示を入力するためのボタンないしスイッチもまた、入力装置50に含まれている。
さらに、RAM38または外部記憶媒体48に記憶された圧縮画像データを、I/F36を介してカメラ10と接続される視線サーバ14に送信することもできる。図示は省略するが、このような送信の指示を入力するためのボタンないしスイッチも、入力装置50に含まれている。ただし、ボタンないしスイッチの操作によらず、視線サーバ14からの要求に応じて、圧縮画像データを送信するようにしてもよい。また、圧縮画像データに対応する画像データを送信することもできるし、スルー画像を表示する際のフレーム毎の画像データを送信することもできる。
また、再生モードでは、ユーザは、入力装置50に含まれる指示(カーソル)ボタン(図示せず)および再生ボタン(図示せず)を操作することにより、所望の画像(圧縮画像データ)を選択して、再生指示を入力することができる。再生指示が入力されると、CPU20は、選択された圧縮画像データをRAM38または外部記憶媒体48から読み出し、JPEGコーデック26に与える。JPEGコーデック26は、CPU20の指示の下、圧縮画像データを伸張し、その結果得られた画像データは、CPU20の指示の下、メモリ制御回路30によってSDRAM44に書き込まれる。その後、画像データは、CPU20の指示の下、メモリ制御回路30によってSDRAM44から読み出され、LCDドライバ32によってLCD46に出力される。
なお、撮影モードまたは再生モードを選択するためのボタンないしスイッチも入力装置50に含まれており、そのボタンないしスイッチを操作することにより、各モードが設定される。
このような画像処理システム10は、図2に示すように、複数の被写体18を含む静止画像(被写体像)180についての所望の撮影画像を取得するような場合(動画像から所定フレーム毎に静止画像を取得する場合も含む。)に用いられる。たとえば、図示しない撮影者の口頭による指示に従って、カメラ12に対する各被写体18の位置および各被写体18の視線方向が誘導される。撮影者ないしユーザは、視線サーバ14に、別途各被写体18の理想の視線方向として、当該理想の視線方向についてのパラメータが記述されたテンプレートを選択ないし入力する。たとえば、カメラ12では、撮影モードが設定されると、視線サーバ14からの要求に応じて、複数枚(この実施例では、10枚)の写真(撮影画像)を撮影(連写)し、各撮影画像に対応する圧縮画像データ(画像データのままでもよい。)をその視線サーバ14に送信する。たとえば、1秒間に5枚の撮影画像が得られ、2秒間撮影が継続され、連写(連続的に撮影)することにより、10枚の撮影画像が得られる。詳細な説明は省略するが、この実施例では、カメラ12は、オートフォーカス時に距離センサ28によって計測した距離のデータ(距離データ)が圧縮画像データに付加されて視線サーバ14に送信される。ただし、距離センサ28によって計測されるのは、カメラ12の正面に存在する被写体18との直線距離である。
視線サーバ14は、圧縮画像データを伸張し、その結果得られた画像データから各被写体18の視線方向を検出する。これは、すべての画像データ(撮影画像)について実行される。また、視線サーバ14は、距離データと画像データとから、撮影時におけるカメラ12と視線サーバ14との位置関係を算出する。この位置関係の算出に方法については後述するため、ここではその説明は省略する。
続いて、視線サーバ14は、選択ないし入力されたテンプレートに基づく画像に、最も近似する撮影画像を選択する。そして、選択された撮影画像の中で、被写体18の視線方向が、テンプレートが示す理想の視線方向と比較的大きくずれている場合には、他の撮影画像から理想の視線方向とできる限り近似するものを検索し、最も近似する撮影画像の当該被写体18の顔画像を、選択した撮影画像についての当該被写体18の顔画像として合成する。これによって、テンプレートに基づく理想の画像に近い撮影画像(合成画像)を取得することができる。
また、視線サーバ14は、合成前の撮影画像において、被写体18の視線方向が、テンプレートが示す理想の視線方向と比較的大きくずれている場合には、つまりテンプレートに対する適合率が低い被写体18については、その視線(注意)を誘導するための指示を出力する。これは視線方向がずれている被写体18毎に行われる。この実施例では、視線サーバ14は、そのような誘導を指示するためのメッセージをスピーカ16から出力することにより、撮影者または被写体18或いはその両方に伝達(フィードバック)する。
以下、視線方向の検出方法、テンプレートの生成およびテンプレートとのマッチング、およびフィードバックのそれぞれについて具体的に説明することにする。
<視線方向の検出方法>
この実施例では、以下に説明するように、被写体18の視線方向(図3,図4)を推定または検出するために1つのカメラ(単眼カメラ)を用いるユニークな方法を採用している。ただし、視線方向は、図3に示す水平方向(地面と水平な方向)の角度αと、図4に示す垂直方向(地面に対して垂直な方向)の角度βとで規定される。ただし、点線hlineは、水平方向の角度αを求めるための基準線であり、カメラ12の位置とユーザないし被写体18の頭部の中心とを通る直線である。また、点線vlineは、垂直方向の角度βを求めるための基準線であり、点線hlineと同様に、カメラ12の位置とユーザないし被写体18の頭部の中心とを通る直線である。以下、この実施例において、同じである。
図2に示すように、複数の被写体18の前方にカメラ12が設置され、このカメラ12で撮影された画像(撮影画像)についての圧縮画像データが視線サーバ14に取り込まれ、視線サーバ14が画像処理することによって、視線18Aの角度αおよびβを推定する。
なお、図5に示すように、カメラ12により取得されたスルー画像は、それに附属して設けたLCD46の撮影画像表示領域46aに動画として表示される。特に限定されないが、たとえば、撮影画像表示領域46a上に、視線方向を示す指標として、眉間から視線方向に延びる線分を表示してもよい。
視線サーバ14は、一般的な汎用のコンピュータであり、特に変わったハードウェア構成ではないので、ハードウェア自体の説明は省略するが、視線方向や視線位置の推定は、以下に説明するソフトウェアにより実現される。
視線サーバ14では、特徴点の追跡処理の安定性を確保するため、同一特徴点に関して異なるフレーム(この実施例では、異なる画像データ)における複数の観測テクスチャを保持している。初期校正過程では、これらの特徴点と虹彩中心の関係から顔特徴点と眼球中心の相対関係を求める。視線推定過程では、校正過程で得られた関係を元に現フレームで得られている特徴点群から眼球中心位置を推定し、その位置と虹彩中心位置から視線方向を決定する。
視線方向の推定処理の動作の前提として、まず、たとえば6分割矩形フィルタを利用して、顔検出処理が実行される。
視線サーバ14では、特に限定されないが、たとえば、顔を連続撮影したビデオ画像(ここでは、静止画像)を処理するにあたり、横が顔幅、縦がその半分程度の大きさの矩形フィルタで画面を走査する。矩形は、たとえば、3×2に6分割されていて、各分割領域の平均明るさが計算され、それらの相対的な明暗関係が或る条件を満たすとき、その矩形の中心を眉間候補とする。
連続した画素が眉間候補となるときは、それを取囲む枠の中心候補のみを眉間候補として残す。残った眉間候補を標準パターンと比較してテンプレートマッチング等を行うことで、上述した手続きで得られた眉間候補のうちから、偽の眉間候補を捨て、真の眉間を抽出する。以下、さらに詳しく説明する。
図6は、眉間候補領域を検出するためのフィルタを説明するための概念図であり、図6(a)は、上述した3×2に6分割された矩形フィルタ(以下、「6分割矩形フィルタ」と呼ぶ)を示す。6分割矩形フィルタは、(1)鼻筋は両目領域よりも明るい、(2)目領域は頬部よりも暗い、という顔の特徴を抽出し、顔の眉間位置を求めるフィルタである。たとえば、1点(x,y)を中心として、横i画素、縦j画素(i,j:自然数)の矩形の枠を設ける。そして、図6(a)のように、この矩形の枠を、横に3等分、縦に2等分して、6個のブロックS1〜S6に分割する。
このような6分割矩形フィルタを顔画像の両目領域および頬部に当てはめてみると、図6(b)のようになる。ただし、図6(a),(b)に示す6分割フィルタは各矩形領域が等分されたものであるが、この6分割フィルタは図7に示すように変形されてもよい。つまり、鼻筋の部分が目の領域よりも通常は狭いことを考慮すると、ブロックS2およびS5の横幅w2は、ブロックS1,S3,S4およびS6の横幅w1よりも狭い方がより望ましい。好ましくは、幅w2は幅w1の半分とすることができる。図7は、このような場合の6分割矩形フィルタの構成を示す。また、ブロックS1、S2およびS3の縦幅h1と、ブロックS4、S5およびS6の縦幅h2とは、必ずしも同一である必要もない。
図7に示す6分割矩形フィルタにおいて、それぞれのブロックSi(1≦i≦6)について、画素の輝度の平均値「バーSi」(Siに上付きの“−”をつける)を求める。
ブロックS1に1つの目と眉が存在し、ブロックS3に他の目と眉が存在するものとすると、以下の関係式(1)および(2)が成り立つ。
そこで、これらの関係を満たす点を眉間候補(顔候補)として抽出する。
矩形枠内の画素の総和を求める処理には、公知の文献(P. Viola and M. Jones, “Rapid Object Detection using a Boosted Cascade of Simple Features”, Proc. Of IEEE Conf. CVPR, 1, pp.511-518, 2001)において開示されている、インテグラルイメージ(Integral Image)を利用した計算の高速化手法を取り入れることができる。インテグラルイメージを利用することでフィルタの大きさに依らず高速に実行することができる。多重解像度画像に本手法を適用することにより、画像上の顔の大きさが変化した場合にも顔候補の抽出が可能となる。
このようにして得られた眉間候補(顔候補)に対しては、両目の標準パターンとのテンプレートマッチングにより、真の眉間位置(真の顔領域)を特定することができる。
ただし、得られた顔候補に対して、サポートベクトルマシン(SVM)による顔モデルによる検証処理を適用し顔領域を決定することもできる。髪型の違いや髭の有無、表情変化による認識率の低下を避けるため、たとえば、図8に示すように、眉間を中心とした画像領域を利用してSVMによるモデル化を行うことができる。
なお、このようなSVMによる真の顔領域の決定については、文献:S. Kawato, N. Tetsutani and K. Hosaka: “Scale-adaptive face detection and tracking in real time with ssr fi1ters and support vector machine”, IEICE Trans.on Info. and Sys., E88−D, 12, pp.2857−2863(2005)に開示されている。6分割矩形フィルタによる高速候補抽出とSVMによる処理とを組み合わせることで実時間の顔検出が可能である。
続いて、目、鼻や虹彩中心の位置を、公知の文献、たとえば『川戸、内海、安部:「4つの参照点と3枚のキャリブレーション画像に基づく単眼カメラからの視線推定」画像の認識・理解シンポジウム(MIRU2005),pp.1337−1342(2005)』あるいは、『川戸慎二郎、鉄谷信二:鼻位置の検出とリアルタイム追跡:信学技報IE2002−263、pp.25−29(2003)』などの手法を用いて抽出する。
両目の位置については、前節の顔領域検出で眉間のパターンを探索しているため、眉間の両側の暗い領域を再探索することにより、大まかな両目の位置を推定することができる。しかし、視線方向の推定のためには、虹彩中心をより正確に抽出する必要がある。ここでは、上で求まった目の周辺領域に対して、ラプラシアンにより虹彩のエッジ候補を抽出し、円のハフ変換を適用することにより、虹彩および虹彩の中心の投影位置を検出する。
鼻の位置は、鼻先が凸曲面であるため周囲に対し明るい点として観測されやすいことと、両目の位置から鼻の存在範囲が限定できることを利用して抽出する。また、両目、鼻の位置を用いて、大体の顔の向きも推定できる。
図9(a),(b)は顔検出結果の例を示す図である。検出された顔において、虹彩中心や鼻先や口なども検出されている。たとえば、特徴点としては、鼻先や、左右の目の目尻や目頭、口の両端、鼻腔中心などを用いることができる。
視線の推定においては、視線方向は眼球中心と虹彩中心を結ぶ3次元直線として与えられるものとする。
図10は視線方向を決定するためのモデルを説明する概念図である。画像上での眼球半径をr、画像上での眼球中心と虹彩中心との距離をdとすると、視線方向とカメラ光軸とのなす角θは次式(3)で表される。
式(3)により、視線方向を推定するためには、画像上での眼球半径と眼球中心・虹彩中心の投影位置が必要となる。ここで、虹彩中心の投影位置については、上述したとおり、ハフ変換を用いた手法により求めることができる。画像上での眼球直径rは、解剖学的なモデル(標準的な人の眼球直径)を用いてもよいし、別途キャリブレーションにより求めてもよい。
図11は、図10に示した状態からユーザがカメラを注視する状態に移行した後の虹彩中心、眼球中心および投影点の関係を示す概念図である。
眼球中心の投影位置については、一般には、画像から直接観測することはできない。しかし、被写体18がカメラ12を注視した場合について考えると、図11に示すとおり、カメラ12、虹彩中心、眼球中心の3点が1直線上に並ぶため、画像では虹彩中心と眼球中心は同一点に投影されることが分かる。
そこで、この実施例での視線推定では、ユーザがカメラ12を注視しながら、顔の姿勢を変化させている画像フレーム列を撮影し、これらの画像列から虹彩位置と顔特徴点を抽出、追跡することにより、眼球中心と顔特徴点間の相対幾何関係を推定する。
後により詳しく説明するように、この実施例の視線方向の推定では、眼球中心と顔特徴点間の相対関係の推定処理と眼球中心の投影位置推定とを行う。
視線方向の推定のための初期設定として、視線サーバ14は、図12に示すフローチャートで表現されるキャリブレーションを実行する。
まず、キャリブレーション用の画像列として、ユーザがカメラ12を注視しながら、顔の姿勢を変化させている画像フレーム列を撮影する(ステップS102)。図13は、このようにしてキャリブレーションにおいて撮影された4枚の画像フレームを示す。
ここでは、より一般に、N(N≧2)枚の画像列が得られたとする。各画像フレームを、フレームI1,…INとする。
次に、得られた各画像フレーム列に対して、上述したような方法によって顔検出処理を行い(ステップS104)、続いて、目や鼻の検出処理を行なう(ステップS106)。
さらに、視線サーバ14は、特徴点の抽出、追跡を行う(ステップS108)。なお、特徴点の抽出方法としては、上述したような方法の他に、たとえば、文献:J. Shi and C. Tomasi: “Good features to track”,Proc. CVPR94, pp. 593−600(1994)で提案された手法を用いることもできる。
ここで、各画像フレームIi(i=1,…,N)においてM(M≧4)点の特徴点pj(j=1,…,M)が検出・追跡できたとする。画像フレームIiにおける特徴点pjの2次元観測位置をxj(i)(太字)=[xj(i),yj(i)]t(i=1,…,N,j=1,…,M)とし、両目の虹彩中心の2次元観測位置をそれぞれxr(i)(太字)=[xr(i),yr(i)]t,xl(i)(太字)=[xl(i),yl(i)]t(i=1,…,N)とする。ここで、行列Wを以下のように定義する。
因子分解法により、特徴点の各フレームでの2次元観測位置を縦に並べた行列W(計測行列)は以下のように分解できる。
ここで、行列M(「撮影姿勢行列)と呼ぶ)にはカメラ12の姿勢に関する情報のみが、行列S(「相対位置関係行列」と呼ぶ)には観測対象物の形状に関する情報のみが含まれており、顔特徴点と眼球中心との3次元的な位置の相対関係は行列Sとして求まる(ステップS110)。すなわち、正射影を仮定すると、行列Mの各要素が画像フレームでのカメラ12の姿勢を表す単位ベクトルであって、それぞれの大きさが1であり相互には直交するとの拘束条件のもとで、行列Wは、特異値分解により一義的に行列Mと行列Sの積に分解できることが知られている。
なお、このような計測行列Wを、因子分解により、カメラ12の運動の情報を表す行列と対象物の形状情報を表す行列へ分解する点については、文献:金出,ポールマン,森田:因子分解法による物体形状とカメラ運動の復元”,電子通信学会論文誌D−II,J76‐D−II,8,pp.1497−1505(1993)に開示がある。
図14は、リアルタイムの視線方向の推定処理のフローチャートを示す。
次に、以上で得られた結果を用いて、視線方向を推定する手順について説明する。
まず、カメラ12から画像フレームを取得すると(ステップS200)、キャリブレーション時と同様にして、顔の検出および目鼻の検出が行なわれ(ステップS202)、取得された画像フレーム中の特徴点が抽出される(ステップS204)。
画像フレームIkが得られたとする。ここで、眼球中心以外の特徴点のうちm点pj(j=j1,…,jm)が、それぞれ、xj(k)(太字)=[xj(k),yj(k)]tに観測されたとする。このとき、観測された特徴点について、上述したように特徴点近傍のテンプレートを用いたテンプレートマッチングを実施することで、キャリブレーション時に特定された特徴点と現画像フレーム中で観測された特徴点との対応付けが行なわれて、現画像フレーム中の特徴点が特定される(ステップS206)。
なお、上述のとおり、特徴点を特定するためのテンプレートは、キャリブレーションの時のものに限定されず、たとえば、最近の画像フレームの所定枚数について検出された特徴点の近傍の所定の大きさの領域内の画像を所定個数だけ保持しておき、これら所定枚数のテンプレートについてマッチングをした結果、もっとも一致度の高い特徴点に特定することとしてもよい。
顔特徴点pjの2次元観測位置xj(k)(太字)=[xj(k),yj(k)]tとキャリブレーションより求まった3次元位置sj(太字)=[Xj,Yj,Zj]t(j=1,…,M)の間には、M個の特徴点のうち観測されたm個の特徴点について注目すると、次式の関係が得られる。
ただし、行列P(k)は2×3の行列である。右辺の第2項の行列S(k)は行列Sのうち、観測された特徴点に対応する要素のみからなる部分行列である。上述の通り、カメラ12と顔とは十分に離れているとし正射影を仮定している。ここで、4点以上の特徴点が観測されれば、行列P(k)は以下のように計算できる(ステップS208)。
画像フレームIkにおける眼球中心の投影位置xr(i)(太字),xl(i)(太字)は、行列P(k)を用いて以下のように計算できる(ステップS210)。
したがって、画像フレームIkにおいて特徴点として抽出した虹彩中心の投影位置とこの眼球中心の投影位置を用いると、視線の推定を行なうことができる(ステップS212)。
なお、行列PをQR分解により分解することで、顔の姿勢Rが、以下のように計算できる。
ただしr1、r2はそれぞれ1×3のベクトルである。このような顔の姿勢Rの検出については、文献:L.Quan: “Self-calibration of an affine camera from multiple views”,Int’l Journal of Computer Vision, 19, pp. 93−105(1996)に開示がある。
ユーザ等の指示により追跡が終了していると判断されれば(ステップS214)、処理は終了し、終了が指示されていなければ、処理はステップS202に復帰する。
以上説明した視線方向の推定装置の有効性を確認するため、実画像を用いた実験を行った結果について以下に説明する。
カメラ12はElmo社製PTC−400Cを用い、被写体18から約150[cm]の位置に設置した。
まず、50フレームの画像列を用いて、眼球中心と顔特徴点のキャリブレーションを行った。キャリブレーション用の画像フレーム列と抽出した特徴点の例は、図12に示したとおりである。
キャリブレーション用画像フレーム列の撮影に要した時間は約3秒であった。(+印は抽出された虹彩中心(眼球中心))、×印は追跡した顔特徴点)。
次に、キャリブレーションにより求まった顔モデル(行列S)を用いて、視線推定を行った。ここで、被写体18はそれぞれ右上、上、左下の方向を注視しながら、顔の位置・向きを変化させた。
図15〜図17は、視線推定結果を示す。図15は、右上方注視の状態であり、図16は、上方注視の状態であり、図17は、左下方向注視の状態である。ここで、視線方向は両目それぞれで計算された視線方向の平均値としている。結果より、顔の位置や向きの変化とは関係なく、視線方向が推定できた。
以上説明したとおり、この実施例の視線方向の推定方法では、単眼カメラの観測に基づいて顔特徴点を検出し、追跡することにより視線方向を推定する。つまり、まずキャリブレーションとして視線がカメラ方向を向いたまま顔の向きのみが異なる画像列から得られる虹彩位置と顔特徴点を利用することで、眼球中心と顔特徴点の関係をモデル化し(行列Sを特定し)、その後、その関係に基づいて推定された入力画像中の眼球中心位置と虹彩位置の関係から視線方向の角度α、βを決定する。
<テンプレートの生成およびテンプレートとのマッチング>
この実施例では、テンプレートは、視線方向についてのパラメータ(角度α,β)である。視線方向は、上述したように、カメラ12(のレンズの中心)と被写体18の頭部の中心とを通る直線に対して、目線(眼球中心と虹彩中心とを通る線)がなす角度である。ただし、カメラ12と被写体18の頭部を通る直線を比較的太い直線と擬制して、被写体18がカメラ12を見ている場合には、カメラ12と眼球中心と虹彩中心とが一直線上に並び、このときの視線方向を示すパラメータは角度α=β=0度としてある。
この実施例では、撮影者が所望の撮影画像を得るためのテンプレートを用意ないし生成する(図22参照)。たとえば、カメラ12と被写体18との位置関係および被写体18の視線方向を決定し、テンプレートは生成される。ここで、カメラ12と被写体18との位置関係とは、カメラ12に対する被写体の位置および方向であるが、この実施例では、カメラ12の位置を3次元の現実空間(ワールド座標)における原点Oとした場合における被写体18の位置(3次元座標)を意味する。
たとえば、旅行や卒業を記念した写真のような集合写真(撮影画像)を取得する場合には、図18に示すように、各被写体18がカメラ12の方向を向くようなテンプレートが生成される。ここでは、簡単のため、4人の被写体18が一列に並んでいる場合について説明するが、2人以上の被写体18であれば、一列のみならず、二列以上に並んでいてもよい(図19,図20も同じ)。ただし、カメラ12と被写体18との距離、ここでは、カメラ12と被写体18の列との直線距離は、カメラ12の望遠距離や被写体18の人数に応じて適宜設定される。
この図18に示すような場合には、各被写体18の視線方向はカメラ12と当該各被写体18の頭部とを通る直線との角度差が無いため、全被写体18に対してパラメータα=β=0であるテンプレートが生成される。また、カメラ12と被写体18との位置関係は、カメラ12の位置をワールド座標の原点とした場合における被写体18の位置座標で決定される。ただし、図18に示すように、カメラ12の位置を中心として、図面の横方向がX軸方向(水平方向)であり、図面の縦方向がZ軸方向(奥行き方向)であり、図面に対して垂直な方向がY軸方向(高さ方向)である。また、図面の右方向がX軸のプラス方向であり、図面の下方向がZ軸のプラス方向であり、図面に対して垂直上方向がY軸のプラス方向である。
また、図18においては、簡単のため、3次元の現実空間を上方から俯瞰的に見た状態を示し、水平方向(X軸方向)の角度(α)のみを示し、垂直方向(Y軸方向)の角度βについては省略してある。さらに、図18においては、被写体18の頭部を円で示し、その視線を実線と矢印とを用いて示してある。さらにまた、図18においては、カメラ12と被写体18の目とを通る線を破線で示してあるが、視線と重なる部分については実線で示される。また、x1,x2,xn−1,xnは、各被写体18の位置座標のうちのX軸成分であり、その大きさ(絶対値)は水平方向における原点Oからの距離を示す。これらは、後述する図19および図20においても同様である。
また、図19に示すように、すべての被写体18が或る方向(ここでは、Z軸方向と平行な方向)を見ている画像を取得する場合には、X座標がx1の被写体18に対しては、α=θ1で示されるテンプレートが設定され、X座標がx2の被写体18に対しては、α=θ2で示されるテンプレートが設定され、X座標がxn−1の被写体18に対しては、α=θn−1で示されるテンプレートが設定され、そして、X座標がxnの被写体18に対しては、α=θnで示されるテンプレートが生成(設定)される。
詳細な説明は省略するが、カメラ12と被写体18との位置関係は予め決定されているため、被写体18が見る方向(対象物)を決めれば、三角関数を用いた簡単な計算により、パラメータすなわち角度α,βを求めることができる。また、図18の説明においては省略したが、視線方向の角度αは、カメラ12と被写体18の頭部中心とを通る点線から右側に開く角度はプラスで表わされ、点線(hline)から左側に開く角度はマイナスで表わされる(図3参照)。図示は省略してあるが、視線方向の角度βは、カメラ12と被写体18の頭部中心とを通る点線(vline)から上側に開く角度がプラスで表わされ、下側に開く角度がマイナスで表わされる(図4参照)。以下、同じである。
また、図20は、各被写体18が特定の同じ方向や特定の同じ物を見るのではなく、それぞれ異なる方向であってその視線方向が放射状に分布する場合には、各被写体18の視線18Aをカメラ12とは逆向きに延長し、たとえば、XZ平面におけるZ軸上(カメラ12の撮影方向の直線上)の或る点Kを通るように、視線方向のパラメータα,βが決定される。ただし、3次元のワールド座標系で見た場合には、各被写体の視線18Aをカメラ12とは逆方向に延長した直線がZ軸と交わる点KのY軸方向の座標は必ずしも一致しなくてもよい。
図20に示す例では、X座標がx1の被写体18に対しては、α=φ1で示されるテンプレートが設定され、X座標がx2の被写体18に対しては、α=φ2で示されるテンプレートが設定され、X座標がxn−1の被写体18に対しては、α=φn−1で示されるテンプレートが設定され、そして、X座標がxnの被写体18に対しては、α=φnで示されるテンプレートが生成(設定)される。
このように、カメラ12と被写体18との位置関係および被写体18の視線方向を決定した理想の撮影画像を得るためのテンプレートが生成される。この実施例では、テンプレートには、角度α,βのパラメータが記述され、当該テンプレートに対してカメラ12に対する被写体18の位置座標が付加的に記述される。ただし、被写体18の位置座標は、パラメータとして角度α,βとともに、テンプレートに記述するようにしてもよい。
図示は省略するが、各被写体18がそれぞれ別の物(方向)を見るように、視線方向を発散させた撮影画像を得ることも可能である。たとえば、カメラ12と各被写体18との位置関係を決定し、各被験者18が同じ方向や同じ物(カメラ12を含む。)を見ないように、各被験者18の視線方向が決定される。
このように、テンプレートは生成され、予め視線サーバ14に登録され、全体処理(図23−図27参照)、撮影処理(図28−図30)および合成処理(図31,図32参照)等において選択(設定)される。視線サーバ14は、カメラ12からの圧縮画像データを取得すると、取得した圧縮画像データに対応する画像に含まれる各被写体18について、カメラ12との位置関係を算出するとともに、各被写体18の視線方向を上述した方法によって推定(検出)する。
ただし、カメラ12と各被写体18との位置関係は、圧縮画像データに付加された距離データと、この圧縮画像データに対する撮影画像とに基づいて算出される。たとえば、図18−図20に示したような例では、カメラ12と被写体18の列との距離を距離データから知ることができる。その距離データに基づく距離は、撮影画像の中心或いはその近傍に存在する現実空間の位置(説明の都合上、「第1位置」という。)とカメラ12の位置との距離である。撮影画像から各被写体の顔の大きさを検出し、顔の大きさ(たとえば、横幅または縦の長さ或いはその両方)と距離データに基づく距離とから、第1位置とのX軸方向およびZ軸方向の距離を推測する。そして、この推測した距離を用いて、ワールド座標系における位置座標が算出される。
なお、この実施例では、顔の大きさに応じて第1位置からの距離を求めるようにしてあるが、これに限定される必要はない。たとえば、左右の目の間の距離や眉間の距離を用いるなどして、第1位置からの距離を求めることもできる。ただし、顔の大きさ、左右の目の間の距離および眉間の距離のいずれか2つ以上に基づいて、第1位置からの距離を求めるようにしてもよい。
また、詳細な説明は省略するが、複数の被写体18を含む被写体像180を撮影する場合には、カメラ12と各被写体18との位置関係および各被写体18の視線方向は、撮影者ないしユーザの指示に従って予め決定される。
撮影画像について、カメラ12と各被写体18との位置関係および各被写体18の視線方向が算出(推測)されると、テンプレートに基づく画像におけるカメラ12と各被写体18との位置関係および視線方向と比較される。以下、分かり易く説明するために、撮影画像に基づくカメラ12に対する被写体18の位置座標を「推定位置関係」といい、同じく撮影画像に基づく被写体の視線方向を「推定視線方向」という。一方、テンプレートに付加された位置座標を「理想位置関係」といい、同じくテンプレートに基づく視線方向を「理想視線方向」という。
比較処理(マッチング処理)では、まず、仮想空間に、推定位置関係に従ってカメラ12と被写体18とを配置し、被写体18の推定視線方向に従う視線を描画する。一方、同じく仮想空間に、理想位置関係に従ってカメラ12と被写体18とを配置し、被写体の理想視線方向に従う視線を描画する。前者の描画結果と後者の描画結果とから理想視線方向を基準とした場合の推定視線方向のずれを検出する。このずれが小さい程、適合率が高く、逆に、ずれが大きい程、適合率が低いと言える。詳細な説明は省略するが、水平方向および垂直方向の両方とも、角度差は絶対値で0度−90度の間で表わすことができる。したがって、水平方向と垂直方向と角度差の合計が180度の場合の適合率を0%とし、角度差の合計が0度の場合の適合率を100%として、角度差が1.8度増加するに従って適合率を1%ずつ減少させるように、適合率を算出することができる。このような適合率は、各被写体18について算出される。
なお、この実施例では、推定位置関係と理想位置関係とは、一致或いはほぼ一致しているものとしてある。
このように、比較処理および適合率の算出処理を行うが、上述したように、各被験者の視線方向を発散させた撮影画像の場合には、各被写体18について適合率を算出するのではなく、撮影画像が全体としてのテンプレートに従う画像に適合しているか否かを判断するようにしてある。このように、視線方向を発散させる場合には、他の被験者18と異なる方向を見ていればよく、相対的な方向をきっちり合わせる必要性がないためである。
具体的には、撮影画像における全被写体18の視線方向の分散および尖度を求め、同様に、テンプレートに基づく画像における全被写体18の視線方向の分散および尖度を求め、その適合度(画像全体としての適合率)を求める。なお、分散および尖度については、周知の公式によって簡単に求めることができ、適合率は、分散および尖度のそれぞれについて、テンプレートに基づく画像についての分散および尖度を基準として、撮影画像についての分散および尖度の百分率を求めればよい。
適合率は各撮影画像について算出され、視線方向を発散させた撮影画像以外では、適合率が一定値よりも大きい被写体18の数が最も多い画像が基礎となる画像(基礎画像)として選択される。基礎画像が選択されると、当該基礎画像の被写体18の中で、適合率が低い被写体18については、当該被写体18についての顔画像を、他の適合率の高い撮影画像から切り取って、当該基礎画像の該当する部分に貼り付ける。つまり、合成画像が生成される。このようにすれば、各被写体18について適合率の高い画像を生成することができ、画像全体として理想に近づけることができる。
詳細な説明は省略するが、合成画像を生成する方法を簡単に説明すると、適合率の高い撮影画像を検出すると、当該撮影画像において各被写体の顔領域を判別する。次に、切り取る顔画像を含む領域を方形または楕円等の簡単な平面図形で指定する。一方、切り取った顔画像を貼り付ける領域についても同じ平面図形で指定する。そして、平面図形同士が重なるように、切り取った顔画像を基礎画像の対応する位置に貼り付ける。このとき、貼り付けた顔画像のエッジ(周辺域)については、最多色を選択して、選択した最多色で埋めて、ガウスぼかしを入れる。これによって、より自然な合成画像を得るようにしてある。
具体的には、貼り付けた顔画像のエッジ上に、たとえば3×3ピクセルを選択し、ポスタリゼーションして、16色に落とし込む。その中で、最多色を選択し、選択した最多色で他のピクセルを塗りつぶす。この処理をエッジ上でたとえば2ピクセル毎に実行する。その後、ガウスぼかしをかけて、エッジを隠す。
また、視線方向を発散させた撮影画像では、画像全体としての適合率が最も大きい撮影画像が選択され、上述したような合成処理は行わずに、選択された撮影画像をテンプレートに従う画像に最も近似するものとして取得する。このように、視線方向を発散させた撮影画像では、個々の被写体18についての適合率を算出していない。これは、視線方向を発散させた撮影画像では、各被写体18間で異なる方向を見ていれば良いので、撮影画像全体としての適合率を高くするか否かは個々の視線方向の適合率によって左右されるのではなく、他の被写体18との関係で決まるからである。
<フィードバック>
合成画像を生成する前の基礎画像において、推定視線方向を理想視線方向に近づけるための指示が被写体18または撮影者或いはその両方に与えられる。この実施例では、各被写体18に対して、推定視線方向を理想視線方向に近づけるように、その視線18Aを誘導するためのメッセージをスピーカ16から出力するようにしてある。ただし、スピーカ16に代えて、ディスプレイのような他の出力装置を用いて、視線18Aを誘導するようにしてもよい。具体的には、次のような内容のメッセージが通知される。ただし、ここでは、メッセージを通知する被写体18を特定していないが、たとえば、メッセージの先頭に、被写体18を特定するための内容が追加されるのである。たとえば、8人の被写体18が前列と後列との2列に分かれて4人ずつ並んでいる場合には、たとえば、「前列の向かって右から2番目の人は」のような内容をメッセージの先頭に追加して、被写体18を特定可能にするのである。
たとえば、「少しだけ左を見てください。」や「少しだけ視線を左に向けてください。」のように、方向を示す言葉を含むメッセージが被写体18や撮影者に通知(フィードバック)される。また、このようなメッセージの内容は時系列に従って記録され、つまり履歴(指示歴)が残され、次回以降のメッセージを通知する際に、前回通知した内容を反映したメッセージが被写体18に通知される。たとえば、先のメッセージによって、左方向に視線を向け過ぎてしまった場合には、「ちょっと向け過ぎましたので、ほんの少し右を見てください。」や「視線を少し右に戻してください。」というメッセージを通知することができる。また、先のメッセージを通知したが、さらに、左方向に視線を移動させたい場合には、「さらにあと少しだけ左を見てください。」や「あともう少し視線を左に向けてください。」というメッセージを通知することができる。
ただし、このようなメッセージに対応する合成音声のデータ(後述するメッセージデータ)は予め用意されており、選択的にサーバ12からスピーカ18を介して出力されるのである。また、ディスプレイのような表示器にメッセージを表示する場合には、上述したようなメッセージに対応するテキストデータが記憶されるのである。
図21は、視線サーバ14のメモリ(RAM)のメモリマップの一例を示す図解図である。図21に示すように、メモリには、プログラム記憶領域72およびデータ記憶領域74が設けられる。プログラム記憶領域72には、画像処理プログラムが記憶され、この画像処理プログラムは、画像取得プログラム720、視線推定プログラム722、比較プログラム724、適合率算出プログラム726、画像選択プログラム728、画像合成プログラム730および通知プログラム732などによって構成される。
画像取得プログラム720は、カメラ12からの画像データ(この実施例では、圧縮画像データ)を取得するためのプログラムである。視線推定プログラム722は、画像取得プログラム720に従って取得した画像データに対応する撮影画像のそれぞれについて、各被写体18の視線方向を推定(検出)するためのプログラムである。比較プログラム724は、予め設定(生成)されたテンプレートが示す理想視線方向(パラメータα,β)と、視線推定プログラム722に従って推定された推定視線方向とを比較するためのプログラムである。
適合率算出プログラム726は、比較プログラム724の比較結果に基づいて、推定視線方向が理想視線方向に適合する割合(適合率)を算出するためのプログラムである。ただし、適合率は、撮影画像がテンプレートに基づく画像に適合する割合ということもできる。画像選択プログラム728は、カメラ12から取得した複数の画像データに対応する複数の撮影画像(静止画像)からテンプレートに基づく画像に最も近似する、1つの撮影画像すなわち基礎画像を選択するためのプログラムである。
画像合成プログラム730は、基礎画像における被写体18のうち、適合率が一定値よりも低い被写体18を特定し、特定された被写体18について、基礎画像以外の撮影画像から適合率が最も高いものを検索し、適合率が最も高い場合被写体18の画像(この実施例では、顔画像)を切り切り取って、基礎画像の対応する位置に貼り付けて、合成画像を生成するためのプログラムである。通知プログラム732は、基礎画像と指示歴とに基づいて、視線方向などを誘導するための指示を通知(フィードバック)するためのプログラムである。
図示は省略するが、プログラム記憶領域72には、カメラ12などの他の電子機器と通信するための通信プログラムなども記憶される。
また、データ記憶領域74には、位置関係データ740、視線データ742、テンプレートデータ744、撮影画像データ746、合成画像データ748、メッセージデータ750および履歴データ752が記憶される。
位置関係データ740は、カメラ12の位置を3次元のワールド座標系の原点Oとした場合における、各被写体18の位置座標のデータ(位置座標データ)を、各被写体18に対応づけて記憶したデータである。これによって、被写体18の視線方向を決定するための基準となる線(hline,vline)を決定することができる。視線データ742は、撮影画像における各被写体18の推定視線方向を、撮影画像毎に各被写体18に対応づけて記憶したデータ(角度データ)である。この角度データは、上述した視線推定プログラム722に従って検出される。
テンプレートデータ744は、複数の理想視線方向についてのパラメータα,βを定義したテンプレートのデータである。たとえば、図22に示すように、テンプレートデータ744は、第1パラメータ744a、第2パラメータ744b、第3パラメータ744c、…、および第nパラメータ744nについてのデータを含む。各パラメータ744a−744nは、2つの視線角度の組で表わされ、図18−図20を用いて説明したように、カメラ12と被写体18との位置関係とともに決定(生成)される。ただし、図22において、パラメータ内における上側の視線角度は、水平方向の角度αであり、下側の視線角度は垂直方向の角度βである。
図21に戻って、撮影画像データ746は、カメラ12から取得した撮影画像データである。上述したように、複数枚(この実施例では、10枚)の撮影画像データがカメラ12から視線サーバ14に送信され、したがって複数枚の撮影画像についてのデータが記憶される。合成画像データ748は、上述した画像選択合成プログラム730に従って生成された合成画像についてのデータである。メッセージデータ750は、上述したように、通知プログラム732に従ってメッセージを被写体18等に通知する際に使用する合成音声データである。履歴データ752は、通知プログラム732に従って通知したメッセージについての履歴(指示歴)を示すデータである。ただし、指示歴は、メッセージの内容(またはメッセージの識別情報)および当該メッセージによって視線方向を指示した被写体18の情報(カメラ12側から見た並び順など)を含む。
具体的には、図1に示した視線サーバ14が、図23ないし図25に示すフロー図に従って全体処理を実行する。図23に示すように、視線サーバ14は、全体処理を開始すると、ステップS300で、テンプレートおよびモードが選択されたかどうかを判断する。ここでは、すべての被写体18に対して、同じテンプレート(744a−744nなど)が選択(設定)されたり、一部または全部に異なるテンプレート(744a−744nなど)が選択(設定)されたりしたかどうかを判断するとともに、個別に(被写体18毎に)テンプレートとの適合率を判別するモード(個別モード)または総合して(撮影画像全体として)テンプレートに基づく画像との適合率を判別するモード(総合モード)が選択されたかどうかを判断するのである。
なお、個別モードにおいて、被写体18毎にテンプレートとの適合率を判別した場合であっても、それらの適合率の平均値を求めることにより、撮影画像全体としてテンプレートに基づく画像との適合率を求めることができる。
ステップS300で“NO”であれば、つまりテンプレート(744a−744n)およびモード(個別モードまたは総合モード)の少なくとも一方が選択されていなければ、テンプレート(744a−744n)やモード(個別モードまたは総合モード)の選択中であると判断して、同じステップS300に戻る。一方、ステップS300で“YES”であれば、つまりテンプレート(744a−744n)およびモード(個別モードまたは総合モード)が選択されれば、ステップS302で、個別モードが選択されたかどうかを判断する。
ステップS302で“NO”であれば、つまり総合モードが選択されれば、図26に示すステップS356に進む。一方、ステップS302で“YES”であれば、つまり個別モードが選択されれば、ステップS304で、初期化処理を実行する。ここでは、変数pおよび変数tに初期値が設定される(p=t=0)。ただし、変数pは、カメラ12から取得した撮影画像データに対応する撮影画像の枚数をカウントするための変数である。また、変数tは、画像処理システム10(視線サーバ14)から被写体18等に対してメッセージを通知(フィードバック)した回数をカウントするための変数である。以下、同じである。
続いて、ステップS306では、撮影画像を取得する。たとえば、視線サーバ14は、カメラ12に撮影画像の取得を要求する。すると、カメラ12では、撮影が開始され、所定の枚数(たとえば、10枚)の画像を撮影し、複数枚の撮影画像に対応する撮影画像データを視線サーバ14に送信する。ただし、各撮影画像に対して、または撮影画像データの全体に対して、撮影したときに計測されたカメラ12と被写体18(カメラ12の正面に存在する被写体18)との距離についての数値データ(距離データ)が付加されている。したがって、視線サーバ14は、撮影画像データと距離データとを取得し、データ記憶領域74に記憶する。
次のステップS308では、1枚目の撮影画像を読み込み、ステップS310で、変数pをインクリメントする(p=p+1)。続くステップS312では、全員の顔を検出する。なお、顔の検出方法は、上述した方法と同じである。そして、ステップS314では、全員の視線方向を推定する。ここでは、各被写体18について、図14を用いて説明した視線方向推定処理が実行されるのである。これによって、各被写体18の推定視線方向が得られる。さらに、ステップS316で、撮影画像におけるカメラ12と各被写体18との位置関係を算出する。ここでは、上述したように、撮影画像データと距離データとに基づいて、カメラ12の位置をワールド座標系の原点Oとした場合における各被写体18の位置座標が算出される。
次に、ステップS318では、テンプレートを読み込む。ここでは、全体処理が開始された当初に選択されたテンプレートが読み込まれる。各被写体18に対応してテンプレートが選択されている場合には、それらのすべてが読み込まれる。そして、ステップS320では、読み出したテンプレートに基づく画像における視線方向を算出する。
図24に示すように、続くステップS322では、各人の適合率を算出する。ここでは、推定視線方向が、テンプレートに基づく理想視線方向と一致する度合いを、被写体18毎に算出するのである。上述したように、適合率は、撮影画像における被写体18の推定視線方向と、テンプレートに基づく画像の対応する被写体18の理想視線方向との角度差に基づいて算出される。
続くステップS324では、撮影画像と各人の適合率とを関連付けて記憶する。つまり、算出した各被写体18の適合率を撮影画像に関連付けて、メモリのバッファ領域に一時記憶する。そして、ステップS326で、変数pが最大値以上かどうかを判断する。つまり、すべての撮影画像について、各被写体18の適合率を算出したかどうかを判断する。この実施例では、変数pの最大値は「10」である。
ステップS326で“NO”であれば、つまり変数pが最大値未満であれば、各人の適合率を算出していない撮影画像が残っていると判断して、ステップS328で、次の撮影画像を読み込み、図23に示したステップS310に戻る。このようにして、撮影画像が順番に読み込まれ、撮影画像毎に、各被写体18の適合率が算出されるのである。一方、ステップS326で“YES”であれば、つまり変数pが最大値以上であれば、つまりすべての撮影画像について、各被写体18の適合率を算出すると、ステップS330で、適合率の高い被写体18の人数が最も多い撮影画像を選択する。つまり、基礎画像が選択される。
次のステップS332では、全員の適合率が一定値(たとえば、80%)以上かどうかを判断する。ここで、“YES”なら、基礎画像がテンプレートに基づく理想の画像に少なくとも近似すると決定して、図25に示すステップS344にそのまま進む。しかし、“NO”なら、基礎画像がテンプレートに基づく理想の画像に近似していないと決定して、ステップS334で、適合率が一定値未満の人に、指示歴に合わせた指示を実行する。このとき、視線サーバ14は、履歴データ752が示す指示歴を参照して、前回の指示が有るか否かを判断し、上述したように、前回の指示が有る場合と無い場合とで、異なる内容のメッセージについての音声合成データを選択して、スピーカ16を介してメッセージの音声を出力する。つまり、視線方向の変更に関する内容(情報)をフィードバックする。
続くステップS336では、変数tをインクリメントし(t=t+1)、ステップS338では、今回の指示を指示歴に記憶する。たとえば、視線サーバ14は、今回の指示の内容(メッセージ)そのもの、または、使用した音声合成データの識別情報(ファイル名など)を、被写体18の情報に対応付けて記憶する。そして、ステップS340では、変数tが一定回数以上であるかどうかを判断する。これは、何度指示しても、全員の適合率が一定値を超えず、永久的に所望の撮影画像(合成画像)を取得(生成)できないような不都合を回避するためである。
ステップS340で“NO”であれば、つまり変数tが一定回数未満であれば、そのままステップS344に進む。一方、ステップS340で“YES”であれば、つまり変数tが一定回数以上であれば、ステップS342で、一定値を下げてから、ステップS344に進む。
図25に示すように、ステップS344では、選択した撮影画像すなわち基礎画像のうち、適合率の低い人(被写体18)について、適合率の高い撮影画像における当該被写体18の顔画像を他の撮影画像から抽出する(切り取る)。次に、ステップS346で、抽出した顔画像を基礎画像の対応する顔画像に貼り付ける。つまり、合成画像(合成画像データ748)が生成される。ただし、ステップS344およびS346の処理は、複数の被写体18が該当する場合には、当該複数の被写体18について実行される。続いて、ステップS348で、合成画像を出力する。ここでは、図示は省略するが、合成画像をLCDのようなディスプレイに出力してもよいし、視線サーバ14に接続される他のコンピュータ、HDD、データベース、ディスクドライブなどの電子機器に出力するようにしてもよい。つまり、合成画像が表示されたり、保存されたりする。
そして、ステップS350では、全体処理の終了であるかどうかを判断する。たとえば、ユーザによって、終了の指示が入力されたかどうかを判断するのである。ステップS350で“NO”であれば、つまり全体処理を終了しない場合には、ステップS352で、位置関係データ740、視線データ742、撮影画像データ746および合成画像データ748をメモリのバッファ領域から削除し、ステップS354で、変数pをリセット(p=0)して、図23に示したステップS306に戻る。一方、ステップS350で“YES”であれば、つまり全体処理を終了する場合には、そのまま終了する。
また、上述したように、総合モードが選択され、図23のステップS302で“NO”と判断すると、図26のステップS356で、テンプレートを読み込む。なお、総合モードにおける処理(S356−S400)のうち、上述した個別モードにおける処理(S304−S354)と同様の処理については簡単に説明することにする。
続くステップS358では、テンプレートを用いた視線方向の分散・尖度を算出し、ステップS360では、初期化処理を実行する(p=0,t=0)。次のステップS362では、撮影画像を取得する。つまり、カメラ12から所定枚数(この実施例では、10枚)の撮影画像に対応する撮影画像データを取得する。そして、ステップS364で、1枚目の撮影画像を読み込んで、ステップS366で、変数pをインクリメントする(p=p+1)。次に、ステップS368では、撮影画像における被写体18全員の顔を検出し、ステップS370では、全員の視線方向を推定する。つまり、各被写体18の推定視線方向が求められる。そして、ステップS372で、撮影画像における視線方向の分散・尖度を算出する。
次のステップS374では、ステップS372で算出した撮影画像における視線方向の分散・尖度が、ステップS358で算出したテンプレートに基づく画像における視線方向の分散・尖度に適合している度合(適合率)を算出し、ステップS376で、当該撮影画像と、ステップS374で算出した分散・尖度の適合率とを関連付けてメモリのバッファ領域に記憶し、図27に示すステップS378に進む。
ステップS378では、変数pが最大値以上であるかどうかを判断する。ステップS378で“NO”であれば、つまり変数pが最大値未満であれば、ステップS380で、次の撮影画像を読み込んで、図26に示したステップS366に戻る。一方、ステップS378で“YES”であれば、つまり変数pが最大値以上であれば、ステップS382で、分散・尖度の適合率が最も高い撮影画像を選択する。つまり、カメラ12からの複数枚の撮影画像から、1枚の撮影画像が選択されるのである。
1枚の撮影画像が選択されると、ステップS384で、当該撮影画像における分散・尖度の適合率が一定値(たとえば、80%)以上であるかどうかを判断する。ステップS384で“YES”であれば、つまり当該撮影画像における分散・尖度の適合率が一定値以上であれば、所望の撮影画像或いはそれに近い画像が得られたと決定して、そのままステップS394に進む。一方、ステップS384で“NO”であれば、つまり当該撮影画像における分散・尖度の適合率が一定値未満であれば、所望の撮影画像或いはそれに近い画像が得られていないと決定して、ステップS386で、視線方向をばらばらにする旨の指示を実行する。たとえば、視線サーバ14は、「もう少しばらばらの方向を見てください。」というメッセージを、スピーカ16を介して出力する。
続くステップS388では、変数tをインクリメントし(t=t+1)、ステップS390では、変数tが一定回数以上であるかどうかを判断する。ステップS390で“NO”であれば、つまり変数tが一定回数未満であれば、そのままステップS394に進む。一方、ステップS390で“YES”であれば、つまり変数tが一定回数以上であれば、ステップS392で、一定値を下げて(たとえば、5%〜10%下げて)、ステップS394に進む。
ステップS394では、選択した撮影画像を出力する。そして、ステップエス396では、全体処理を終了するかどうかを判断する。ステップS396で“NO”であれば、つまり全体処理の終了でなければ、ステップS398で、視線データおよび撮影画像データを消去し、ステップS400で、変数pをリセットして(p=0)、図26に示したステップS362に戻る。一方、ステップS396で“YES”であれば、つまり全体処理の終了であれば、そのまま終了する。
このように、テンプレートとモードとを選択すれば、それに従った撮影画像を取得したり、必要に応じて、合成画像を生成したりすることができる。
上述の実施例では、カメラ12と視線サーバ14とを個別に設けて、カメラ12からの撮影画像を用いて、視線サーバ14で画像処理(全体処理)を実行するようにしたが、カメラ12のみによって撮影処理と全体処理との両方を実行することも可能である。かかる場合のカメラ12のRAM38のメモリマップは、図21に示した視線サーバ14のメモリのメモリマップと同様であるため、重複した説明は省略する。ただし、画像取得プログラム720に代えて、撮影プログラムが記憶される。また、図23−図27に示した全体処理がカメラ12のCPU20によって実行されるため、図23のステップS306と図26のステップS362とにおいて、撮影処理を実行することにより、所定枚数の撮影画像が取得される。つまり、視線サーバ14を画像処理装置として機能させることができるし、カメラ12を画像処理装置として機能させることもできるのである。
また、上述の実施例では、複数枚の撮影画像がテンプレートに従った所望の撮影画像を取得したり、さらに、合成処理を施した画像を取得したりするようにしたが、テンプレートに従った所望の画像を撮影したり、テンプレートに従って撮影処理を実行した複数枚の撮影画像から合成画像を取得(生成)したりすることも可能である。かかる場合、たとえば、図28ないし図30に示すフロー図に従う撮影処理がカメラ12によって実行され、この撮影処理によって得られた複数の撮影画像を用いて、図31および図32に示すフロー図に従う合成処理がカメラ12によって実行される。ただし、合成処理は、視線サーバ14で実行するようにしてもよい。以下、具体的に説明するが、既に説明した処理と同じ処理については、簡単に説明することにする。
なお、この実施例では、テンプレートに従って撮影した複数の撮影画像から合成画像を取得するようにしてあるが、テンプレートによらないで撮影した複数枚の撮影画像から所望のテンプレートに合う(たとえば、全体の適合率が80%を超える)撮影画像を検索(選択)することができ、同じ複数の被写体18についての撮影画像であれば、上述したように、さらに合成処理を施すこともできる。
図28に示すように、カメラ12(のCPU20)が撮影処理を開始すると、ステップS500で、テンプレートおよびモードが選択されたかどうかを判断する。ステップS500で“NO”であれば、そのままステップS500に戻る。一方、ステップS500で“YES”であれば、ステップS502で、個別モードが選択されたかどうかを判断する。
ステップS502で“NO”であれば、つまり総合モードが選択されれば、後述するように、図30のステップS536に進む。一方、ステップS502で“YES”であれば、つまり個別モードが選択されれば、ステップS504で、スルー画像から1フレーム分の静止画像を取得する。
なお、図示等は省略するが、撮影処理が開始される前に、フォーカスは調整され、このときカメラ12と被写体18との距離は検出(計測)されている。
次のステップS506では、取得した静止画像における全員の顔を検出し、ステップS508では、取得した静止画像における全員の視線方向を推定し、そして、ステップS510では、静止画像における被写体の位置関係を算出する。続いて、ステップS512で、テンプレートを読み込み、ステップエス514で、テンプレートに基づく画像についての視線方向を算出し、ステップS516で、各人の適合率を算出して、図29に示すステップS518に進む。
図29に示すように、ステップS518では、変数tを初期化する(t=0)。次のステップS520では、全員の適合率が一定値以上であるかどうかを判断する。ステップS520で“YES”であれば、つまり全員の適合率が一定値以上であれば、所望の撮影画像またはそれに近い撮影画像を得ることができると判断して、ステップS522で、撮影画像の取得処理を実行し、ステップS524で、取得した撮影画像を保存して、撮影処理を終了する。詳細な説明は省略するが、ステップS522では、上述したように、シャッタボタンが全押しされたときと同じ処理が実行され、圧縮静止画像データがRAM38や外部記憶媒体48に記録される。ただし、ステップS522では、1枚の撮影画像を取得してもよいし、2枚以上の複数枚の撮影画像を取得(連写)するようにしてもよい。
また、ステップS520で“NO”であれば、つまり適合率が一定値未満の被写体18が存在する場合には、ステップS526で、指示歴に合わせた指示を実行する。その後、ステップS528で、変数tをインクリメントし(t=t+1)、ステップS530で、今回の指示を指示歴に記録して、ステップS532で、変数tが一定回数以上かどうかを判断する。ステップS532において、“NO”であれば、そのまま図28に示したステップS504に戻るが、“YES”であれば、ステップS534で、一定値を下げてから、ステップS504に戻る。
また、上述したように、総合モードが選択され、ステップS502で“NO”と判断すると、図30に示すステップS536で、テンプレートを読み込み、ステップS538で、テンプレートを用いた視線方向の分散・尖度を算出する。次のステップS540では、スルー画像から静止画像を取得し、ステップS542で、静止画像における全員の顔を検出し、ステップS544で、静止画像における全員の視線方向を推定する。
そして、ステップS546で、静止画像における視線方向の分散・尖度を算出し、ステップS548で、分散・尖度の適合率を算出し、そして、ステップS550で、分散・尖度の適合率が一定値以上であるかどうかを判断する。ステップS550で“YES”であれば、つまり分散・尖度の適合率が一定値以上であれば、ステップエス450で、撮影画像を取得し、ステップS554で、取得した撮影画像を保存して、撮影処理を終了する。
また、ステップS550で“NO”であれば、つまり分散・尖度の適合率が一定値未満であれば、ステップS556で、視線方向をばらばらにする旨の指示を実行し、ステップS558で、変数tをインクリメントして(t=t+1)、ステップS560で、変数tが一定回数以上であるかどうかを判断する。ステップS560において、“NO”であれば、そのままステップS540に戻るが、“YES”であれば、ステップS562で、一定値を下げてから、ステップS540に戻る。
このようにすることにより、通常の写真撮影のように、ビューファインダを覗きながら、被写体18に視線(顔)の向きの指示を出して、所望の撮影画像を取得するのと同様に、テンプレートを用いて、自動的に被写体18に視線(顔)の向きの指示を出して、所望の撮影画像を取得することができる。
また、図31に示すように、カメラ12(または視線サーバ14)が合成処理を開始すると、ステップS600で、テンプレートが選択されたかどうかを判断する。なお、上述したように、総合モードにおける撮影画像には合成処理は施されないため、ここでは、上述の撮影処理の個別モードにおいて取得された撮影画像を用いた合成処理が実行される。このため、通常、合成処理では、撮影処理において選択されたテンプレートが選択される。したがって、撮影画像に個別モードまたは総合モードのいずれのモードで撮影されたかの識別情報(ラベル)を付与しておくことにより、そのラベルに従って自動的にテンプレートを選択するようにすることもできる。
なお、視線サーバ14で合成処理を実行する場合には、この合成処理に先だって、個別モードで取得された撮影画像が当該視線サーバ14のメモリに記憶されるのである。
ステップS600で“NO”であれば、つまりテンプレートが選択されていなければ、同じステップS600に戻る。一方、ステップS600で“YES”であれば、つまりテンプレートが選択されれば、ステップS602で、初期化処理を実行する。ここでは、変数pに初期値を設定する(p=0)。続く、ステップS604では、1枚目の撮影画像を読み込み、ステップS606では、変数pをインクリメントする(p=p+1)。
続いて、ステップS608では、撮影画像における全員の顔を検出し、ステップS610では、撮影画像における全員の視線方向を推定し、そして、ステップS612では、撮影画像における被写体18の位置関係を算出する。また、次のステップS614では、テンプレートを読み込み、ステップS616では、テンプレートに基づく画像における視線方向を検出する。そして、図32に示すステップS618で、各人の適合率を算出し、次のステップS620で、撮影画像と各人の適合率とを関連付けて記憶する。
続くステップS622では、変数pが最大値以上であるかどうかを判断する。ステップS622で“NO”であれば、ステップS624で、次の撮影画像を読み込み、図31に示したステップS606に戻る。一方、ステップS622で“YES”であれば、ステップS626で、適合率の高い人数が最も多い撮影画像を基礎画像として選択する。
そして、ステップS628では、全員の適合率が一定値以上であるかどうかを判断する。ステップS628で“YES”であれば、そのままステップS632に進む。一方、ステップS628で“NO”であれば、ステップS630で、適合率に応じた指示を実行して、ステップS632に進む。したがって、同じテンプレートを用いて、後で、撮影処理をやり直す場合には、撮影者は、今回の指示に従って被写体18の視線の向きを修正(誘導)することができる。また、今回取得された撮影画像がテンプレートに基づく画像と異なる点を知ることもできる。
なお、合成処理においては、指示歴に基づく指示や指示の回数による一定値の変更を行わないのは、撮影処理と合成処理とが連続的に行われないためであり、リアルタイムに被写体18の視線18Aの方向を誘導しないからである。
ステップS632では、選択した撮影画像すなわち基礎画像のうち、適合率の低い人についての顔画像を、適合率の高い他の撮影画像から抽出し、ステップS634では、抽出した顔画像を基礎画像の該当する位置に貼り付けて合成画像を生成し、そして、ステップS636で、生成した合成画像を出力して、合成処理を終了する。
この実施例によれば、所望の撮影画像を得るためのテンプレートを設定するだけなので、簡単に所望の撮影画像を取得することができる。また、必要に応じて、適合率の高い顔画像を合成するので、より自然に、理想に近い画像を取得することができる。
なお、この実施例では、サーバ14は、オートフォーカス時に距離センサ28によって計測した距離データと画像データとから、撮影時におけるカメラ12と視線サーバ14との位置関係を算出するようにしたが、他の方法により、距離データを取得することもできる。たとえば、コントラスト検出方式により、オートフォーカスする場合には、CPU20は、スルー画像から或るフレーム画像を取得し、このフレーム画像のうち、合焦状態を評価するための予め設定された1つまたは複数の合焦評価領域に基づいてSDRAM44から合焦領域の画像成分を抽出する。そして、CPU20は、合焦評価領域の画像成分に基づいてフレーム画像のコントラスト値を求め、コントラスト値に基づいて合焦状態を判定し、フォーカスレンズの位置(合焦位置)を特定する。さらに、CPU20は、モータドライバ52を指示して、フォーカスレンズの位置を制御する。かかる場合には、フォーカスレンズの位置とズームレンズの位置とに対応した距離(カメラ12と被写体18との距離)のデータを予め記憶しておくことにより、ズームおよびフォーカスが調整されたときの各レンズの位置に応じて距離データが決定され、これを撮影画像データとともに、サーバ14に送信するのである。つまり、オートフォーカスの方式は、アクティブ方式とパッシブ方式とのいずれであってもよい。
他の実施例の画像処理システム10では、視線方向のみならず、他のパラメータも含むテンプレートを設定し、当該テンプレートに従う撮影画像を取得するようにした以下は、上述の実施例と同じであるため、重複した説明は省略する。
この他の実施例では、図33に示すように、テンプレート744a−744nでは、パラメータとして、視線方向(視線角度α1,β1)に加えて、顔方向(顔の角度γ1,δ1)、体方向(体の角度ε1,ζ1)および表情(顔表情A1,B1,C1)が記憶される。したがって、テンプレートの従うことにより、視線方向のみならず、他の要素も考慮された撮影画像を取得することができる。
ただし、顔の角度γ1と体の角度ε1とは、視線角度α1と同様に、水平方向の角度であり、顔の角度δ1と体の角度ζ1とは、視線角度β2と同様に、垂直方向の角度である。また、顔方向は、頭部の中心と鼻とを通る線上であり、前方に向かう方向である。さらに、体方向は、腹部(体幹)の中心と臍とを通る直線上であり、前方に向かう方向である。
ただし、顔方向については、画像処理により、顔の縦幅に対する横幅の長さ、眉間の長さ、黒目領域の縦幅に対する横幅の長さのいずれか1つまたはいずれか2つ以上に基づいて求めることができる。
また、体方向については、「複数人物によるジェスチャーの単一画像からのスポッティング認識」(http://ci.nii.ac.jp/naid/110003274571/)に紹介されている技術に基づいて求めることができる。
さらに、表情については、「動的表情認識による感情推定手法に関する研究」(http://hydro.energy.kyoto-u.ac.jp/Lab/mirai/face/face_OHP/index.htm)に紹介されている技術を用いて求めることができる。
顔方向と体方向とについては、視線方向と同様にして、撮影画像から得られた顔方向と体方向と、テンプレートに基づく画像から得られた顔方向と体方向とのそれぞれの角度差に基づいて適合率を算出することができる。顔表情については、撮影画像から得られた顔の表情のそれぞれを、対応するテンプレートについての顔の表情と比較し、一致する度合いが高い程、適合率が高く、一致する度合いが低い程、適合率も低くされる。具体的には、数12に従って算出される。
[数12]
適合率(%)=[{(100−|理想表情A−推定表情A|)%
+(100−|理想表情B−推定表情B|)%
+…
+(100−|理想表情N−推定表情N|)}/n個]
ただし、|・|は絶対値を意味し、変数nはテンプレートに設定されている顔の表情についてのパラメータの総数である。また、テンプレートが示すパラメータに基づく顔の表情を「理想表情」と表記し、撮影画像から求められた顔の表情を「推定表情」と表記してある。
たとえば、テンプレートの顔表情(理想顔表情A)が「笑顔」でその割合が90%であり、顔表情(理想顔表情B)が「驚き」でその割合が50%であると仮定する。この場合に、撮影画像の或る被写体18について得られた顔表情のうち、「笑顔」の割合が40%で、「驚き」の割合が80%であれば、数12に従うと、適合率は60%と算出される。また、同様の仮定の下で、他の被写体18について得られた顔表情のうち、「笑顔」の割合が80%で「驚き」の割合が30%であれば、数12に従うと、適合率は85%と算出される。
このように、視線方向のみならず、顔方向、体方向および表情のパラメータを含む場合には、上述した全体処理のステップS312とステップS318との間において、撮影画像に基づいて、顔方向、体方向および表情を算出し、ステップS320において、テンプレートに基づく画像における視線方向。顔方向、体方向および表情を算出し、そして、ステップS322において、視線方向、顔方向、体方向および表情のすべてを含む適合率を被写体18毎に算出するのである。
同様に、撮影処理では、ステップS506とステップS512との間において、撮影画像に基づいて、顔方向、体方向および表情を算出し、ステップS514において、テンプレートに基づく画像における視線方向、顔方向、体方向および表情を算出し、そして、ステップS516において、視線方向、顔方向、体方向および表情のすべてを含む適合率を被写体18毎に算出するのである。
さらに、合成処理では、ステップS608とステップS614との間において、撮影画像に基づいて、顔方向、体方向および表情を算出し、ステップS616において、テンプレートに基づく画像における視線方向、顔方向、体方向および表情を算出し、そして、ステップS618において、視線方向、顔方向、体方向および表情のすべてを含む適合率を被写体18毎に算出するのである。
なお、他の実施例では、視線方向以外のパラメータとして、顔方向、体方向および表情の3つのパラメータを設けるようにしたが、いずれか1つ以上であってもよい。
また、詳細な説明は省略したが、他の実施例では、各パラメータについて算出した適合率の平均値を、被写体18についての適合率としてもよいし、各パラメータに重みを付与して、或るパラメータの適合率を重視するようにしてもよい。
さらに、パラメータが体方向を含む場合には、合成画像を生成するとき、被写体の顔画像のみならず、適合率の高い撮影画像から身体全体についての画像を切り取り、その身体全体についての画像を、基礎画像の対応する位置に貼り付ける必要がある。
さらにまた、顔方向、体方向、表情のパラメータをさらに含む場合には、フィードバックする内容として、視線方向のみならず、顔方向、体方向、表情についてテンプレートに近づけるようなメッセージを出力することも可能である。
このように、顔方向、体方向、表情のパラメータを含むようにすることもできるが、体方向に代えて、または、体方向とともに姿勢(ジェスチャー)のパラメータを含むようにすることもできる。かかる場合には、前傾姿勢、仰け反っている姿勢などの姿勢または予め決めた姿勢についても適合率が算出される。ただし、姿勢は、全身で認識するのみならず、上半身および下半身に分けて認識したり、両手、両足および胴体に分けて認識したりすることもできる。このような姿勢(ジェスチャー)もまた、体方向と同様に、「複数人物によるジェスチャーの単一画像からのスポッティング認識」に紹介されている技術に基づいて求めることができる。
また、上述の実施例では、被写体の位置は、撮影者の指示により、テンプレートを作成した際の位置と同じまたはほぼ同じになることを前提としたが、位置のパラメータもテンプレートに含むようにしてもよい。かかる場合には、距離データと画像データとから、カメラ12に対する被写体18の位置(位置座標)が検出され、検出された位置の適合率が、テンプレートに記述された位置のパラメータを用いて算出される。したがって、位置についてもテンプレートに近づけるようなメッセージを出力することができる。