以下に、本願に係る表示制御装置、表示制御方法および表示制御プログラムの実施の形態を図面に基づいて詳細に説明する。なお、この実施の形態により本願に係る表示制御装置、表示制御方法および表示制御プログラムが限定されるものではない。
[第一の実施の形態]
以下の実施の形態では、第一の実施の形態に係る表示制御装置の構成および処理の流れを順に説明し、最後に第一の実施の形態による効果を説明する。なお、以下の説明では、アノテーションを適用例とした表示制御について説明するが、アノテーションに限定されるものではない。
[第一の実施の形態に係る表示制御装置の構成]
まず、図1を用いて、第一の実施の形態に係る表示制御装置10について説明する。図1は、第一の実施の形態に係る表示制御装置10の全体構成を示す概略構成図である。図1に示すように、表示制御装置10は、入力部11、出力部12、制御部13および記憶部14を有する。
入力部11は、画面のスクロール指示やアクティブウィンドウの選択指示などを入力するものであり、キーボードやマウスなどを備えて構成される。また、出力部12は、画面を表示するものであり、ディスプレイやスピーカを備えて構成される。
記憶部14は、制御部13による各種処理に必要なデータおよびプログラムを格納するが、特に本発明に密接に関連するものとしては、アノテーションDB(Data Base)14aを有する。例えば、記憶部14は、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)等の半導体メモリ素子、又は、ハードディスク、光ディスク等の記憶装置などである。アノテーションDB14aは、例えば、アノテーション文章の表示対象となるウィンドウ毎に作成した複数のアノテーションルールを記憶する。
制御部13は、各種の処理手順などを規定したプログラムおよび所要データを格納するための内部メモリを有し、これらによって種々の処理を実行するが、特に本発明に密接に関連するものとしては検知部13aおよび表示制御部13bを有する。
検知部13aは、出力部12において表示される画面の変化を検知する。具体的には、検知部13aは、画面の変化の進行および画面の変化の停止を検知する。
表示制御部13bは、検知部13aによって検知された画面の変化に応じて、画面に表示されていた前フレームに対する計算結果を基に所定のマッチング結果情報を生成し、該所定のマッチング結果情報を次のフレームのマッチング条件の一部として、画面上から指定された画像テンプレートと類似した領域を探索し、該類似した領域にアイコンをオーバレイ表示する暫定更新処理、および、所定のマッチング結果情報よりも広いマッチング条件として、画像テンプレートと類似した領域を探索し、類似した領域に対応する位置にアイコンをオーバレイ表示する正規更新処理のいずれか一つまたは両方を実行する。
具体的には、表示制御部13bは、検知部13aによって検知された画面の変化に応じて、画面に表示されているアイコンの位置を基に所定の領域(例えば、アイコンの位置を基に垂直方向または水平方向にスウィープした帯状の矩形領域)を生成し、該矩形領域を探索範囲として、画面上から指定された画像テンプレートと類似した領域を探索し、該類似した領域にアイコンをオーバレイ表示する暫定更新処理、および、矩形領域よりも広い領域を探索範囲として、画像テンプレートと類似した領域を探索し、類似した領域に対応する位置にアイコンをオーバレイ表示する正規更新処理のいずれか一つまたは両方を実行する。
また、表示制御部13bは、検知部13aによって画面の変化の進行が検知された場合には、暫定更新を実行し、検知部13aによって画面の変化の停止が検知された場合には、正規更新を実行する。
例えば、表示制御部13bは、暫定更新処理において、前フレームを参考に簡易に計算する方法として、既に表示されているアイコンの位置をもとに、それを垂直方向もしくは水平方向にスウィープした帯状の矩形を生成する。この矩形領域を探索範囲として、画像テンプレートマッチングを計算する。これに対して、表示制御部13bは、正規更新において、通常通り他のフレームを参考にしないで、当該フレームの所定の矩形領域を探索範囲とした処理を行う。
また、表示制御部13bは、画面変化が進行している間は暫定更新を行い、静止状態に至った時点で正規更新を行う。その後は次の画面変化が開始するまで、その結果を表示したまま更新は行わず、再び画面変化が開始したら、その時点のアイコン位置から、暫定更新を開始する。
ここで、図2を用いて、暫定更新処理の概要について説明する。図2は、第一の実施の形態に係る表示制御装置において実行される暫定更新処理の概要について説明する図である。図2の例は、表示制御装置10の各機能を概念的にイメージしたものである。また、図2の例において、画像マッチングを行う処理と、画面上の変化を検知する処理と、アイコンをオーバレイ表示する処理がそれぞれ別のスレッドで実行される。
図2では、機能101と機能103は、画面上の変化を検知する機能ブロックに相当し、機能121〜124は、画像マッチングを行う機能ブロックに相当し、また、機能131は、アイコンをオーバレイ表示する処理を行う機能ブロックに相当する。
なお、画面上の変化を検知する処理は、画像マッチングの計算中も、画面上の変化が発生するために、変化の検知漏れのないよう短い周期で実行する必要がある。また、アイコンをオーバレイ表示する処理は、実装するGUI(Graphical User Interface)プラットフォームの仕様に依存する部分であり、例えばjava(登録商標)言語のswing GUIの場合、repaintメッセージのようにウィンドウマネージャへ再描画処理実行を依頼したあと、マネージャ側のスレッドで表示処理が行われる。
図2に示すように、機能101では、キャプチャ画像を取得し、画像データを機能122に出力する。また、機能103では、機能101からキャプチャ画像を受け取り、キャプチャ画像のウィンドウ枠全体の変化領域(窓枠矩形)を抽出し、変化領域である矩形座標値(x,y,w,h)を機能121に通知する。なお、ここでは、変化領域として現在処理対象としているアクティブウィンドウのフレーム境界を使用する。
機能121は、機能124から取得したマッチ位置140をもとに、垂直方向または水平方向にスウィープした帯状のスウィープ矩形を生成し、機能103から得た窓枠矩形とintersectionをとって、これを探索領域として機能122に通知する。
機能122は、機能121からテンプレート画像と探索領域を受け取り、さらに、実行時点での探索領域のキャプチャ画像を機能101から取得し、データが揃った時点で、探索領域によって現在のルールのテンプレート画像に関するマッチング計算を行い、マッチング結果を機能123に通知する。また、機能124は、対象のルールIDをキーとするハッシュマップに、当該マッチ位置座標のリストを登録する。
機能131は、機能123から再描画依頼のイベントを受け取り、実際に表示すべきアイコンの位置座標を機能124から取得して、オーバレイ表示を行う。なお、アノテーションにおけるアイコンは、常にデスクトップの最前面に位置し、全体を覆う透明ウィンドウ上に描画される。これにより、背後のウィンドウにオーバレイした表示が可能となる。
次に、図3を用いて、正規更新処理の概要について説明する。図3は、第一の実施の形態に係る表示制御装置において実行される正規更新処理の概要について説明する図である。図3の例は、表示制御装置10の各機能を概念的にイメージしたものである。また、図3の例において、画像マッチングを行う処理と、画面上の変化を検知する処理と、アイコンをオーバレイ表示する処理がそれぞれ別のスレッドで実行される。
図3では、機能101と機能102は、画面上の変化を検知する機能ブロックに相当し、機能111〜114は、画像マッチングを行う機能ブロックに相当し、また、機能131は、アイコンをオーバレイ表示する処理を行う機能ブロックに相当する。
図3に示すように、機能101では、キャプチャ画像を取得し、画像データを機能112に出力する。また、機能102では、機能101からキャプチャ画像を受け取り、キャプチャ画像のウィンドウ枠全体の変化領域(窓枠矩形)を抽出し、変化領域である矩形座標値(x,y,w,h)を機能111に通知する。なお、ここでは、変化領域として現在処理対象としているアクティブウィンドウのフレーム境界を使用する。
機能112は、機能111からテンプレート画像と探索領域を受け取り、さらに、実行時点での探索領域のキャプチャ画像を機能101から取得し、データが揃った時点で、探索領域によって現在のルールのテンプレート画像に関するマッチング計算を行い、マッチング結果を機能113および機能131に通知する。また、機能114は、対象のルールIDをキーとするハッシュマップに、当該マッチ位置座標のリストをキャッシュメモリに登録する。なお、機能114は、前述した機能124と同じものである。つまり、機能114および機能124は、直近に実行された暫定更新処理または正規更新処理において登録されたマッチ位置座標のリストをキャッシュしている。機能131は、機能113から再描画依頼のイベントを受け取り、実際に表示すべきアイコンの位置座標を機能114から取得して、オーバレイ表示を行う。
ここで、図4A、図4B、図4Cを用いて、広い面積が一気に変化するスクロールの例について説明する。スクロールするパネルの内部のビューを示したものが図4Bである。図4Bにおいて、点線が論理的・内部的に存在しているビューの矩形で、一点鎖線がスクロールパネル上で可視となっている範囲である。ここでのアノテーションルールの定義を簡易に示したものが図4Cである。
それぞれ、対象となるウィンドウのタイトル文字列、対象となるプロセスの起動パス、そしてテンプレート画像(ここでは画像イメージを示している)が指定されている。図4Cの例では、例えば、「notepad.exe」の「無題」という部分文字列を含むタイトルのウィンドウに対して、「A」などのイメージと同じ座標位置を探索し、そこにアイコンを表示するアノテーションルールの定義が示されている。なお、アイコンは説明のため、マッチした位置にテンプレートを重ねた時の矩形中心に表示するものとする。
現在、図4Aの状態でアノテーションを表示すると、可視範囲の「A」の位置2か所にルール1の生成したアイコンが表示される。「B」、「C」についても同様である。ビューを上にスクロールすると、可視範囲にはいままで見えていなかった領域がスクロールインしてくる。その結果、下方に隠れていた「A」が見えるようになる。
そして、暫定更新は、図4Bにおいて二点鎖線で示した矩形、すなわち前フレームのマッチ位置2か所を垂直方向にスウィープさせ、可視範囲とのintersectionをとった矩形を、次のフレームのルール1に対する探索範囲とする更新方法である。この方法は、可視範囲全体を探索範囲とする正規更新よりも計算量が少ないため、速度が速い。
そのかわりに、結果の正確さを犠牲にしている。すなわち、下方に隠れていた「A」1013がスクロールインしても探索範囲外であるため、その存在を見落としてしまうことになる。このため、スクロールを継続している間、すなわち暫定更新の間は、「A」1013に対するアイコンは表示されないまま、もとから表示されていた2つの「A」1011、1012が上方に移動していく。
Webブラウザの画面のイメージ上において、見落としの可能性が生じる領域を図5に示す。図5に示すように、スクロール開始時点のWebブラウザの画面について、垂直スクロールした場合に、新たにスクロールインした可視領域のうち、暫定的なマッチ対象領域に含まれない領域は、新たなアイコン出現を見逃す可能性のある領域となり、そのアイコン表示を漏らしてしまうことになる。
Webブラウザでは、スクロールパネルがウィンドウの大部分を占めるが、探索範囲を絞ることで、大幅に画像マッチングの計算量を抑えられる。実際は、アイコンの存在位置が複数で幅広く分散してしまう場合、この効果は少なくなる。また、水平方向のスクロールやスクロール以外の画面変化に対しては効果がない。しかしながら、ここではWebブラウザのスクロールをしながら、イントラサイトやイントラシステム画面のなかから必要な情報をユーザが探す場合に、アノテーションのオーバレイ表示が重要である。スクロールで移動中にもアノテーションが一体的に追随することが使用感として大きな違いをもたらすからである。
このようなシーンでは、垂直方向にウィンドウの高さの半分以上の大幅な移動も想定に入れる必要があるため、ウィンドウ枠いっぱいの高さに探索範囲を拡大している。カメラ画像において、テンプレート画像と同じ幅、高さのマージンを加えた探索範囲を使用するなどの方法が一般に用いられるが、本手法は広い意味でそのバリエーションである。ただし、PCの画面上で頻繁に発生し、かつ暫定更新が重要な変化シーンの特徴を利用している点で異なっている。
暫定更新はある意味で正確性を犠牲にすることで計算量を抑える考え方である。ここでの方法について、この点をさらに説明する。図4Bの事例について、さらにスクロールを続けると、もとからアイコンが表示されていた「A」1011、1012はスクロールアウトし、アイコンが消える。動作を止めずに引き続きスクロール方向を逆にして、再びこれら「A」1011、1012をスクロールインさせても、既にルール1のアイコンが0個となり、次のフレームの探索範囲が空の矩形となってしまっているために、画像マッチング自体がスキップされ計算されない。つまり、一旦アイコンが消えてしまうと、暫定更新を続けたままであっても、「A」1013がスクロールインしたときと同じく、その存在を見落としてしまうことになる。
これは、探索範囲が空にならないまでも狭まる場合にも同様のことがいえる。つまり動作を止めずに、「A」1011と「A」1012のあいだでスクロール方向を反転すると、一旦スクロールアウトして見えなくなった「A」1011が再びスクロールインしたとしても、それに対してアイコンが表示されることはない。ただし、「A」1011が図の位置ではなく、1012の真上、すなわち垂直方向のスウィープ範囲内の位置にあれば、再びアイコンが表示される。
ちなみに、「C」に着目すると、「C」1016と「C」1018のアイコンが表示されている状態でスクロールし、「C」1017がスクロールインしたとする。この場合、探索範囲は、「C」1016と「C」1018をスウィープした矩形を包含する最小矩形になるため、「C」1017は発見され、アイコンが表示されることになる。このように、ここまでの説明では同種のマッチ位置からの探索範囲をunion演算して、1つの矩形としているが、これを行わずに、複数の探索範囲にわけたまま複数回画像マッチング処理を行うことも考えられる。また、どちらの方法をとるかを、マッチ位置のばらつきによって動的に切り替えることも考えられる。いずれも、暫定更新の内部処理のアルゴリズムのバリエーションであり、本発明の構成上において有効な方法である。
以上から明らかなように、暫定更新は具体的な探索範囲の推定方法を指すのではなく、そのような推定方法にもとづく、正確性を欠くが速度が速い更新処理を過渡的に用いる考え方を指す。特に、正確性について何を犠牲にするかが重要であり、本来アイコンが存在するべき位置にアイコンが表示されない、という偽陰性(False Negative)を許容する点が重要である。逆に言うと、本来アイコンが存在しない位置に誤ってアイコンが表示される、という偽陽性(False Positive)は許容しない。これにより、暫定更新を繰り返しても、本来表示されるべきでないアイコンが増大していくことはなく、本来表示されるべきアイコンが誤って消えていく方向にずれていく。したがって、正確性を犠牲にするといっても、最悪でもアイコンが全て消えてしまうのみであり、処理系への負荷が増大することはない。
本発明の構成では、暫定更新で結果の正確さが保証されなくても、適宜に正規更新を実施し、本来存在するべきアイコンを厳密に判定・発見させる点が特徴である。しかし、正規更新は計算量が多いため、スクロール途中ではなく操作を終えて画面の変化がおさまってから実行することが望ましい。画面の変化の開始と終了をプログラムにより行うため、検知部13aの内部処理として、画面変化検知手続きを実行する。
[表示制御装置の処理の一例]
次に、図6および図7を用いて、第一の実施の形態に係る表示制御装置10の処理について説明する。図6は、第一の実施の形態に係る表示制御装置における画面変化検知処理の流れを説明する図である。図7は、第一の実施の形態に係る表示制御装置における画面更新処理の流れを説明する図である。
まず、図6を用いて、表示制御装置10における画面変化検知処理の流れを説明する。なお、この処理は独立したスレッドで実行され、アノテーションシステムを実行するプログラムが終了するまでループする。
図6に示すように、表示制御装置10の検知部13aは、アノテーションを実行するプログラムが終了したか判定する(ステップS101)。この結果、アノテーションを実行するプログラムが終了した場合には(ステップS101肯定)、画面変化検知処理を終了する。また、検知部13aは、アノテーションを実行するプログラムが終了していない場合には(ステップS101否定)、画面をキャプチャし(ステップS102)、前回の内容との差分をとる(ステップS103)。
具体的には、検知部13aは、画面キャプチャと前回の内容とでビットパターンの比較を行い、差分のビットマップをとる。つまりピクセルごとに値を比較し同じであれば「0」、異なっていれば「1」を格納する。この処理中に1回でも「1」が出現した場合には、差分があるということになる。そして、「差分あり」のときは、その時刻を記憶する。
続いて、検知部13aは、変化状態のフラグが現在「変化中」であるか否かを判定する(ステップS104)。この結果、検知部13aは、変化状態のフラグが現在「変化中」である場合(ステップS104肯定)、「差分あり」であるかを判定する(ステップS105)。そして、検知部13aは、「差分あり」であると判定した場合には(ステップS105肯定)、ステップS101に戻る。
また、検知部13aは、「差分あり」でないと判定した場合には(ステップS105否定)、前回の差分ありから監視期間経過したかを判定する(ステップS106)。例えば、検知部13aは、前回の「差分あり」のときの時刻と今現在の時刻の差を計算し、監視期間経過したかどうかを判定する。そして、監視期間はあらかじめ設定された時間で、例えば、短めの設定では1000msec、長めの設定では3000msecなどである。
この結果、検知部13aは、前回の「差分あり」から監視期間経過していないと判定した場合には(ステップS106否定)、ステップS101に戻る。一方、検知部13aは、前回の差分ありから監視期間経過したと判定した場合には(ステップS106肯定)、画面の状態として「変化終了」を表示制御部13bに通知し(ステップS107)、ステップS101に戻る。
また、ステップS104の処理に戻って、検知部13aは、変化状態のフラグが現在「変化中」でないと判定した場合(ステップS104否定)、「差分あり」であるかを判定する(ステップS108)。そして、検知部13aは、「差分あり」でないと判定した場合には(ステップS108否定)、ステップS101に戻る。また、検知部13aは、「差分あり」であると判定した場合には(ステップS108肯定)、画面の状態として「変化開始」を表示制御部13bに通知し(ステップS109)、ステップS101に戻る。
次に、図7を用いて、表示制御装置10における画面更新処理の流れを説明する。なお、この処理は独立したスレッドで実行され、アノテーションシステムを実行するプログラムが終了するまでループする。
図7に示すように、表示制御装置10の表示制御部13bは、アノテーションを実行するプログラムが終了したか判定する(ステップS201)。この結果、アノテーションを実行するプログラムが終了した場合には(ステップS201肯定)、画面更新処理を終了する。また、表示制御部13bは、アノテーションを実行するプログラムが終了していない場合には(ステップS201否定)、画面変化状態を取得し(ステップS202)、画面変化状態が「変化終了」直後であるか否かを判定する(ステップS203)。
また、表示制御部13bは、「変化終了」直後であると判定した場合には(ステップS203肯定)、未評価ルールがあるか判定する(ステップS204)。この結果、表示制御部13bは、未評価ルールがないと判定した場合には(ステップS204否定)、ステップS201に戻る。
また、表示制御部13bは、未評価ルールがあると判定した場合には(ステップS204肯定)、探索矩形(変化領域)を取得する(ステップS205)。変化領域は、x,y,w,hからなる矩形座標値である。ステップS205の処理においては、変化領域として常に現在処理対象としているアクティブウィンドウのフレーム境界を使用する。
そして、表示制御部13bは、画像マッチングを行う(ステップS206)。画像マッチングでは、探索領域によって現在のルールのテンプレート画像に関するマッチング計算を行う。そして、対象のルールIDをキーとするハッシュマップに、マッチ座標のリストをマッチ位置キャッシュに上書きする(ステップS207)。その後、ステップS204に戻り、未評価ルールがなくなるまで、ステップS204〜S207の処理を繰り返す。
ステップS203の処理に戻って、表示制御部13bは、「変化終了」直後でないと判定した場合には(ステップS203否定)、画面変化状態が「変化開始」または変化途中であるか否かを判定する(ステップS208)。この結果、画面変化状態が「変化開始」または変化途中でないと判定した場合には(ステップS208否定)、ステップS201に戻る。
また、表示制御部13bは、画面変化状態が「変化開始」または変化途中であると判定した場合には(ステップS208肯定)、未評価ルールがあるか判定する(ステップS209)。この結果、表示制御部13bは、未評価ルールがないと判定した場合には(ステップS209否定)、ステップS201に戻る。
また、表示制御部13bは、未評価ルールがあると判定した場合には(ステップS209肯定)、探索矩形(変化領域)を取得して(ステップS210)、前回マッチ座標をもとにスウィープし(ステップS211)、画像マッチングを実行する(ステップS212)。具体的には、表示制御部13bは、前回マッチ座標をもとにスウィープ矩形を生成し、窓枠矩形とintersectionをとって、これを探索領域として画像マッチングを実行する。
そして、表示制御部13bは、マッチ座標をマッチ位置キャッシュに上書きする(ステップS213)。その後、ステップS209に戻り、未評価ルールがなくなるまで、ステップS209〜S213の処理を繰り返す。
ここで、上記した矩形座標値について説明する。矩形座標値とは、矩形の左上座標(x,y)と矩形のサイズ(w,h)を組み合わせた値(x,y,w,h)を指す。また、矩形に対するunion演算の一例を図8に示し、intersection演算の一例を図9に示す。なお、図8および図9では、平面上に何も領域を占めない、空の範囲を表現するため、仮想的な矩形座標の値を定めている。ここでは(0,0,-1,-1)をとる場合に、空の範囲を表現しているものとし、unionやintersectionの演算が内部に含まれる点集合の演算に対応するよう拡張している。
図8の一例を用いて説明すると、union演算において、例えば、Aの矩形座標値がRa(0,0,-1,-1)、Bの矩形座標値がRb(30,30,30,30)の場合には、Cの矩形座標値がRc(30,30,30,30)となる。また、図9の一例を用いて説明すると、intersection演算において、例えば、Aの矩形座標値がRa(0,0,-1,-1)、Bの矩形座標値がRb(30,30,30,30)の場合には、Cの矩形座標値がRc(0,0,-1,-1)となる。
[第一の実施の形態の効果]
このように、第一の実施の形態に係る表示制御装置10は、画面の変化を検知し、検知された画面の変化に応じて、画面に表示されているアイコンの位置を基に垂直方向または水平方向にスウィープした帯状の矩形領域を生成し、該矩形領域を探索範囲として、画面上から指定された画像テンプレートと類似した領域を探索し、該類似した領域にアイコンをオーバレイ表示する暫定更新処理、および、暫定更新処理の探索範囲よりも広い領域を探索範囲として、画像テンプレートと類似した領域を探索し、類似した領域に対応する位置にアイコンをオーバレイ表示する正規更新処理のいずれか一つまたは両方を実行する。これにより、処理負荷を低減して処理時間を短くし、迅速に画面の更新処理を行うことが可能である。
また、表示制御装置10は、画面の変化の進行および画面の変化の停止を検知し、画面の変化の進行が検知された場合には、暫定更新処理を実行し、画面の変化の停止が検知された場合には、正規更新処理を実行する。
このため、表示制御装置10では、画像テンプレートマッチングなどを利用して動画像に対しリアルタイムに画像解釈を施し、その結果をオーバレイ表示するなどによりユーザが視覚的に解釈内容を理解できるとともに、動画像内容の変化や動きと同期して解釈内容を更新表示するなどにより一体的に解釈内容を認知することができる。
[第二の実施の形態]
上記した第一の実施の形態では、画面の変化の進行が検知された場合には、暫定更新を実行し、画面の変化の停止が検知された場合には、正規更新を実行する場合を説明したが、これに限定されるものではなく、正規更新と暫定更新を並行して実行してもよい。以下では、第二の実施の形態として、正規更新と暫定更新を並行して実行する場合について説明する。なお、第一の実施の形態と共通する構成・処理については説明を省略する。
第一の実施の形態では、画面変化が終息したかどうかを判定する監視期間や、その結果に応じた更新処理の切り替えが必要であった。第二の実施の形態は、これらの要素を不要とする構成である。つまり、第一の実施の形態において、画面変化が終息したかどうかを判定する方法として、例えば、停止判定にはフレーム間差分がない状態が所定の期間続くかどうかを観測する方法が一般的に考えられるが、観測期間の設定は長すぎても短すぎてもアノテーションの使用感を損なってしまう場合がある。最適な設定は自明ではなく、ユーザの好みやPC性能など個別的な条件や、操作場面ごとのユーザの意図や対象GUIの振る舞いに依存するため、固定的な値で全てをカバーすることは本来的に難しい。
また、ユーザが一連のスクロール操作を続けて行っているつもりでマウスを動かしても、途中で一瞬ドラッグ位置が止まる場合はよくある。このような瞬間、設定された観測期間より少し長い期間止まっていると、ユーザの本来の操作意図に反して正規更新が開始されてしまう。一旦正規更新が開始されると、完全に計算が終わるまで、次の処理を行えない。つまり、ユーザがスクロールを続けて行っているつもりでも、ドラッグ位置の停止期間が少し長いと、続いての移動再開に対し暫定更新が行われない。ユーザからは、GUIの表示がスクロールで移動しているにもかかわらず、アノテーションの表示がフリーズしたように、アイコンが途中の位置で取り残されたままとなり、オーバレイ表示が画面とシンクロして見えない。この期間が続いたのち、正規更新が終了し、暫定更新がその後再開されると、突然画面のスクロール位置にあったオーバレイ表示になり、移動が再開されて見える。すなわち、一連のスクロール操作において、アイコンが途中でひっかかったような見え方になる。
また、ユーザがスクロールを停止させる意図で操作を止めたとしても、観測期間が経過しなければ、画面変化が停止したとは判定されない。すなわちスクロール停止後、さらに期間をおいてからはじめて正規更新の計算が開始されるため、ただでさえ処理時間の長い正規更新の結果反映が、無為に遅くなる。一方、本来の暫定更新の考え方では、スクロールの途中でアイコンの暫定更新による表示の乱れが生じても、スクロール停止後に正規更新を行うことで乱れを解消することを前提としている。
このため、ユーザがスクロール操作を停止させた瞬間からできるだけ早く正規更新の画像マッチングを完了し、乱れの無い表示に戻すことが望ましい。しかしながら、上記のように正規更新の結果反映の遅れが大きいと、ユーザがスクロール操作を停止したつもりでも、しばらくは本来のオーバレイ表示の状態にならず待たされることとなり、ユーザの操作意図に対して鈍感な反応になってしまう。これらの事情により、第一の実施の形態では、ユーザの操作に対してスムーズにアイコン表示が追従できず、不自然な操作感となってしまう場合があった。第二の実施の形態では、上記を解消する目的で、正規更新と暫定更新を並行実行するものである。
この第二の実施の形態は、第一の実施の形態のように2つの更新方法を切り替える必要がないため、観測期間の最適設定の問題等が存在しない。第二の実施の形態では、暫定更新が直近のフレームの結果をもとに計算を行うため、例えば、アイコンがスクロールアウトして適用されなくなったルールを、以降の暫定更新の対象から除外できる。
ちなみに、第二の実施の形態の場合には、暫定更新の簡易計算方法を拡張しやすい。つまり、ここまでの説明における暫定更新は、垂直もしくは水平のスクロールを想定した簡易計算を採用しているが、実際は様々な拡張が考えられる。例えば、前フレーム数個分の移動方向や移動距離の推移により、スウィープの方向や長さを適応させることで、さらに探索範囲を抑えることができる。
これに対して、従来の構成は、もっぱら正規更新から結果を参照しなければならないため、拡張の自由度がなく高度化も期待できなかった。また、処理時間の高速化の観点でも、正規更新は計算時間が長い上に、この構成上では非同期かつ不定周期でループ実行するため、暫定更新とタイミングがあわず無駄な待ちあわせ時間が生じ遅くなってしまう。
まず、第二の実施の形態に係る表示制御装置10の構成は、前述した図1と同様であるため省略するが、表示制御部13bの処理内容が異なる。表示制御部13bは、検知部13aによって検知された画面の変化が検知されると、暫定更新処理および正規更新処理を並行して実行する。また、表示制御部13bは、暫定更新処理では、実行済みである前回の暫定更新処理においてアイコンが表示される位置と、正規更新処理においてアイコンが表示された位置とを基に、次回の暫定更新処理において所定の領域を生成する。
ここで、図10を用いて、第二の実施の形態に係る表示制御装置10において実行される暫定更新処理および正規更新処理を並行して実行する画面更新処理の概要を説明する。図10は、第二の実施の形態に係る表示制御装置における正規更新処理の流れを説明する図である。図10に示すように、第二の実施の形態に係る表示制御装置10では、暫定更新処理および正規更新処理を並行して行っており、前述の図2と図3を組み合わせたような構成となっている。ここで、左右のブロック群が接続している部分が、機能240のマッチ位置受け渡しである。図3に相当する図10左半分は、機能231の表示機能に処理を依頼しないかわりに、図2に相当する図10の右半分に結果を受け渡す。
本発明の特徴的な点は、図10における240のマッチ位置受け渡しに加えて、図10における241のマッチ位置受け渡しを行う点である。241のマッチ位置受け渡しを行う場合と行わない場合の効果の違いについて説明する。図4Bの事例における時間軸上の変化を図11に示す。図11の例では、時刻10301で検知した変化に対して、ルール1について計算された結果が、時刻10302で出力されている。
このとき、図10の240によって暫定更新処理にマッチ位置が渡され、時刻10303、時刻10304以降の更新が行われ最終的な表示に反映される。暫定更新の画像マッチの探索範囲は、二点鎖線に示した通りになる。ここで時刻10304の探索範囲に注目すると、241の処理がない場合は常に正規更新の結果を参照することとなる。241のマッチ位置受け渡しがある場合は、240を参照するのは正規更新の結果が得られた後の1回だけで、それが取り込まれた後は241のマッチ位置受け渡しで自身の前フレームの結果のみを参照する。このため時刻10304で「A」1011の一部がスクロールアウトし暫定更新結果に「A」1012のみとなったことで探索範囲が二点鎖線に示したように狭められる。以降の暫定更新ではこの探索範囲が使用される。
時刻10305の時点では、実際の画面に「A」1013がスクロールインするが、暫定更新にはその存在が発見できず、時刻10306のように依然として狭い探索範囲が使用される。時刻10307で正規更新が「A」1013の存在を発見すると、その直後に240のフローで暫定更新にそのマッチ位置が取り込まれ、時刻10308では「A」1012と「A」1013の両方を囲む探索範囲が算出される。それ以降の暫定更新ではしばらくこの探索範囲が使用されるが、前記と同様、「A」1012がスクロールアウトすると、時刻10309のように探索範囲が狭められる。
時刻10310の時点では、正規更新が「A」1012のスクロールアウトした状態をキャプチャし、画像マッチングを計算する。この結果は、時刻10311の時点で出力され、暫定更新に取り込まれるが、時刻10312の時点での暫定更新のマッチ結果は同じであるため、時刻10312以降では特に探索範囲の変化はおこらない。なお、時刻10309の時点ですぐ正規更新の計算が開始されず、時刻10310の時点まで遅れる理由は、正規更新の画像マッチング計算がt1の長い計算時間を要するためであると同時に、この図ではルール1(「A」についてのアノテーション表示のルール)のみをあらわしており、実際にはルール2、ルール3についても計算が行われたあと、ルール1に順番がまわってくるのが、時刻10307の時点からさらに長時間たってからである点に由来する。
実際の利用シーンではさらにルール数が増えるとともに、各ルールでの計算時間のばらつきがあるため、さらに非同期でのタイミングずれが多い状況となる。このため、暫定更新の自身の結果でのフィードバック計算が重要となる。また、このような振る舞いは、後で導入する変化領域に対する差分計算や、暫定更新における探索範囲推定アルゴリズムを拡張する場合は、前提的な構成として必要である。
次に、図12および図13を用いて、第二の実施の形態に係る表示制御装置10による処理を説明する。図12は、第二の実施の形態に係る表示制御装置における正規更新処理の流れを説明する図である。図13は、第二の実施の形態に係る表示制御装置における暫定更新処理の流れを説明する図である。
図12に示すように、第二の実施の形態に係る表示制御装置10の表示制御部13bは、アノテーションを実行するプログラムが終了したか判定する(ステップS301)。この結果、アノテーションを実行するプログラムが終了した場合には(ステップS301肯定)、正規更新処理を終了する。また、表示制御部33bは、アノテーションを実行するプログラムが終了していない場合には(ステップS301否定)、画面変化状態を取得し(ステップS302)、画面変化状態が「変化中」であるか否かを判定する(ステップS303)。この結果、表示制御部13bは、「変化中」でないと判定した場合には(ステップS303否定)、ステップS301に戻る。ここで、第二の実施の形態では、第一の実施の形態のように変化の開始や終了を識別せずに、単に「変化中」であるかどうかだけを判断する。
また、表示制御部13bは、「変化中」であると判定した場合には(ステップS303肯定)、未評価ルールがあるか判定する(ステップS304)。この結果、表示制御部13bは、未評価ルールがないと判定した場合には(ステップS304否定)、ステップS301に戻る。
また、表示制御部13bは、未評価ルールがあると判定した場合には(ステップS304肯定)、探索矩形(変化領域)を取得する(ステップS305)。変化領域は、x,y,w,hからなる矩形座標値である。ステップS305の処理においては、変化領域として常に現在処理対象としているアクティブウィンドウのフレーム境界を使用する。
そして、表示制御部13bは、画像マッチングを行う(ステップS306)。画像マッチングでは、探索領域によって現在のルールのテンプレート画像に関するマッチング計算を行う。そして、対象のルールIDをキーとするハッシュマップに、マッチ座標のリストをマッチ位置キャッシュに上書きする(ステップS307)。その後、ステップS304に戻り、未評価ルールがなくなるまで、ステップS304〜S307の処理を繰り返す。
次に、図13に示すように、第二の実施の形態に係る表示制御装置10の表示制御部13bは、アノテーションを実行するプログラムが終了したか判定する(ステップS401)。この結果、アノテーションを実行するプログラムが終了した場合には(ステップS401肯定)、暫定更新処理を終了する。また、表示制御部13bは、アノテーションを実行するプログラムが終了していない場合には(ステップS401否定)、画面変化状態を取得し(ステップS402)、画面変化状態が「変化中」であるか否かを判定する(ステップS403)。この結果、画面変化状態が「変化中」でないと判定した場合には(ステップS403否定)、ステップS401に戻る。
また、表示制御部13bは、「変化中」であると判定した場合には(ステップS403肯定)、未評価ルールがあるか判定する(ステップS404)。この結果、表示制御部13bは、未評価ルールがないと判定した場合には(ステップS404否定)、ステップS401に戻る。
また、表示制御部13bは、未評価ルールがあると判定した場合には(ステップS404肯定)、探索矩形(変化領域)を取得して(ステップS405)、前回マッチ座標をもとにスウィープし(ステップS406)、画像マッチングを実行する(ステップS407)。具体的には、表示制御部13bは、前回マッチ座標をもとにスウィープ矩形を生成し、窓枠矩形とintersectionをとって、これを探索領域として画像マッチングを実行する。
そして、表示制御部13bは、マッチ座標をマッチ位置キャッシュに上書きする(ステップS408)。その後、ステップS404に戻り、未評価ルールがなくなるまで、ステップS404〜S408の処理を繰り返す。
このように、第二の実施の形態に係る表示制御装置10では、画面の変化が検知されると、暫定更新処理および正規更新処理を並行して実行するので、ユーザの操作に対してスムーズにアイコン表示を追従させ、ユーザに対して自然な操作感を実現することが可能である。
[第三の実施の形態]
第二の実施の形態では、画面変化の差分である変化領域の大きさに関係なく、常にウィンドウ枠全体を処理対象としていたがこれに限定されるものではなく、変化領域の位置や大きさに応じて、無駄な計算を省き、同じ結果をより少ない計算量で得るようにしてもよい。
第三の実施の形態は、図14の構成で画面画像の変化差分についてのみ、漸次的に更新処理を行うものである。以下の第三の実施の形態の説明では、第一の実施の形態または第二の実施の形態と共通する構成・処理については説明を省略する。なお、変化差分の更新を行う一般的な処理の構成は、図14の丸で示した矢印がない構成となるが、第三の実施の形態では当該接続線で示したデータの授受が行われる点で、従来の構成とは異なっている。この構成では、正規更新の処理が終了したとき、その結果を暫定更新のループ処理に渡すとともに、その結果のもととなった更新領域の矩形データを、暫定更新の更新領域に加える操作を行っている。これにより、非同期で結果がわたされても、暫定更新で変化差分とともに処理対象に含まれるため、最終的な表示内容に漏れることなく確実に反映される、という違いがある。
まず、第三の実施の形態に係る表示制御装置10の構成は、前述した図1と同様であるため省略するが、表示制御部13bの処理内容が異なる。表示制御部13bは、第二の実施の形態と同様に、正規更新処理と暫定更新処理を並行して実行するとともに、画面に表示されるフレーム間画像の差分領域を探索領域として、暫定更新処理および正規更新処理を漸次実行する。具体的には、表示制御部13bは、正規更新処理において、画面に表示されるフレーム間画像の差分領域を抽出し、該差分領域を探索領域として、画面上から指定された画像テンプレートと類似した領域を探索し、該類似した領域にアイコンをオーバレイ表示し、暫定更新処理において、差分領域を抽出するとともに、該抽出した差分領域に正規更新処理において抽出された差分領域を追加し、該追加した差分領域を探索領域として、画面上から指定された画像テンプレートと類似した領域を探索し、該類似した領域にアイコンをオーバレイ表示する。
第三の実施の形態の特徴は、正規更新と暫定更新のそれぞれについて変化領域の管理を行っている点である。図10と図14の違いは、機能302と機能303がそれぞれ、前後フレーム間の差分抽出を行って、変化領域の矩形を取得しているところである。これにより、ウィンドウ枠全体よりも狭い面積を対象とした画像マッチング計算に抑えることができる。
しかしながら、第三の実施の形態では最終的な表示内容に反映される結果が、スレッド間の連携の実行タイミング依存で異なってくる。すなわち、図14においては、311〜314の機能ブロックグループと322〜324の機能ブロックグループがさらに別々のスレッドになるが、311〜314の画像マッチング処理が1サイクルを終了する間に、322〜324の画像マッチング処理は複数回サイクルを完了している場合が多い。また、実行タイミングやフレームごとの変化領域の極端な面積変化によっては、311〜314の画像マッチング処理の1サイクルの間に322〜324の画像マッチング処理の複数サイクルが実行される実行速度の逆転も、稀に発生する可能性がある。
この影響を排除し、第二の実施の形態と同じ結果を得るためには、各スレッドの間で非同期に受け渡すデータの管理に工夫が必要であり、単純にそのままのデータを受け渡すと、最終的な表示への反映漏れが生じる場合がある。
例えば、図15を用いて、図4Bと同種のエディタ上に「a」の文字列が表示されており(10401)、この右側に文字を追加入力していく場合を考える。当該エディタはウィンドウタイトルとして編集中のファイル名を表示しているが、内容が編集されるとファイルから内容が変更された意味の「*」の文字がタイトルに追加されるものとする。10402で「b」が入力されウィンドウタイトルが変更されると、2箇所の画像変化が発生する。
これに対する更新範囲は、一点鎖線に示す矩形領域10411となる。この矩形領域10411を計算対象として、正規更新と暫定更新が同時に開始される。10403で暫定更新の結果が得られるが、これはルール2の探索範囲が、点線の矩形10431に絞り込まれているため、早く計算が終了している。一方、正規更新は矩形10421のように広い範囲に広がるため、計算に時間がかかる。その間に、「c」が入力されたものとする(10404の時点)。
その暫定更新は、さらに探索領域が小さくなるため(10412)、計算は短時間に完了する(10405)。変化領域10412に対する更新領域10432は、正規更新結果のキャッシュにルール4の「c」に相当するマッチ位置がまだ存在しないため、探索範囲が設定されず、画像マッチングそのものが行われないために見逃しが生じてしまう。
一方、10406でようやく正規更新の結果として10421の変化矩形中のマッチ位置が生成されても、これに対応する暫定更新の更新領域10431は既に表示処理が終了している。この場合は、10401の時点から「a」のアイコンが表示されているため、表示内容にたまたま不具合は生じない。しかし、ルール4「c」については、不具合が解消しない。10407の時点の10413の変化領域に対し、10408の時点で暫定更新結果が出力されると、変化矩形10433はさらに右側に外れる。10409の時点で正規更新結果が出力されても、マッチ位置10422は暫定更新を介しての表示への反映機会を逸してしまっている。正規更新の結果のキャッシュにマッチ位置が存在しても、これを含む変化領域が更新されない限り、これに相当するアイコンが生成されず、オーバレイ表示に現れない。
以上のように、実行時のタイミングや表示更新内容に依存して、表示に漏れや見逃しが発生してしまう。これを防止するための通常の考え方としては、更新対象となったマッチ位置を管理しながら、正規更新の結果から暫定更新の結果へのマージを行うことが考えられる。すなわち、例えば、図10の240のデータフローにおいて、非同期のタイミングやルール毎の更新範囲の違いに配慮して、正規更新の結果が得られる毎に、新規に追加されたマッチ位置を暫定更新のマッチ位置キャッシュに追加する。さらに、このように追加されたマッチ位置を暫定更新の計算対象にするために、マッチ位置の矩形座標値を暫定更新の変化領域の矩形とunionをとる必要がある。
しかしながら、この方法では次のような問題がある。まず、図15のような画面変化の事例であればよいが、スクロールによる変化ではマッチ位置が時刻ごとに少しずつずれていく。本構成ではフレーム間のマッチ位置の追跡はおこなわず、フレームごとに別々のマッチ位置として扱われる。このため、たまたま暫定更新に時間がかかり正規更新の計算結果が複数回分溜まると、多数のマッチ位置がマージされる。
この中には、すでに実際の画面内容がスクロール移動したことで、本来は存在しないマッチ位置も含まれ、探索範囲が広くなってしまう。これらマッチ位置の生成・消去や処理済み、未処理の管理を行うと、プログラムが複雑化し実装が困難になるとともに、全てのケースに正しく動くかを検証すること自体難しくなる。しかも、この管理はルールごとに行わなければならないため、記憶領域や計算資源を浪費することになる。
本構成では、図14の342のデータフローを使用することで、これを解決している。ここで受け渡しするデータの内容は、機能312で画像マッチング処理を開始する際に、機能311が機能302から変化領域として取得した矩形座標値(x,y,w,h)である。機能313でマッチング終了のイベントを受け取り、必要なルールに対する計算が終了した時点で、342をとおして、機能303が保持する変化領域の矩形にunion演算して追加する。
このときには、既に機能314のマッチ位置キャッシュに正規更新の結果が格納されている。暫定更新処理のスレッドが次の処理サイクルに入ると、機能321が機能303から変化領域として矩形座標値を取得する。この矩形は、機能301のキャプチャ画像のフレーム間差分として機能303に蓄積された領域であると同時に、前回の計算から今の計算開始までの間に、342をとおして追加された領域を含んでいる。機能321は受け取った更新対象範囲の矩形をもとに、暫定更新のマッチ位置キャッシュから範囲に入るマッチ位置を抽出する。
また正規更新のマッチ位置キャッシュからも範囲に入るマッチ位置を抽出する。両者からのマッチ位置をすべて含む矩形を計算し、その矩形を垂直方向にスウィープした上で、更新対象範囲の矩形とintersectionをとったものを、画像マッチングの探索範囲とする。この処理をルール毎に行う。
このように更新対象範囲の矩形をマージすることで、前記の方法の問題を回避することができる。すなわち、画面内容がスクロール移動する場合も、340のデータフローからマッチ位置を取り出す瞬間の最新のマッチ位置キャッシュ314を参照するため、計算結果が複数回分溜まることはない。また、マッチ位置の複雑な管理が不要である。さらに、342のデータフローや機能303で保持する情報は、全てのルールに共通の1つの値、すなわち矩形座標値のみであるため、ルール毎に複雑な更新管理を行う必要がなく、プログラムの間違いがない。また、機能303で保持する変化領域の矩形にunion演算していくだけで、他の処理は第三の実施の形態の通常の考え方による構成を変えることなく実現でき、記憶領域や計算資源を浪費することがない。
なお、上記説明では割愛したが、図14における301〜303の機能ブロック、すなわち変化領域の抽出についてここで詳しく説明する。図14の301〜303の機能ブロック、331のブロックグループもそれぞれ別のスレッドになるが、基本的には図2、図3で説明した振る舞いと同じである。変化領域の抽出に関しては、画面を連続的にキャプチャし、フレーム間の差分を計算する処理を独自のスレッドで自律的に行っている点が特徴である。これに対し、正規更新、暫定更新もそれぞれ別のスレッドで実行される。正規更新の画像マッチ計算と暫定更新のそれとは、探索領域の面積の違いから比較的大きい実行時間差がある(例えば、5:1〜10:1程度)。変化領域を受け渡す3つのスレッドのタイミングは非同期であるため、以下のように取り扱う。
すなわち、画面キャプチャは画面変化を漏れなくとるため、いずれの更新処理よりも十分短い周期、つまり暫定更新よりもさらに短い周期で変化矩形の計算を行う。ある期間の累積的な変化矩形を保持するため、各瞬間(2フレーム間)の変化矩形は、その瞬間までの累積的変化矩形に対し和(union)演算操作を行って更新する。累積的変化矩形は、正規更新処理、暫定更新処理それぞれから取得操作が行われたときに、そのデータ値を返すとともに、空の矩形に初期化する。それぞれの取得操作は別々のタイミング・間隔で行われるため、累積変化矩形のオブジェクトは2つ用意する。
また、上記説明では割愛したが、変化領域に対するアイコン位置の更新範囲、ならびに画像マッチングの探索範囲の計算方法についてここで詳しく説明する。図16のステップS502および図17のステップS602では、画面変化状態として、変化領域の矩形を取得する。この矩形に対し、マッチ位置(テンプレート画像の大きさ)が境界上にのる場合を以下のように扱う。
まず、前フレームのマッチ位置が内側か外側かを判定し、外側であれば更新対象から一時的に除外する。すなわち、画像マッチングで得られた新しいマッチ位置(複数)は、内側と判定されたマッチ位置(複数)をキャッシュで置き換え、外側と判定されたマッチ位置はそのままとする。なお、注意すべき点として、この矩形に交差するテンプレート画像は全て内側と判定する。逆に言うと、ルールごとに変化矩形をテンプレート画像の幅、高さで外側に拡張した新たな矩形を計算し、それに完全に含まれるマッチ位置は全て内側と判定する。この矩形を更新範囲とよぶ。
これに対応する処置として、画像マッチングの探索範囲も拡大する必要がある。すなわち、変化領域の矩形を、テンプレート画像の幅、高さで外側に拡張した新たな矩形をもって、探索範囲とする必要がある。このため、図17に示すように、暫定更新処理においては、前回結果から変化矩形に入るマッチ位置を抽出し、そこから探索範囲を決定し(ステップS606)、画像マッチングを行う(ステップS607)。更新範囲と探索範囲はルール毎に異なるが、同じルールの更新範囲と探索範囲は同一になる。これによって、変化領域の矩形の境界上にマッチ位置がのる場合に、過不足なく更新が行われることが保証される。
一般的な画像マッチングの用途としては、現実のカメラ画像を対象とする場合が多い。動画映像を対象として連続的に画像マッチングを行う場合は、直前のフレームのマッチ位置をもとに、その周辺に限定した探索範囲で画像マッチングを行うことで、計算量を低減する工夫が考えられる。この方法の欠点は、マッチ位置に映っている対象物が急に移動した場合、探索範囲外に出てしまい、映像上には存在するにも関わらず、次のフレームでマッチ位置を見失う場合があることである。もともと、カメラ画像はノイズや影などを含み、対象物の角度や距離が変わるため、画像マッチングそのものが失敗してマッチ位置が消えてしまう場合もある。このことから、仮にマッチ位置を見失っても、現実の応用においてはあまり問題とならない。
しかしながら、PCのデスクトップ上の画面画像を対象にした場合は、画像マッチングそのものに由来する失敗の頻度は非常に小さい。人の目で見て自明なマッチ位置を見失ったり消えてしまったりするのは、応用において問題となる。本構成のスウィープ形状の探索範囲を用いることにより、垂直方向のスクロール時に探索範囲外に出てしまうことはない。一般的にスクロールは、垂直もしくは水平の一方向に対する動きとなり、斜め方向や方向が動的に変化する動きはあまり採用されない。このため、暫定更新において、細長い帯状のスウィープ形状が好適となる。さらには、アノテーションがWebブラウザなど垂直スクロールを多く用いるGUIに適用されることから、垂直方向のスウィープに重みを付けて適用することで、現実にはほとんど不都合が生じないことがわかっている。
変化領域だけに限定して、差分を更新することで、実際の利用シーンにおける使用感の向上に大きな効果がある。Webブラウザを例に挙げると、図18に示すように、ユーザが画面上の変化とは意識していないが、ビット比較計算上は変化として扱われる事象は数多く存在する。(1)は、ごく小さい領域で絶えず変化が起こるため、従来のアノテーション表示では変化閾値を用いて対処しなければならなかった。(2)は、ブラウザによって勝手に変化する場合がある。(3)は、画面上の多くの領域でマウスが通過するだけで発生する。これはURLリンクに限らず、GUIのボタン、コンボボックス、スクロールバー、メニュー、チェックボックスなどでもマウス通過による表示変化がある。(4)は表示内容そのものの広さが変化した場合にスクロールバーの長さが更新される変化で、テキストエディタでよく発生する。また目で見て気づかない変化なので、ユーザにとってアノテーション更新の理由が把握しにくい。(5)は、ユーザが気付きにくい間隔で自動的に発生する変化となる。(6)や(7)は、Webコンテンツだけでなくイントラネットシステムなどでも採用する場合がある。
このため、ユーザの意識していない変化により、頻繁にアノテーションの更新が発生し、そのたびに画像マッチングの計算時間を待たされるのは問題である。特に、ブラウザ内のリンク上をマウスが通過するだけで、ハイライト表示の変化が起こるが、これは一瞬ですぐ元に戻り、かつ文字内容は変化しない。仮に当該の文字画像の領域をテンプレート画像に指定していると、もとのアイコン位置からの移動は起こらないにも関わらず、アノテーションの更新が発生することになる。本構成により、小さい領域の変化に対しては、それを囲う矩形領域にだけ更新を行うため、計算時間は短く抑えることができる。さらに、前フレームにおいて当該の変化矩形内にアイコンが存在しなければ、探索範囲が設定されず、画像マッチングそのものが行われないため、多くの場合、関係ない部分の変化では、表示更新そのものも発生しない。
また、上記(1)〜(7)にみられる小さい変化と、画面のスクロールなど大きな変化が、任意のタイミングで組み合わされると、差分による表示更新を漏れや見逃しのないように行うことは難しいが、本構成では、これらを確実に行うことができる。
一方、実施の形態で示した構成だけでは、差分を小さく抑えられず効果が半減する場合がある。例えば、図18の(1)キャレットの点滅が起こっている状態で、離れた位置にそのほかの微小変化が発生すると、同時に発生した瞬間を、これら複数の変化箇所を囲む大きな領域の変化として扱ってしまう。同様に、(3)マウスホバーを行うと、(2)ステータスバーにそのURL文字列が表示されるなど、同時に複数個所が変化する場合は、アプリケーションのつくりによってさまざまに作り出される。離れた箇所で同時発生する変化に対しては、あまり効率がよくない。
しかしながら、これらの変化箇所をウィンドウ内全体で1つの矩形として抽出するのではなく、一定以上のマージンをあけて変化領域が点在する場合、それらを別々の複数の矩形として抽出することができれば、問題は簡単に解決する。すなわち、これら同時に発生した複数の変化領域矩形を、疑似的に別々の変化タイミングで発生したものとして、小さい矩形ごとに小出しにして更新処理を繰り返せばよい。これには、図14の302、303を拡張し、複数の矩形にわけて抽出する機能、これらを1つずつ順に正規更新、暫定更新に引き渡す機能が必要になるが、そのほかの構成については変更する必要がない。これは、差分による更新を小さい面積であれば短い時間で計算できること、非同期に任意の更新対象を処理しても、漏れや見逃しがないという特徴によって実現されている。
アクティブウィンドウの切り替えやウィンドウの移動、リサイズなどの操作があったときのアノテーションの表示更新の開始についても、以下のように対処できる。すなわち、マッチ位置キャッシュをウィンドウごとに持つようにする。具体的には例えば、ウィンドウハンドルとルールIDの2つをキーとするハッシュマップにリストを格納し、そこに複数のマッチ位置を保持する。ウィンドウ切り替えが発生した場合、新しいウィンドウハンドルをキーに、前回当該ウィンドウが表示されたときの内容を参照するようにする。また、ウィンドウの移動の場合、前フレームのマッチ位置キャッシュ内の矩形座標を移動量分、強制的にずらす。また、リサイズの場合は、ウィンドウ左上の隅の移動量分を同様に処理し、さらにウィンドウ境界の外にはみ出たマッチ位置を消去する。
これを最初に表示するためのマッチ位置キャッシュとして使用する。これによって、ウィンドウの切り替え直後から最初に表示されるまでの遅れや、ウィンドウの位置移動やリサイズの直後から表示が大きく更新されるまでの間欠を解消することができる(なお、上記説明はマッチ位置がスクリーン座標で保持されている場合であるが、当該ウィンドウ左上隅を原点とする相対座標で保持されている場合は、マッチ位置を強制的にずらすのではなく、アイコン表示の際に参照する相対座標原点のスクリーン座標を変化させればよい)。このように本発明の構成に新たな要素や振る舞いを導入することなく、切り替えや移動、リサイズに対応するシンプルな実装が実現できる。
ここで、従来の一般的な方法で単純にキャッシュを使用すると、アイコンの存在有無や座標位置が正しくない可能性がある。これに対して本発明の構成では、暫定更新の後のいずれかの時点で必ず正規更新が実行され正しい内容に到達することが確実に保証される。また、暫定更新ではアイコンの存在有無は不正確だが、ある条件についての位置関係(実施の形態の場合、垂直方向の移動があった場合の位置)は正確であることが保証される。
そして、上記のとおり、切り替えや移動、リサイズに対応するための具体的な構成や振る舞いが、スクロールの際の問題解決の構成や振る舞いと同じものを共用できているために、ユーザに対して一貫した表示更新として見せることもできている。
以上をより一般化してとらえれば、本発明の方法は、他の高速化方法を新たに加えて組み合わせるにあたって、親和性が高いといえる。実施の形態においては垂直方向のスクロールを前提とした暫定更新のロジックを用いており、そこに前回アクティブであったときの結果のキャッシュを用いるロジックや、移動、リサイズの直前の結果のキャッシュの一部を用いるロジックなど、様々な方法を組み合せることができている。すなわち過去の結果を参照して、正確性は妥協するかわりに高速性を高める方法を複数組み合せて使用する場合に、その共通的基盤を提供しているといえる。
例えば、PCのデスクトップ画面上での画像の特徴や変化の特性に適合した暫定更新処理の考え方を導入することで、アノテーションシステムの用途において重要なアイコン移動や生成・消去のスムーズな更新を実現している。
例えば、フレーム間符号化や動き補償符号化と類似した前フレームの活用の考え方にもとづきながら、画像マッチング結果の偽陰性を許容し、偽陽性を排除する、暫定更新の考え方を導入することで、リアルタイム映像における未来データを得られない、過去データだけにもとづくアノテーション固有の要件に適合した、表示更新処理を実現している。
前フレームの活用と変化領域の差分計算の両方を兼ね備えた効果によって、同じ結果をより少ない計算量で得ることができる。画面の変化を扱うために、閾値を使用したり、優先順で選択したりすることがないために、微小な変化による更新の必要性を漏らす可能性を排除できる。
また第二、第三の実施の形態は、第一の実施の形態に対して、監視期間をおかずにすぐ更新処理を起動するため、時間遅れを少なくすることができる。
[第四の実施の形態]
上述の第一の実施の形態〜第三の実施の形態では、画面に表示されているアイコンの位置を基に所定の領域を生成し、該領域を用いて暫定更新を行う方法を説明したが、これに限定されるものではない。例えば、正規更新処理による前フレームに対する計算結果であるマッチ位置座標を基に代替テンプレートを生成し、暫定更新処理において該代替テンプレート用いたビットマップマッチングを行うようにしてもよい。
第四の実施の形態では、暫定更新処理において代替テンプレートを用いたビットマップマッチングを行う場合について説明する。ここで代替テンプレートとは、あらかじめルールとして事前に指定したテンプレート画像ではなく、正規更新の処理中に画像マッチングにより抽出された座標位置の矩形領域を切り出したものである。かかる代替テンプレートは、表示更新処理の期間中だけ作業用のテンプレート画像として限定的に用いられる。
また、ビットマップマッチングとは、ZNCC(Zero−mean Normalized Cross−Correlation)などの類似性を基準にテンプレートマッチングを行う比較方法ではなく、単純なビット値比較により画像が厳密に一致している場合に限定してマッチ位置を判定して抽出するものである。かかるビットマップマッチングは、完全一致の場合以外を排除することで、大幅な高速化手法が適用可能である。
代替テンプレートを用いたビットマップマッチングは、正確性を妥協した高速化方法である。正確性の妥協の内容としては、「偽陰性」すなわち「本来表示されるべき位置に表示されないこと」を許容し、「偽陽性」すなわち「本来表示されるべきではない位置に表示されること」を許容しないものである。
第四の実施の形態に係る表示制御装置の構成は、前述した図1と同様であるため省略するが、表示制御部13bの処理内容が異なる。表示制御部13bは、検知部13aによって検知された画面の変化に応じて、画面に表示されていた前フレームに対する計算結果であるマッチ位置座標を基に代替テンプレート画像を生成し、該代替テンプレート画像を比較対象のビットマップとして、画面上から代替テンプレート画像と一致する領域を探索し、該一致した領域にアイコンをオーバレイ表示する暫定更新処理、および、代替テンプレート画像に関係なく、画面上から指定された画像テンプレートと類似した領域を探索し、類似した領域に対応する位置にアイコンをオーバレイ表示する正規更新処理のいずれか一つまたは両方を実行する。
具体的には、表示制御部13bは、検知部13aによって検知された画面の変化が検知されると、暫定更新処理および正規更新処理を並行して実行し、暫定更新処理では、正規更新処理において前フレームに対する計算結果であるマッチ位置座標とを基に、次回の暫定更新処理において代替テンプレート画像を生成する。このように、第四の実施の形態に係る表示制御部13bは、第三の実施の形態と同様に、正規更新処理と暫定更新処理を並行して実行する。ただし、第三の実施の形態では、前フレームでのマッチ位置の座標値セットを基に所定の領域を生成していたが、第四の実施の形態では、前フレームでのマッチ情報を基に代替テンプレートを生成する。
ここで、図19を用いて、第四の実施の形態に係る表示制御装置において実行される暫定更新処理および正規更新処理を並行して実行する画面更新処理の概要を説明する。図19は、第四の実施の形態に係る表示制御装置において実行される暫定更新処理および正規更新処理を並行して実行する画面更新処理の概要を説明する図である。図14と図19の違いは、440や441で受け渡される情報が、第三の実施の形態においては前フレームでのマッチ位置の座標値セットであったが、第四の実施の形態に係る表示制御装置では、この情報が代替テンプレート画像にかわる。ただし、機能421が機能403から受け取った変化領域(差分抽出)である矩形領域の座標値をもとに、その範囲にかかるキャッシュ内情報を抽出するためには、第三の実施の形態と同様、マッチ位置の座標値を必要とする。このため、座標値と代替テンプレート画像をあわせてマッチ情報を呼ぶこととし、この情報をキャッシュするものとする。
ここで、表示制御部13bは、正規更新処理においては、代替テンプレート画像に関係なく、指定された画像テンプレートとの類似度を示すマッチ率が、予め設定された所定の閾値以上である領域を探索する。そして、表示制御部13bは、正規更新処理において前フレームに対する計算結果であるマッチ位置座標を基に、次回の暫定更新処理において代替テンプレート画像を生成する。具体的には、画像テンプレートと類似した領域であるマッチ位置座標の矩形領域を切り出し、切り出した領域の画像そのものを代替テンプレート画像とする。そして、表示制御部13bは、暫定更新処理においては、代替テンプレート画像を比較対象のビットマップとして、画面上から代替テンプレート画像と一致する領域を探索する。
ここで、図20を用いて、第四の実施の形態に係る表示制御装置における暫定更新処理の流れを説明する。図20は、第四の実施の形態に係る表示制御装置における暫定更新処理の流れを説明する図である。図20に示すように、表示制御部13bは、暫定更新処理においては、前回結果から変化矩形に入るマッチ情報を抽出し、代替テンプレートを決定し(ステップS706)、画像マッチングを行う(ステップS707)。その後、画像マッチングの結果に応じて、マッチ情報をマッチ情報キャッシュに上書きする(ステップS708)。その後、ステップS704に戻り、未評価ルールがなくなるまで、ステップS704〜S708の処理を繰り返す。
以下に具体的な事例を用いて、第四の実施の形態に係る表示制御装置の処理について説明する。ここで、図21および図22を用いて、処理対象となる対象画像の例と、テンプレート画像の例について説明する。図21は、対象画像の例を示す図である。図22は、テンプレート画像の例を示す図である。図21に例示するように、対象画像は、縦の大きさが「M_height」、横の大きさが「M_width」の画像であり、画像上にはアルファベットや数字、記号などが表示されている。また、図22に例示するように、テンプレート画像は、縦の大きさが「N_height」、横の大きさが「N_width」の画像であり、アルファベットの「j」文字が表示されている。
図23を用いて、図21および図22の例を用いたピクセルの比較処理を説明する。図23は、ピクセルの比較処理を説明する図である。図23の例では、単純に画像左上から順にピクセル比較を行う場合の参照位置の関係を示す。また、ピクセルの比較処理を実行するプログラムの疑似コードの例を図24に例示する。図24は、ピクセルの比較処理を実行するプログラムの疑似コードの例を示す図である。
図23の例では、対象画像の余白部分のマッチ判定位置i_m,j_mにおいて、テンプレート画像のi_n=3,j_n=0の位置のピクセルを比較している。図24の0006行目のif文条件部で参照しているPm,Pnはそれぞれピクセル値を格納する配列である。比較の結果、一致しない場合には、0004行目のループの外側に抜けるよう、0007〜0009行目のif文実行部で制御変数i_n,j_nを書き換えている。その後、0013行目でブール変数を参照し、0006行目での一致判定が全てのPnについて真であった場合は、ビットマップマッチング処理において抽出すべきマッチ位置として当該のi_m,j_mを出力する。図23の場面ではピクセル値はPm,Pnともに白色で一致するため0006行目if文実行は行われないが、次のループ実行でi_n=4,j_n=0の位置が比較されると、テンプレート画像側Pnは黒であるためif文実行部が実行され、0013行目で当該位置i_m,j_mはマッチしないと判定され、次の位置i_m+1,j_mに対する判定に移行する。
次に、ビットマップマッチングに対し高速化の手法を適用した場合を説明する。表示制御部13bは、画面上において所定の比較基準位置を決定し、該比較基準位置における比較対象ピクセルと、所定の代替テンプレート画像のビットマップ上のピクセルのうち選択された比較ピクセルとを順に比較する。つまり、代表点による比較を行う。この結果、表示制御部13bは、1つでもピクセル値が一致しない場合には、画面上の次の比較基準位置に移動してさらに代表点による比較を繰り返す。代表点による比較で全てのピクセル値が一致する場合には、代替テンプレート画像のビットマップ上の全てのピクセルを任意の順に比較する。そして、表示制御部13bは、ビットマップ上の全てのピクセルを任意の順に比較した結果、1つでもピクセル値が一致しない場合には、画面上の次の比較基準位置に移動してさらに比較を繰り返し、全ての比較において一致すると判定された場合には、画面上の比較基準位置をマッチ位置にアイコンをオーバレイ表示する。
例えば、高速化の手法としては、図24の0004行目の直前に、代表点による比較を行う。代表点はあらかじめ好ましい個数が好ましい順位で選択されており、これらの比較を全て一致判定した場合は、0004行目以降の総当たり比較を前記同様に実行する。代表点による比較で1つでも不一致が発見された場合は、その時点で0002行目のfor文をcontinueする。これにより、対象画像が図21のように余白が多くなく、文字で埋め尽くされている場合でも比較回数を抑えることができる。例えば、図25Aの「i」の文字が埋め尽くされていると、テンプレート画像側Pnはi_n=2,j_n=6(図26の2601のピクセル)まで比較が進まないと図24の0006行目のif文内が実行されないが、代表点の1番目として当該の点を比較すれば、対象画像Pm全体で見た時の比較回数はM回より若干多い程度におさまることになる。
実際は「i」以外にも図25B〜25Dなどの類似した文字の存在を考慮する必要があり、それらの差異として例えば図26の「X」で示したような複数の点を選択し、それらを適切に優先順位づけする必要があると考えられる。代表点の選択処理は一般化して考えると、他の文字種別や文字以外のアイコンや図形などの絵柄を含めて総合的に決定する必要がある。このため、実用上で現れやすい画像の内容にもとづきパターンの出現確率、出現傾向を加味して、事前にあらかじめ抽出して決定・記憶しておいたり、表示実行中にリアルタイムな判定結果フィードバックによって、動的に調整・最適化したりすることが考えられる。
なお、実際の適用シーンでは、キャレットが点滅するなど、動的に画面が変化する場合がある。正規更新でキャレットがテンプレート範囲内にはいった場合も、類似度の閾値を適切に調整することで、マッチ箇所として抽出できる。例えば、最初にキャレットが表示されていない表示状態で、図19に示す正規更新処理および暫定更新処理が実行されたとする。正規更新における機能414では、キャレットを含まない画像、すなわち元のテンプレート画像と同じ絵柄である図27Aに例示する代替テンプレートをキャッシュする。また、それに続く暫定更新における機能421では、代替テンプレートを用いてビットマップマッチングを行う。そして、同じ結果、すなわち元のテンプレート画像と同じ絵柄である図27Aに例示する代替テンプレートが機能424に渡されキャッシュされる。
続いて、カーソルが移動して「j」の横にキャレットが点滅しはじめたとする。この画面変化に対する最初の暫定更新では、図27Aに例示する代替テンプレートとキャプチャ画像が一致しないために、一瞬アイコンが消えることになる。一方、並行して別スレッドで実行される正規更新では、類似度の閾値が低く設定されている効果でマッチ位置抽出に成功し、機能414により図27Bに例示する代替テンプレートがキャッシュされる。次の暫定更新では、機能441から図27Aの代替テンプレートが、機能440から図27Aと図27Bの代替テンプレートが機能421に渡されるため、ビットマップマッチングは2セット分実行され、今度はマッチ位置抽出ができアイコンが再度表示されはじめる。その後は、キャレットが点滅しても当該マッチ箇所について2通りの代替テンプレートが同時に適用されるために、暫定更新でアイコンが一瞬消滅することなく表示されつづける。
以上のように、マッチ位置の画像が閾値の範囲で微小変化する場合でも、各様態の代替テンプレートを複数保持し、ビットマップマッチングを同時適用することで、ZNCCと同様の表示更新が可能である。
代替テンプレートのしくみは、近年グラフィック性能やディスプレイ解像度の向上により積極的に使用されるようになったアンチエイリアシングや、その派生技術であるClearType(クリアタイプ)などによる、ビットパターンレベルでの差異を吸収する効果もある。同様にビットパターンレベルでの差異を発生させる技術要素として、例えば、Webブラウザのレンダリングエンジンやフォントの違い、RemoteDesktopや仮想マシンなどの環境設定における色階調の違いなどに対しても効果を発揮する。これらの差異は、実用場面で比較的遭遇する可能性が大きく、ビットマップマッチングの弱点を回避するうえで重要な構成要素である。
なお、代替テンプレートの保持数が膨大になると、ビットマップマッチングを数多く行う必要が発生し、かえって性能低下につながることが懸念される。これに対しては、代替テンプレートはマッチ位置の座標値ごとに過去の履歴に応じて個別に保持されるようにする、一定時間以上経過した場合は古いものから消去するなどの対策が可能である。
また、上記代替テンプレートの同時保持数や、ビット比較の代表点の実際の貢献度合いによっては、動的にビットマップマッチングから通常の画像テンプレートマッチングに切り替えることも対策として可能である。
上述したように、ビットマップマッチングは、対象画像(画面キャプチャ画像)のピクセル数をM、テンプレート画像のピクセル数をNとすると、原理上は総当たりの試行となるため、M×N回のビット値の比較が必要となる場合がある。
しかし、実際には1箇所でも異なるピクセル値が発見された時点で当該座標位置での判定を偽として、次の座標位置の判定に移行するので、理論値より少ない比較回数で済む。さらに実際の利用シーンでは、対象画像サイズMに対してテンプレート画像サイズNが小さく、対象画像上のマッチ位置はたかだか数か所である。例えば、テキストエディタのウィンドウ画像の幅をM_width=256ドット、高さをM_height=256ドットとすると、全画素数M=M_width*M_height=65536ドットとなる。一方、テンプレート画像の幅をN_width=8、高さN_height=8とするとN=64ドットとなる。
単純な比較回数はM*N=4194304回にものぼる。しかし、この事例の場合、正解位置の1か所を除いてほぼ全ての判定試行は偽であるため、対象画像内のM箇所各々の位置で、テンプレート画像内のN箇所の中でマッチ失敗を早期に発見し無駄な比較を省略できれば、全体の処理時間を大幅に抑えることになる。
まず、単純に2つのビットマップの左上から順に比較すると仮定した場合を考える。この場合、テンプレート画像「j」の左上から6番目のピクセルが黒である。一方、対象画像は少なくとも90%のピクセルが白である。これは、ウィンドウ内に文字が91文字表示されており、全てが黒い塗りつぶしとしても、たかだか5824=91*64ピクセルであることからわかる。ピクセル白の箇所についての比較回数は、353894=6*65536*0.9回であり、約8.4%程度に抑えられる。
この試算は条件が違えば結果も大きく変わってくる。例えば、テンプレート画像が図25Eの「.(ピリオド)」のようなビットパターンの場合、左上からの比較では54番目に初めてピクセルが黒のものがあらわれる。このため比較回数は約75.6%程度と、もとの規模とあまり変わらない。この例に対しては、逆の方向すなわち右下から順に比較すると前例と同程度の比較回数に抑えることができる。つまり、テンプレート画像の内容によって、適した比較順序が異なってくるといえる。多様なパターンを考えると、中央付近かららせん状の順に比較することが有望な印象を受けるが、「0」や「L」など中央が白で周辺が黒のピクセルパターンでは大きな改善が期待できない。
そこで、ピクセルを列挙する際の規則性は無視し、相互の位置関係はランダムでもよいので、あらかじめ絵柄に応じてテンプレート画像の特徴をもっともよく表すピクセル位置を列挙しておくことが考えられる。列挙の規則性とは、例えばX方向やY方向に連続していたり、周囲4方向や8方向に隣接していたりといった観点である。このとき、全部のピクセルに全順序をつける必要もない。例えば、図26のように代表となる少数の比較点が小島状に散在する形態でよい。これらの比較をしても偽と判定できなかった対象画像M上の位置に対して、テンプレート画像の全ピクセルN個を比較すればよい。
また、上述した事例とは異なり、実際の画面キャプチャ画像では、アイコンや写真などを含むため、背景色と文字色だけの2色よりも多くのピクセル値が存在する。このような場合には、特徴的な色を保持する画素、例えばアイコンの中でしか使用されていない色の画素を代表点として選択すれば、テンプレート画像中の1点との比較だけですむので、大幅な比較回数の削減が可能である。
以上のように、ビットマップマッチングを高速化する手法として、偽に判定されるべきケースにおいてできるだけ少ないビット値比較回数で値が異なるピクセルに遭遇するよう、比較点の選択・順位を最適化することが重要となる。しかしながら一方で、文字画像が複数文字を含むような複雑なパターンや、ウィンドウ全面に文字が存在し余白が少ない画面では、上記のような工夫で必ずしも期待通りの高い効果が得られるとは限らない。比較点の選択・順序づけの技術的な対応は可能と予想されるが、別途の検証評価が必要である。
実際の適用シーンによっては、対象画像やテンプレート画像の条件が運悪く、効果が上がらないために、この方法を使用しない方がむしろ良い場合もある。そこで、表示更新中にフィードバックを行い、比較順序を動的に制御する、効果が小さいときは他の方法に切り替えておき、効果が出るときのみ有効化する、などが考えられる。
このように、ビットマップマッチングは「偽陰性」を許容し正確さを妥協することで、高速化を可能としている。また、表示更新の方法としてそのまま用いるには効果にばらつきがある。このため、他の方法と併用して補助的に用いることで、実用性を維持したまま条件がそろいさえすれば高速性を享受できる。
(複数世代のキャッシュ)
また、上記した第一の実施の形態の説明において、探索範囲を水平方向もしくは垂直方向にスウィープした矩形領域にする例を説明している。この点について、例えば、適用対象のアプリケーションに応じて、Webブラウザ上での垂直スクロールを中心としたアプリケーションであれば、垂直方向を固定的に指定するようにしてもよい。また、データベース検索結果を表示する横方向のテーブルビューを中心としたアプリケーションであれば、水平方向を固定的にするようにしてもよい。
また、多様なアプリケーションの多様な表示形式に対応するために、表示している対象の内容に応じて、水平・垂直を動的に切り替えるようにしてもよい。これは、マッチ結果情報として、マッチ位置座標をマッチ計算時刻とともに複数世代にわたって保持する構成が必要である。
そこで、表示制御部13bは、検知部13aによって検知された画面の変化が検知されると、暫定更新処理および正規更新処理を実行し、正規更新処理では、前フレームに対する計算結果を基にマッチング結果情報を生成し、該マッチング結果情報をキャッシュに複数世代にわたって蓄積する。そして、暫定更新処理では、前フレームに対する計算結果を基に所定のマッチング結果情報を生成し、該所定のマッチング結果情報をキャッシュに複数世代にわたって蓄積する。また、暫定更新処理は、正規更新処理のキャッシュ、および、暫定更新処理のキャッシュのいずれか一つまたは両方に対して、マッチング結果情報のタイムスタンプをもとに参照することで、暫定更新処理での次のフレームのマッチング条件を生成するようにしてもよい。
例えば、前世代の情報がない、あるいは1〜2世代程度の場合は、方向が確定していないものとして、水平・垂直の両方のスウィープ矩形領域についてそれぞれ2回ずつ画像マッチングを計算する。それ以上の世代が蓄積している場合は、直近数秒以内は方向の反転が発生していなければ、当該方向に限定した4方向(東西南北)のスィープに限定する。また、4世代程度までは移動量が少ないものとして、100ピクセル程度の長さをスウィープした短い矩形に限定し、それ以上の世代が蓄積している場合は、直近数秒以外の移動距離の平均の長さを基準にする。さらに移動距離が増加傾向の場合は、基準に対し2倍の長さを確保し、減少傾向の場合は、基準に対し0.8倍の長さに限定する。
連続的な表示更新が途切れて、直近数十秒以内に動きがない場合は、次の更新では方向や距離をデフォルトの値にリセットする。また、連続的な表示更新は行われているが、直近数十秒以内に動きがない場合は、マッチ位置の地点を囲む最小矩形を範囲として探索の無い画像マッチにより類似度のみをチェックし、絵柄の消滅があったときのみそれを反映させる。
以上のように、動的な制御方法は、例に挙げたパラメータの初期値や制御量を適宜に変更することはもちろん、一部の制御方法を無効化する、他の制御方法を追加・組み合わせて実施することなどができる。
また、これらマッチ結果情報を、マッチ位置ごとに保持する以外に、もととなったルール種別、対象のアプリケーション名、対象のウィンドウクラス名、対象のプロセスハンドル、対象のウィンドウハンドルなどからなるカテゴリごとに保持しておくことで、同種のルールの中での傾向、その中でのアプリケーション種別ごとの傾向、さらにその中でのアプリケーションインスタンスごとの傾向等のように動的にフィードバックをかけることが考えられる。このマッチング結果情報をアノテーションシステムの起動の期間と終了の期間とをまたがって、画面を表示するPC上で記憶させるようにしてもよい。または、このマッチング結果情報を起動したPCを特定する情報またはユーザを特定する情報ごとに分類するとともに、通信可能なサーバに記憶させるようにしてもよい。例えば、複数PCや複数ユーザごとにさらにカテゴリごとに保持することで、ネットワーク環境内の組織的な利用において、制御を調整させることが可能である。この実施にあたっては、従来技術であるビッグデータ解析などの成果を応用することが考えられる。
(システム構成等)
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。例えば、検知部13aと表示制御部13bとを統合してもよい。
また、本実施の形態において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
(プログラム)
また、上記実施の形態に係る表示制御装置10が実行する処理をコンピュータが実行可能な言語で記述したプログラムを作成することもできる。この場合、コンピュータがプログラムを実行することにより、上記実施の形態と同様の効果を得ることができる。さらに、かかるプログラムをコンピュータで読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータに読み込ませて実行することにより上記実施の形態と同様の処理を実現してもよい。以下に、表示制御装置10と同様の機能を実現する表示制御プログラムを実行するコンピュータの一例を説明する。
図28は、表示制御プログラムを実行するコンピュータを示す図である。図28に示すように、コンピュータ1000は、例えば、メモリ1010と、CPU1020と、ハードディスクドライブインタフェース1030と、ディスクドライブインタフェース1040と、シリアルポートインタフェース1050と、ビデオアダプタ1060と、ネットワークインタフェース1070とを有する。これらの各部は、バス1080によって接続される。
メモリ1010は、ROM(Read Only Memory)1011およびRAM(Random Access Memory)1012を含む。ROM1011は、例えば、BIOS(Basic Input Output System)等のブートプログラムを記憶する。ハードディスクドライブインタフェース1030は、ハードディスクドライブ1090に接続される。ディスクドライブインタフェース1040は、ディスクドライブ1041に接続される。ディスクドライブ1041には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース1050には、例えば、マウス1110およびキーボード1120が接続される。ビデオアダプタ1060には、例えば、ディスプレイ1130が接続される。
ここで、図28に示すように、ハードディスクドライブ1090は、例えば、OS1091、アプリケーションプログラム1092、プログラムモジュール1093およびプログラムデータ1094を記憶する。上記実施の形態で説明した各テーブルは、例えばハードディスクドライブ1090やメモリ1010に記憶される。
また、表示制御プログラムは、例えば、コンピュータ1000によって実行される指令が記述されたプログラムモジュールとして、ハードディスクドライブ1090に記憶される。具体的には、上記実施の形態で説明した表示制御装置10が実行する各処理が記述されたプログラムモジュールが、ハードディスクドライブ1090に記憶される。
また、表示制御プログラムによる情報処理に用いられるデータは、プログラムデータとして、例えば、ハードディスクドライブ1090に記憶される。そして、CPU1020が、ハードディスクドライブ1090に記憶されたプログラムモジュール1093やプログラムデータ1094を必要に応じてRAM1012に読み出して、上述した各手順を実行する。
なお、表示制御プログラムに係るプログラムモジュール1093やプログラムデータ1094は、ハードディスクドライブ1090に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ1041等を介してCPU1020によって読み出されてもよい。あるいは、表示制御プログラムに係るプログラムモジュール1093やプログラムデータ1094は、LAN(Local Area Network)やWAN(Wide Area Network)等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース1070を介してCPU1020によって読み出されてもよい。