(57)【要約】      （修正有）【課題】タッチアップ時に起こりがちなタッチ位置のずれを補正する。【解決手段】操作部１０６は、ディスプレイ１０５の表示画面に配置されるタッチパネルを具備する。タッチパネルはタッチ位置を示す座標値をＣＰＵ１０１に出力する。ＣＰＵ１０１は、タッチ位置の座標値をメモリ１０２に順次、格納する。ＣＰＵ１０１は、タッチ位置の履歴からタッチ位置の移動方向の反転を判定する。タッチ位置の移動方向の反転が判定された場合、ＣＰＵ１０１は、その反転が判定されたタッチ位置から所定時間遡る範囲のタッチ位置を無効にする。【選択図】図１
2016219000.tif 000002
【特許請求の範囲】
【請求項１】
情報処理装置であって、
オブジェクトのタッチパネルへの接触を検出する検出手段と、
前記オブジェクトの接触が前記検出手段により検出されている間、前記オブジェクトが接触した位置を順次、メモリに記憶する記憶手段と、
前記オブジェクトが接触した位置の移動方向に変化があったか否かを、前記記憶された位置にしたがって判定する判定手段と、
前記オブジェクトが接触した位置の移動方向に変化があると判定されてから、前記オブジェクトの接触が検出されなくなるまでの時間が所定時間内であるとき、前記オブジェクトが接触した位置の移動方向に変化があると判定されてから前記オブジェクトの接触が検出されなくなるまでに検出された前記オブジェクトが接触した位置を無効にするように設定する設定手段
を備えたことを特徴とする情報処理装置。
【請求項２】
前記設定手段は、前記オブジェクトが接触した位置の移動方向に変化があると判定されてから前記オブジェクトの接触が検出されなくなるまでの間、前記オブジェクトが接触した位置を無効にするように設定することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記オブジェクトの接触が前記検出手段により検出されている間、前記オブジェクトが接触した位置にしたがって、前記タッチパネルに表示されたスライダーバー上でスライダーの位置を移動させてディスプレイに表示するように制御する表示制御手段を備え、
前記表示制御手段は、前記オブジェクトが接触した位置の移動方向に変化があると判定されてから前記オブジェクトの接触が検出されなくなるまでに検出された前記オブジェクトが接触した位置にしたがってスライダーの位置を移動させない
ことを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記記憶手段に記憶された前記オブジェクトが接触した位置のうち、時間的に隣接する位置の変位の内積を算出する算出手段をさらに備え、
前記判定手段は、前記算出手段により算出された内積にしたがって、前記オブジェクトが接触した位置の移動方向に変化があったか否かを判定する
ことを特徴とする請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
複数のモードのうちいずれか１つを設定するモード設定手段をさらに備え、
特定のモードが設定されたときに、前記判定手段による判定を行う
ことを特徴とする請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
情報処理装置であって、
オブジェクトのタッチパネルへの接触を検出する検出手段と、
前記オブジェクトの接触が連続して前記検出手段により検出されている間、前記オブジェクトが接触した位置を順次、メモリに記憶する記憶手段と、
前記オブジェクトが接触した位置の移動方向に変化があったか否かを、前記記憶された位置にしたがって判定する判定手段と、
前記オブジェクトが接触した位置の移動方向に変化があると判定されてから、所定時間の間、前記オブジェクトが接触した位置を無効にするように設定し、さらに、所定時間以上、前記オブジェクトの接触が継続する場合、前記オブジェクトが接触した位置を有効にするように設定する設定手段
を備えることを特徴とする情報処理装置。
【請求項７】
情報処理装置の制御方法であって、
オブジェクトのタッチパネルへの接触を検出するステップと、
前記オブジェクトの接触が検出されている間、前記オブジェクトが接触した位置を順次、メモリに記憶するステップと、
前記オブジェクトが接触した位置の移動方向に変化があったか否かを、前記記憶された位置にしたがって判定するステップと、 
前記オブジェクトが接触した位置の移動方向に変化があると判定されてから、前記オブジェクトの接触が検出されなくなるまでの時間が所定時間内であるとき、前記オブジェクトが接触した位置の移動方向に変化があると判定されてから前記オブジェクトの接触が検出されなくなるまでに検出された前記オブジェクトが接触した位置を無効にするよう設定するステップ
を備えることを特徴とする制御方法。
【請求項８】
情報処理装置の制御方法であって、
オブジェクトのタッチパネルへの接触を検出するステップと、
前記オブジェクトの接触が連続して検出されている間、前記オブジェクトが接触した位置を順次、メモリに記憶するステップと、
前記オブジェクトが接触した位置の移動方向に変化があったか否かを、前記記憶された位置にしたがって判定するステップと、
前記オブジェクトが接触した位置の移動方向に変化があると判定されてから、所定時間の間、前記オブジェクトが接触した位置を無効にするように設定し、さらに、所定時間以上、前記オブジェクトの接触が継続する場合、前記オブジェクトが接触した位置を有効にするように設定するステップ
を備えることを特徴とする制御方法。
【請求項９】
コンピュータを請求項１乃至６のいずれか一項に記載の情報処理装置の各手段として機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置並びにその制御方法及びプログラムに関し、より具体的には、指又はスタイラスペンなどのオブジェクトがタッチパネルに対して接触した位置を検知する技術に関する。
【背景技術】
【０００２】
近年、タッチパネルを備えた情報処理端末が急増している。タッチパネルはディスプレイ上に配置され、表示要素を直接、操作するかのごとき操作感をユーザに与えることができる。すなわち、入力対象と操作対象の一致による直感的な操作が可能となり、簡単で分かりやすい操作体系を実現できる。
【０００３】
従来のタッチパネルは、例えば、静電容量等のセンサ出力を測定し、指やペンなどのオブジェクトが操作面に接近した場合の測定値が閾値を越えたときに、オブジェクトによるタッチがあったと判断し、タッチ位置の座標値を算出して出力する。
【０００４】
しかし、ユーザがオブジェクトを操作面から物理的に離す動作を開始したら瞬時にオブジェクトの接触の検出が終了して、タッチが解除されたと判定されるわけではない。センサ出力が所定の閾値を下回るまでに数ｍｓｅｃのタイムラグが生じるためである。例えば、図９に示すように、ユーザが所望の位置９１２でオブジェクト９１１をタッチパネル９００から離し、タッチを解除したつもりでも、暫くの間（例えば、位置９１２?位置９１３の間）タッチ位置の算出が継続される。そして、実際には、センサ出力が所定の閾値を下回った位置９１３でオブジェクトの接触の検出を終了し、その位置でタッチが解除されたと判定される。その結果、例えば、タッチパネル９００上にスライダーバー９２０が表示され、ユーザのタッチ操作に応じてスライダーをスライダーバー９２０上で移動させる場合に、ユーザの意図とは異なる位置でタッチの解除が行われたと判定されてしまうという問題がある。
【０００５】
特許文献１には、タッチパネルからの入力データを一時保持する入力バッファを設け、タッチペンを離す直前に算出された誤った入力データをキャンセルする構成が記載されている。
【０００６】
特許文献２には、タッチが有効になった最初のタッチ位置を記憶し、タッチ入力時のわずかな位置変化を無効にすることによって、タッチ入力位置と解除位置との差異を解消することが記載されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平６−８９１３７号公報
【特許文献２】特開２０１０−２８７２４１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１に記載の技術において、入力バッファに一時保持される入力データがペンを離す直前に算出された誤データであるとは限らない。この結果、正しい入力データまで破棄してしまうことがある。これは、ユーザの意図しない入力キャンセルに繋がり、操作感を大幅に低下させる。
【０００９】
特許文献２記載される技術では、タッチ位置の変化が所定以上なされた場合、位置の差異の補正は行われない。その結果、タッチ解除時にユーザが意図しないタッチ位置でタッチの解除が行われてしまうことがある。
【００１０】
本発明は、このような問題を解消し、タッチパネル上でタッチ操作が行われる際に、タッチ操作に応じて検出されるタッチ位置とユーザの操作感の間にずれが発生するのを防ぐことを目的とする。
【課題を解決するための手段】
【００１１】
上記目的を達成するために、本願に係る発明の１つは、情報処理装置であって、オブジェクトのタッチパネルへの接触を検出する検出手段と、前記オブジェクトの接触が前記検出手段により検出されている間、前記オブジェクトが接触した位置を順次、メモリに記憶する記憶手段と、前記オブジェクトが接触した位置の移動方向に変化があったか否かを、前記記憶された位置にしたがって判定する判定手段と、前記オブジェクトが接触した位置の移動方向に変化があると判定されてから、前記オブジェクトの接触が検出されなくなるまでの時間が所定時間内であるとき、前記オブジェクトが接触した位置の移動方向に変化があると判定されてから前記オブジェクトの接触が検出されなくなるまでに検出された前記オブジェクトが接触した位置を無効にするように設定する設定手段を備えたことを特徴とする。
【発明の効果】
【００１２】
本発明によれば、タッチパネル上でタッチ操作が行われる際に、タッチ操作に応じて検出されるタッチ位置とユーザの操作感の間にずれが発生するのを低減できる。
【図面の簡単な説明】
【００１３】
【図１】本発明の一実施例の表示制御装置の構成を示すブロック図である。
【図２】本発明の一実施例のタッチパネルに表示されるスライダーバーを示す図である。
【図３】本発明の一実施例のタッチ位置検出の動作の一例を示すフローチャートである。
【図４】本発明の一実施例のタッチ位置検出の動作の一例を示すフローチャートである。
【図５】本発明の一実施例のタッチパネルに表示されるスライダーバーとオブジェクトのタッチ位置を示す図である。
【図６】本発明の一実施例のタッチパネルに表示されるコンテンツを示す図である。
【図７】本発明の一実施例のタッチ位置検出の動作の一例を示すフローチャートである。
【図８】本発明の一実施例のタッチ位置検出の動作の一例を示すフローチャートである。
【図９】従来のタッチパネルに対するオブジェクトのタッチ位置を説明する図である。
【発明を実施するための形態】
【００１４】
以下、図面を参照して、本発明の実施例を詳細に説明する。
【実施例１】
【００１５】
図１は、本発明に係る情報処理装置の一実施例である表示制御装置１００の概略構成ブロック図を示す。表示制御装置１００は、例えば、パーソナルコンピュータ（以下、「ＰＣ」と略す。）やタブレット端末等の情報処理装置により実現されうる。
【００１６】
表示制御装置１００では、ＣＰＵ１０１、メモリ１０２、不揮発性メモリ１０３、画像処理部１０４、ディスプレイ１０５、操作部１０６、記録媒体Ｉ／Ｆ１０７、外部Ｉ／Ｆ１０９及び通信Ｉ／Ｆ１１０が、内部バス１５０に接続する。内部バス１５０に接続される各デバイスは、内部バス１５０を介して互いにデータのやりとりを行うことができる。
【００１７】
メモリ１０２は、例えばＲＡＭ（半導体素子を利用した揮発性のメモリなど）からなる。ＣＰＵ１０１は、例えば不揮発性メモリ１０３に格納されるプログラムに従い、メモリ１０２をワークメモリとして用いて、表示制御装置１００の各部を制御する。不揮発性メモリ１０３には、画像データ、音声データ、その他のデータ、及び、ＣＰＵ１０１が動作するための各種プログラムなどが格納される。不揮発性メモリ１０３は、例えばハードディスク（ＨＤＤ）またはＲＯＭなどで構成される。
【００１８】
画像処理部１０４は、ＣＰＵ１０１の制御に基づいて、不揮発性メモリ１０３及び記録媒体１０８に格納される画像データ、外部Ｉ／Ｆ１０９を介して取得した映像信号並びに通信Ｉ／Ｆ１１０を介して取得した画像データなどに各種画像処理を施す。画像処理部１０４が行う画像処理は、Ａ／Ｄ変換処理、Ｄ／Ａ変換処理、画像データの符号化処理、圧縮伸長処理、拡大／縮小処理（リサイズ）、ノイズ低減処理及び色変換処理などを含む。画像処理部１０４は、特定の画像処理を施すための専用の回路ブロックで構成しても良い。理解を容易にするために、ＣＰＵ１０１とは別に画像処理部１０４を明記しているが、画像処理部１０４の一部または全部の機能をＣＰＵ１０１上で動作するプログラムにより実現しても良い。
【００１９】
ディスプレイ１０５は、ＣＰＵ１０１の制御に基づいて、画像、及びＧＵＩ（Graphical User Interface）を構成するＧＵＩ画面などを表示する。ＣＰＵ１０１は、プログラムに従い表示制御信号を生成し、ディスプレイ１０５に表示するための映像信号を生成してディスプレイ１０５に出力するように表示制御装置１００の各部を制御する。ディスプレイ１０５は、入力する映像信号に基づいて映像を表示する。なお、表示制御装置１００自体が備える構成としてはディスプレイ１０５に表示させるための映像信号を出力するためのインターフェースまでとし、ディスプレイ１０５は外付けのモニタ（テレビ受像機など）であってもよい。
【００２０】
操作部１０６は、ユーザ操作を受け付ける入力デバイスである。操作部１０６は例えば、キーボードなどの文字情報入力デバイス、マウス又はタッチパネルといったポインティングデバイス、ボタン、ダイヤル、ジョイスティック、タッチセンサ及びタッチパッドなどからなる。タッチパネルは、指またはスタイラスペン等のオブジェクトで接触（タッチ）された位置に応じた座標情報を出力する位置入力デバイスであり、ディスプレイ１０５の画面に重ね合わせて配置されている。タッチパネルには、抵抗膜方式、静電容量方式、表面弾性波方式、赤外線方式、電磁誘導方式、画像認識方式及び光センサ方式等の様々な方式のものがあり、本実施例では、そのいずれの方式のものを用いても良い。なお、本実施例のタッチパネルは、例えば、静電容量等のセンサ出力を測定し、測定値が閾値を越えたときに、オブジェクトが操作面に接近したことを検出してオブジェクトによるタッチがあったと判断する。よって、以下の説明における「オブジェクトのタッチパネルへの接触（タッチ）」は、オブジェクトがタッチパネルの操作面に、直接触れている場合だけでなく、十分に接近している場合（ホバー状態）も含む。
【００２１】
ＣＰＵ１０１は、タッチパネルへの以下の操作又は状態を検出できる。オブジェクトがタッチパネルに接触することを、以下、タッチダウン（Touch-Down）と称する。オブジェクトがタッチパネルに接触している状態を、以下、タッチオン（Touch-On）と称する。オブジェクトがタッチパネルに接触したまま移動することを、以下、タッチムーブ（Touch-Move）と称する。タッチパネルに接触していたオブジェクトをタッチパネルから離すことを、以下、タッチアップ（Touch-Up）と称する。タッチパネルに何も触れていない状態を、以下、タッチオフ（Touch-Off）と称する。
【００２２】
タッチパネル上にオブジェクトが接触している位置座標は、内部バス１５０を通じてタッチパネルからＣＰＵ１０１に通知される。そして、ＣＰＵ１０１は、タッチパネルから通知されるタッチ位置座標の変化に基づいてタッチパネルに対するこれらのタッチ操作の種類を判定する。
【００２３】
ＣＰＵ１０１は、タッチムーブについては、位置座標の変化に基づいてタッチパネル上で移動するオブジェクトの移動方向の垂直成分と水平成分を判定できる。また、ＣＰＵ１０１は、タッチパネル上をタッチダウンから一定のタッチムーブを経てタッチアップをしたとき、ストロークを描いたと判定する。素早くストロークを描く操作を、フリックと呼ぶ。フリックは、タッチパネル上にオブジェクトを接触したままある程度の距離だけ素早く動かしてそのまま離す操作であり、言い換えれば、タッチパネル上をオブジェクトではじくように素早くなぞる操作でもある。所定距離以上を所定速度以上でタッチムーブしたことが検出され、そのままタッチアップが検出されると、ＣＰＵ１０１は、フリックと判定する。また、所定距離以上を所定速度未満でタッチムーブしたことが検出された場合、ＣＰＵ１０１は、ドラッグと判定する。
【００２４】
記憶媒体Ｉ／Ｆ１０７は、メモリーカード、ＣＤ（商標）またはＤＶＤ（商標））といった記録媒体１０８を接続する手段であり、ＣＰＵ１０１の制御に基づき、記録媒体１０８にデータを読み書きする。
【００２５】
外部Ｉ／Ｆ１０９は、有線ケーブルや無線によって外部機器を接続し、映像信号及び音声信号などを入出力できるインターフェースである。通信Ｉ／Ｆ１１０は直接またはインターネット１１１を介して外部機器との間でファイル及び制御信号等を送受信する手段である。
【００２６】
ユーザのタッチ操作に応じて、スライダーをスライダーバー上でスライドする操作を例に、本実施例における位置検出動作を説明する。ここでは、タッチ位置の移動方向を逐次監視し、移動方向に変化があった場合に所定時間、タッチ位置のパラメータ変更を無効にすることで、タッチアップの操作が行われたときにユーザの操作感と異なるタッチ位置が検出されるのを防ぐ。
【００２７】
図２は、ディスプレイ１０５に表示されるスライダーバーの一例としてボリュームコントローラを示す。スライダーバー２０１の左端からスライダー２０２の位置までの長さが音量を示す。スライダーバー２０１上に、スライダー２０２が配置され、ユーザがスライダー２０２周辺をタッチダウンすると、ＣＰＵ１０１は、スライダー２０２を移動可能な状態とする。スライダー２０２が移動可能な状態でユーザの操作に応じて、スライダー２０２に対するタッチムーブが検出されると、ＣＰＵ１０１はスライダー２０２をスライダーバー上で移動させる。これによって、スライダーバー２０１の左端からスライダー２０２の位置までの長さが伸長又は縮小する。ＣＰＵ１０１は、スライダーバー２０１上でのスライダー２０２の位置を参照し、その位置と対応するスピーカへの出力音量を決定する。
【００２８】
図３は、本実施例における、タッチアップの検出前の所定時間内にタッチ位置の移動方向に変化があるときに、変化からタッチアップまでのタッチ位置を無効にする動作を示すフローチャートである。スタート時点では、タッチパネルに何も触れていないタッチオフの状態にあるものとする。
【００２９】
ＣＰＵ１０１は、ステップＳ３０１でタッチダウンを検出したか否かを判定する。タッチダウンを検出したと判定した場合、ＣＰＵ１０１は、ステップＳ３０２でさらにタッチダウンが検出されたタッチ位置がスライダー２０２の位置周辺であるかどうかを判定する。例えばタッチ位置がスライダー２０２の座標から±１０ピクセル以内である場合、ＣＰＵ１０１は、スライダー２０２の位置周辺でタッチダウンを検出したと判定する。
【００３０】
タッチ位置がスライダー２０２の位置周辺であると判定した場合（Ｓ３０２でＹｅｓ）、ＣＰＵ１０１は、ステップＳ３０３でスライダーバー２０１のパラメータ変更を有効にする。スライダーバー２０１のパラメータ変更が有効になっている間、ＣＰＵ１０１は、ユーザによるスライダー２０２へのタッチムーブ操作の間、タッチ位置を連続して検出し、検出されたタッチ位置と対応する位置にスライダー２０２を表示させる。すなわち、ユーザはスライダー２０２をスライダーバー２０１上で左右に移動させることができる。ＣＰＵ１０１は、スライダー２０２のスライダーバー２０１上での位置を参照し、その位置と対応するスピーカの出力音量を決定する。
【００３１】
ＣＰＵ１０１は、ステップＳ３０４でカウンタｎをリセット（ｎ＝０）し、ステップＳ３０５でタッチ位置のＸ座標をメモリ１０２の変数Ｘ（ｎ）に代入する。すなわち、現在から所定時間遡る間に検知されたタッチ位置の履歴として、メモリ１０２の配列変数Ｘ（ｎ）に直近の過去の複数のタッチ位置座標を順次、格納して記憶する。そして、現在より所定数または所定時間を過ぎた過去のＸ座標の値は順次、消去される。本実施例のスライダー２０２はＸ方向にのみ移動操作可能であることから、ここでは、Ｘ座標のみを考慮している。
【００３２】
ＣＰＵ１０１は、ステップＳ３０６でタッチムーブを検出したか否かを判定する。タッチムーブを検出していないと判定した場合、ＣＰＵ１０１は、位置入力を終了する。タッチムーブを検出したと判定した場合、ＣＰＵ１０１は、ステップＳ３０７でｎをインクリメントし、ステップＳ３０８でタッチ位置のＸ座標をメモリ１０２の変数Ｘ（ｎ）に代入する。
【００３３】
ＣＰＵ１０１は、ステップＳ３０９で時間的に隣接するタッチ位置のＸ座標の変位ΔＸ（ｎ−１）＝Ｘ（ｎ）−Ｘ（ｎ−１）を算出する。ＣＰＵ１０１は、ステップＳ３１０でｎ＞１かつΔＸ（ｎ−２）・ΔＸ（ｎ−１）≦０であるか否かを判定する。ΔＸ（ｎ−２）・ΔＸ（ｎ−１）≦０である場合は、スライダー２０２の移動方向の反転又は静止、すなわち移動方向に変化があったことを示す。ｎ＞１かつΔＸ（ｎ−２）・ΔＸ（ｎ−１）≦０である場合、ＣＰＵ１０１は、ステップＳ３１１に進み、そうでない場合、ステップＳ３０６に戻る。
【００３４】
ＣＰＵ１０１は、ステップＳ３１１でスライダーバー２０１のパラメータ変更を無効にし、ステップＳ３１２でタイマをスタートさせる。スライダーバー２０１のパラメータ変更が無効になるとは、オブジェクトのスライダー２０２に対するタッチムーブ操作の間、タッチ位置を検出しない、あるいは、検出されたタッチ位置をスライダー２０２の表示位置に反映させないことである。以後、ＣＰＵ１０１は、スライダーバー２０１上でスライダー２０２を移動させずに停止した状態でディスプレイ１０５に表示する。
【００３５】
ＣＰＵ１０１は、ステップＳ３１３でタッチアップを検出したか否かを判定する。タッチアップを検出したと判定した場合、ＣＰＵ１０１は、位置入力処理を終了する。このとき、タッチアップを判定した位置として、ステップＳ３１１でスライダーバー２０１のパラメータ変更を無効化する前に検出されたタッチ位置Ｘ（ｎ）の値が取得される。
【００３６】
一方、タッチアップを検出していないと判定した場合（Ｓ３１３でＮｏ）、ＣＰＵ１０１は、ステップＳ３１４でタイマがスタートしてから時間Ｔが経過したか否かを判定する。時間Ｔは、タッチアップ直前の入力位置の信頼性が低い時間、例えば５０ｍｓｅｃ程度に予め設定されている。時間Ｔが経過していなければ、ＣＰＵ１０１は、Ｓ３１３に戻る。一方、時間Ｔが経過すれば、ＣＰＵ１０１は、ステップＳ３０３に戻り、スライダーバー２０１のパラメータ変更を再び有効にする。すなわち、所定時間以上、タッチが継続する場合に、ＣＰＵ１０１は、スライダーバー２０１のパラメータ変更を再び有効にする。
【００３７】
本実施例では、スライダーの移動方向の変化を検出すると、所定時間、スライダー２０２に対するムーブ操作を無効化するので、その間のタッチ位置はタッチアップ時の位置として検出されない。したがって、タッチアップ時のスライダー２０２の位置とユーザの意図した位置の間にずれが発生するのを防ぐことができ、ユーザが感じる操作上の違和感を軽減できる。
【００３８】
なお、ステップＳ３０５，Ｓ３０８では変数Ｘ（ｎ）にタッチ位置のＸ座標を直接代入したが、複数回サンプリングされた移動平均を代入してもよい。このようにすることで、タッチ位置の変化を滑らかにすることができ、スライダーの移動方向の変化の誤検出を軽減できる。
【実施例２】
【００３９】
図４は、本実施例におけるタッチアップの検出前の所定の検出回数内にタッチ位置の移動方向に変化があるときに、変化からタッチアップまでのタッチ位置を無効にする動作を示すフローチャートである。スタート時点では、タッチパネルに何も触れていないタッチオフの状態にあるものとする。
【００４０】
ＣＰＵ１０１は、ステップＳ４０１でタッチダウンを検出したか否かを判定する。タッチダウンを検出したと判定した場合、ＣＰＵ１０１は、ステップＳ４０２でタッチダウンが検出されたタッチ位置がスライダー２０２の位置周辺であるか否かを判定する。ステップＳ４０２でタッチ位置がスライダー２０２の位置周辺であると判定した場合、ＣＰＵ１０１は、ステップＳ４０３に進み、スライダーバー２０１のパラメータ変更を有効にする。
【００４１】
ＣＰＵ１０１は、ステップＳ４０４でカウンタｎをリセット（ｎ＝０）し、ステップＳ４０５でタッチ位置のＸ座標をメモリ１０２の変数Ｘ（ｎ）に代入する。すなわち、現在から所定回数遡る間に検知されたタッチ位置の履歴として、変数Ｘ（ｎ）はメモリ１０２に順次、格納される。本実施例のスライダーバー２０１のスライダー２０２はＸ方向にのみ移動操作可能であることから、ここでは、Ｘ座標のみを考慮している。
【００４２】
ＣＰＵ１０１は、ステップＳ４０６でタッチムーブを検出したか否かを判定する。タッチムーブを検出していないと判定した場合、ＣＰＵ１０１は、位置入力を終了する。タッチムーブを検出したと判定した場合、ＣＰＵ１０１は、ステップＳ４０７でｎをインクリメントし、ステップＳ４０８でタッチ位置のＸ座標をメモリ１０２の変数Ｘ（ｎ）に代入する。
【００４３】
ＣＰＵ１０１は、ステップＳ４０９で時間的に隣接するタッチ位置のＸ座標の変位ΔＸ（ｎ−１）＝Ｘ（ｎ）−Ｘ（ｎ−１）を算出する。ＣＰＵ１０１は、ステップＳ４１０でタッチアップか否かを判定する。タッチアップを検出したと判定した場合（Ｓ４１０）、ＣＰＵ１０１は、Ｓ４１１でスライダーバー２０１のパラメータ変更を無効にし、Ｓ４１２に進む。タッチアップを検出していないと判定した場合（Ｓ４１０）、ＣＰＵ１０１は、ステップＳ４０７に戻る。
【００４４】
ＣＰＵ１０１は、ステップＳ４１２でｎ＞１か否かを判定し、ｎ＞１である場合にステップＳ４１３に進み、ｎ＝１の場合、終了する。
【００４５】
ＣＰＵ１０１は、ステップＳ４１３でΔＸ（ｎ−ｋ−１）・ΔＸ（ｎ−ｋ）≦０（ただし、ｋ＝１，２，３）を判定する。ステップＳ４１３は、タッチアップ直前に検出された過去３回のタッチ位置について、スライダー２０２の移動方向の変化の有無を判定する処理である。１回の間隔は、ステップＳ４０７からステップＳ４１０のループで設定可能であり、例えば２０ｍｓｅｃに設定される。なお、ｎ＝２の場合など、ｋ＝１，２，３に対してＸ（ｎ−ｋ−１）を取得できていない場合、Ｘ（ｎ−ｋ−１）を取得できる範囲でスライダー２０２の移動方向の変化の有無を判定することになる。例えば、ｎ＝２のときには、ＣＰＵ１０１は、ｋ＝１に対してのみスライダー２０２の移動方向の変化の有無を判定する。ｎ＝３のとき、ＣＰＵ１０１は、ｋ＝１，２に対してスライダー２０２の移動方向の変化の有無を判定する。
【００４６】
ｋ＝１，２，３のいずれか１つでスライダー２０２の移動方向の変化がある場合（Ｓ４１３）、すなわち、ΔＸ（ｎ−ｋ−１）・ΔＸ（ｎ−ｋ）≦０を満たす場合、ＣＰＵ１０１は、ステップＳ４１４に進む。ＣＰＵ１０１は、ステップＳ４１４１で、ΔＸ（ｎ−ｋ−１）・ΔＸ（ｎ−ｋ）≦０を満たすｋのうち最も大きいものを算出する。このｋ値は、タッチアップ直前に検出された３回のタッチ位置の間で最初にスライダー２０２の移動方向の変化を生じたタッチ位置を示す。ＣＰＵ１０１は、ステップＳ４１４でこのｋ値を変数ａ（メモリ１０２）に格納する。
【００４７】
ＣＰＵ１０１は、ステップＳ４１５でスライダーバー２０１のスライダー２０２をＸ（ｎ−ａ）相当の位置に変更する。ここでＸ（ｎ−ａ）相当としているのは、図５に示すように、Ｘ（ｎ−ａ）が示す位置が、スライダー２０２の移動範囲外にある可能性があるためである。Ｘ（ｎ−ａ）が移動範囲内の場合、ＣＰＵ１０１は、スライダー２０２を位置Ｘ（ｎ−ａ）に移動し、移動範囲外の場合、移動範囲内でＸ（ｎ−ａ）に最も近い位置にスライダー２０２を移動する。
【００４８】
ＣＰＵ１０１は、ステップＳ４１５で決定されたスライダー２０２の位置に基づいて、ステップＳ４１６でスライダーバー２０１のパラメータを算出し、終了する。
【００４９】
図４に示す位置検出処理では、タッチアップ直前にタッチ位置の移動方向に変化があった場合、タッチアップ時のタッチ位置が誤入力されるのを防止できる。したがって、ユーザの意図するタッチアップ時のタッチ位置にずれが発生するのを防ぐことができ、違和感を軽減できる。また、タッチアップの検出後にスライダーバーのパラメータ変更を無効化するので、タッチムーブ中のスライダーバーのタッチ操作への応答性が良くなる。
【００５０】
図４に示すフローチャートでは、タッチアップの直近３回分のタッチ位置の変位を算出しているが、タッチ位置の検出間隔に併せて遡る回数を適宜変更してもよい。
【実施例３】
【００５１】
フリック入力可能なＧＵＩにおいて、タッチ位置の移動方向を逐次監視し、フリック入力時の違和感を軽減するタッチ位置の検出動作を説明する。
【００５２】
図６は、ＧＵＩの例として地図アプリのＧＵＩ表示画面を示す。ユーザがＧＵＩ表示画面上の地図部分をタッチダウンすると、地図部分がスクロール可能な状態となる。ユーザは、地図部分がスクロール可能な状態においてフリックを行うことで、地図部分をスクロールして表示内容を更新することができる。ユーザがフリックを行うと、フリック時のスピードに応じて所定量のスクロールが行われ、それに対応して地図部分の表示内容が更新される。
【００５３】
図７は、本実施例におけるフリック操作時のタッチ位置検出の動作を示すフローチャートである。スタート時点では、タッチパネルに何も触れていないタッチオフの状態にあるものとする。
【００５４】
ＣＰＵ１０１は、ステップＳ７０１でタッチダウンを検出したか否かを判定する。タッチダウンを検出したと判定した場合、ＣＰＵ１０１は、ステップＳ７０２でタッチ位置がスクロール可能範囲内であるか否かを判定する。ステップＳ７０２でタッチ位置がスクロール可能範囲内であると判定した場合、ＣＰＵ１０１は、ステップＳ７０３に進み、スクロールを有効にする。
【００５５】
ＣＰＵ１０１は、ステップＳ７０４でカウンタｎをリセット（ｎ＝０）し、ステップＳ７０５でタッチ位置のＸＹ座標をメモリ１０２の変数Ｒ（ｎ）に代入する。すなわち、メモリ１０２の配列変数Ｒ（ｎ）に現在から遡る複数のタッチ位置座標を順次、格納して記憶する。変数Ｒ（ｎ）はＸ座標値とＹ座標値からなる二次元ベクトル値である。
【００５６】
ＣＰＵ１０１は、ステップＳ７０６でタッチアップを検出したか否かを判定する。タッチアップと判定した場合、ＣＰＵ１０１は、ステップＳ７１６に進む。タッチアップを検出していないと判定した場合、ＣＰＵ１０１は、ステップＳ７０７でｎをインクリメントし、ステップＳ７０８でタッチ位置のＸＹ座標をメモリ１０２の変数Ｒ（ｎ）に代入する。
【００５７】
ＣＰＵ１０１は、ステップＳ７０９で時間的に隣接するタッチ位置のＸＹ座標の変位ベクトルΔＲ（ｎ−１）＝Ｒ（ｎ）−Ｒ（ｎ−１）を算出する。ＣＰＵ１０１は、ステップＳ７１０でｎ＞１かつΔＲ（ｎ−２）・ΔＲ（ｎ−１）≦０であるか否かを判定する。ΔＲ（ｎ−２）・ΔＲ（ｎ−１）は、ΔＲ（ｎ−２）とΔＲ（ｎ−１）の内積を表す。ΔＲ（ｎ−２）・ΔＲ（ｎ−１）≦０はタッチ位置の移動方向の反転又は静止、すなわち変化を示す。ｎ＞１かつΔＲ（ｎ−２）・ΔＲ（ｎ−１）≦０である場合、ＣＰＵ１０１は、ステップＳ７１１に進み、そうでない場合、ステップＳ７０６に戻る。
【００５８】
ＣＰＵ１０１は、ステップＳ７１１でメモリ１０２の変数ｋに５を代入する。ＣＰＵ１０１は、ステップＳ７１２でスクロールを無効にし、ステップＳ７１３でタイマをスタートさせる。
【００５９】
ＣＰＵ１０１は、ステップＳ７１４でタッチアップを検出したか否かを判定する。タッチアップを検出したと判定した場合、ＣＰＵ１０１は、ステップＳ７１６に進む。タッチアップを検出していないと判定した場合（Ｓ７１４でＮｏ）、ＣＰＵ１０１は、ステップＳ７１５でタイマのスタートから時間Ｔが経過したか否かを判定する。時間Ｔは、タッチアップ直前の入力位置の信頼性が低い時間、例えば５０ｍｓｅｃ程度に予め設定されている。時間Ｔが経過しなければ、ＣＰＵ１０１は、Ｓ７１４に戻る。一方、時間Ｔが経過すれば、ＣＰＵ１０１は、ステップＳ７０３に戻る。
【００６０】
ＣＰＵ１０１は、ステップＳ７１６でフリックを検出したか否かを判定する。フリックを検出したと判定した場合、ＣＰＵ１０１は、ステップＳ７１７でフリックパラメータＦ＝ΔＲ（ｎ−ｋ−１）を算出し、メモリ１０２に格納する。フリックパラメータＦは、フリック動作に必要なスクロール方向とスクロール量からなる二次元ベクトル値である。変数ｋの値は、ステップＳ７１１を経由しない場合、０であり、ステップＳ７１１を経由した場合、５になっている。すなわち、タッチアップ直前にステップＳ７１０によりタッチ位置の移動方向の変化を検出した場合、ユーザの意図するフリック方向とは異なる可能性が高いので、５回前の時間変位をフリックパラメータＦとしている。
【００６１】
ＣＰＵ１０１は、ステップＳ７１８でフリックパラメータＦよりスクロール方向とスクロール量を決定し、フリック動作に応じた制御（例えば、地図の更新）を実行する。
【００６２】
本実施例では、フリック動作時にタッチ位置の移動方向の変化を検出するか否かにより、フリックパラメータを算出するタッチ位置を変更するので、フリック入力におけるユーザの違和感を軽減できる。すなわち、タッチ位置の方向の変化無しでタッチアップが行われた場合には、そのタッチ位置に基づきフリック動作に応じた制御を実行する。他方、タッチアップ前にタッチ位置の方向の変化を検出している場合には、所定回数を遡った時点で検出されたタッチ位置に基づきフリック動作に応じた制御を実行する。
【実施例４】
【００６３】
ピンチイン・ピンチアウト入力可能なＧＵＩにおいて、タッチ位置の間隔を逐次監視し、ピンチイン・ピンチアウト入力時の違和感を軽減するタッチ位置の検出動作を説明する。例えば、図６に示す地図アプリのＧＵＩ表示画面において、ユーザがＧＵＩ表示画面上の地図部分をタッチダウンすると、地図部分がスクロール可能な状態となる。ユーザは、地図部分がスクロール可能な状態においてピンチイン・ピンチアウトを行うと、地図部分を縮小または拡大できる。ここで、ピンチイン・ピンチアウトとは、タッチダウンを２箇所で検出した後、これらの間の距離を縮めたり（ピンチイン）、伸ばしたり（ピンチアウト）するように、タッチオンされた２箇所を移動することである。
【００６４】
図８は、本実施例におけるピンチイン・ピンチアウト操作時のタッチ位置検出の動作を示すフローチャートである。スタート時点では、タッチパネルに何も触れていないタッチオフの状態にあるものとする。
【００６５】
ＣＰＵ１０１は、ステップＳ８０１でタッチダウンを検出したか否かを判定する。タッチダウンを検出したと判定した場合、ＣＰＵ１０１は、ステップＳ８０２でタッチ位置がスクロール可能範囲内であるか否かを判定する。ステップＳ８０２でタッチ位置がスクロール可能範囲内であると判定した場合、ＣＰＵ１０１は、ステップＳ８０３に進み、スクロールを有効にする。
【００６６】
ＣＰＵ１０１は、ステップＳ８０４でピンチイン・ピンチアウト入力を待つ。ピンチイン・ピンチアウトの入力があると、ＣＰＵ１０１は、ステップＳ８０５でカウンタｎをリセット（ｎ＝０）し、ステップＳ８０６でタッチ位置の２点間距離Ｌ（ｎ）を算出し、メモリ１０２に格納する。
【００６７】
ＣＰＵ１０１は、ステップＳ８０７でタッチアップか否かを判定し、タッチアップと判定した場合、本動作を終了する。タッチアップを検出していないと判定した場合（Ｓ８０７）、ＣＰＵ１０１は、ステップＳ８０８で変数ｎをインクリメントし、ステップＳ８０９で時間的に隣接するタッチ位置の２点間距離Ｌ（ｎ）を算出し、メモリ１０２に格納する。
【００６８】
ＣＰＵ１０１は、ステップＳ８１０でタッチ位置の２点間距離の変位ΔＬ（ｎ−１）＝Ｌ（ｎ）−Ｌ（ｎ−１）を算出し、メモリ１０２に格納する。ＣＰＵ１０１は、ステップＳ８１１でｎ＞１か否かを判定し、ｎ＞１の場合、ステップＳ８１２に進み、ｎ＝１の場合、ステップＳ８０７に進む。
【００６９】
ＣＰＵ１０１は、ステップＳ８１２でΔＬ（ｎ−２）＞０かつΔＬ（ｎ−１）≦０であるか否かを判定する。ΔＬ（ｎ−２）＞０かつΔＬ（ｎ−１）≦０という条件は、タッチオンしている２点の間隔を拡げる（ピンチアウト）動作から縮める（ピンチイン）動作に移行したことを示す。この条件が成立する場合、ＣＰＵ１０１は、ステップＳ８１３でスクロールを無効にし、ステップＳ８１４でタイマをスタートする。
【００７０】
ＣＰＵ１０１は、ステップＳ８１５でタッチアップを検出したか否かを判定する。タッチアップを検出したと判定した場合、ＣＰＵ１０１は、本動作を終了する。タッチアップを検出していないと判定した場合（Ｓ８１５でＮｏ）、ＣＰＵ１０１は、ステップＳ８１６でタイマのスタートから時間Ｔ１が経過したか否かを判定する。時間Ｔ１が経過すると、ＣＰＵ１０１は、ステップＳ８０３に戻る。通常、ピンチアウト動作は２本の指を拡げるように行われるので、タッチアップした時に２本の指を閉じてしまうことがある。この傾向は、ユーザがピンチアウトからタッチアップを繰り返し行うような場面でより顕著に表れる。時間Ｔ１は、そのようにピンチアウト動作からタッチアップした時に指を閉じてしまうことによってピンチイン動作と誤判定しまう可能性が高い時間、例えば１５０ｍｓｅｃ程度に設定される。時間Ｔ１が経過しなければ、ＣＰＵ１０１は、Ｓ８１５に戻る。
【００７１】
ＣＰＵ１０１は、ステップＳ８１２でΔＬ（ｎ−２）＞０かつΔＬ（ｎ−１）≦０の条件が満たされない場合、ステップＳ８１７でΔＬ（ｎ−２）＜０かつΔＬ（ｎ−１）≧０が成立するかどうかを判定する。ΔＬ（ｎ−２）＜０かつΔＬ（ｎ−１）≧０という条件は、ユーザがピンチイン動作からピンチアウト動作に移行したことを意味する。この条件が成立する場合、ＣＰＵ１０１は、ステップＳ８１８でスクロールを無効にし、ステップＳ８１９でタイマをスタートする。
【００７２】
ＣＰＵ１０１は、ステップＳ８２０でタッチアップを検出したか否かを判定する。タッチアップを検出したと判定した場合、ＣＰＵ１０１は、本動作を終了する。一方、タッチアップを検出していないと判定した場合（Ｓ８２０でＮｏ）、ＣＰＵ１０１は、ステップＳ８２１でタイマのスタートから時間Ｔ２が経過したか否かを判定する。時間Ｔ２が経過すると、ＣＰＵ１０１は、ステップＳ８０３に戻る。通常、ピンチイン動作からタッチアップするとき、ユーザは２本の指をつまみ上げるように動作させるので、ピンチアウト動作に比べ、タッチアップ時に指が動く可能性は低い。すなわち、ユーザがピンチイン動作からタッチアップしたとき、ＣＰＵ１０１がピンチアウト動作を誤判定してしまう可能性は低い。そこで、時間Ｔ２は、時間Ｔ１よりも短い時間、例えば５０ｍｓｅｃなどに設定される。
【００７３】
本実施例では、タッチアップ直前のスクロール無効期間をピンチインとピンチアウトとで切り替えることで、ピンチイン・ピンチアウト時の位置とユーザの意図した位置の間にずれが発生するのを防ぐことができ、ユーザが感じる違和感を軽減できる。
【００７４】
なお、上記した各実施例は、例えば、ユーザが手袋をはめている等の場合に、特定のモードを設定するようにし、特定のモードが設定されている場合において実施するようにしてもよい。そして、それ以外のモードが設定されているときは、タッチアップ時に実際に検知されたタッチ位置を取得し、そのタッチ位置に基づく処理を実行するようにしてもよい。このようなモードを設定するモード設定手段を設け、適用すべきモードをユーザが指定または設定できるようにしてもよい。
【００７５】
本発明をパーソナルコンピュータに適用した場合の実施例を説明したが、本発明は、上述した位置入力補正動作又は制御に限定されない。すなわち、本発明は、操作手段としてタッチパネルを有する種々の装置、例えば、デジタルカメラなどの撮像装置に適用可能である。撮像装置では、メモリーカードなどの記録媒体に記録された撮影画像を、デジタルカメラの背面等に設置されたタッチパネル付きの表示装置で再生表示する際に本発明による位置入力補正が有用になる。さらに、ＰＤＡ、携帯電話端末や携帯型の画像ビューワ、ディスプレイを備えるプリンタ装置、デジタルフォトフレーム、音楽プレーヤー、ゲーム機、電子ブックリーダーなどの、タッチパネルを有する装置に本発明は適用可能である。
【００７６】
本発明は、上述の実施形態の１以上の機能を実現するプログラムをネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【図１】
2016219000.tif 000003
【図２】
2016219000.tif 000004
【図３】
2016219000.tif 000005
【図４】
2016219000.tif 000006
【図５】
2016219000.tif 000007
【図６】
2016219000.tif 000008
【図７】
2016219000.tif 000009
【図８】
2016219000.tif 000010
【図９】
2016219000.tif 000011