(57)【要約】【課題】小規模なシステム構成で高速に視線の方向を検出する。【解決手段】ビデオカメラが撮影した目の周囲の白黒濃淡画像データを取得し（Ｓ１）、各画素の画素値についての度数を算出する（Ｓ３）。次に、画像補正処理して取得画像のコントラストをあげる（Ｓ５）。そして、閾値を決定し（Ｓ７）、その閾値に基づいて各画素の画素値を二値に変換する（Ｓ９）。次に、視線方向の検出対象領域を特定する（Ｓ１１）。以上により、検出対象領域の大枠が決定される。そして、Ｓ１３〜Ｓ２５の処理を繰り返し行ない、視線の方向を検出する。Ｓ１３〜Ｓ１９の処理は、Ｓ１〜Ｓ１１と同様に行い、Ｓ１１で特定された探索領域内で目の端部を検出してさらに探索領域を絞り込む（Ｓ２１）。絞り込んだ領域の特徴量を抽出し（Ｓ２３）、その最大値を検索して、視線の方向を特定する（Ｓ２５）。【選択図】  図１０
2004280537.tif 000002
【特許請求の範囲】
【請求項１】
視線の向いている方向を検出する視線方向検出装置において、
目の部分の画像を取り込む画像入力手段と、
その画像入力手段により取り込まれた入力画像データをフラクタル解析処理することにより、目の位置情報を表す特徴量を抽出するための探索領域を決定する探索領域決定手段と、
その探索領域決定手段により決定された探索領域について特徴量を抽出する特徴量抽出手段と、
その特徴量抽出手段により抽出された特徴量に基づいて、視線の向いている方向を示す視線位置座標を判定する視線位置判定手段とを備えたことを特徴とする視線方向検出装置。
【請求項２】
前記入力画像データをフラクタル解析処理することにより目の端部の領域を取り出す端部検出手段を備え、
前記特徴量抽出手段は、前記探索領域から前記端部検出手段により検出された目の端部の領域を除いた残余の領域について特徴量を抽出することを特徴とする請求項１に記載の視線方向検出装置。
【請求項３】
前記特徴量抽出手段は、前記残余の領域の列方向について横方向ヒストグラムを生成して横方向特徴量として抽出し、同領域の行方向について縦方向ヒストグラムを生成して縦方向特徴量として抽出することを特徴とする請求項２に記載の視線方向検出装置。
【請求項４】
前記視線位置判定手段は、前記横方向ヒストグラムの最大値を視線横方向位置とし、前記縦方向ヒストグラムの最大値を視線縦方向位置とし、前記視線横方向位置と前記視線縦方向位置との組み合わせを前記視線位置座標として判定することを特徴とする請求項３に記載の視線方向検出装置。
【請求項５】
視線の向いている方向を検出する視線方向検出方法において、
目の部分の画像を取り込み、
取り込んだ入力画像データをフラクタル解析処理して特徴量を抽出するための探索領域を決定し、
その探索領域について特徴量を抽出し、
抽出された特徴量に基づいて、視線の向いている方向を示す視線位置座標を判定することを特徴とする視線方向検出方法。
【請求項６】
前記入力画像データをフラクタル解析処理して目の端部の領域を取り出し、
前記探索領域から前記目の端部の領域を除いた残余の領域について特徴量を抽出することを特徴とする請求項５に記載の視線方向検出方法。
【請求項７】
前記残余の領域の列方向について横方向ヒストグラムを生成して横方向特徴量とし、同領域の行方向について縦方向ヒストグラムを生成して縦方向特徴量とすることにより特徴量を抽出することを特徴とする請求項６に記載の視線方向検出方法。
【請求項８】
前記横方向ヒストグラムの最大値を視線横方向位置とし、前記縦方向ヒストグラムの最大値を視線縦方向位置とし、前記視線横方向位置と前記視線縦方向位置との組み合わせを前記視線位置座標として判定することを特徴とする請求項７に記載の視線方向検出方法。
【請求項９】
請求項５乃至８のいずれかに記載の視線方向検出方法をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、視線方向検出装置、視線方向検出方法及び視線方向検出プログラムに関するものである。
【０００２】
【従来の技術】
従来、人間の視線の方向を計測する方法としては、以下のようなものが一般的に知られている。１つは、光源から赤外線を眼球に照射し、瞳孔と角膜に反射した反射光を視線検出装置内に設けられた受光センサにより受光し、その反射光に基づいて視線の方向を検出するものである（例えば、特許文献１参照）。また、他の１つは、通常のビデオカメラ（ＣＣＤカメラ）を用いて撮像し、その画像情報から視線方向を検出するものである（例えば、特許文献２参照）。
【０００３】
【特許文献１】
特開２００２−５６７号公報
【特許文献２】
特開２０００−２２９０６８号公報
【０００４】
【発明が解決しようとする課題】
しかしながら、赤外線を照射する方法では、赤外線照射装置を設置する必要があり、装置が大がかりで高価なものになる問題点がある。また、通常のビデオカメラを用いた場合には、照明を使用しない場合には照度条件が不安定なことによる性能低下の問題があり、照明装置を使用する場合には、装置が大型化する問題点がある。
【０００５】
本発明は、上述の問題点を解決するためになされたものであり、小型で高速な視線方向検出装置、視線方向検出方法、及び視線方向検出プログラムを提供することを目的とする。
【０００６】
【課題を解決するための手段】
上記目的を達成するために、請求項１に記載の視線方向検出装置は、視線の向いている方向を検出する視線方向検出装置において、目の部分の画像を取り込む画像入力手段と、その画像入力手段により取り込まれた入力画像データをフラクタル解析処理することにより、目の位置情報を表す特徴量を抽出するための探索領域を決定する探索領域決定手段と、その探索領域決定手段により決定された探索領域について特徴量を抽出する特徴量抽出手段と、その特徴量抽出手段により抽出された特徴量に基づいて、視線の向いている方向を示す視線位置座標を判定する視線位置判定手段とを備えている。
【０００７】
この構成の視線方向検出装置では、画像入力手段が目の部分の画像を取り込み、探索領域決定手段が画像入力手段により取り込まれた入力画像データをフラクタル解析処理して、目の位置情報を表す特徴量を抽出するための探索領域を決定する。そして、特徴量抽出手段が探索領域決定手段により決定された探索領域について特徴量を抽出し、視線位置判定手段が、特徴量抽出手段により抽出された特徴量に基づいて、視線の向いている方向を示す視線位置座標を判定する。
【０００８】
請求項２に記載の視線方向検出装置は、請求項１に記載の発明の構成に加え、前記入力画像データをフラクタル解析処理することにより目の端部の領域を取り出す端部検出手段を備え、前記特徴量抽出手段は、前記探索領域から前記端部検出手段により検出された目の端部の領域を除いた残余の領域について特徴量を抽出することを特徴とする。
【０００９】
この構成の視線方向検出装置では、請求項１に記載の発明の作用に加え、端部検出手段が入力画像データをフラクタル解析処理して目の端部の領域を取り出し、特徴量抽出手段が、探索領域から端部検出手段により検出された目の端部の領域を除いた残余の領域について特徴量を抽出する。
【００１０】
請求項３に記載の視線方向検出装置は、請求項２に記載の発明の構成に加え、前記特徴量抽出手段は、前記残余の領域の列方向について横方向ヒストグラムを生成して横方向特徴量として抽出し、同領域の行方向について縦方向ヒストグラムを生成して縦方向特徴量として抽出することを特徴とする。
【００１１】
この構成の視線方向検出装置では、請求項２に記載の発明の作用に加え、特徴量抽出手段が、探索領域から目の端部の領域を除いた残余の領域の、列方向について横方向ヒストグラムを生成して横方向特徴量として抽出し、同領域の行方向について縦方向ヒストグラムを生成して縦方向特徴量として抽出する。
【００１２】
請求項４に記載の視線方向検出装置は、請求項３に記載の発明の構成に加え、前記視線位置判定手段は、前記横方向ヒストグラムの最大値を視線横方向位置とし、前記縦方向ヒストグラムの最大値を視線縦方向位置とし、前記視線横方向位置と前記視線縦方向位置との組み合わせを前記視線位置座標として判定することを特徴とする。
【００１３】
この構成の視線方向検出装置では、請求項３に記載の発明の作用に加え、視線位置判定手段が、生成された横方向ヒストグラムの最大値を視線横方向位置とし、縦方向ヒストグラムの最大値を視線縦方向位置とし、視線横方向位置と視線縦方向位置との組み合わせを視線位置座標として判定する。
【００１４】
請求項５に記載の視線方向検出方法は、視線の向いている方向を検出する視線方向検出方法において、目の部分の画像を取り込み、取り込んだ入力画像データをフラクタル解析処理して特徴量を抽出するための探索領域を決定し、その探索領域について特徴量を抽出し、抽出された特徴量に基づいて、視線の向いている方向を示す視線位置座標を判定する。
【００１５】
この構成の視線方向検出方法では、フラクタル解析処理により、入力画像データの複雑さの度合いを求め、複雑さの度合いが高い領域を探索領域とする。そして、その探索領域について特徴量を取り出し、その特徴量に基づいて視線方向を検出する。
【００１６】
ここで抽出する特徴量としては、入力画像データの各画素が有する画素値についての頻度（度数）を用いることができる。この画素値は、画像データが入力された際のものをそのまま使用してもよいし、正規化や階調補正などの補正を行なった後のものを使用してもよい。また、画像を二値化してからの画素値について頻度を算出して特徴量としてもよい。さらに、算出された度数を平滑処理してから特徴量としてもよい。また、探索領域を決定する際に、フラクタル解析を画像の縦方向と横方向の両方について行なってもよいし、横方向のみについて行なってもよい。
【００１７】
請求項６に記載の視線方向検出方法は、請求項５に記載の発明の構成に加え、前記入力画像データをフラクタル解析処理して目の端部の領域を取り出し、前記探索領域から前記目の端部の領域を除いた残余の領域について特徴量を抽出することを特徴とする。
【００１８】
この構成の視線方向検出方法では、請求項５に記載の発明の作用に加え、更にフラクタル解析を行なって、目尻や目頭の目の端部の領域を特定し、探索領域から目の端部の外側を取り除き、対象領域を絞り込んでから特徴量を抽出する。目の端部を取り出すためのフラクタル解析処理は、画像の縦方向と横方向の両方について行なってもよいし、横方向のみについて行なってもよい。
【００１９】
請求項７に記載の視線方向検出方法は、請求項６に記載の発明の構成に加え、前記残余の領域の列方向について横方向ヒストグラムを生成して横方向特徴量とし、同領域の行方向について縦方向ヒストグラムを生成して縦方向特徴量とすることにより特徴量を抽出することを特徴とする。
【００２０】
この構成の視線方向検出方法では、請求項６に記載の発明の作用に加え、特徴量は縦方向と横方向のヒストグラムをそれぞれ生成することにより抽出される。ヒストグラムを生成する対象としては、入力画像データの各画素が有する画素値についての度数を用いることができる。また、入力画像データについて階調補正を行なった後の画素値についての度数を用いたり、階調画像を二値化した後の画素値についての度数を用いてもよい。さらに、画素値についての度数を平滑化する処理を行なってもよい。二値化した画像について処理を行なう場合は、最小又は最大画素値の数をカウントして度数としてもよい。この場合、黒とされた画素が多い部分がヒストグラム上に頂点を形成することになる。
【００２１】
請求項８に記載の視線方向検出方法は、請求項７に記載の発明の構成に加え、前記横方向ヒストグラムの最大値を視線横方向位置とし、前記縦方向ヒストグラムの最大値を視線縦方向位置とし、前記視線横方向位置と前記視線縦方向位置との組み合わせを前記視線位置座標として判定することを特徴とする。
【００２２】
この構成の視線方向検出方法では、請求項７に記載の発明の作用に加え、横方向のヒストグラムと縦方向のヒストグラムの頂点の交点を視線位置座標とする。ヒストグラムを画素値についての度数を用いて生成すると、黒に近い画素値を有する画素が多い列が横方向の最大値（ヒストグラムの頂点）となり、黒に近い画素値を有する画素が多い行が縦方向の最大値となる。従って、それぞれの最大値の交点が最も黒い位置となって、これを視線の位置と判定することができる。
【００２３】
請求項９に記載の視線方向検出プログラムは、請求項５乃至８のいずれかに記載の視線方向検出方法をコンピュータに実行させる。この構成のプログラムでは、請求項５乃至８のいずれかに記載の作用を奏することができる。
【００２４】
【発明の実施の形態】
以下、本発明の実施形態について、図面に基づいて説明する。図１は、本実施形態の視線方向検出装置１の構成を示す概念図であり、図２は、視線方向検出装置１の電気的構成を示すブロック図である。図１に示すように、本実施形態の視線方向検出装置１は、パソコン２と、眼鏡３に搭載された小型のビデオカメラ４とから構成されている。
【００２５】
パソコン２は、図２に示すように、周知のパーソナルコンピュータの一般的な構成からなり、パソコン２の制御を司るＣＰＵ３０が設けられ、ＣＰＵ３０には、各種のデータを一時的に記憶するＲＡＭ３１と、ＢＩＯＳ等を記憶したＲＯＭ３２と、データの受け渡しの仲介を行うＩ／Ｏインターフェース３３とが接続されている。Ｉ／Ｏインターフェース３３には、ハードディスク装置３８が接続され、ハードディスク装置３８には、ＣＰＵ３０で実行される各種のプログラムを記憶したプログラム記憶エリア３８０と、プログラムを実行して作成されたデータ等の情報が記憶されたその他の情報記憶エリア３８１とが設けられている。本発明の視線方向検出プログラムは、プログラム記憶エリア３８０に記憶されている。
【００２６】
また、Ｉ／Ｏインターフェース３３には、ビデオコントローラ３４と、キーコントローラ３５と、ＣＤ−ＲＯＭドライブ３６とが接続され、ビデオコントローラ３４にはディスプレイ９３が接続され、キーコントローラ３５にはキーボード９４が接続されている。ＣＤ−ＲＯＭドライブ３６に挿入されるＣＤ−ＲＯＭ３７には、本発明の視線方向検出プログラムが記憶されており、導入時には、ＣＤ−ＲＯＭ３７から、ハードディスク装置３８にセットアップされてプログラム記憶エリア３８０に記憶されるようになっている。尚、視線方向検出プログラムが記憶される記録媒体としては、ＣＤ−ＲＯＭに限らず、ＤＶＤやＦＤ（フレキシブルディスク）等でもよい。このような場合には、パソコン２はＤＶＤドライブやＦＤＤ（フレキシブルディスクドライブ）を備え、これらのドライブに記録媒体が挿入される。また、視線方向検出プログラムはＣＤ−ＲＯＭ３７等の記録媒体に記憶されているものに限らず、パソコン２をＬＡＮやインターネットに接続してサーバからダウンロードして使用するように構成してもよい。
【００２７】
画像入力手段であるビデオカメラ４は、ＣＣＤ（Ｃｈａｒｇｅ  Ｃｏｕｐｌｅｄ  Ｄｅｖｉｃｅ）やＣＭＯＳ（Ｃｏｍｐｌｅｍｅｎｔａｒｙ  Ｍｅｔａｌ−Ｏｘｉｄｅ  Ｓｅｍｉｃｏｎｄｕｃｔｏｒ）センサからなり、眼鏡３に搭載され、操作者に装着される。操作者が眼鏡３を装着すると、ビデオカメラ４は、まず目のあたりの画像を撮影して、画像データをＩ／Ｏインターフェース３３を介してパソコン２に出力する。パソコン２では、この画像に基づいて視線方向を検出するための探索領域を決定する。探索領域が決定されて以降は、ビデオカメラ４は、所定時間間隔で自動的に目の周囲の画像を撮影し、画像データをＩ／Ｏインターフェース３３を介してパソコン２に出力する。
【００２８】
次に、ＲＡＭ３１の構成について説明する。図３は、ＲＡＭ３１の構成を示す模式図である。図３に示すように、ＲＡＭ３１には、ビデオカメラ４から取得した白黒濃淡画像の各画素についての画素値と階調補正を行なった後の画素値を記憶する画素値記憶エリア３１ａと、各階調の画素値を有する画素の頻度を一時的に記憶する画素値度数記憶エリア３１ｂと、各画素値の度数を累積加算していく結果を記憶する画素値度数累積値記憶エリア３１ｃと、階調補正後の画素値及び平滑処理された画素値を記憶する平滑処理記憶エリア３１ｄと、白黒濃淡画像を二値化するための閾値を記憶する二値化閾値記憶エリア３１ｆと、フラクタル解析を行なった結果である反応値及び合計値を記憶するフラクタル解析反応値記憶エリア３１ｇと、視線方向検出のための探索開始位置を記憶する探索開始位置記憶エリア３１ｈと、視線方向検出のための探索終了位置を記憶する探索終了位置記憶エリア３１ｊと、端部検出処理の結果が記憶される横方向特徴量抽出領域記憶エリア３１ｋと、特徴量を記憶する特徴量記憶エリア３１ｎと、特徴量最大値や視線方向位置を記憶する視線位置記憶エリア３１ｑ等の記憶エリアが用意されている。
【００２９】
次に、記憶エリアについて詳細に説明する。図４は、画素値記憶エリア３１ａのデータ構造を示す模式図、図５は、画素値度数記憶エリア３１ｂのデータ構造を示す模式図、図６は画素値度数累積値記憶エリア３１ｃのデータ構造を示す模式図、図７は平滑処理記憶エリア３１ｄのデータ構造を示す模式図、図８はフラクタル解析反応値記憶エリア３１ｇのデータ構造を示す模式図である。図９は特徴量記憶エリア３１ｎに記憶された特徴量のヒストグラムを模式的に示した図である。
【００３０】
まず、画素値記憶エリア３１ａについて説明する。図４に示すように、画素値記憶エリア３１ａには、撮影された画像データの左上端から右下端に向かって並んでいる画素に順につけた番号を記憶した画素番号欄３１ａ１と、画素番号欄３１ａ１の画素の画像データ取得時の画素値（階調値）を記憶した元階調値欄３１ａ２と、階調補正処理を行なった後の画素値（階調値）を記憶した補正階調値欄３１ａ３とが用意されている。元階調値欄３１ａ２には、後述する画素値度数算出処理（図１１参照）において各画素の画素値を取得した際に、対応する画素番号の位置にその画素値が記憶される。また、補正階調値欄３１ａ３には、画像補正処理（図１２〜図１５参照）で補正された階調値（画素値）が対応する画素番号の位置に記憶される。
【００３１】
次に、画素値度数記憶エリア３１ｂについて説明する。図５に示すように、画素値度数記憶エリア３１ｂには、０〜２５５までの画素値を順に記憶した画素値欄３１ｂ１と、その画素値を有する画素の数を記憶する度数欄３１ｂ２とが用意されている。画素値度数算出処理（図１１参照）において、各画素について画素値を確認し、該当する画素値の度数欄に１ずつ加算していくことにより、各画素値の度数が算出され、対応する画素値欄３１ｂ１の度数欄３１ｂ２に記憶される。
【００３２】
次に、画素値度数累積値記憶エリア３１ｃについて説明する。画素値度数累積値記憶エリア３１ｃは、画像補正処理（図１２〜図１５参照）において使用される記憶エリアである。図６に示すように、画素値度数累積値記憶エリア３１ｃには、現在処理中の画素値の値を記憶する画素値欄３１ｃ１と、それまでの累積度数を記憶する累積度数欄３１ｃ２が用意されている。累積度数欄３１ｃ２は、画像補正処理において、階調補正のための上限・下限補正値を求めるために、画素値の上限値から、または下限値からの度数の累計を算出するために使用される。
【００３３】
次に、平滑処理記憶エリア３１ｄについて説明する。図７に示すように、平滑処理記憶エリア３１ｄには、画素値欄３１ｄ１と、画像補正処理後にその画素値を有する画素の数を記憶する階調補正後度数欄３１ｄ２と、平滑処理後の度数値が記憶される複数の平滑処理欄３１ｄ３とが用意されている。平滑処理欄３１ｄ３は、二値化閾値決定処理（図１６、図１７参照）において、画像補正処理後の画素値度数の平滑化処理が行なわれ、その際に隣接平均値を算出して記憶するために使用される。
【００３４】
次に、フラクタル解析反応値記憶エリア３１ｇについて説明する。図８に示すように、フラクタル解析反応値記憶エリア３１ｇには、二値化された画像データの各画素に対応した座標系を有するフラクタル解析反応値記憶領域３１ｇ１と、フラクタル解析反応値記憶領域３１ｇ１の下に並んで設けられたフラクタル解析反応合計値記憶領域３１ｇ２とが用意されている。フラクタル解析反応値記憶領域３１ｇ１には、探索領域決定処理（図１９〜図２３参照）や端部検出処理（図２４〜図２６参照）において、フラクタル解析を行なった際に反応値があった場合にその反応値を正の整数からなる数値で記憶し、フラクタル解析反応合計値記憶領域３１ｇ２には、各列の反応値の合計を記憶する。
【００３５】
次に、特徴量記憶エリア３１ｎについて説明する。図９に示すように、特徴量記憶エリア３１ｎには、横方向と縦方向それぞれの特徴量が、横方向ヒストグラム３１ｎ１、縦方向ヒストグラム３１ｎ２として記憶される。そして、横方向ヒストグラム３１ｎ１、縦方向ヒストグラム３１ｎ２のそれぞれの頂点を結んだ交点３１ｎ３が、視線位置座標となる。
【００３６】
次に、本実施形態の視線方向検出装置１において実行される視線方向検出処理について図１０乃至図３２のフローチャートに基づいて説明する。操作者が眼鏡３を装着すると、視線方向検出処理が開始され、まずビデオカメラ４が撮影した画像を取得する。そして、この画像に基づいて視線方向を検出するための探索領域を決定する。探索領域が決定されて以降は、所定時間間隔で撮影画像を取得し、決定された探索領域の中でさらに目の端部を検出し、目の端部に囲まれた領域を対象として特徴量を抽出し、視線を検出する処理を繰り返し行なう。以下、フローチャートの各ステップについては、「Ｓ」と略す。
【００３７】
図１０は、視線方向検出処理のメインのフローチャートである。まず、操作者が眼鏡３を装着すると、ビデオカメラ４が撮影した目の周囲の画像データをＩ／Ｏインターフェース３３を介して取得する（Ｓ１）。ここで取得される画像は、白黒濃淡画像である。一般的に白黒濃淡画像は２５６階調の白黒濃淡を有するが、これに限られるものではない。また、白黒濃淡画像に限らず、カラー画像であってもよい。そして、取得した画像データの各画素の画素値を確認し、各画素値（階調値）についての度数を算出する（Ｓ３）。図１１は、この画素値度数算出処理の詳細を示したものである。
【００３８】
図１１に示すように、画素値度数算出処理では、取得画像データの左上の画素から右下の画素に向かって順に画素値をチェックし、その画素値の度数に加算する。この処理の結果、白黒階調における全ての画素値（階調）について、画像内に発生する度数が得られる。具体的には、まず、処理対象画素ｐを１として（Ｓ３１）、処理を開始する。次に、画素ｐの画素値を取得する（Ｓ３３）。取得された画素値は、図４に示すように、ＲＡＭ３１の画素値記憶エリア３１ａの該当画素の元階調値欄３１ａ２に記憶する。次いで、画素値度数記憶エリア３１ｂに記憶されている該当画素値の度数欄３１ｂ２の値に１を加算する（Ｓ３５）。そして、加算後の度数を画素値度数記憶エリア３１ｂの度数欄３１ｂ２に記憶し直す（Ｓ３７）。たとえば、処理対象画素１の画素値が０だった場合、画素値記憶エリア３１ａの画素番号欄３１ａ１が１の元階調値欄３１ａ２に０を記憶する（Ｓ３３）。次に、画素値度数記憶エリア３１ｂの画素値欄３１ｂ１が０の度数欄３１ｂ２の値は処理開始当初はリセットされて０になっているので、これに１を加算して１とし（Ｓ３５）、画素値度数記憶エリア３１ｂの画素値欄３１ｂ１に１を記憶する（Ｓ３７）。
【００３９】
次に、処理対象画素ｐの値に１を加えて次の位置にある画素を処理対象とする（Ｓ３９）。そして、ｐの値が総画素数を上回ったか否かを判断し（Ｓ４１）、上回っていれば（Ｓ４１：ＹＥＳ）、取得画像データの全画素について処理が終了したので図１０に示すメインルーチンにリターンする。ｐの値が総画素数に達していなければ（Ｓ４１：ＮＯ）、Ｓ３３に戻り、ｐの値が総画素数に達するまで、処理対象画素について画素値を取得し、度数を加算する処理を繰り返す（Ｓ３３〜Ｓ４１）。以上の処理により、取得した画像データの全画素について画素値が取得され、各画素値を有する画素が画像内にいくつあったか、すなわち、画素値についての度数が求められる。
【００４０】
このようにして画素値度数算出処理（図１０、Ｓ３）が終了すると、図１０に示すメインルーチンでは、取得画像のコントラストをあげて処理をしやすくするための画像補正処理を行なう（Ｓ５）。ある程度の度数がある画素値についてのみ以降の処理の対象とすることにより、最小または最大の画素値に近く、出現頻度の少ない画素値については切り捨てて画像のコントラストを上げることができる。図１２〜１５は、この画像補正処理の詳細を示したものである。図１２は、画像補正処理の全体の流れを示すフローチャート、図１３は、画像補正のパラメータを算出するための下限補正値決定処理の詳細を示すフローチャート、図１４は、同様にパラメータ算出のための上限補正値決定処理の詳細を示すフローチャート、図１５は、決定したパラメータを用いて階調を補正する階調補正処理の詳細を示すフローチャートである。
【００４１】
図１２に示すように、画像補正処理では、下限の補正値を決定してから（Ｓ５１）、上限の補正値を決定し（Ｓ５３）、これら上下の補正値に基づいて全画素について変換用のパラメータを決定し（Ｓ５５）、決定されたパラメータを使って各画素値の階調補正処理を行なう（Ｓ５７）。
【００４２】
まず、図１３のフローチャートに基づき、図１２のＳ５１で行なう下限補正値決定処理について説明する。ここでは、予め閾値を設定しておき、図１３に示すように、最小画素値０から最大画素値に向かって順に画素値の度数を累計し、累計された累積度数が閾値を上回った時にこの時の画素値を下限補正値と設定するようにしている。
【００４３】
具体的には、処理対象画素値ｗを０にして（Ｓ５１１）、画素値０についてから処理を始める。次に、図５に示す、ＲＡＭ３１の画素値度数記憶エリア３１ｂの画素値欄３１ｂ１から処理対象画素値を検索し、対応する度数欄３１ｂ２から度数を読み出す（Ｓ５１３）。そして、図６に示すＲＡＭ３１の画素値度数累積値記憶エリア３１ｃの累積度数欄３１ｃ２に記憶されている累積度数の値に読み出した処理対象画素値の度数を加算する（Ｓ５１５）。そして、処理対象画素値を画素値度数累積値記憶エリア３１ｃの画素値欄に、Ｓ５１５で加算された結果の累積度数を累積度数欄に記憶する（Ｓ５１７）。１巡目の処理では、画素値０について処理を行なっており、当初、累積度数欄３１ｃ２に記憶されていた累積度数は０であるから、「０」を画素値欄に記憶し、画素値０の度数をそのまま累積度数欄に記憶する。
【００４４】
次に、Ｓ５１７で記憶した累積度数が予め設定した閾値を上回ったか否かを判断する（Ｓ５１９）。閾値を上回った場合には（Ｓ５１９：ＹＥＳ）、処理対象の画素値を下限補正値に設定し、記憶する（Ｓ５２５）。そして、図１２の階調補正処理のルーチンに戻り、次に上限補正値決定処理に進む（図１２、Ｓ５３）。閾値を上回っていない場合は（Ｓ５１９：ＮＯ）、ｗの値に１を加算して（Ｓ５２１）、次の画素値を処理対象とする。そして、ｗの値が最大画素値（本実施形態では２５５）を上回ったか否かを判断し（Ｓ５２３）、上回っていれば（Ｓ５２３：ＹＥＳ）、全ての画素値について度数を累積しても、閾値を上回る累積度数にはならなかったので、処理対象の画素値を下限補正値に設定、記憶して（Ｓ５２５）、図１２の画像補正処理のルーチンに戻り、次に上限補正値決定処理に進む（図１２、Ｓ５３）。ｗの値が最大画素値を上回っていない場合は（Ｓ５２３：ＮＯ）、Ｓ５１３に戻り、ｗの値が最大画素値に達するまで、処理対象画素値について度数を取得し、累積度数を算出する処理を繰り返す（Ｓ５１３〜Ｓ５２３）。以上の処理により、下限画素値から順に検索していって、ある程度以上の頻度で現れている画素値が見つけだされる。そして、取得された白黒濃淡画像は、その画素値から上の画素値に大部分が分布していると判断し、設定された下限補正値以下の画素値での画素の分布を切り捨てるようにパラメータを設定する。
【００４５】
次に、図１４のフローチャートに基づき、図１２のＳ５３で行なう上限補正値決定処理について説明する。ここでは、下限補正値決定処理と同様に端から累積度数を算出していく処理を行なうが、処理対象画素値を０ではなく最大画素値（本実施形態では２５５）から開始する。すなわち、予め閾値を設定しておき、図１４に示すように、最大画素値から０に向かって順に画素値の度数を累計し、累計された累積度数が閾値を上回った時にこの時の画素値を上限補正値と設定するようにしている。尚、ここで使用される閾値は、下限補正値決定処理の場合と同じ値でもよいし、画像データの特性に応じて異なる値を用いてもよい。
【００４６】
具体的には、処理対象画素値ｗを最大画素値にして（Ｓ５３１）、最大画素値についてから処理を始める。次に、図５に示す、ＲＡＭ３１の画素値度数記憶エリア３１ｂの画素値欄３１ｂ１から処理対象画素値を検索し、対応する度数欄３１ｂ２から度数を読み出す（Ｓ５３３）。そして、図６に示すＲＡＭ３１の画素値度数累積値記憶エリア３１ｃに記憶されている累積度数の値に読み出した処理対象画素の度数を加算する（Ｓ５３５）。そして、処理対象画素値を画素値度数累積値記憶エリア３１ｃの画素値欄に、Ｓ５３５で加算された結果の累積度数を累積度数欄に記憶する（Ｓ５３７）。１巡目の処理では、当初、累積度数欄３１ｃ２に記憶されていた累積度数はリセットされており、０であるから、最大画素値である「２５５」を画素値欄に記憶し、画素値２５５の度数をそのまま累積度数欄に記憶する。
【００４７】
次に、Ｓ５３７で記憶した累積度数が予め設定した閾値を上回ったか否かを判断する（Ｓ５３９）。閾値を上回った場合には（Ｓ５３９：ＹＥＳ）、処理対象の画素値を上限補正値に設定し、記憶する（Ｓ５４５）。そして、図１２の階調補正処理のルーチンに戻り、次に画素値変換パラメータ決定処理に進む（図１２、Ｓ５５）。閾値を上回っていない場合は（Ｓ５３９：ＮＯ）、ｗの値から１を減算して（Ｓ５４１）、次の画素値を処理対象とする。そして、ｗの値が０に達したか否かを判断し（Ｓ５４３）、０であれば（Ｓ５４３：ＹＥＳ）、全ての画素値について度数を累積しても、閾値を上回る累積度数にはならなかったので、処理対象の画素値を上限補正値に設定、記憶して（Ｓ５４５）、図１２の画像補正処理のルーチンに戻り、次に画素値変換パラメータ決定処理に進む（図１２、Ｓ５５）。ｗの値が０に達していない場合は（Ｓ５４３：ＮＯ）、Ｓ５３３に戻り、ｗの値が０に達するまで、処理対象画素値について度数を取得し、累積度数を算出する処理を繰り返す（Ｓ５３３〜５４３）。以上の処理により、上限画素値から順に検索していって、ある程以上の頻度で現れている画素値が見つけだされる。そして、取得された白黒濃淡画像は、その画素値から下の画素値に大部分が分布していると判断し、設定された上限補正値以上の画素値での画素の分布を切り捨てるようにパラメータを設定する。
【００４８】
次に、画像補正処理のルーチンでは（図１２）、Ｓ５１とＳ５３で得られた下限・上限補正値に基づき、各画素値（階調値）を補正するためのパラメータを求める（Ｓ５５）。そして、このパラメータを各画素の画素値に掛け合わせ、階調補正を行なう（Ｓ５７）。階調補正を行なうことにより、撮影された画像データのコントラストをあげることができる。図１５は、この階調補正処理の詳細を示すフローチャートである。
【００４９】
まず、処理対象画素ｐを１として（Ｓ５７１）、処理を開始する。次に、ＲＡＭ３１の画素値記憶エリア３１ａに記憶されている画素ｐの画素値を取得する（Ｓ５７３）。次いで、図１２のＳ５５で決定したパラメータを用いて画素値を変換する（Ｓ５７５）。そして、変換後の画素値を画素値記憶エリア３１ａの補正階調値欄３１ａ３に記憶する（Ｓ５７７）。次に、処理対象画素ｐの値に１を加えて次の位置にある画素を処理対象とする（Ｓ５７９）。そして、ｐの値が総画素数を上回ったか否かを判断し（Ｓ５８１）、上回っていれば（Ｓ５８１：ＹＥＳ）、全画素について処理が終了したので画像補正処理のルーチン（図１２）にリターンする。ｐの値が総画素数に達していなければ（Ｓ５８１：ＮＯ）、Ｓ５７３に戻り、ｐの値が総画素数に達するまで、処理対象画素について画素値を取得し、画素値を変換して変換後の画素値を記憶する処理を繰り返す（Ｓ５７３〜Ｓ５８１）。以上の処理により、取得した画像データの全画素について画素値が変換され、取得画像データが階調補正されてコントラストが高くなる。従って、以降の処理において二値化される場合に適切な閾値を算出することが可能となる。
【００５０】
次に、図１０に戻って説明すると、画像補正処理（Ｓ５）が終了した後は、階調補正した画像データを二値化するための閾値を決定する処理を行なう（Ｓ７）。本実施の形態では、視線の方向を検出するために、取得した画像の各画素が黒いか白いかを識別し、横方向（列方向）・縦方向（行方向）について黒い画素の数を集計する。そして、黒い画素の多い列と行の交点を視線の位置として処理する。このため、各画素の白黒を識別するために、白黒濃淡画像の階調値で得られている画像データを白と黒の二値に変換する処理を行なう。二値に切り分けるためには、１個の閾値を設定し、その閾値を上回る場合は黒、閾値以下であれば白、という処理が必要となる。この閾値は、適切な値を設定しなければ、画素の分布を適切に把握することができないため重要である。本実施の形態では、各画素値の度数が突出している度数分布のピークを検索し、この値を閾値として採用している。以下のフローチャートでは、画素値が０に近い側のピークを閾値としているが、ピークが２つ以上ある場合に、２つめのピークを採用しても構わない。図１６は二値化閾値決定処理の流れを示すフローチャート、図１７は、二値化閾値決定処理の中で行なわれる画素値度数平滑化処理のフローチャートである。
【００５１】
図１６に示すように、この二値化閾値決定処理では、まず、図１０のＳ５で行なった階調補正後の画素値についての度数を算出する（Ｓ７１）。具体的には、ＲＡＭ３１の画素値記憶エリア３１ａの補正階調値欄３１ａ３に記憶されている画素値を取得して、該当画素値の度数に加算し、加算後の度数をＲＡＭ３１の平滑処理記憶エリア３１ｄの階調補正後度数欄３１ｄ２に記憶する。処理の流れは、前述した図１１に示す画素値度数算出処理のフローチャートの通りであるので、詳細説明は省略する。
【００５２】
補正された画素値について全ての度数が算出されたら、次に、画素値についての度数分布の極小値を見誤らないようにするため、ノイズを減らす処理、すなわち各画素値の度数を平滑化する処理を行なう（Ｓ７３）。この平滑化処理について、図１７に基づいて詳細に説明する。まず、平滑化処理の実行回数ｃを０に設定して処理を開始する（Ｓ７１１）。平滑化を実施する回数は、１回から２０回の間で適宜定めることができる。
【００５３】
次に、処理対象画素値ｗを０にして（Ｓ７１３）、画素値０から順に処理を行なう。次に、図１６のＳ７１でＲＡＭ３１の平滑処理記憶エリア３１ｄの階調補正後度数欄３１ｄ２に記憶した処理対象画素値及び処理対象画素値の前後の画素値の度数の隣接平均を算出する（Ｓ７１５）。隣接平均の方法は、処理対象画素値の度数と、その前後に隣接する画素値の度数を加算し、３で割る。小数点以下は切り捨て処理する。尚、最大画素値及び最小画素値においては、隣接する画素値が一つしかないため、それぞれ、最大画素値又は最小画素値の度数と、その片側に隣接する画素値の度数を加算し、２で割って求める。このようにして算出した隣接平均値を、度数として平滑処理記憶エリア３１ｄの平滑処理欄３１ｄ３に記憶する（Ｓ７１７）。次に、ｗの値に１を加算して（Ｓ７１９）、次の画素値を処理対象とする。そして、ｗの値が最大画素値（本実施形態では２５５）を上回ったか否かを判断し（Ｓ７２１）、上回っていない場合は（Ｓ７２１：ＮＯ）、Ｓ７１５に戻り、ｗの値が最大画素値に達するまで、処理対象画素値について隣接平均を算出して度数として記憶する処理を行なう（Ｓ７１５〜Ｓ７２１）。
【００５４】
ｗの値が最大画素値を上回っていれば（Ｓ７２１：ＹＥＳ）、全ての画素値について隣接平均が算出され、平滑処理が終了したので、平滑化実行回数ｃの値に１を加算する（Ｓ７２３）。そして、平滑化処理の実行回数が、予め設定した回数に達したか否かを判断する（Ｓ７２５）。まだ設定回数に達していなければ（Ｓ７２５：ＮＯ）、再び画素値ｗを０にして（Ｓ７１３）、画素値０から最大画素値まで隣接平均を算出して平滑化処理を行なう。次回以降の平滑化処理では、隣接平均値は、ＲＡＭ３１の平滑処理記憶エリア３１ｄの平滑処理（２）欄以降に順次記憶する（Ｓ７１７）。設定回数だけ平滑化処理が実行されたら（Ｓ７２５：ＹＥＳ）、図１６の二値化閾値決定処理のルーチンに戻る。
【００５５】
図１６に戻ると、Ｓ７５以降、二値化閾値決定処理では、度数のピークを示す画素値を見つけるための処理を行なう。すなわち、予め定めた検索開始値から検索終了値までの間で隣り合う画素値の度数の変化量を算出し、その変化量が閾値を超えた時にその画素値を二値化閾値として設定する。尚、検索開始値と検索終了値は、統計に基づいて予め決められており、本実施の形態では、検索開始値が０〜１００の間、検索終了値が０〜２５５の間の値を取るものとする。
【００５６】
具体的には、まず、処理対象画素値ｗに検索開始値を代入して処理を開始する（Ｓ７５）。そして、前の画素値の度数からの度数変化量を算出する（Ｓ７７）。１巡目の処理では、前の画素値は検索しないので、変化量は０である。次に、Ｓ７７で算出した変化量が予め定めた閾値を超えたか否かを判断する（Ｓ７９）。閾値を超えた場合には（Ｓ７９：ＹＥＳ）、度数のピークを示す画素値であると判断して、処理対象画素値の値を二値化閾値として設定し、ＲＡＭ３１の二値化閾値記憶エリア３１ｆに記憶する（Ｓ８５）。そして、メインルーチン（図１０）にリターンする。
【００５７】
閾値を超えていない場合には（Ｓ７９：ＮＯ）、ｗの値に１を加算して（Ｓ８１）、次の画素値を処理対象とする。そして、ｗの値が検索終了値を上回ったか否かを判断し（Ｓ８３）、上回っていない場合は（Ｓ８３：ＮＯ）、Ｓ７７に戻り、ｗの値が検索終了値に達するまで、処理対象画素値前の画素値の度数からの度数変化量を算出する処理を行なう（Ｓ７９〜Ｓ８３）。ｗの値が検索終了値を上回った場合には（Ｓ８３：ＹＥＳ）、その処理対象画素値の値を二値化閾値に設定し、ＲＡＭ３１の二値化閾値記憶エリア３１ｆに記憶する（Ｓ８５）。そして、メインルーチン（図１０）にリターンする。
【００５８】
以上のようにして二値化閾値が決定されると（図１０、Ｓ７）、その閾値に基づいて画像補正処理後の各画素の画素値を二値に変換する処理を行なう（Ｓ９）。図１８は、この二値変換処理の詳細を示すフローチャートである。二値変換処理では、図１８に示すように、まず、処理対象画素ｐを１として（Ｓ９１）、処理を開始する。次に、ＲＡＭ３１の画素値記憶エリア３１ａの補正階調値欄３１ａ３に記憶されている画素ｐの補正後の画素値を取得する（Ｓ９３）。そして、取得した画素値が、Ｓ７で求められ、二値化閾値記憶エリア３１ｆに記憶されている二値化閾値以上か否かを判断する（Ｓ９５）。画素値が二値化閾値以上であれば（Ｓ９５：ＹＥＳ）、画素値を最大値である２５５にする（Ｓ９７）。本実施の形態では、これは白となる。画素値が二値化閾値未満であれば（Ｓ９５：ＮＯ）、画素値を最小値である０にする（Ｓ９９）。本実施の形態では、これは黒となる。
【００５９】
次に、処理対象画素ｐの値に１を加えて次の位置にある画素を処理対象とする（Ｓ１０１）。そして、ｐの値が総画素数を上回ったか否かを判断し（Ｓ１０３）、上回っていれば（Ｓ１０３：ＹＥＳ）、全画素について処理が終了したのでメインルーチ（図１０）ンにリターンする。ｐの値が総画素数に達していなければ（Ｓ１０３：ＮＯ）、Ｓ９３に戻り、ｐの値が総画素数に達するまで、画素ｐの補正後の画素値を取得し（Ｓ９３）、二値化閾値に基づいて画素値を最大値又は最小値に切り分け、二値化する処理をおこなう（Ｓ９５〜Ｓ９９）。
【００６０】
以上のように二値変換処理が終了すると（図１０、Ｓ９）、撮影した画像データのうち視線方向を検出するための対象とする部分を特定する探索領域決定処理を行なう（Ｓ１１）。この処理は、操作者が眼鏡３を装着し、ビデオカメラ４が最初に目の部分を撮影してパソコン２に画像データを送信してきた際に１度だけ行なわれる。探索領域決定処理が終了すると、以後は一定間隔で撮影が繰り返され、その時々の視線の位置を検出するが、その視線検出処理を行なう範囲をはじめに絞っておき、演算量を少なくするためのものである。図１９〜図２３は、この探索領域決定処理の詳細を示すフローチャートである。図１９は探索領域決定処理の流れを示すフローチャート、図２０は探索領域決定処理の中で行なわれるフラクタル解析反応値決定処理のサブルーチンのフローチャート、図２１は探索領域決定処理の中で行なわれるフラクタル解析反応値合計処理のサブルーチンのフローチャート、図２２は探索領域決定処理の中で行なわれる探索開始位置決定処理のサブルーチンのフローチャート、図２３は探索領域決定処理の中で行なわれる探索終了位置決定処理のサブルーチンのフローチャートである。
【００６１】
探索領域決定処理においては、階調補正処理された画像データに対してフラクタル解析を使うことで画像の複雑さを数値化し、複雑であるか否かをその数値で判定する。そして、目の部分は、肌の部分よりもより複雑であることから、フラクタル解析により複雑であると判定された領域について、視線方向検出の際に探索するようにしている。この探索領域決定処理を行なうことで、以後の処理を行なう範囲を絞ることができ、演算量を少なくすることが可能となる。
【００６２】
図１９に示すように、探索領域決定処理では、まず、図１０のＳ９で二値化された画像データに対してフラクタル解析処理を行なって反応値を算出し（Ｓ１１１）、その結果である反応値を画像の列方向で合計し（Ｓ１１３）、得られた合計値に基づいて画像の横方向について探索開始位置と（Ｓ１１５）、探索終了位置を決定する（Ｓ１１７）。本実施の形態では、探索領域の決定は、画像の横方向にのみ行なっているが、同様の方法で縦方向についても行なうように構成してもよい。
【００６３】
Ｓ１１１のフラクタル解析反応値決定処理においては、二値化された画像を１〜２０画素の間の値を取り得る辺長の正方形のブロックに分け、フラクタル解析処理を行なう。フラクタルとは、マンデルブロ（Ｂ．Ｂ．Ｍａｎｄｅｌｂｒｏｔ）による造語であり、微分不可能で、解析的な分析が難しい図形を示す。フラクタル次元とはそのような図形が空間上に占める度合いを示すもので、フラクタル次元を算出することにより解析的な分析が難しい図形の分析が可能となる。
【００６４】
具体的には、図２０に示すように、まず処理対象ブロックｂを０（画像左上端）として処理を開始する（Ｓ１１１１）。そして、対象ブロック内の画素の画素値を合計する（Ｓ１１１３）。尚、この処理の対象となっている画像データは二値化されているので、画素値は０か２５５になっている。次に、Ｓ１１１３で得られた画素値の合計値が、予め指定した範囲内の数値に入っているか否かを判断する（Ｓ１１１５）。ここで予め指定しておく範囲としては、ブロック内の画素がすべて最大画素値だった場合の２０〜６０％程度にするとよい。指定範囲内に入っている場合には（Ｓ１１１５：ＹＥＳ）、フラクタル反応あり（複雑である）と判定して、図８に示すＲＡＭ３１のフラクタル解析反応値記憶エリア３１ｇにフラクタル反応値を記憶する（Ｓ１１１７）。図８に示すように、フラクタル解析反応値記憶エリア３１ｇには、二値化された画像データの各画素に対応した座標系を有するフラクタル解析反応値記憶領域３１ｇ１が用意されており、対象ブロックに対応する正方形３１ｇ１ａにフラクタル反応値を記憶する。反応値としては、任意の正の整数を用いることができる。
【００６５】
次に、処理対象ブロックｂの値に１を加算して（Ｓ１１１９）、次のブロックに処理を移行する。そして、ｂの値が総ブロック数に達したか否かを判断する（Ｓ１１２１）。総ブロック数に達していれば（Ｓ１１２１：ＹＥＳ）、画像の左上端から右下端まで全てのブロックについてフラクタル反応値が算出され、記憶されたので、処理を終了して、図１９の探索領域決定処理のルーチンに戻る。総ブロック数に達していなければ（Ｓ１１２１：ＮＯ）、全てのブロックについて処理が終了するまで、ブロック内の画素値の合計を算出し、その合計値が指定範囲内かをみてフラクタル解析反応値を記憶する処理を繰り返す（Ｓ１１１３〜Ｓ１１２１）。
【００６６】
以上のようにしてフラクタル解析反応値決定処理が終了すると（図１９、Ｓ１１１）、次に、算出された反応値を列ごとに合計するフラクタル解析反応値合計値処理を行なう（Ｓ１１３）。具体的には、図８に示すＲＡＭ３１のフラクタル解析反応値記憶エリア３１ｇに記憶されたフラクタル解析反応値記憶領域３１ｇ１中、ブロックが並んでいる各列のフラクタル解析反応値の合計を算出する（図２１）。このフラクタル解析反応値合計処理は、横方向左端（横方向位置０）から順に右端に向かって行なう。
【００６７】
図２１に示すように、まず、処理対象横方向位置ｈを０にして（Ｓ１１３１）、処理を開始する。そして、横方向位置ｈにある列のブロックに記憶されているフラクタル解析反応値を合計する（Ｓ１１３３）。そして、ＲＡＭ３１のフラクタル解析反応値記憶エリア３１ｇにおいて、フラクタル解析反応値記憶領域３１ｇ１の下に並んで設けられたフラクタル解析反応合計値記憶領域３１ｇ２の、その列に対応する位置にＳ１１３３で算出された合計値を記憶する（Ｓ１１３５）。
【００６８】
次に、処理対象横方向位置ｈの値に１を加算して（Ｓ１１３７）、次の列の処理に移行する。そして、ｈの値が画像幅に達したか否かを判断する（Ｓ１１３９）。ｈの値が画像幅に達していれば（Ｓ１１３９：ＹＥＳ）、全ての列について合計を算出できたので、処理を終了して、図１９の探索領域決定処理のルーチンに戻る。ｈの値が画像幅に達していなければ（Ｓ１１３９：ＮＯ）、全ての列について処理が終了するまで、フラクタル解析反応値記憶領域３１ｇ１に並んでいるブロックの列の合計を算出し、フラクタル解析反応合計値記憶領域３１ｇ２に記憶する処理を繰り返し行なう（Ｓ１１３３〜Ｓ１１３９）。
【００６９】
以上のようにしてフラクタル解析反応合計値が算出されたら（図１９、Ｓ１１３）、この合計値を用いて画像データの横方向について視線方向検出のための探索を行なう領域を決定する。このために、まず横方向の探索開始位置を決定する処理を行ない（Ｓ１１５）、次に、探索終了位置を決定する処理を行なう（Ｓ１１７）。図２２は探索開始位置決定処理の詳細を示すフローチャートであり、図２３は探索終了位置決定処理の詳細を示すフローチャートである。
【００７０】
図２２に示すように、まず、探索開始位置決定処理では、処理対象横方向位置ｈを０にして（Ｓ１１５１）、画像の左端から処理を開始する。そして、ＲＡＭ３１のフラクタル解析反応値記憶エリア３１ｇ内のフラクタル解析反応合計値記憶領域３１ｇ２に記憶されている対象位置のフラクタル解析反応合計値を読み出し、その合計値が予め設定した閾値を上回っているか否かを判断する（Ｓ１１５３）。閾値を上回っている場合には（Ｓ１１５３：ＹＥＳ）、現在処理対象としている横方向位置ｈの値を視線方向検出のための探索開始位置に設定し（Ｓ１１６１）、ＲＡＭ３１の探索開始位置記憶エリア３１ｈに記憶する。そして、処理を終了して図１９の探索領域決定処理のルーチンに戻る。
【００７１】
処理対象位置のフラクタル解析反応合計値が閾値に達していない場合には（Ｓ１１５３：ＮＯ）、処理対象横方向位置ｈの値に１を加算して（Ｓ１１５５）、右隣の列の処理に移行する。そして、ｈの値が画像幅に達したか否かを判断する（Ｓ１１５７）。ｈの値が画像幅に達していなければ（Ｓ１１５７：ＮＯ）、処理対象位置のフラクタル解析反応合計値が閾値に達するか（Ｓ１１５３：ＹＥＳ）、全ての列について処理が終了するまで（Ｓ１１５７：ＹＥＳ）、フラクタル解析反応合計値と閾値を比較する処理を繰り返す（Ｓ１１５３〜Ｓ１１５７）。ｈの値が画像幅に達した場合には（Ｓ１１５７：ＹＥＳ）、閾値を上回るフラクタル解析反応合計値を有する列がなかったということなので、探索領域は絞り込まないこととし、左端から探索領域とするために、ｈに０を代入する（Ｓ１１５９）。そして、現在処理対象としている横方向位置ｈの値を視線方向検出のための探索開始位置に設定し（Ｓ１１６１）、ＲＡＭ３１の探索開始位置記憶エリア３１ｈに記憶する。そして、処理を終了して図１９の探索領域決定処理のルーチンに戻る。
【００７２】
探索開始位置が決定された後は（図１９、Ｓ１１５）、図２３に示すように、探索終了位置決定処理を行なう。具体的には、まず、処理対象横方向位置ｈを画像データの右端である画像幅にして（Ｓ１１７１）、処理を開始する。そして、ＲＡＭ３１のフラクタル解析反応値記憶エリア３１ｇ内のフラクタル解析反応合計値記憶領域３１ｇ２に記憶されている対象位置のフラクタル解析反応合計値を読み出し、その合計値が予め設定した閾値を上回っているか否かを判断する（Ｓ１１７３）。閾値を上回っている場合には（Ｓ１１７３：ＹＥＳ）、現在処理対象としている横方向位置ｈの値を視線方向検出のための探索終了位置に設定し（Ｓ１１８１）、ＲＡＭ３１の探索終了位置記憶エリア３１ｊに記憶する。そして、処理を終了して図１９の探索領域決定処理のルーチンに戻る。
【００７３】
処理対象位置のフラクタル解析反応合計値が閾値に達していない場合には（Ｓ１１７３：ＮＯ）、処理対象横方向位置ｈの値から１を減算して（Ｓ１１７５）、左隣の列の処理に移行する。そして、ｈの値が０に達したか否かを判断する（Ｓ１１７７）。ｈの値が０に達していなければ（Ｓ１１７７：ＮＯ）、処理対象位置のフラクタル解析反応合計値が閾値に達するか（Ｓ１１７３：ＹＥＳ）、全ての列について処理が終了するまで（Ｓ１１７７：ＹＥＳ）、フラクタル解析反応合計値と閾値を比較する処理を繰り返す（Ｓ１１７３〜Ｓ１１７７）。ｈの値が０に達した場合には（Ｓ１１７７：ＹＥＳ）、閾値を上回るフラクタル解析反応合計値を有する列がなかったということなので、探索領域は絞り込まないこととし、右端まで探索領域とするために、ｈに画像幅の値を代入する（Ｓ１１７９）。そして、処理対象横方向位置ｈの値を視線方向検出のための探索終了位置に設定し（Ｓ１１８１）、ＲＡＭ３１の探索終了位置記憶エリア３１ｊに記憶する。そして、処理を終了して図１９に示す探索領域決定処理のルーチンに戻る。
【００７４】
以上の処理により、定期的な視線方向検出処理が行なわれる際の検出対象領域の大枠が決定される。以上説明した図１０に示すメインルーチンのＳ１〜Ｓ１１までの処理は、操作者が眼鏡３を装着した際に１度行なわれる設定時処理である。そして、以下に説明する視線方向検出処理（Ｓ１３〜Ｓ２５）は、毎秒１５〜３０フレーム程度の割合で繰り返し行なわれ、その時点における視線の方向が検出される。
【００７５】
まず、Ｓ１と同様に、ビデオカメラ４が撮影した目の周囲の白黒濃淡画像のデータがＩ／Ｏインターフェース３３を介して取得される（Ｓ１３）。ビデオカメラ４により撮影される位置や大きさは、Ｓ１で撮影されたものと同じものである。次に、Ｓ３と同様に、取得した画像データの各画素の画素値を確認し、画素値についての度数をカウントしてヒストグラムを作成する画素値度数算出処理を行なう（Ｓ１５）。処理の詳細はＳ３と同様（図１１）なので、説明を省略する。次に、Ｓ５と同様に、取得した画像データのコントラストを上げるための画像補正処理を行なう（Ｓ１７）。処理の詳細はＳ５（図１２〜図１５）と同様なので、説明を省略する。そして、階調補正した画像データを、Ｓ７で求めた二値化閾値を用いて二値変換する（Ｓ１９）。処理の詳細はＳ９と同様なので、説明を省略する。
【００７６】
次に、設定時処理においてＳ１１で決定された探索領域内のなかでさらに視線検出を行なう対象領域を絞り込むため、指定されている探索領域内で目の端部（目尻と目頭）を検出する処理を行なう（Ｓ２１）。図２４〜図２６は、この端部検出処理の詳細を示すフローチャートである。図２４は端部検出処理の流れを示すフローチャート、図２５は端部検出処理の中で行なわれる横方向特徴量抽出開始位置決定処理のサブルーチンのフローチャート、図２６は端部検出処理の中で行なわれる横方向特徴量抽出終了位置決定処理のサブルーチンのフローチャートである。
【００７７】
図２４に示すように、端部検出処理では、Ｓ１１の探索領域決定処理で行なったように、フラクタル解析により反応値を算出し（Ｓ２１１）、算出されたフラクタル解析反応値を合計する（Ｓ２１３）。これらの処理の詳細は、フラクタル解析反応値決定処理が図２０と同様であり、フラクタル解析反応合計値処理が図２１と同様であるので説明を省略する。
【００７８】
次に、図１０のＳ１１で求めた探索領域内で、Ｓ２１３にて求めたフラクタル解析反応合計値を、中央から左端及び右端に向かって順に閾値と比較し、閾値を上回った位置が目の両端部であると判定する。判定された目の端部に囲まれた領域が横方向の特徴量抽出領域、すなわち視線方向検出処理の対象領域となる。左端に近い側の目の端部を検出するものが横方向特徴量抽出開始位置決定処理であり（Ｓ２１５）、右端に近い側の目の端部を検出するものが横方向特徴量抽出終了位置決定処理である（Ｓ２１７）。目の端部の検出では、画像データの横方向中央位置から処理を開始して、閾値を上回った地点を目の端部と認定している。この端部検出処理によって、視線位置検出のために算出する特徴量を抽出する領域をさらに絞り込み、演算のための負荷を軽くすることができる。
【００７９】
まず、横方向特徴量抽出開始位置決定処理では、図２５に示すように、ｈを画像データの横方向中央位置にして（Ｓ２１５１）、処理を開始する。そして、ＲＡＭ３１のフラクタル解析反応値記憶エリア３１ｇ内のフラクタル解析反応合計値記憶領域３１ｇ２に記憶されている対象位置のフラクタル解析反応合計値を読み出し、その合計値が予め設定した閾値を上回っているか否かを判断する（Ｓ２１５３）。閾値を上回っている場合には（Ｓ２１５３：ＹＥＳ）、目の端部であると認定し、この処理対象横方向位置ｈの値を視線方向検出のための特徴量抽出の開始位置に設定し（Ｓ２１５９）、ＲＡＭ３１の横方向特徴量抽出領域記憶エリア３１ｋに記憶する。そして、処理を終了して図２４の端部検出処理のルーチンに戻る。
【００８０】
処理対象位置のフラクタル解析反応合計値が閾値に達していない場合には（Ｓ２１５３：ＮＯ）、処理対象横方向位置ｈの値から１を減算して（Ｓ２１５５）、左隣の列の処理に移行する。そして、ｈの値がＲＡＭ３１の探索開始位置記憶エリア３１ｈに記憶されている探索開始位置に達したか否かを判断する（Ｓ２１５７）。ｈの値が探索開始位置に達していなければ（Ｓ２１５７：ＮＯ）、処理対象位置のフラクタル解析反応合計値が閾値に達するか（Ｓ２１５３：ＹＥＳ）、全ての列について処理が終了するまで（Ｓ２１５７：ＹＥＳ）、フラクタル解析反応合計値と閾値を比較する処理を繰り返す（Ｓ２１５３〜Ｓ２１５７）。ｈの値が探索開始位置に達した場合には（Ｓ２１５７：ＹＥＳ）、探索開始位置を特徴量抽出の開始位置とするので、そのまま処理対象横方向位置ｈの値を視線方向検出のための特徴量抽出の開始位置に設定し（Ｓ２１５９）、ＲＡＭ３１の横方向特徴量抽出領域記憶エリア３１ｋに記憶する。そして、処理を終了して図２４の端部検出処理のルーチンに戻る。
【００８１】
横方向特徴量抽出開始位置決定処理が終了し（図２４、Ｓ２１５）、特徴量を抽出するための領域の一端が決定されると、次に特徴量抽出領域の他端を決定する横方向特徴量抽出終了位置決定処理を行なう（Ｓ２１７）。まず、図２６に示すように、ｈを画像データの横方向中央位置にして（Ｓ２１７１）、処理を開始する。そして、ＲＡＭ３１のフラクタル解析反応値記憶エリア３１ｇ内のフラクタル解析反応合計値記憶領域３１ｇ２に記憶されている対象位置のフラクタル解析反応合計値を読み出し、その合計値が予め設定した閾値を上回っているか否かを判断する（Ｓ２１７３）。閾値を上回っている場合には（Ｓ２１７３：ＹＥＳ）、目の端部であると認定し、この処理対象横方向位置ｈの値を視線方向検出のための特徴量抽出の終了位置に設定し（Ｓ２１７９）、ＲＡＭ３１の横方向特徴量抽出領域記憶エリア３１ｋに記憶する。そして、処理を終了して図２４の端部検出処理のルーチンに戻る。
【００８２】
処理対象位置のフラクタル解析反応合計値が閾値に達していない場合には（Ｓ２１７３：ＮＯ）、処理対象横方向位置ｈの値に１を加算して（Ｓ２１７５）、右隣の列の処理に移行する。そして、ｈの値がＲＡＭ３１の探索終了位置記憶エリア３１ｊに記憶されている探索終了位置に達したか否かを判断する（Ｓ２１７７）。ｈの値が探索終了位置に達していなければ（Ｓ２１７７：ＮＯ）、処理対象位置のフラクタル解析反応合計値が閾値に達するか（Ｓ２１７３：ＹＥＳ）、全ての列について処理が終了するまで（Ｓ２１７７：ＹＥＳ）、フラクタル解析反応合計値と閾値を比較する処理を繰り返す（Ｓ２１７３〜Ｓ２１７７）。ｈの値が探索終了位置に達した場合には（Ｓ２１７７：ＹＥＳ）、探索終了位置を特徴量抽出の終了位置とするので、そのまま処理対象横方向位置ｈの値を視線方向検出のための特徴量抽出の終了位置に設定し（Ｓ２１７９）、ＲＡＭ３１の横方向特徴量抽出領域記憶エリア３１ｋに記憶する。そして、処理を終了して図２４の端部検出処理のルーチンに戻る。
【００８３】
以上の処理により、視線方向検出のための特徴量抽出をする領域が決定されたので、メインルーチンに戻って、次に、特徴量抽出処理を行なう（図１０、Ｓ２３）。特徴量抽出処理では、二値変換処理（Ｓ１９）にて得られた二値画像から、視線方向を判定するのに必要である特徴量を抽出する。図２７〜図２９は、特徴量抽出処理の詳細を示すフローチャートである。特徴量は、二値画像に対して、横方向と（Ｓ２３１）縦方向（Ｓ２３５）について抽出される。図２７は特徴量抽出処理の流れを示すフローチャート、図２８は特徴量抽出処理で行なわれる横方向特徴量抽出処理のサブルーチンのフローチャート、図２９は特徴量抽出処理で行なわれる縦方向特徴量抽出処理のサブルーチンのフローチャートである。
【００８４】
まず、横方向についての特徴量を算出する（Ｓ２３１）。図２８に示すように、横方向特徴量抽出処理では、二値画像に対し、横方向特徴量抽出開始位置から横方向特徴量抽出終了位置までの各列の黒とされている画素の数の合計を算出し、合計値の配列を横方向ヒストグラムとして図９に示すように特徴量記憶エリア３１ｎに記憶する。
【００８５】
具体的には、まず、処理対象横方向位置ｈの値を横方向特徴量抽出領域記憶エリア３１ｋに記憶されている横方向特徴量抽出開始位置に設定して処理を開始する（Ｓ２３１１）。次に、二値画像の処理対象位置の列にある画素のうち、黒とされている画素の数をカウントする。本実施形態では、画素値が０を黒としているので、画素値０の画素をカウントする（Ｓ２３１３）。そして、そのカウント値を度数としてＲＡＭ３１の特徴量記憶エリア３１ｎに記憶する（Ｓ２３１５）。
【００８６】
次に、処理対象横方向位置ｈの値に１を加算して（Ｓ２３１７）、右隣の列の処理に移行する。そして、ｈの値がＲＡＭ３１の横方向特徴量抽出領域記憶エリア３１ｋに記憶されている横方向特徴量抽出終了位置を超えたか否かを判断する（Ｓ２３１９）。横方向特徴量抽出終了位置を超えていなければ（Ｓ２３１９：ＮＯ）、Ｓ２３１３に戻って、ｈの値が横方向特徴量抽出終了位置に達するまで、処理対象位置の列にある黒の画素数をカウントし、度数として記憶する処理を繰り返す（Ｓ２３１３〜Ｓ２３１９）。
【００８７】
ｈの値が横方向特徴量抽出終了位置を超えた場合には（Ｓ２３１９：ＹＥＳ）、全ての列について度数が算出され、ヒストグラムが作成されたので、次に、算出された度数のノイズを減らすため、平滑化処理を行なう（Ｓ２３２１〜Ｓ２３３５）。
【００８８】
平滑化処理の方法は、図１７で説明した画素値度数平滑化処理と同様である。まず、平滑化処理の実行回数ｃを０に設定して処理を開始する（Ｓ２３２１）。平滑化を実施する回数は、１回から２０回の間で適宜定めることができる。次に、処理対象横方向位置ｈの値を横方向特徴量抽出領域記憶エリア３１ｋに記憶されている横方向特徴量抽出開始位置に設定して、順に処理を行う（Ｓ２３２３）。
【００８９】
次に、Ｓ２３１５で特徴量記憶エリア３１ｎに記憶した処理対象横方向位置及び処理対象横方向位置の前後の度数の隣接平均を算出する（Ｓ２３２５）。隣接平均の方法は、処理対象横方向位置の度数と、その前後に隣接する横方向位置の度数を加算し、３で割る。小数点以下は切り捨て処理する。尚、検索開始及び検索終了位置の横方向位置においては、隣接する横方向位置が一つしかないため、それぞれ、検索開始又は検索終了横方向位置の度数と、その片側に隣接する横方向位置の度数を加算し、２で割って求める。このようにして算出した隣接平均値を、度数として特徴量記憶エリア３１ｎに記憶する（Ｓ２３２７）。次に、ｈの値に１を加算して（Ｓ２３２９）、次の横方向位置を処理対象とする。そして、ｈの値が横方向特徴量抽出領域記憶エリア３１ｋに記憶されている横方向特徴量抽出終了位置を上回ったか否かを判断し（Ｓ２３３１）、上回っていない場合は（Ｓ２３３１：ＮＯ）、Ｓ２３２５に戻り、ｈの値が横方向特徴量抽出終了位置に達するまで、処理対象横方向位置について隣接平均を算出して度数として記憶する処理を行なう（Ｓ２３２５〜Ｓ２３３１）。
【００９０】
ｈの値が横方向特徴量抽出終了位置を上回っていれば（Ｓ２３３１：ＹＥＳ）、全ての横方向位置について隣接平均が算出され、平滑処理が終了したので、平滑化実行回数ｃの値に１を加算する（Ｓ２３３３）。そして、平滑化処理の実行回数が、予め設定した回数に達したか否かを判断する（Ｓ２３３５）。まだ設定回数に達していなければ（Ｓ２３３５：ＮＯ）、再び処理対象横方向位置ｈを横方向特徴量抽出開始にして（Ｓ２３２３）、横方向特徴量抽出開始位置から横方向特徴量抽出終了位置まで隣接平均を算出して平滑化処理を行なう（Ｓ２３２５〜Ｓ２３３１）。設定回数だけ平滑化処理が実行されたら（Ｓ２３３５：ＹＥＳ）、図２７の特徴量抽出処理のルーチンに戻る。以上の処理により平滑化された度数が横方向の特徴量となり、図９に示すような滑らかな横方向ヒストグラム３１ｎ１が描かれる。
【００９１】
横方向の特徴量の抽出が終了すると（図２７、Ｓ２３１）、次に、同様の処理方法により、縦方向の特徴量を抽出する（Ｓ２３５）。但し、縦方向については、探索領域を絞り込んでいないので、二値画像の端から端まで黒の画素値を有する画素をカウントし、度数として記憶して特徴量を抽出していくようにしている。図２９に示すように、縦方向特徴量抽出処理では、二値画像に対し、縦方向特徴量抽出開始位置から縦方向特徴量抽出終了位置までの各行の黒の画素値を有する画素の数の合計を算出し、合計値の配列を縦方向ヒストグラムとして図９に示す特徴量記憶エリア３１ｎに記憶する。
【００９２】
具体的には、まず、処理対象縦方向位置ｖの値を０に設定して処理を開始する（Ｓ２３５１）。次に、二値画像の処理対象位置の行にある画素のうち、黒とされている画素の数をカウントする。本実施形態では、画素値が０を黒としているので、画素値０の画素をカウントする（Ｓ２３５３）。そして、そのカウント値を度数としてＲＡＭ３１の特徴量記憶エリア３１ｎに記憶する（Ｓ２３５５）。
【００９３】
次に、処理対象縦方向位置ｖの値に１を加算して（Ｓ２３５７）、右隣の行の処理に移行する。そして、ｖの値が縦方向の総画素数を超えたか否かを判断する（Ｓ２３５９）。縦方向の総画素数を超えていなければ（Ｓ２３５９：ＮＯ）、Ｓ２３５３に戻って、ｖの値が縦方向の総画素数を超えるまで、処理対象位置の行にある黒の画素数をカウントし、度数として記憶する処理を繰り返す（Ｓ２３５３〜Ｓ２３５９）。
【００９４】
ｖの値が縦方向の総画素数を超えた場合には（Ｓ２３５９：ＹＥＳ）、全ての行について度数が算出され、ヒストグラムが作成されたので、次に、算出された度数のノイズを減らすため、平滑化処理を行なう（Ｓ２３６１〜Ｓ２３７５）。
【００９５】
平滑化処理の方法は、図１７で説明した画素値度数平滑化処理と同様である。まず、平滑化処理の実行回数ｃを０に設定して処理を開始する（Ｓ２３６１）。平滑化を実施する回数は、１回から２０回の間で適宜定めることができる。次に、処理対象縦方向位置ｖの値を０に設定して、順に処理を行う（Ｓ２３６３）。
【００９６】
次に、Ｓ２３５５で特徴量記憶エリア３１ｎに記憶した処理対象縦方向位置及び処理対象縦方向位置の前後の度数の隣接平均を算出する（Ｓ２３６５）。隣接平均の方法は、処理対象縦方向位置の度数と、その前後に隣接する縦方向位置の度数を加算し、３で割る。小数点以下は切り捨て処理する。尚、最大、最小の縦方向位置においては、隣接する縦方向位置が一つしかないため、それぞれ、最大、最小縦方向位置の度数と、その片側に隣接する縦方向位置の度数を加算し、２で割って求める。このようにして算出した隣接平均値を、度数として特徴量記憶エリア３１ｎに記憶する（Ｓ２３６７）。次に、ｖの値に１を加算して（Ｓ２３６９）、次の縦方向位置を処理対象とする。そして、ｖの値が縦方向の総画素数を上回ったか否かを判断し（Ｓ２３７１）、上回っていない場合は（Ｓ２３７１：ＮＯ）、Ｓ２３６５に戻り、ｖの値が縦方向の総画素数に達するまで、処理対象縦方向位置について隣接平均を算出して度数として記憶する処理を行なう（Ｓ２３６５〜Ｓ２３７１）。
【００９７】
ｖの値が縦方向の総画素数を上回っていれば（Ｓ２３７１：ＹＥＳ）、全ての縦方向位置について隣接平均が算出され、平滑処理が終了したので、平滑化実行回数ｃの値に１を加算する（Ｓ２３７３）。そして、平滑化処理の実行回数が、予め設定した回数に達したか否かを判断する（Ｓ２３７５）。まだ設定回数に達していなければ（Ｓ２３７５：ＮＯ）、再び処理対象縦方向位置ｖを０にして（Ｓ２３６３）、縦方向の総画素数に達するまで隣接平均を算出して平滑化処理を行なう（Ｓ２３６５〜Ｓ２３７１）。設定回数だけ平滑化処理が実行されたら（Ｓ２３７５：ＹＥＳ）、図２７の特徴量抽出処理のルーチンに戻る。以上の処理により平滑化された度数が縦方向の特徴量となり、図９に示すような滑らかな、縦方向ヒストグラム３１ｎ２が描かれる。
【００９８】
特徴量抽出処理が終了すると、図１０のメインルーチンに戻り、以上の特徴量抽出処理（図１０、Ｓ２３）において抽出された横方向及び縦方向の特徴量に基づき、視線の方向を特定する視線位置判定処理を行なう（Ｓ２５）。図３０〜図３２は、視線位置判定処理の詳細を説明したものである。図３０は視線位置判定処理の流れを示すフローチャート、図３１は視線位置判定処理の中で行なわれる横方向視線位置検索処理のサブルーチンのフローチャート、図３２は視線位置判定処理の中で行なわれる縦方向視線位置検索処理のサブルーチンのフローチャートである。
【００９９】
図３０に示すように、視線位置判定処理では、まず、横方向視線位置検索処理、すなわち、特徴量抽出処理にて生成された横方向特徴量のヒストグラム内の最大値を検索し、最大値が得られる要素の座標を白黒濃淡画像における横方向の視線位置座標と判定する（Ｓ２５１）。次に、縦方向視線位置検索処理、すなわち、特徴量抽出処理にて生成された縦方向特徴量のヒストグラム内の最大値を検索し、最大値が得られる要素の座標を白黒濃淡画像における縦方向の視線位置座標と判定する（Ｓ２５３）。次に、以上で得られた横方向と縦方向の座標で特定される座標を視線位置の座標として視線の方向を決定する（Ｓ２５５）。
【０１００】
具体的には、横方向視線位置検索処理では、図３１に示すように、処理対象横方向位置ｈを０とし（Ｓ２５１１）、求める視線位置の横方向座標である視線横方向位置ｅｈを０とし（Ｓ２５１３）、横方向特徴量の処理時点の最大値を示す横方向特徴量最大値ｈｍａｘを０として（Ｓ２５１５）処理を開始する。
【０１０１】
次に、処理対象横方向位置の特徴量値をＲＡＭ３１の特徴量記憶エリア３１ｎから読み出す（Ｓ２５１７）。そして、この特徴量の値が横方向特徴量最大値ｈｍａｘよりも大きいか否かを判断する（Ｓ２５１９）。ｈの特徴量値が特徴量最大値よりも大きい場合には（Ｓ２５１９：ＹＥＳ）、そのｈの特徴量値を特徴量最大値としてｈｍａｘに代入し、ＲＡＭ３１の視線位置記憶エリア３１ｑに記憶する（Ｓ２５２１）。これによって、その時点の特徴量最大値がｈｍａｘに入っていることになる。そして、Ｓ２５２１の処理の結果、処理対象横方向位置ｈが現時点の特徴量最大値を有する横方向位置となっているから、ｈの値をｅｈに代入し、視線位置記憶エリア３１ｑに記憶する（Ｓ２５２３）。
【０１０２】
次に、ｈの値に１を加算し（Ｓ２５２５）、次の横方向位置を処理対象とする。そして、ｈの値が、横方向の総画素数を上回ったか否かを判断する（Ｓ２５２７）。上回っていない場合は（Ｓ２５２７：ＮＯ）、Ｓ２５１７に戻り、ｈの値が横方向の総画素数に達するまで、処理対象横方向位置の特徴量値を読み出し、その特徴量値とｈｍａｘに入っている前回の処理までの特徴量の最大値とを比較する処理を繰り返す（Ｓ２５１７〜Ｓ２５２７）。
【０１０３】
一方、ｈの特徴量値が特徴量最大値以下である場合は（Ｓ２５１９：ＮＯ）、特徴量最大値は変更せず、Ｓ２５２７に進み、ｈの値が、横方向の総画素数を上回ったか否かを判断する（Ｓ２５２７）。ｈの値が、横方向の総画素数を上回ったら（Ｓ２５２７：ＹＥＳ  ）、全ての横方向位置について特徴量値を読み出して比較することにより特徴量の最大値が算出され、その最大値を有する横方向位置が検索されたので、横方向視線位置検索処理を終了して図３０に示す視線位置判定処理のルーチンにリターンする。
【０１０４】
縦方向の視線位置が検出されると（図３０、Ｓ２５３）、次に、同様の処理方法により、縦方向の視線位置を検索する処理を行なう（Ｓ２５３）。具体的には、縦方向視線位置検索処理では、図３２に示すように、処理対象縦方向位置ｖを０とし（Ｓ２５３１）、求める視線位置の縦方向座標である視線縦方向位置ｅｖを０とし（Ｓ２５３３）、縦方向特徴量の処理時点の最大値を示す縦方向特徴量最大値ｖｍａｘを０として（Ｓ２５３５）処理を開始する。
【０１０５】
次に、処理対象縦方向位置の特徴量値をＲＡＭ３１の特徴量記憶エリア３１ｎから読み出す（Ｓ２５３７）。そして、この特徴量の値が縦方向特徴量最大値ｖｍａｘよりも大きいか否かを判断する（Ｓ２５３９）。ｖの特徴量値が特徴量最大値よりも大きい場合には（Ｓ２５３９：ＹＥＳ）、そのｖの特徴量値を特徴量最大値としてｖｍａｘに代入し、ＲＡＭ３１の視線位置記憶エリア３１ｑに記憶する（Ｓ２５４１）。これによって、その時点の特徴量最大値がｖｍａｘに入っていることになる。そして、Ｓ２５４１の処理の結果、処理対象縦方向位置ｖが現時点の特徴量最大値を有する縦方向位置となっているから、ｖの値をｅｖに代入し、視線位置記憶エリア３１ｑに記憶する（Ｓ２５４３）。
【０１０６】
次に、ｖの値に１を加算し（Ｓ２５４５）、次の縦方向位置を処理対象とする。そして、ｖの値が、縦方向の総画素数を上回ったか否かを判断する（Ｓ２５４７）。上回っていない場合は（Ｓ２５４５：ＮＯ）、Ｓ２５３７に戻り、ｖの値が縦方向の総画素数に達するまで、処理対象縦方向位置の特徴量値を読み出し、その特徴量値とｖｍａｘに入っている前回の処理までの特徴量の最大値とを比較する処理を繰り返す（Ｓ２５３７〜Ｓ２５４７）。
【０１０７】
一方、ｖの特徴量値が特徴量最大値以下である場合は（Ｓ２５３９：ＮＯ）、特徴量最大値は変更せず、Ｓ２５４７に進み、ｖの値が、縦方向の総画素数を上回ったか否かを判断する（Ｓ２５４７）。ｖの値が、縦方向の総画素数を上回ったら（Ｓ２５４７：ＹＥＳ）、全ての縦方向位置について特徴量値を読み出して比較することにより特徴量の最大値が算出され、その最大値を有する縦方向位置が検索されたので、縦方向視線位置検索処理を終了して図３０に示す視線位置判定処理のルーチンにリターンする。
【０１０８】
以上の処理により、横方向と縦方向の特徴量最大値を有する座標が特定されたので、視線位置記憶エリア３１ｑに記憶された視線横方向位置ｅｈと視線縦方向位置ｅｖからなる座標を視線位置として決定し、視線位置記憶エリア３１ｑに記憶する（Ｓ２５５）。以上のようにして、図１０に示すＳ１３〜Ｓ２５の処理により、撮影された白黒の右端画像についての視線位置が検出されたので、次回以降定期的に取得される画像についても同じ処理を繰り返し行ない、その時点の視線位置を検出する。
【０１０９】
以上説明したように、本実施の形態の視線方向検出装置１によれば、周知のビデオカメラとパソコンという小型で簡単な構成において、画像処理により、少ない演算量により高速に視線の方向を検出することができる。取得した画像データから黒い画素が集中している部分を縦方向と横方向の両方から検索し、その交点を視線の向いている位置と判定するので、複雑な演算をすることがなく、高速に処理を行なうことができる。更に、画素値を取得したり検索したりする領域をあらかじめフラクタル解析を行なうことによって絞り込んでいるため、さらに演算量を減らすことができ、パソコン２にかかる負荷を減らすことができる。この検索領域の絞り込みは、撮影開始時に１回行なわれ、さらに、その絞り込んだ領域を出発点として、連続して視線方向を検出する各回に絞り込みが行なわれるので、効率よく演算量の少ない処理が実現できる。
【０１１０】
尚、上記実施の形態においては、ビデオカメラ４が本発明の画像入力手段に相当し、図１０のＳ１１において探索領域決定処理を行なうＣＰＵ３０が本発明の探索領域決定手段として機能する。また、図１０のＳ２３において特徴量抽出処理を行なうＣＰＵ３０が本発明の特徴量抽出手段として機能する。さらに、図１０のＳ２５において視線位置判定処理を行なうＣＰＵ３０が本発明の視線位置判定手段として機能する。また、図１０のＳ２１において端部検出処理を行なうＣＰＵ３０が本発明の端部検出手段として機能する。
【０１１１】
【発明の効果】
上記説明から明らかなように、請求項１に記載の視線方向検出装置によれば、画像入力手段が目の部分の画像を取り込み、探索領域決定手段が画像入力手段により取り込まれた入力画像データをフラクタル解析処理して、目の位置情報を表す特徴量を抽出するための探索領域を決定する。そして、特徴量抽出手段が探索領域決定手段により決定された探索領域について特徴量を抽出し、視線位置判定手段が、特徴量抽出手段により抽出された特徴量に基づいて、視線の向いている方向を示す視線位置座標を判定する。従って、フラクタル解析処理により、入力画像データの複雑さの度合いを求め、複雑さの度合いが高い領域を探索領域とし、その探索領域について特徴量を取り出し、その特徴量に基づいて視線方向を検出するので、比較的少ない計算量で探索領域を絞り込んでから特徴量を計算することが可能になる。
【０１１２】
請求項２に記載の視線方向検出装置によれば、請求項１に記載の発明の効果に加え、端部検出手段が入力画像データをフラクタル解析処理して目の端部の領域を取り出し、特徴量抽出手段が、探索領域から端部検出手段により検出された目の端部の領域を除いた残余の領域について特徴量を抽出する。従って、更にフラクタル解析を行なって、目の端部の領域を特定し、探索領域を絞り込んでから特徴量を抽出するので、さらに特徴量を抽出する対象領域を絞り込むため、演算量を少なくし、処理を高速化、装置を小型化できる。
【０１１３】
請求項３に記載の視線方向検出装置によれば、請求項２に記載の発明の効果に加え、特徴量抽出手段が、探索領域から目の端部の領域を除いた残余の領域の、列方向について横方向ヒストグラムを生成して横方向特徴量として抽出し、同領域の行方向について縦方向ヒストグラムを生成して縦方向特徴量として抽出する。従って、特徴量はヒストグラムを生成することにより抽出されるので、周知の方法で高速に特徴量が抽出できる。
【０１１４】
請求項４に記載の視線方向検出装置によれば、請求項３に記載の発明の効果に加え、視線位置判定手段が、生成された横方向ヒストグラムの最大値を視線横方向位置とし、縦方向ヒストグラムの最大値を視線縦方向位置とし、視線横方向位置と視線縦方向位置との組み合わせを視線位置座標として判定する。従って、横方向のヒストグラムと縦方向のヒストグラムの交点を視線位置座標とするので、生成された特徴量から容易に視線位置を求めることができる。
【０１１５】
請求項５に記載の視線方向検出方法によれば、フラクタル解析処理により、入力画像データの複雑さの度合いを求め、視線方向を検出する特徴量を取り出す領域を探索領域として決定するので、比較的少ない計算量で探索領域を絞り込んでから特徴量を計算することが可能になる。
【０１１６】
請求項６に記載の視線方向検出方法によれば、請求項５に記載の発明の効果に加え、更にフラクタル解析を行なって、目の端部の領域を特定し、探索領域を絞り込んでから特徴量を抽出するので、さらに特徴量を抽出する対象領域を絞り込むため、演算量を少なくし、処理を高速化できる。
【０１１７】
請求項７に記載の視線方向検出方法によれば、請求項６に記載の発明の効果に加え、特徴量はヒストグラムを生成することにより抽出されるので、周知の方法で高速に特徴量が抽出できる。
【０１１８】
請求項８に記載の視線方向検出方法によれば、請求項７に記載の発明の効果に加え、横方向のヒストグラムと縦方向のヒストグラムの交点を視線位置座標とするので、生成された特徴量から容易に視線位置を求めることができる。
【０１１９】
請求項９に記載の視線方向検出プログラムによれば、請求項５乃至８のいずれかに記載の発明の効果を奏することができる。
【図面の簡単な説明】
【図１】視線方向検出装置１の構成を示す概念図である。
【図２】視線方向検出装置１の電気的構成を示すブロック図である。
【図３】ＲＡＭ３１の構成を示す模式図である。
【図４】画素値記憶エリア３１ａのデータ構造を示す模式図である。
【図５】画素値度数記憶エリア３１ｂのデータ構造を示す模式図である。
【図６】画素値度数累積値記憶エリア３１ｃのデータ構造を示す模式図である。
【図７】平滑処理記憶エリア３１ｄのデータ構造を示す模式図である。
【図８】フラクタル解析反応値記憶エリア３１ｇのデータ構造を示す模式図である。
【図９】特徴量記憶エリア３１ｎに記憶された特徴量のヒストグラムを示す図である。
【図１０】視線方向検出処理のメインのフローチャートである。
【図１１】画素値度数算出処理のフローチャートである。
【図１２】画像補正処理のフローチャートである。
【図１３】下限補正値決定処理のフローチャートである。
【図１４】上限補正値決定処理のフローチャートである。
【図１５】階調補正処理のフローチャートである。
【図１６】二値化閾値決定処理のフローチャートである。
【図１７】画素値度平滑化処理のフローチャートである。
【図１８】二値変換処理のフローチャートである。
【図１９】探索領域決定処理のフローチャートである。
【図２０】フラクタル解析反応値決定処理のフローチャートである。
【図２１】フラクタル解析反応値合計値処理のフローチャートである。
【図２２】探索開始位置決定処理のフローチャートである。
【図２３】探索終了位置決定処理のフローチャートである。
【図２４】端部検出処理のフローチャートである。
【図２５】横方向特徴量抽出開始位置決定処理のフローチャートである。
【図２６】横方向特徴量抽出終了位置決定処理のフローチャートである。
【図２７】特徴量抽出処理のフローチャートである。
【図２８】横方向特徴量抽出処理のフローチャートである。
【図２９】縦方向特徴量抽出処理のフローチャートである。
【図３０】視線位置判定処理のフローチャートである。
【図３１】横方向視線位置検索処理のフローチャートである。
【図３２】縦方向視線位置検索処理のフローチャートである。
【符号の説明】
１        視線方向検出装置
２        パソコン
４        ビデオカメラ
３０      ＣＰＵ
３１      ＲＡＭ
【図１】
2004280537.tif 000003
【図２】
2004280537.tif 000004
【図３】
2004280537.tif 000005
【図４】
2004280537.tif 000006
【図５】
2004280537.tif 000007
【図６】
2004280537.tif 000008
【図７】
2004280537.tif 000009
【図８】
2004280537.tif 000010
【図９】
2004280537.tif 000011
【図１０】
2004280537.tif 000012
【図１１】
2004280537.tif 000013
【図１２】
2004280537.tif 000014
【図１３】
2004280537.tif 000015
【図１４】
2004280537.tif 000016
【図１５】
2004280537.tif 000017
【図１６】
2004280537.tif 000018
【図１７】
2004280537.tif 000019
【図１８】
2004280537.tif 000020
【図１９】
2004280537.tif 000021
【図２０】
2004280537.tif 000022
【図２１】
2004280537.tif 000023
【図２２】
2004280537.tif 000024
【図２３】
2004280537.tif 000025
【図２４】
2004280537.tif 000026
【図２５】
2004280537.tif 000027
【図２６】
2004280537.tif 000028
【図２７】
2004280537.tif 000029
【図２８】
2004280537.tif 000030
【図２９】
2004280537.tif 000031
【図３０】
2004280537.tif 000032
【図３１】
2004280537.tif 000033
【図３２】
2004280537.tif 000034