(57)【要約】  タッチポイント検出のための技術は、タッチスクリーンから入力フレームを受信し、複数のタッチポイント重心および複数のクラスタ境界を識別し、複数のタッチポイントを追跡するよう構成されたコンピューティングデバイスを備える。コンピューティングデバイスは入力フレームの複数のセルを複数のブロックにグループ化してよい。プロセッサグラフィックスを用いることで、コンピューティングデバイスは、入力フレームの局所的な最大値を識別しタッチ距離閾値内の複数の重心をマージするべく、１つのスレッドをブロックごとにディスパッチしてよい。コンピューティングデバイスは、複数のクラスタ境界を検出するべく、１つのスレッドを重心ごとにディスパッチしてよい。コンピューティングデバイスは、前の追跡タッチポイントの識別子を追跡距離閾値内のタッチポイントに割り当て、重複識別子を除去し、かつ、最も近いタッチポイントに未割当の識別子を割り当てるべく、１つのスレッドを前に識別されたタッチポイントごとにディスパッチしてよい。コンピューティングデバイスは、各未割当のタッチポイントに固有識別子を割り当てるべく、１つのスレッドをブロックごとにディスパッチしてよい。複数の他の実施形態が説明および主張される。
2016522522.tif 000002
【特許請求の範囲】
【請求項１】
タッチポイント重心検出のためのコンピューティングデバイスであって、
タッチスクリーンと、
前記タッチスクリーンから入力フレームを受信する入力フレームモジュールと、
重心検出モジュールと、
を備え、
前記入力フレームは複数のセルを定義し、各セルはタッチデータ値を有し、
前記重心検出モジュールは、
前記入力フレームの前記複数のセルを複数のブロックにグループ化し、
前記複数のブロックのそれぞれにおいて、信号閾値と予め定められた関係を持つタッチデータ値を有する局所的な最大セルを探索し、
複数の前記局所的な最大セルのそれぞれを重心として識別し、
互いのタッチ距離閾値内に位置する複数の重心をマージし、かつ、
マージされた前記複数の重心のそれぞれの周りのクラスタ境界を検出し、
各クラスタ境界は、前記入力フレームの少なくとも１つのセルを含む、コンピューティングデバイス。
【請求項２】
前記重心をマージすることは、
複数の縦線において前記複数のブロックをトラバースして前記タッチ距離閾値未満だけ縦方向に隔てられた、複数の隣接ブロックにおける複数の重心をマージすることと、
複数の横線において前記複数のブロックをトラバースして前記タッチ距離閾値未満だけ横方向に隔てられた、複数の隣接ブロックにおける複数の重心をマージすることと、
斜め方向に隣接する複数のペアにおいて前記複数のブロックをトラバースして前記タッチ距離閾値未満だけ斜め方向に隔てられた、複数の隣接ブロックにおける複数の重心をマージすることと
を含む、請求項１に記載のコンピューティングデバイス。
【請求項３】
複数の縦線において前記複数のブロックをトラバースし、複数の横線において前記複数のブロックをトラバースし、斜め方向に隣接する複数のペアにおいて前記複数のブロックをトラバースするプロセッサグラフィックスをさらに備え、
複数の縦線において前記複数のブロックをトラバースすることは、
前記プロセッサグラフィックスを用いてブロックごとに１つのタスクをディスパッチすることと、
複数の縦線において前記複数のブロックをトラバースするべく、前記プロセッサグラフィックスのスコアボードを用いて前記複数のタスクの間のデータ従属性をセットすることと
を含み、
各タスクは、前記隣接ブロックに位置する他の重心から前記タッチ距離閾値内に位置する前記ブロック内で重心をマージすることを含み、
複数の横線において前記複数のブロックをトラバースすることは、
前記プロセッサグラフィックスを用いてブロックごとに１つのタスクをディスパッチすることと、
複数の横線において前記複数のブロックをトラバースするべく、前記プロセッサグラフィックスの前記スコアボードを用いて前記複数のタスクの間のデータ従属性をセットすることと
を含み、
各タスクは、前記隣接ブロックに位置する他の重心から前記タッチ距離閾値内に位置する前記ブロック内で重心をマージすることを含み、
斜め方向に隣接する複数のペアにおいて前記複数のブロックをトラバースすることは、
前記プロセッサグラフィックスを用いて４個のブロックのスクウェアグループごとに１つのタスクをディスパッチすることと、
斜め方向に隣接する複数のペアにおいて前記複数のブロックをトラバースするべく、前記プロセッサグラフィックスの前記スコアボードを用いて前記複数のタスクの間でデータ従属性をセットすることと
を含み、
各タスクは、隣接ブロックに位置する他の重心から前記タッチ距離閾値内に位置する複数のブロックの前記スクウェアグループ内で複数の重心をマージすることを含む、請求項２に記載のコンピューティングデバイス。
【請求項４】
マージされた前記複数の重心のそれぞれの周りの前記クラスタ境界を検出することは、
前記重心を囲む複数のセルに対する前記入力フレームからデータをロードすることと、
前記信号閾値未満のタッチデータ値を含む複数のセルをゼロに設定することと、
前記クラスタ境界を囲む前記入力フレームの複数のセルを含む入力ウィンドウを定義することと、
前記入力ウィンドウのサイズと等しいサイズを有する比較ウィンドウを構築すべく前記クラスタの複数のエッジセルを複製することと、
エッジセルの複数の差異を決定すべく、前記比較ウィンドウの対応複製エッジセルのタッチデータ値から、前記入力ウィンドウの各エッジセルのタッチデータ値を減算することと、
エッジセルの前記複数の差異のいずれもゼロより小さくないとの判定に応じて前記比較ウィンドウのサイズを増やすことと、
エッジセルの前記複数の差異のいずれかがゼロより小さいとの判定に応じて前記入力ウィンドウにおける有効セルの数をカウントすることと
を有し、
各有効セルはゼロより小さくない対応エッジセルの差異を有する、請求項１に記載のコンピューティングデバイス。
【請求項５】
マージされた前記複数の重心のそれぞれの周りの前記クラスタ境界を検出することは、
前記重心を囲む複数のセルに対する前記入力フレームからデータをロードすることと、
前記信号閾値未満のタッチデータ値を含む複数のセルをゼロに設定することと、
第１ウィンドウ内の複数のエッジセルの第１最大値を計算することと、
前記重心を囲む前記入力フレームの第２ウィンドウ内の複数のエッジセルの合計を計算することであって、前記第２ウィンドウは前記第１ウィンドウを囲むことと、
前記第２ウィンドウ内の複数のエッジセルの第２最大値を計算することと、
前記信号閾値を乗算された前記第２ウィンドウ内のエッジセル数よりも前記合計が小さいか否かを判定することと、
前記第２最大値が前記第１最大値より大きいかを判定することと、
前記信号閾値を乗算された前記第２ウィンドウ内の前記エッジセル数よりも前記合計が小さくないとの判定、および、前記第２最大値が前記第１最大より大きくないとの判定に応じて、前記第１ウィンドウおよび前記第２ウィンドウのサイズを増やすことと、
前記信号閾値を乗算された前記第２ウィンドウ内の前記エッジセル数よりも前記合計が小さいとの判定、または、前記第２最大値が前記第１最大より大きいとの判定に応じて、前記第１ウィンドウ内の有効セルの数をカウントすることと
を含む、請求項１に記載のコンピューティングデバイス。
【請求項６】
プロセッサグラフィックスと、
並行ディスパッチモジュールと
をさらに備え、
前記局所的な最大セルを探索することは、
前記プロセッサグラフィックスにより実行される１つの探索タスクをブロックごとに割り当てることを有し、
前記複数の重心をマージすることは、前記プロセッサグラフィックスにより実行される１つのマージタスクをブロックごとに割り当てることを有し、
マージされた前記複数の重心のそれぞれの周りの前記クラスタ境界を検出することは、前記プロセッサグラフィックスにより実行される１つの検出タスクをマージされた重心ごとに割り当てることを有し、
前記並行ディスパッチモジュールは、前記プロセッサグラフィックスの複数の実行ユニットを用いて、（ｉ）並行して複数の前記探索タスクを実行し、（ｉｉ）並行して複数の前記マージタスクを実行し、（ｉｉｉ）並行して複数の前記検出タスクを実行する、請求項１〜５のいずれか１項に記載のコンピューティングデバイス。
【請求項７】
前記重心検出モジュールは、前記プロセッサグラフィックスの単一命令多重データ命令を用いて、局所的な最大セルを探索すること、複数の重心をマージすること、または、前記クラスタ境界を検出することのうち少なくとも１つを実行する、請求項６に記載のコンピューティングデバイス。
【請求項８】
タッチポイント追跡のためのコンピューティングデバイスであって、
タッチスクリーンと、
（ｉ）前記タッチスクリーンから前の入力フレームを受信するとともに、（ｉｉ）前記タッチスクリーンから現在の入力フレームを受信する入力フレームモジュールと、
タッチポイント追跡モジュールと
を備え、
前記前の入力フレームは、複数の前の追跡タッチポイントを識別する複数のセルを定義し、
前記現在の入力フレームは、複数のセルを定義するとともに複数の現在のタッチポイントを識別し、
前記タッチポイント追跡モジュールは、
前記前の入力フレームにおいて識別された、前記複数の前の追跡タッチポイントのそれぞれの位置を予測し、
前記前の追跡タッチポイントの予測された前記位置の追跡距離閾値内に現在位置を有する現在のタッチポイントに、前の追跡タッチポイントの識別子を割り当て、
複数の前記現在のタッチポイントに割り当てられた複数の重複識別子を除去し、
複数の前記前の追跡タッチポイントの各未割当の識別子を、（ｉ）前記追跡距離閾値内で前記前の追跡タッチポイントに最も近い現在のタッチポイントであり、かつ、（ｉｉ）複数の前記前の追跡タッチポイントの識別子が以前に割り当てられていない現在のタッチポイントに割り当て、
未割当の現在の各タッチポイントに固有識別子を割り当てる、コンピューティングデバイス。
【請求項９】
前記前の追跡タッチポイントの前記識別子を前記現在のタッチポイントに割り当てることは、
前記前の追跡タッチポイントの予測された前記位置の前記追跡距離閾値内に位置する前記入力フレームの全ての現在のタッチポイントを取得することと、
取得された複数の前記現在のタッチポイントのうち、予測された前記位置に最も近い現在のタッチポイントを識別することと、
前記最も近い現在のタッチポイントの前記追跡距離閾値内に複数の予測された位置を有する、全ての前の追跡タッチポイントを取得することと、
取得された複数の前記前の追跡タッチポイントのうち、前記最も近い現在のタッチポイントに対して最も近い前の追跡タッチポイントを識別することと、
前記最も近い前の追跡タッチポイントの識別子を、前記最も近い現在のタッチポイントに割り当てることとを含む、請求項８に記載のコンピューティングデバイス。
【請求項１０】
前記現在のタッチポイントに割り当てられた前記複数の重複識別子を除去することは、
前記前の追跡タッチポイントの予測された前記位置の前記追跡距離閾値内に位置する前記入力フレームの全ての現在のタッチポイントを取得することと、
取得された複数の前記現在のタッチポイントのうち１つより多いものが、前記前の追跡タッチポイントの前記識別子に適合する識別子を有するかを判定することと、
取得された複数の前記現在のタッチポイントのうち１つより多いものが、前記前の追跡タッチポイントの前記識別子に適合する識別子を有するとの判定に応じて、
取得された複数の前記現在のタッチポイントのうち、（ｉ）前記前の追跡タッチポイントに最も近い位置、および、（ｉｉ）前記前の追跡タッチポイントの前記識別子に適合する識別子を有する、最も近い現在のタッチポイントを識別し、
前記最も近い現在のタッチポイントの前記識別子を維持し、かつ、
取得された複数の前記現在のタッチポイントのうち、前記前の追跡タッチポイントの前記識別子に適合する識別子を有する、複数の他の現在のタッチポイントの前記識別子を除去することと
を有する、請求項８に記載のコンピューティングデバイス。
【請求項１１】
プロセッサグラフィックスおよび並行ディスパッチモジュールをさらに備え、
前記前の追跡タッチポイントの前記識別子を割り当てることは、
前記プロセッサグラフィックスにより実行される１つの割り当てタスクを、前の追跡タッチポイントごとに割り当てることを含み、
前記複数の重複識別子を除去することは、
前記プロセッサグラフィックスにより実行される１つの除去タスクを、前の追跡タッチポイントごとに割り当てることを含み、
未使用の前の追跡タッチポイントそれぞれの前記識別子を割り当てることは、
前記プロセッサグラフィックスにより実行される１つの未使用識別子割り当てタスクを、前の追跡タッチポイントごとに割り当てることを含み、
未割当の現在の各タッチポイントに固有識別子を割り当てることは、
前記現在の入力フレームの複数のセルを複数のブロックにグループ化することと、
前記プロセッサグラフィックスにより実行される１つの固有識別子割り当てタスクを、ブロックごとに割り当てることと、
前記プロセッサグラフィックスのスコアボードを用いて前記複数のブロックの間のデータ従属性をセットすることと
を含み、
前記並行ディスパッチモジュールは、前記プロセッサグラフィックスの複数の実行ユニットを用いて、
（ｉ）並行して複数の前記割り当てタスクを実行し、
（ｉｉ）並行して複数の前記除去タスクを実行し、
（ｉｉｉ）並行して複数の前記未使用識別子割り当てタスクを実行し、
（ｉｖ）並行して複数の前記固有識別子割り当てタスクを実行する、請求項８〜１０の何れか１項に記載のコンピューティングデバイス。
【請求項１２】
前記タッチポイント追跡モジュールは、前記プロセッサグラフィックスの単一命令多重データ命令を用い、
前記前の追跡タッチポイントの前記識別子を割り当てること、
複数の重複識別子を除去すること、
各未割当の識別子を割り当てること、または、
未割当の現在の各タッチポイントに前記固有識別子を割り当てること
のうち少なくとも１つを実行する、請求項１１に記載のコンピューティングデバイス。
【請求項１３】
コンピューティングデバイス上で複数のタッチポイント重心を検出する方法であって、
前記コンピューティングデバイス上で、前記コンピューティングデバイスのタッチスクリーンから入力フレームを受信する段階であって、前記入力フレームが複数のセルを定義し、各セルがタッチデータ値を有する段階と、
前記コンピューティングデバイス上で、前記入力フレームの前記複数のセルを複数のブロックにグループ化する段階と、
前記コンピューティングデバイス上で、前記複数のブロックのそれぞれ内の局所的な最大セルを探索する段階であって、前記局所的な最大セルは、信号閾値と予め定められた関係を持つタッチデータ値を有する段階と、
前記コンピューティングデバイス上で、複数の前記局所的な最大セルのそれぞれを重心として識別する段階と、
前記コンピューティングデバイス上で、互いにタッチ距離閾値内に位置する複数の重心をマージする段階と、
前記コンピューティングデバイス上で、マージされた前記複数の重心のそれぞれの周りのクラスタ境界を検出する段階であって、各クラスタ境界は前記入力フレームの少なくとも１つのセルを含む段階と、
を備える方法。
【請求項１４】
前記複数の重心をマージする段階は、
複数の縦線において前記複数のブロックをトラバースする段階と、
複数の横線において前記複数のブロックをトラバースする段階と、
斜め方向に隣接する複数のペアにおいて前記複数のブロックをトラバースする段階と
を備え、
複数の縦線において前記複数のブロックをトラバースする段階は、
前記コンピューティングデバイスのプロセッサグラフィックスを用いてブロックごとに１つのタスクをディスパッチする段階と、
複数の縦線において前記複数のブロックをトラバースするべく、前記プロセッサグラフィックスのスコアボードを用いて、前記複数のタスクの間のデータ従属性をセットする段階と
を含み、
各タスクは、前記隣接ブロックに位置する他の重心から前記タッチ距離閾値内に位置する前記ブロック内で重心をマージすることを含み、
複数の横線において前記複数のブロックをトラバースする段階は、
前記プロセッサグラフィックスを用いてブロックごとに１つのタスクをディスパッチする段階と、
複数の横線において前記複数のブロックをトラバースするべく、前記プロセッサグラフィックスの前記スコアボードを用いて、前記複数のタスクの間のデータ従属性をセットする段階と
を含み、
各タスクは前記隣接ブロックに位置する他の重心から前記タッチ距離閾値内に位置する前記ブロック内で重心をマージすることを含み、
斜め方向に隣接する複数のペアにおいて前記複数のブロックをトラバースする段階は、
前記プロセッサグラフィックスを用いて４個のブロックのスクウェアグループごとに１つのタスクをディスパッチする段階と、
斜め方向に隣接する複数のペアにおいて前記複数のブロックをトラバースするべく、前記プロセッサグラフィックスの前記スコアボードを用いて、前記複数のタスクの間のデータ従属性をセットする段階と
を含み、
各タスクは、隣接ブロックに位置する他の重心から前記タッチ距離閾値内に位置する複数のブロックの前記スクウェアグループ内で複数の重心をマージすることを含む、請求項１３に記載の方法。
【請求項１５】
マージされた前記複数の重心のそれぞれの周りの前記クラスタ境界を検出する段階は、
前記重心を囲む複数のセルに対する前記入力フレームからデータをロードする段階と、
前記信号閾値未満のタッチデータ値を有する複数のセルにゼロを書き込む段階と、
前記クラスタ境界を囲む前記入力フレームの複数のセルを有する入力ウィンドウを定義する段階と、
前記入力ウィンドウのサイズに等しいサイズを有する比較ウィンドウを構築するべく前記クラスタの複数のエッジセルを複製する段階と、
エッジセルの複数の差異を決定するべく、前記入力ウィンドウの各エッジセルのタッチデータ値を、前記比較ウィンドウの対応複製エッジセルのタッチデータ値から減算する段階と、
エッジセルの前記複数の差異のいずれもゼロより少なくないとの判定に応じて前記比較ウィンドウのサイズを増やす段階と、
エッジセルの前記複数の差異のいずれかがゼロより少ないとの判定に応じて前記入力ウィンドウ内の有効セルの数をカウントする段階と、
を有し、
各有効セルは、ゼロより小さくない対応エッジセルの差異を有する、請求項１３に記載の方法。
【請求項１６】
マージされた前記複数の重心のそれぞれの周りの前記クラスタ境界を検出する段階は、
前記重心を囲む複数のセルに対する前記入力フレームからデータをロードする段階と、
前記信号閾値未満のタッチデータ値を有する複数のセルにゼロを書き込む段階と、
第１ウィンドウ内の複数のエッジセルの第１最大値を計算する段階と、
前記重心を囲む前記入力フレームの第２ウィンドウ内の複数のエッジセルの合計を計算する段階であって、前記第２ウィンドウが前記第１ウィンドウを囲む段階と、
前記第２ウィンドウ内の複数のエッジセルの第２最大値を計算する段階と、
前記信号閾値を乗算された前記第２ウィンドウ内のエッジセル数よりも前記合計が小さいか否かを判定する段階と、
前記第２最大値が前記第１最大値より大きいか否かを判定する段階と、
前記信号閾値を乗算された前記第２ウィンドウ内の前記エッジセル数よりも前記合計が小さくないとの判定、および、前記第２最大値が前記第１最大より大きくないとの判定に応じて、前記第１ウィンドウおよび前記第２ウィンドウのサイズを増やす段階と、
前記信号閾値を乗算された前記第２ウィンドウ内の前記エッジセル数よりも前記合計が小さいとの判定、または、前記第２最大値が前記第１最大値より大きいとの判定に応じて、前記第１ウィンドウ内の有効セルの数をカウントする段階と、
を有する、請求項１３に記載の方法。
【請求項１７】
前記局所的な最大セルを探索する段階は、
前記コンピューティングデバイスのプロセッサグラフィックスにより実行される１つの探索タスクをブロックごとに割り当てる段階と、
前記プロセッサグラフィックスの複数の実行ユニットを用いて、並行して複数の前記探索タスクを実行する段階と
を有し、
前記複数の重心をマージする段階は、
前記プロセッサグラフィックスにより実行される１つのマージタスクをブロックごとに割り当てる段階と、
前記プロセッサグラフィックスの複数の実行ユニットを用いて、並行して複数の前記マージタスクを実行する段階と
を有し、
マージされた前記複数の重心のそれぞれの周りの前記クラスタ境界を検出する段階は、
前記プロセッサグラフィックスにより実行される１つの検出タスクをマージされた重心ごとに割り当てる段階と、
前記プロセッサグラフィックスの複数の実行ユニットを用いて、並行して複数の前記検出タスクを実行する段階と
を有する、請求項１３に記載の方法。
【請求項１８】
前記コンピューティングデバイスの前記プロセッサグラフィックスの単一命令多重データ命令を用いて、前記局所的な最大セルを探索する段階、前記複数の重心をマージする段階、または、前記クラスタ境界を検出する段階のうち少なくとも１つを実行する段階をさらに備える、請求項１７に記載の方法。
【請求項１９】
タッチポイントを追跡する方法であって、
コンピューティングデバイス上で、前記コンピューティングデバイスのタッチスクリーンから受信された前の入力フレーム内で識別された複数の前の追跡タッチポイントのそれぞれの位置を予測する段階であって、前記前の入力フレームは複数のセルを定義する段階と、
前記コンピューティングデバイス上で、複数のセルを定義するとともに複数の現在のタッチポイントを識別する現在の入力フレームを、前記タッチスクリーンから受信する段階と、
前記コンピューティングデバイス上で、前の追跡タッチポイントの予測された前記位置の追跡距離閾値内に現在位置を有する現在のタッチポイントに対し、前記前の追跡タッチポイントの識別子を割り当てる段階と、
前記コンピューティングデバイス上で、複数の前記現在のタッチポイントに割り当てられた複数の重複識別子を除去する段階と、
前記コンピューティングデバイス上で、複数の前記前の追跡タッチポイントの各未割当の識別子を、（ｉ）前記追跡距離閾値内の前記前の追跡タッチポイントに最も近い現在のタッチポイントであって、かつ、（ｉｉ）複数の前記前の追跡タッチポイントの識別子を以前に割り当てられていない現在のタッチポイントに対して割り当てる段階と、
前記コンピューティングデバイス上で、未割当の現在の各タッチポイントに固有識別子を割り当てる段階と
を備える方法。
【請求項２０】
前記前の追跡タッチポイントの前記識別子を前記現在のタッチポイントに割り当てる段階は、
前記前の追跡タッチポイントの予測された前記位置の前記追跡距離閾値内に位置する、前記入力フレームの全ての現在のタッチポイントを取得する段階と、
取得された複数の前記現在のタッチポイントのうち、予測された前記位置に最も近い現在のタッチポイントを識別する段階と、
前記最も近い現在のタッチポイントの前記追跡距離閾値内に複数の予測された位置を有する全ての前の追跡タッチポイントを取得する段階と、
取得された複数の前記前の追跡タッチポイントのうち、前記最も近い現在のタッチポイントに最も近い前の追跡タッチポイントを識別する段階と、
前記最も近い前の追跡タッチポイントの識別子を、前記最も近い現在のタッチポイントに割り当てる段階と
を有する、請求項１９に記載の方法。
【請求項２１】
前記現在のタッチポイントに割り当てられた前記複数の重複識別子を除去する段階は、
前記前の追跡タッチポイントの予測された前記位置の前記追跡距離閾値内に位置する、前記入力フレームの全ての現在のタッチポイントを取得する段階と、
取得された複数の前記現在のタッチポイントのうちの１つより多くが、前記前の追跡タッチポイントの前記識別子に適合する識別子を有するか否かを判定する段階と、
取得された複数の前記現在のタッチポイントのうちの１つより多くが、前記前の追跡タッチポイントの前記識別子に適合する識別子を有するとの判定に応じて、
取得された複数の前記現在のタッチポイントのうち、（ｉ）前記前の追跡タッチポイントに最も近い位置、および、（ｉｉ）前記前の追跡タッチポイントの前記識別子に適合する識別子、を有する、最も近い現在のタッチポイントを識別し、
前記最も近い現在のタッチポイントの前記識別子を維持し、かつ、
取得された複数の前記現在のタッチポイントのうち、前記前の追跡タッチポイントの前記識別子に適合する識別子を有する複数の他の現在のタッチポイントの前記識別子を除去する段階と
を有する、請求項１９に記載の方法。
【請求項２２】
前記前の追跡タッチポイントの前記識別子を割り当てる段階は、
前記コンピューティングデバイスのプロセッサグラフィックスにより実行される１つの割り当てタスクを前の追跡タッチポイントごとに割り当てる段階と、
前記プロセッサグラフィックスの複数の実行ユニットを用いて、並行して複数の前記割り当てタスクを実行する段階と
を有し、
前記複数の重複識別子を除去する段階は、
前記プロセッサグラフィックスにより実行される１つの除去タスクを前の追跡タッチポイントごとに割り当てる段階と、
前記プロセッサグラフィックスの複数の実行ユニットを用いて、並行して複数の前記除去タスクを実行する段階と
を有し、
未使用の前の追跡タッチポイントそれぞれの前記識別子を割り当てる段階は、
前記プロセッサグラフィックスにより実行される１つの割り当てタスクを前の追跡タッチポイントごとに割り当てる段階と、
前記プロセッサグラフィックスの複数の実行ユニットを用いて、並行して複数の前記割り当てタスクを実行する段階と
を有し、
未割当の現在の各タッチポイントに固有識別子を割り当てる段階は、
前記現在の入力フレームの複数のセルを複数のブロックにグループ化する段階と、
前記プロセッサグラフィックスにより実行される１つの割り当てタスクをブロックごとに割り当てる段階と、
前記プロセッサグラフィックスのスコアボードを用いて、前記複数のブロックの間のデータ従属性をセットする段階と、
前記プロセッサグラフィックスの複数の実行ユニットを用いて、並行して複数の前記割り当てタスクを実行する段階と
を含む、請求項１９に記載の方法。
【請求項２３】
前記プロセッサグラフィックスの単一命令多重データ命令を用いて、
前記前の追跡タッチポイントの前記識別子を割り当てる段階、複数の重複識別子を除去する段階、各未割当の識別子を割り当てる段階、または、未割当の現在の各タッチポイントに前記固有識別子を割り当てる段階のうち少なくとも１つを実行する段階をさらに備える、請求項２２に記載の方法。
【請求項２４】
コンピューティングデバイスであって、
プロセッサと、
前記プロセッサにより実行される場合に前記コンピューティングデバイスに請求項１３〜２３の何れか１項に記載の方法を実行させる複数の命令が格納されたメモリと
を備えるコンピューティングデバイス。
【請求項２５】
実行されることに応じてコンピューティングデバイスに請求項１３〜２３の何れか１項に記載の方法を実行させる、自身に格納された複数の命令を備える１または複数の機械可読記憶媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
現在の多くのコンピューティングデバイスはユーザからの主要な入力モードとしてタッチスクリーンを用いる。タッチコンピューティングは直観的な効率のよいユーザインタラクションを提供する能力を有する。コンピューティングデバイスは、典型的にタッチスクリーン上の複数の同時タッチポイントを検出して解釈するタッチインタフェースを用いることで、タッチ入力ジェスチャを認識し、スクリーン上に乗っているユーザの掌などの偽の接触を拒否する。タッチ追跡およびジェスチャーインタラクションは、自然なヒューマンインタラクションを可能とすべく、高速かつ滑らかであるべきである。
【０００２】
タッチポイントの識別および追跡の典型的なアルゴリズムは、本質的に高度に連続的（ｓｅｑｕｅｎｔｉａｌ）で、反復型（ｉｔｅｒａｔｉｖｅ）で、および／または再帰的（ｒｅｃｕｒｓｉｖｅ）である。コンピューティングデバイスは、重心と呼ばれるタッチ強度ピークの位置を識別すること、および、クラスタ境界と呼ばれるタッチポイントの範囲（ｅｘｔｅｎｔｓ）を識別することで複数のタッチポイントを識別しうる。コンピューティングデバイスはまた、タッチポイントの動きを継時的に追跡することで、ジェスチャ認識を可能にしうる。例えば、タッチポイント重心境界の検出のための典型的なアルゴリズムは、入力フレームにおける複数の隣接セルの再帰的なトラバースを含んでよく、また、潜在的なタッチポイントごとに連続して反復されうる。またタッチポイント追跡のための典型的なアルゴリズムは、複数の予測タッチポイント位置と、複数の現在のタッチポイントの検出位置との全ての既知の組み合わせを用いて反復されうる。これらの典型的なアルゴリズムは、うまくスケーリングしないかもしれず、または、並行な実行によく反応しないかもしれない。
【図面の簡単な説明】
【０００３】
本明細書で説明された複数の概念は、例として示されるものであり、添付の複数の図において限定として示されるものではない。例示の簡略化及び明瞭化のため、複数の図に示される複数の要素は、必ずしも縮尺に従って表されていない。適切とみなされる場合には、複数の参照符号は、複数の対応するまたは類似の要素を示すために、複数の図の間で反復されている。
【図１】プロセッサグラフィックスを用い、並行して複数のタッチポイントを検出するためのコンピューティングデバイスの少なくとも１つの実施形態の簡略ブロック図である。
【図２】図１のコンピューティングデバイスの環境の少なくとも１つの実施形態の簡略ブロック図である。
【図３】図１および２のコンピューティングデバイスにより実行されうる、複数のタッチポイントを検出するための方法の少なくとも１つの実施形態の簡略フロー図である。
【図４】図１および２のコンピューティングデバイスのタッチスクリーンにより生成され得る入力データフレームの概略図である。
【図５】図１および２のコンピューティングデバイスにより実行されうる、複数のタッチポイント重心および複数のクラスタを検出するための方法の少なくとも１つの実施形態の簡略フロー図である。
【図６】図１および２のコンピューティングデバイスにより実行され得る、プロセッサグラフィックスを用い並行して複数の入力フレームをトラバースするための方法の少なくとも１つの実施形態の簡略フロー図である。
【図７】図１および２のコンピューティングデバイスにより実行され得る、プロセッサグラフィックスを用い並行して複数のタッチポイントクラスタ境界を識別するための方法の少なくとも１つの実施形態の簡略フロー図である。
【図８】図７の方法の実行の間に用いられ得る入力ウィンドウおよび比較ウィンドウの概略図である。
【図９】図１および２のコンピューティングデバイスにより実行され得る、プロセッサグラフィックスを用い並行して複数のタッチポイントクラスタ境界を識別するための他の方法の少なくとも１つの実施形態の簡略フロー図である。
【図１０】図１および２のコンピューティングデバイスにより実行され得る、複数のタッチポイント位置を追跡するための方法の少なくとも１つの実施形態の簡略フロー図である。
【図１１】図１０の方法の一部として実行され得る、プロセッサグラフィックスを用い並行してタッチポイントデータに複数のタッチポイント識別子を割り当てるためのサブ方法の少なくとも１つの実施形態の簡略フロー図である。
【図１２】図１０の方法の一部として実行され得る、プロセッサグラフィックスを用い並行して重複のタッチポイント識別子を除去するためのサブ方法の少なくとも１つの実施形態の簡略フロー図である。
【図１３】図１０の方法の一部として実行され得る、プロセッサグラフィックスを用い並行して未使用の予測タッチポイントの識別子を割り当てるためのサブ方法の少なくとも１つの実施形態の簡略フロー図である。
【発明を実施するための形態】
【０００４】
本開示の複数の概念は、様々な複数の改良及び複数の代替形式に容易に想到するが、それらの具体的な複数の実施形態は、例として複数の図面において示されており、本明細書で詳細に説明される。しかしながら、本開示の複数の概念を開示された特定の複数の形式に限定する意図はなく、反対に、本開示及び添付された特許請求の範囲に一致する全ての改良、均等物及び代替物を包含することを意図することが理解されるべきである。
【０００５】
明細書における「一実施形態」、「実施形態」、「例示的な実施形態」等の記載は、説明される実施形態が特定の特徴、構造または特性を含み得るが、各実施形態が当該特定の特徴、構造または特性を含んでもよく、または必ずしも含まないこともあることを示す。さらに、そのような複数の表現は、必ずしも同じ実施形態を参照するものではない。さらに、特定の特徴、構造または特性が、ある実施形態と関連して説明される場合、明示的に説明されているか否かに関わらず、このような特徴、構造または特性を他の複数の実施形態に関連してもたらすことは、当業者の知識の範囲内にあるとされる。
【０００６】
複数の開示された実施形態は、いくつかの場合、ハードウェア、ファームウェア、ソフトウェアまたはそれらの任意の組み合わせで実装されてもよい。複数の開示された実施形態は、１または複数のプロセッサによって読み出し及び実行可能な一時的または非一時的機械可読（例えば、コンピュータ可読）記憶媒体によって伝達され、またはこれに格納される複数の命令としてさらに実装されてもよい。機械可読記憶媒体は、任意のストレージデバイス、メカニズム、または機械によって可読な形式で情報を格納または送信するための他の物理的構造（例えば、揮発性または不揮発性メモリ、メディアディスクまたは他のメディアデバイス）として具現化されてもよい。
【０００７】
複数の図面において、いくつかの構造または方法の特徴は、複数の具体的な構成および／または複数の順番で示されてもよい。しかしながら、このような複数の具体的な構成および／または複数の順序が必要とされなくてもよいことが理解されるべきである。むしろ、いくつかの実施形態において、このような特徴は、例示的な複数の図において示されるものとは異なる態様および／または順序で構成されてもよい。さらに、特定の図において構造または方法の特徴を含むことは、このような特徴が全ての実施形態で必要とされることを示唆することを意味するものではなく、いくつかの実施形態においては、含まれなくてもよく、または、他の複数の特徴と組み合わせられてもよい。
【０００８】
ここで図１を参照すると、コンピューティングデバイス１００は、プロセッサグラフィックスを用い並行してタッチスクリーンから受信される、タッチ入力されたフレームデータを処理する。入力フレームデータの処理は、複数の入力フレームをまたぐ複数のタッチポイントの動きの追跡と同様に、複数のタッチポイント重心および複数のクラスタ境界の識別を含んでよい。入力フレームデータのプロセッサグラフィックス上での並行な処理は、性能を向上させ、電力消費を低減し、または、それらの任意の組み合わせを行ってよい。さらに、本明細書で開示される処理アルゴリズムは、多数の異なるタッチ入力に対してより安定した実行時間を有してよく、よってタッチスクリーンの感応性および予測精度を向上しうる。
【０００９】
コンピューティングデバイス１００は、タッチ入力フレームの処理と、その他の本明細書で説明される複数の機能の実行が可能な任意のタイプのコンピューティングデバイスとして具現化されてよい。例えば、コンピューティングデバイス１００は、限定されるものではないが、コンピュータ、スマートフォン、タブレットコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、モバイルコンピューティングデバイス、デスクトップコンピュータ、ワークステーション、セルラー電話、ハンドセット、メッセージングデバイス、車載テレマティクスデバイス、ネットワークアプライアンス、ウェブアプライアンス、分散コンピューティングシステム、マルチプロセッサシステム、プロセッサベースシステム、消費者向け電子デバイス、デジタルテレビデバイスおよび／または、並行してタッチポイントデータを処理するよう構成された任意の他のコンピューティングデバイスとして具現化されてよい。図１に示されるように、コンピューティングデバイス１００は、プロセッサ１２０、Ｉ／Ｏサブシステム１３０、メモリ１３２、データストレージ１３４、ディスプレイ１３６、およびタッチスクリーン１３８を備える。当然のことながら、コンピューティングデバイス１００は、他の実施形態においては、タブレットコンピュータでよく見られるもの（例えば様々な入出力デバイス）など、他のまたは追加の複数のコンポーネントを備えてよい。さらに、いくつかの実施形態において、例示的な複数のコンポーネントのうち１または複数は、他のコンポーネントに組み込まれ、またはその一部を形成してもよい。例えば、メモリ１３２またはそれらの一部は、いくつかの実施形態において、プロセッサ１２０に組み込まれてもよい。
【００１０】
プロセッサ１２０は、本明細書で説明される複数のファンクションを実行することが可能な任意のタイプのプロセッサとして具現化されてもよい。プロセッサ１２０は、複数のプロセッサコア１２２を有するマルチコアプロセッサとして例示的に具現化される。しかしながら、プロセッサ１２０は、シングルまたはマルチコアプロセッサ、デジタル信号プロセッサ、マイクロコントローラ、または他のプロセッサもしくは処理／制御回路として具現化されてもよい。同様に、メモリ１３２は、本明細書で説明される複数のファンクションを実行することが可能な、任意のタイプの揮発性または不揮発性メモリ、あるいはデータストレージとして具現化されてもよい。動作中、メモリ１３２は、コンピューティングデバイス１００の動作中に用いられる様々なデータおよびソフトウェア（例えば、複数のオペレーティングシステム、複数のアプリケーション、複数のプログラム、複数のライブラリ、および複数のドライバ）を格納してもよい。メモリ１３２は、Ｉ／Ｏサブシステム１３０を介して、プロセッサ１２０と通信可能に連結されてもよく、これは、コンピューティングデバイス１００のプロセッサ１２０、メモリ１３２及び複数の他のコンポーネントとの入出力動作を容易にする回路および／または複数のコンポーネントとして具現化されてもよい。例えば、Ｉ／Ｏサブシステム１３０は、複数のメモリコントローラハブ、複数の入出力制御ハブ、複数のファームウェアデバイス、複数の通信リンク（すなわち、複数のポイントツーポイントリンク、複数のバスリンク、複数の有線、複数のケーブル、複数の光ガイド、複数のプリント回路基板トレース等）および／または複数の入出力動作を容易にする複数の他のコンポーネント及びサブシステムとして具現化されてもよく、または、これらを含んでもよい。いくつかの実施形態において、Ｉ／Ｏサブシステム１３０は、システムオンチップ（ＳｏＣ）の一部を形成してもよく、プロセッサ１２０、メモリ１３２及びコンピューティングデバイス１００の複数の他のコンポーネントと共に、単一の集積回路チップに組み込まれてもよい。
【００１１】
プロセッサ１２０はプロセッサグラフィックス１２４を有する。プロセッサグラフィックス１２４は、３次元グラフィック、２次元グラフィックおよび様々な動画フォーマットの促進された処理およびレンダリングを提供しうるグラフィックおよびメディア処理回路を有する。プロセッサグラフィックス１２４は概して、密に並行な複数のコンピューティングリソースによって特徴づけられており、複数の実行ユニット１２６として具現化されうる。いくつかの実施形態において、複数の実行ユニット１２６は、複数の完全なプログラマブル実行ユニットまたは、ジオメトリ処理、変換及びライティング、ラスター化、メディアデコーディング、メディアエンコーディングおよびその他のための複数の固定機能実行ユニットの任意の組み合わせを有してよい。
【００１２】
プロセッサグラフィックス１２４は、複数の汎用のコンピューティングタスクを実行するべく、プロセッサコア１２２とともに用いられてよい。複数のコンピューティングタスクは、複数のスレッド、複数のカーネル、または、プロセッサグラフィックス１２４による実行のために複数のプロセッサコア１２２の１または複数によりディスパッチされる他の実行可能コードとして具現化されてよい。複数のタスクは、プロセッサグラフィックス１２４の複数のプログラマブル実行ユニット１２６および／または複数の固定機能実行ユニット１２６により並行して実行される。複数の実行ユニット１２６は、SIMD減算およびSIMD加算命令などの、多数の単一命令多重データ（SIMD）命令を提供してよい。
【００１３】
いくつかの実施形態において、プロセッサグラフィックス１２４は、実行のために複数のタスクをディスパッチするスコアボード１２８などの命令スケジューラを有してよい。これらの実施形態において、プロセッサコア１２２は、スコアボード１２８に対する複数のタスクの間のデータ従属性の記録をとり、プロセッサグラフィックス１２４は、記録されたデータ従属性と、利用可能な実行リソースとに従って複数のタスクをディスパッチするべくスコアボード１２８を用いる。プロセッサグラフィックス１２４を用いる汎用コンピューティングは、複数のコンピュートシェーダ、ディレクトコンピュート、ＯｐｅｎＣＬ（商標）、ＣＵＤＡ（商標）（Ｃｏｍｐｕｔｅ  Ｕｎｉｆｉｅｄ  Ｄｅｖｉｃｅ  Ａｒｃｈｉｔｅｃｔｕｒｅとしても知られる）またはその他などの並行プログラミングインタフェースによってユーザに露出されうる。いくつかの実施形態において、プロセッサグラフィックス１２４は、プロセッサコア１２２と同じ集積回路チップに含まれるか、或いは、プロセッサコア１２２と同じ物理的パッケージに含まれる別個の集積回路チップと同じ回路チップに含まれてよい。他の実施形態において、プロセッサグラフィックス１２４は、以下でより詳細に説明されるＩ／Ｏサブシステム１３０に含まれてよい。さらに他の実施形態において、プロセッサグラフィックス１２４は、コンピューティングデバイス１００のマザーボードに通信可能に結合された別個の拡張ボードに含まれてよい。
【００１４】
データストレージ１３４は、データの短期間または長期間のストレージ用に構成された任意のタイプのデバイスまたは複数のデバイスとして具現化されてよい。例えば、データストレージ１３４は、任意の１または複数のメモリデバイスおよび回路、複数のメモリカード、複数のハードディスクドライブ、複数のソリッドステートドライブ、または複数の他のデータストレージデバイスを含んでよい。いくつかの実施形態において、以下でさらに説明されるように、データストレージ１３４は、入力フレームデータまたはタッチポイント追跡データを格納してよい。
【００１５】
コンピューティングデバイス１００のディスプレイ１３６は、液晶ディスプレイ（ＬＣＤ）、発光ダイオード（ＬＥＤ）、プラズマディスプレイ、陰極線管（ＣＲＴ）または他のタイプのディスプレイデバイスなど、デジタル情報を表示可能な任意のタイプのディスプレイとして具現化されてよい。タッチスクリーン１３８は、コンピューティングデバイス１００のユーザによりタッチされることに応じて入力データを生成することが可能な任意のタイプのタッチスクリーンとして具現化されてよい。タッチスクリーン１３８は、抵抗タッチスクリーン、静電容量式タッチスクリーン、またはカメラベースのタッチスクリーンとして具現化されてよい。タッチスクリーン１３８は、複数の同時タッチポイントに対して反応する。
【００１６】
ここで図２を参照すると、実施形態において、コンピューティングデバイス１００は動作中に環境２００を確立する。例示的な環境２００は、重心検出モジュール２０２、入力フレームモジュール２１０、タッチポイント追跡モジュール２１２、および並行ディスパッチモジュール２１８を備える。環境２００の様々なモジュールおよびサブ環境は、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組み合わせとして具現化されてよい。
【００１７】
入力フレームモジュール２１０は、タッチスクリーン１３８からデータを受信して入力データを一連の入力フレームとしてフォーマットするよう構成される。各入力フレームは、タッチスクリーン１３８上の特定位置で感知されたタッチ値を表すタッチデータ値をそれぞれ含む入力セルアレイとして具現化されてよい。入力フレームモジュール２１０は、高解像度のタッチ追跡を可能にすべく、更新された入力フレームを継続的に生成する。
【００１８】
重心検出モジュール２０２は、複数の重心、つまり、各タッチポイントの中心にほぼ対応するタッチスクリーン１３８上の複数のポイントを見つけるべく、入力フレームモジュール２１０から受信した複数の入力フレームを探索するよう構成される。重心検出モジュール２０２は、隣接する複数の重心を単一の重心にマージするとともに、各重心を囲む複数の入力セルの複数のクラスタの複数の境界を検出するようさらに構成される。クラスタ境界は各タッチポイントの範囲を表す。いくつかの実施形態において、これらの機能は、例えば重心探索モジュール２０４、重心マージモジュール２０６、またはクラスタ特定モジュール２０８などの複数のサブモジュールによって実行されてよい。
【００１９】
タッチポイント追跡モジュール２１２は、複数の入力フレームにわたって継時的に複数の特定のタッチポイントを識別および追跡するよう構成される。特に、タッチポイント追跡モジュール２１２は、複数の前の追跡タッチポイントの位置を予測し、次に、重心検出モジュール２０２により現在の入力フレーム内で検出された複数のタッチポイントに対し、複数の前の追跡タッチポイントからの複数の識別子を割り当てるよう構成される。タッチポイント追跡モジュール２１２はまた、現在の入力フレーム内の、前に追跡されていない複数のタッチポイントに対し、複数の固有識別子を割り当ててよい。いくつかの実施形態において、タッチポイント追跡モジュール２１２は、入力フレームモジュール２１０からの未処理の入力フレームデータを処理してよい。いくつかの実施形態において、これらの機能は、例えばタッチポイント予測モジュール２１４またはタッチポイント割り当てモジュール２１６などの複数のサブモジュールにより実行されてよい。
【００２０】
並行ディスパッチモジュール２１８は、プロセッサグラフィックス１２４を用い、並行して複数のコンピューティングタスクをスケジュールして実行するよう構成される。つまり、並行ディスパッチモジュール２１８は、プロセッサグラフィックス１２４の複数の実行ユニット１２６を用い、複数のタスクを同時に実行されるようディスパッチする。並行ディスパッチモジュール２１８は、複数のタスクの実行順序を制御するべく、プロセッサグラフィックス１２４のスコアボード１２８を用いてデータ従属性を記録してよい。重心検出モジュール２０２およびタッチポイント追跡モジュール２１２の両方は、並行ディスパッチモジュール２１８を用いることで、これらのそれぞれのアルゴリズムの一部を並行して実行してよい。さらに、重心検出モジュール２０２およびタッチポイント追跡モジュール２１２の両方は、プロセッサグラフィックス１２４のSIMD命令を用い、これらのそれぞれのアルゴリズムの一部を実行してよい。例えば、重心検出モジュール２０２は、プロセッサグラフィックス１２４を用い、並行して複数の重心を探索し、複数の重心をマージし、複数のクラスタを識別してよい。同様に、タッチポイント追跡モジュール２１２は複数の予測タッチポイントからの複数の識別子を割り当ててよく、また、プロセッサグラフィックス１２４を用い、並行して新たな複数の固有タッチポイントを生成してよい。
【００２１】
ここで図３を参照すると、使用において、コンピューティングデバイス１００はタッチポイントの処理方法３００を実行してよい。方法３００はブロック３０２で開始し、ここでコンピューティングデバイス１００はタッチスクリーン１３８から入力フレームを受信する。上述したように、入力フレームは、短いサンプル期間の間にタッチスクリーン１３８により感知されるタッチポイント強度を表す値のアレイを含む。例えば、例示的な入力フレーム４０２が図４に示される。入力フレーム４０２は複数のセル４０４のスクウェアアレイとして示される。複数のセル４０４のそれぞれは、タッチスクリーン１３８の領域上で感知されたタッチデータ値を含む。各タッチデータ値は、タッチスクリーン１３８によりその領域上で感知されるタッチ強度、例えば、タッチスクリーン１３８に対するユーザの指の静電容量に対応する。タッチデータ値は１６ビット整数値、または、タッチスクリーン１３８により感知される強度値の範囲を含むのに十分な広さの任意のデジタル値として具現化されてよい。
【００２２】
再び図３を参照すると、入力フレームの受信後に、ブロック３０４においてコンピューティングデバイス１００は入力フレームを処理することで、複数のタッチポイント重心および複数のクラスタ境界を識別する。複数のクラスタは単一のタッチポイントに関連付けられた、入力フレームの複数の隣接セルの複数のグループとして具現化されてよい。複数の重心は、クラスタに対するタッチ強度のピークを含む入力フレームの複数のセルとして具現化されてよい。クラスタおよび関連付けられた重心はそれぞれタッチスクリーン１３８上の潜在的（ｐｏｔｅｎｔｉａｌ）なタッチポイントを表す。コンピューティングデバイス１００は重心およびクラスタデータを分析することで、複数の潜在的なタッチポイントを承諾または拒否してよい。例えば、コンピューティングデバイス１００は、クラスタ境界のサイズおよび／または形状に基づいて指先および掌のタッチを区別し、指先のタッチに対応する複数の重心を承諾し、掌のタッチに対応する複数の重心を拒否してよい。図５〜７に関連して、ブロック３０４の機能が以下でさらに説明される。
【００２３】
ブロック３０６において、未処理の入力フレームからの複数のタッチポイントの識別の後に、コンピューティングデバイス１００は、識別されたタッチポイントそれぞれに持続性の識別子を割り当てる。複数の持続性の識別子は、フレームからフレームでの複数のタッチポイントの移動を追跡する。これら複数の持続性の識別子は、コンピューティングデバイス１００に用いられることで、ジェスチャーインタラクションまたは他のユーザインタラクションの処理を支援してよい。図８〜１１に関連して、ブロック３０６の機能が以下でさらに説明される。持続性の識別子の割り当ての後に、方法３００はループしてブロック３０２に戻り、他の入力フレームを受信する。
【００２４】
ここで図５を参照すると、使用において、コンピューティングデバイス１００は複数のタッチポイント重心および複数のクラスタ境界の識別方法５００を実行してよい。方法５００はブロック５０２で開始し、ここでコンピューティングデバイス１００は入力フレームの複数のセルを多数のスクウェアブロックにグループ化する。例えば、図４を参照すると、入力フレーム４０２は、スクウェアアレイに配置された２５６個の入力セル４０４を含む。これらの入力セル４０４は１６個の４×４のセルブロック４０６にグループ化される。図示されていない他の実施形態において、複数の入力セル４０４は３×３セルブロックにグループ化されてよい。また、当然のことながら、入力フレーム４０２は任意の数の入力セル４０４を含んでよい。
【００２５】
再び図５を参照すると、ブロック５０４において、コンピューティングデバイス１００は複数のブロック４０６のそれぞれについて、信号閾値を超える局所的な最大値を含む複数のセルを検出する。換言すると、複数のブロック４０６のそれぞれについて、コンピューティングデバイス１００は、ブロック内で最大で、また信号閾値を超えるタッチデータ値を有するセルを探索する。信号閾値未満の複数のタッチデータ値は、ノイズか、或いはタッチスクリーン１３８により検出される他の偽の信号を表し、拒否される。識別された局所的な最大値のそれぞれは、重心として暫定的にマーク付けされる。例えば、図４に示されるように、陰影を付けた（ｓｈａｄｅｄ）複数のセル４５０〜４７２は、各ブロックで検出された局所的な最大値を表す。例えば、ブロック４１０はセル４５０で局所的な最大値を有する。各ブロックは最大で１つの局所的な最大値を有してよく、いくつかのブロック、例えばブロック４２２、４２８、４３４、４４０は、識別された局所的な最大値を全く有しないかもしれない。いくつかの実施形態において、コンピューティングデバイス１００は別個の探索タスクにおいて複数のブロック４０６のそれぞれを探索してよく、これらのタスクのそれぞれは並行した実行のためにプロセッサグラフィックス１２４にディスパッチされてよい。
【００２６】
複数の重心を識別した後に、ブロック５０６においてコンピューティングデバイス１００は、複数の隣接ブロックにわたって複数の重心をマージする。ブロック５０４において、単一のブロック４０６からのデータを用いて複数の重心のそれぞれが識別される。しかしながら、ブロックの境界の両側で識別された複数の重心は、同じタッチポイントの一部でありうる。そのような誤った複数の重心を取り除くべく、コンピューティングデバイス１００は複数のブロック４０６をトラバースすることで、互いにタッチ距離閾値内の複数のタッチポイントを見つける。タッチ距離閾値は、複数の固有タッチポイントの間の複数の入力フレームセルの最小数を表し、これはデバイスまたは実装に依存しうる。いくつかの実施形態において、タッチ距離閾値は、人の指のサイズに近づくよう設定されてよい。例えば、６４×３２セルの入力フレームを用いた１５インチタッチスクリーン１３８を仮定すると、タッチ距離閾値は２セルであってよい。タッチ距離閾値内の複数の重心は、より大きいタッチデータ値を有するセルのみを重心としてマークすることでマージされる。ブロック５０８において、コンピューティングデバイス１００は、縦方向に複数のブロック４０６をトラバースする。ブロック５１０において、 コンピューティングデバイス１００は、横方向に複数のブロック４０６をトラバースする。ブロック５１２においてコンピューティングデバイス１００は、斜め方向に複数のブロック４０６をトラバースする。いくつかの実施形態において、コンピューティングデバイス１００は別個のマージタスクにおいて複数のブロック４０６のそれぞれをトラバースしてよく、これらのタスクのそれぞれは並行した実行のためにプロセッサグラフィックス１２４にディスパッチされてよい。図６に関連して、複数の重心をマージする一方法が以下でさらに説明される。
【００２７】
複数の重心をマージした後に、ブロック５１４においてコンピューティングデバイス１００は、各重心の周りのクラスタ境界を検出する。検出されたクラスタ境界は検出されたタッチポイントの範囲を表す。例えば、図４を参照すると、実線の境界４８０〜４９２は複数のクラスタ境界を表し、クラスタ境界内の陰影を付けた複数のセルは当該クラスタに含まれる。各クラスタ、例えばクラスタ４８０、４８６、４８８、４９２、４９４は単一のセルを含んでよく、または、各クラスタ、例えばクラスタ４８２、４８４、４９０は複数のセルを含んでよい。いくつかの実施形態において、コンピューティングデバイス１００は、別個の検出タスクにおいて各重心の周りの複数のクラスタ境界を検出してよい。これらのタスクのそれぞれは、並行した実行のためにプロセッサグラフィックス１２４にディスパッチされてよい。図７に関連して、クラスタ境界を検出する一方法が以下でさらに説明される。複数のクラスタ境界の検出後に、方法５００はリターンし、コンピューティングデバイス１００が複数の検出されたタッチポイントの処理を継続することを可能にする。
【００２８】
ここで図６を参照すると、使用において、コンピューティングデバイス１００は複数の隣接ブロックにわたり複数の重心をマージする方法６００を実行してよい。方法６００はブロック６０２で開始し、ここでコンピューティングデバイス１００は、プロセッサグラフィックス１２４上で並行して、複数のブロック４０６のそれぞれについてタスクをディスパッチする。トラバースの順序を制御するべく、コンピューティングデバイス１００は、プロセッサグラフィックス１２４のスコアボード１２８を用い、複数のタスクの間のデータ従属性をセットしてよい。例えば、図４を参照すると、縦方向のトラバースのために、コンピューティングデバイス１００は、ブロック４１８をブロック４１０に基づかせ、ブロック４２０をブロック４１２に基づかせるなどのようにセットしてよく、その結果、複数のタスクは入力フレーム４０２にわたり複数の縦線において実行される。同様に、横方向のトラバースのために、コンピューティングデバイス１００は、ブロック４１２をブロック４１０に基づかせ、ブロック４２０をブロック４１８に基づかせるなどのようにセットしてよく、その結果、複数のタスクは入力フレーム４０２にわたり複数の横線において実行される。斜め方向のトラバースのために、コンピューティングデバイスは、ブロック４０６ごとに単一のタスクをディスパッチする代わりに、４つのブロックのグループごとに１つのタスクをディスパッチしてよく、複数のタスクは全体として入力フレーム４０２をカバーする。例えば、第１タスクはブロック４１０、４１２、４１８、４２０を含んでよく、第２タスクはブロック４１２、４１４、４２０、４２２を含んでよい。コンピューティングデバイス１００は、左から右、上から下、または任意の一貫性のある順序で処理するべく、これらのタスクの間の従属性をセットしてよい。
【００２９】
ブロック６０２でディスパッチされた複数のタスクのそれぞれに対し、ブロック６０４においてコンピューティングデバイス１００は、現在のブロックと、トラバース順序における次のブロックとの全ての重心の位置を決定する。例えば、図４を参照すると、ブロック４１０について縦方向にトラバースする場合に、コンピューティングデバイス１００は、ブロック４１０における重心４５０の位置と、トラバース順序における次のブロックであるブロック４１８の重心４５８の位置とを決定してよい。他の実施例として、ブロック４１０について横方向にトラバースする場合に、コンピューティングデバイス１００は重心４５０と、ブロック４１２の重心４５２との位置を決定してよい。第３の例として、斜め方向にトラバースする場合に、コンピューティングデバイス１００はブロック４１０の重心４５０と、ブロック４２０の重心４６０との位置を決定してよい。各重心の位置は、重心を含む入力セル４０４に対応する複数の座標のペアとして決定されてよい。当然のことながら、いくつかのブロック、 例えばブロック４２２、４２８、４３４、４４０は、識別された重心を全く含まないかもしれない。
【００３０】
ブロック６０６において、コンピューティングデバイス１００は、トラバース方向において、ブロック６０４で識別された複数の重心の間の距離を決定する。複数の重心の間の距離は、複数の重心を分離する複数の入力セル４０４の観点で測定されてよい。トラバース方向（例えば縦方向、横方向または斜め方向）に並んだ複数の重心についてのみ距離が測定されてよい。例えば、図４を参照すると、ブロック４１２内で縦方向にトラバースする場合に、セル４５２、４６０は、縦方向においてそれらの間に２つの入力セルの距離を有し、他方では、ブロック４１８においてセル４５８、４６４は、それらの間に４つの入力セルの距離を有する。ブロック４１８において横方向にトラバースする場合に、セル４５８、４６０は、それらの間に２つの入力セルの距離を有し、他方では、ブロック４３０においてセル４６６、４６８は、それらの間に３つの入力セルの距離を有する。ブロック４１４において斜め方向にトラバースする場合に、セル４５４、４６２は、それらの間に２つの入力セルの距離を有し、他方では、ブロック４２０においてセル４６０、４６６は、それらの間に５つの入力セルの距離を有する。
【００３１】
再び図６を参照すると、ブロック６０８においてコンピューティングデバイス１００は、トラバース方向での複数の重心の間の距離がタッチ閾値距離以下であるか判定する。上述したように、距離閾値は、複数の固有タッチポイントの間の入力フレームセルの最小数を表す。いくつかの実施形態において、タッチ距離閾値は２つの入力セルであってよい。距離が閾値より大きい場合には、方法６００は重心のマージを全く行うことなくリターンし、現在のブロックについて完了する。さらに、現在のブロックと次のブロックにおいて２つより少ない重心が存在する場合には、方法６００はリターンし、現在のブロックについて完了する。さらに、現在のブロックと次のブロックの重心がトラバース方向に並んでいない場合には、方法６００はリターンし、現在のブロックについて完了する。距離がタッチ距離閾値以下である場合には、方法６００はブロック６１０に進む。
【００３２】
ブロック６１０においてコンピューティングデバイス１００は、２つの重心を、より大きいタッチデータ値を有する入力セル４０４にマージする。マージの後に、より大きいタッチデータ値を含む入力フレームセルは重心としてマーク付けされたままであり、他の入力フレームセルはもはや重心としてマーク付けされない。例えば、ブロック４１２において縦方向にトラバースする場合に、セル４５２、４６０のタッチデータ値が比較され、セル４６０がより大きいタッチデータ値を有すると仮定すると、重心はセル４６０にマージされてよい。複数の重心は、連続する複数のトラバース方向に繰り返しマージされてよい。例えば、ブロック４１８において横方向にトラバースする場合に、セル４６０が再びより大きいタッチデータを有すると仮定すると、セル４５８、４６０はセル４６０にマージされてよい。他の実施例として、ブロック４１４において斜め方向にトラバースする場合に、セル４５４、４６２がマージされてよい。複数の重心のマージの後に、方法６００はリターンし、現在のブロックについて完了する。このように、全てのトラバース方向におけるマージの後に、複数のブロック境界をまたぐ任意のクラスタは、単一のマーク付けされた重心を含む。例えば、全てのトラバース方向におけるマージの後に、入力セル４６０は、クラスタ境界４８２内でのマーク付けされた唯一の重心であってよい。
【００３３】
ここで図７を参照すると、使用において、コンピューティングデバイス１００は、複数の重心がマーク付けされマージされた後に、複数のクラスタ境界を識別する方法７００を実行してよい。方法７００はブロック７０２で開始し、ここでコンピューティングデバイス１００はプロセッサグラフィックス１２４上で並行して、複数のマーク付けされた重心のそれぞれについてタスクをディスパッチする。ブロック７０２でディスパッチされた複数のタスクのそれぞれについて、ブロック７０４においてコンピューティングデバイス１００は、重心を囲む複数のセルに対する入力フレームデータをロードする。ロードされるセル数は、許可された指または掌のサイズに依存する。いくつかの実施形態において、コンピューティングデバイス１００は、重心をほぼ中央とする複数のセルの１６×１６のスクウェアブロックをロードしてよい。
【００３４】
ブロック７０６において、コンピューティングデバイス１００は、信号閾値未満のタッチデータ値を有する複数の入力セルをゼロにする。つまり、コンピューティングデバイス１００は、そのような複数のセルの値をゼロにセットする。入力閾値未満の複数の入力セルにゼロを書き込むことは、検出性能を向上させうる。
【００３５】
ブロック７０８において、コンピューティングデバイス１００は、比較ウィンドウを構築すべく、クラスタの複数のエッジセルを複製する。第１のイタレーションにおいて、クラスタは、重心として前もってマーク付けされたセルのみを含む。コンピューティングデバイス１００は、クラスタを囲む入力ウィンドウを定義する。例えば、第１のイタレーションにおいて、入力ウィンドウは、重心を囲む３×３のセルのスクウェアウィンドウとして具現化されてよい。後のイタレーションにおいて、入力ウィンドウは、クラスタを囲む５×５のセルのスクウェアウィンドウとして具現化されてよい。例示的な実施形態は複数のスクウェアウィンドウを用いるが、他の実施形態は、３×５ウィンドウ、５×３ウィンドウなどのような、可変サイズのウィンドウを用いてよい。次に、コンピューティングデバイス１００は、入力ウィンドウと同じサイズの比較ウィンドウを形成する。クラスタの複数のエッジセルのそれぞれは、重心から離れる方向における比較ウィンドウの隣接エッジセルにコピーされる。そこで、入力ウィンドウの複数のコーナーセルは、斜め方向、横方向および縦方向の３方向に拡張される。上述したように、第１のイタレーションにおいて、重心値は、比較ウィンドウの複数のエッジに拡張される。
【００３６】
ここで図８を参照すると、ダイアグラム８００は入力ウィンドウおよび比較ウィンドウの一実施形態を示す。アレイ８０２は入力ウィンドウを示す。セルＣは、識別された重心を含む。クラスタ境界８０４は、クラスタの複数のメンバーとして前に識別されたセルＣ１〜Ｃ８を含む３×３のセルのスクウェアである。入力ウィンドウ８０２は、１６個のエッジセルＰを含む。アレイ８０６は、比較ウィンドウを示す。比較ウィンドウ８０６は、メモリ内に格納される別個のアレイとして具現化されてよい。クラスタ境界８０８はクラスタ境界８０４に対応し、セルＣ１〜Ｃ８のコピーを含む。比較ウィンドウ８０６の複数のエッジセルは、クラスタ境界８０８内からコピーされた複数の値を含む。示されるように、セルＣ１の値は３つのコーナーセルにコピーされ、セルＣ２の値は単一のエッジセルにコピーされ、セルＣ３の値は３つのコーナーセルにコピーされ、同じように続く。
【００３７】
再び図７を参照すると、ブロック７１０においてコンピューティングデバイス１００は、入力フレームの複数のエッジセルの値を、対応する比較ウィンドウの複数のエッジセルから減算する。いくつかの実施形態において、コンピューティングデバイス１００は、コンピューティングデバイス１００の単一命令多重データ（SIMD）命令を用い、複数のウィンドウの全４つのエッジでその減算を実行してよい。例えば、各エッジの値はベクトルにパックされてよく、コンピューティングデバイス１００は、単一のパックドベクトル減算命令を用いて各エッジの減算を実行してよい。当然のことながら、他の実施形態において、コンピューティングデバイス１００は、セルごとに別々の減算を実行してよい。例えば、図８を参照すると、入力ウィンドウ８０２は上部エッジ８１０、下部エッジ８１２、左エッジ８１４および右エッジ８１６を含む。比較ウィンドウ８０６は上部エッジ８１８、下部エッジ８２０、左エッジ８２２および右エッジ８２４を含む。上部エッジの差異を計算するべく、コンピューティングデバイス１００は、上部エッジ８１０および上部エッジ８１８の値を複数のベクトルにパックし、上部エッジ８１０のベクトルを上部エッジ８１８のベクトルから減算してよい。コンピューティングデバイス１００は、他の複数のエッジに対して同様の計算を実行してよい。
【００３８】
再び図７を参照すると、ブロック７１２においてコンピューティングデバイス１００は、ブロック７１０において計算された減算から生じる差異のいずれかがゼロより少ないか否かを判定する。そうである場合には、このことは、複数のエッジセルのうち少なくとも１つに関し、入力フレーム値がクラスタ内の隣接セルの値より大きいことを意味する。第１のイタレーションに関し、このことは、重心を囲む複数のセルのうちの１つが重心より大きいことを意味する。この状況において、タッチデータ値の勾配は非負であり、すなわち、タッチ値データが増加し始めている。そこで、この状況においては、重心境界が見つかっている。差異のいずれかがゼロより少ない場合には、方法７００は、下で説明されるブロック７１８に分岐する。差異のいずれもゼロより少なくない場合には、方法７００はブロック７１４に進む。
【００３９】
ブロック７１４においてコンピューティングデバイス１００は、比較ウィンドウのサイズが最大ウィンドウサイズに達したか否かを判定する。最大ウィンドウサイズは、例えば、ブロック７０４においてロードされた入力フレームデータブロックのサイズに基づいて定義されてよい。例えば、最大ウィンドウサイズは、１５個のセル×１５個のセルであってよく、これは、入力フレームデータの１６セルスクウェアブロック内で可能な最大ウィンドウサイズである。最大ウィンドウサイズに達した場合に、方法７００は、下で説明されるブロック７１８に分岐する。最大ウィンドウサイズに達していない場合には、方法７００はブロック７１６に進む。
【００４０】
ブロック７１６においてコンピューティングデバイス１００は、比較ウィンドウのサイズを増やす。ブロック７１０で計算された差異のいずれもゼロ未満でないので、現在の比較ウィンドウの全てのセルは重心境界内に含まれる。よって、比較ウィンドウのサイズと、関係する入力ウィンドウサイズは、境界の探索を続けるべく増やされてよい。比較ウィンドウのサイズの増加の後に、方法７００はループしてブロック７０８に戻り、他の比較ウィンドウを構築する。
【００４１】
再びブロック７１２を参照すると、何れかの差異がゼロより少ない場合には、方法７００はブロック７１８に分岐する。さらに、再びブロック７１４を参照すると、最大ウィンドウサイズに達した場合に、方法７００はブロック７１８に分岐する。ブロック７１８においてコンピューティングデバイス１００は、比較ウィンドウにおける有効セルの数をカウントする。有効セルは、ブロック７１０において計算された差異がゼロより少なくないものである。いくつかの実施形態において、コンピューティングデバイス１００は入力ウィンドウ内の全ての０でないセルを有効セルとして識別してよい。なぜならば、信号閾値未満の複数のセルは、ブロック７０６においてゼロを書き込まれているためである。コンピューティングデバイス１００は、ＳＩＭＤ加算命令を用いて有効セルの数をカウントしてよい。有効セルの数は、クラスタ境界、すなわち、重心を囲むタッチポイントのサイズを決定するべくコンピューティングデバイス１００により用いられてよい。
【００４２】
ここで図９を参照すると、使用において、コンピューティングデバイス１００は、複数の重心がマーク付けされマージされた後に、複数のクラスタ境界を識別する方法９００を実行してよい。方法９００は、ノイズの多い入力フレームを生成する傾向があるタッチスクリーン１３８と共に使用するのに適切であってよい。方法９００はブロック９０２で開始し、ここでコンピューティングデバイス１００は、プロセッサグラフィックス１２４上で並行して、複数のマーク付けされた重心のそれぞれについてタスクをディスパッチする。ブロック９０２でディスパッチされた複数のタスクのそれぞれについて、ブロック９０４においてコンピューティングデバイス１００は、重心を囲む複数のセルに対する入力フレームデータをロードする。ロードされるセル数は、許可された指または掌のサイズに依存する。いくつかの実施形態において、コンピューティングデバイス１００は、重心をほぼ中央とする複数のセルの１６×１６のスクウェアブロックをロードしてよい。
【００４３】
ブロック９０６において、コンピューティングデバイス１００は、信号閾値未満のタッチデータ値を有する複数の入力セルをゼロにする。つまり、コンピューティングデバイス１００は、そのような複数のセルの値をゼロにセットする。入力閾値未満の複数の入力セルにゼロを書き込むことは、検出性能を向上させうる。
【００４４】
ブロック９０８においてコンピューティングデバイス１００は、ウィンドウ内の全てのエッジセルの合計と、ウィンドウ内の全てのエッジセルの最大値とを計算する。コンピューティングデバイス１００は、後の取得（ｒｅｔｒｉｅｖａｌ）のために当該合計および最大値をアレイにして格納してよい。開始ウィンドウは重心を囲む３×３のスクウェアウィンドウであってよい。例えば、図８を参照すると、開始ウィンドウはウィンドウ８０４によって示されてよい。複数のエッジセルの合計は、従って、セルＣ１〜Ｃ８の合計となる。最大値はセルＣ１〜Ｃ８の最も大きい値となる。
【００４５】
再び図９を参照すると、ブロック９１０においてコンピューティングデバイス１００は、現在のウィンドウ内のエッジセルの数と、信号閾値との積を計算する。例えば、３×３のウィンドウは８個のエッジセルを含み、５×５のウィンドウは１６個のエッジセルを含み、同じように続く。ブロック９１２においてコンピューティングデバイス１００は、現在のウィンドウの複数のエッジセルの合計が複数のエッジセル×信号閾値の積より少ないかを判定する。そうである場合には、エッジセルの平均値は信号閾値より少なく、クラスタ境界が見つかったことを意味する。合計がセルの数×信号閾値より少ない場合には、方法９００は、下で説明されるブロック９２０に分岐する。合計がセルの数×信号閾値以上である場合には、方法９００はブロック９１４に進む。
【００４６】
ブロック９１４においてコンピューティングデバイス１００は、現在のウィンドウの最大値が前のウィンドウの最大値以下であるかを判定する。開始ウィンドウに関し、コンピューティングデバイス１００は、現在のウィンドウの最大値が重心の値以下であるか判定する。例えば、コンピューティングデバイス１００は、５×５のウィンドウ（現在のウィンドウ）の最大値が３×３のウィンドウ（前のウィンドウ）の最大値以下であるか判定してよい。現在のウィンドウの最大値が前のウィンドウの最大値以下でない場合、つまり、現在のウィンドウの最大値が前のウィンドウの最大値より大きい場合には、次に方法９００は、下で説明するブロック９２０に分岐する。現在のウィンドウの最大値が前のウィンドウの最大値以下である場合には、方法９００はブロック９１６に進む。
【００４７】
ブロック９１６においてコンピューティングデバイス１００は、ウィンドウサイズを増やす。現在のウィンドウの最大値が前のウィンドウの最大値以下であるので、現在のウィンドウの全てのセルは、重心境界内に含まれてよい。よって、ウィンドウサイズは、境界の探索を続けるべく増やされてよい。ブロック９１８においてコンピューティングデバイス１００は、最大ウィンドウサイズが超過したか否かを判定する。最大ウィンドウサイズは、例えば、ブロック９０４においてロードされた入力フレームデータブロックのサイズに基づいて定義されてよい。例えば、最大ウィンドウサイズは１５個のセル×１５個のセルであってよく、これは、入力フレームデータの１６セルスクウェアブロック内で可能な最大ウィンドウサイズである。最大ウィンドウサイズが超過していない場合には、方法９００はループしてブロック９０８に戻り、クラスタ境界の探索を続ける。最大ウィンドウサイズを超過した場合には、方法９００はブロック９２０に進む。
【００４８】
ブロック９２０においてコンピューティングデバイス１００は、前のウィンドウにおける有効セルの数をカウントする。この点において、コンピューティングデバイスは、ブロック９１２において現在のウィンドウの複数のエッジセルの平均値が信号閾値を超えていない、ブロック９１４において現在のウィンドウの最大値が前のウィンドウの最大値を超えた、或いは、ブロック９１８において最大ウィンドウサイズが超過したと判定していてよい。このような全ての状況において、前の、より小さなウィンドウはクラスタ境界として用いられうる。開始ウィンドウに関し、重心は前のウィンドウとして用いられてよく、これは単一セルクラスタとなる。コンピューティングデバイス１００は、選択されたウィンドウ内の全ての０でないセルを有効セルとして識別してよい。なぜならば、信号閾値未満の複数のセルはブロック９０６においてゼロを書き込まれているためである。コンピューティングデバイス１００は、例えばＳＩＭＤ加算命令などのSIMD命令を用いて複数のエッジセルをカウントしてよい。
【００４９】
ここで図１０を参照すると、使用において、コンピューティングデバイス１００は複数のタッチポイントに対して持続性の識別子を割り当てる方法１０００を実行してよい。図３のブロック３０６に関連して上述したように、方法１０００を実行すると、コンピューティングデバイス１００は既に、タッチスクリーンから入力フレームを受信し、重心およびクラスタ境界検出を実行することで入力フレームにおける複数の現在のタッチポイントを識別していてよい。方法１０００はブロック１００２で開始し、ここでコンピューティングデバイス１００は、全ての前の追跡タッチポイントについて、現在の入力フレームにおける位置を予測する。当然のことながら、方法１０００の最初の呼出しに関し、前の追跡タッチポイントは存在しない。いくつかの実施形態において、コンピューティングデバイス１００は、例えば、各タッチポイントのスピードを判定すること、および、速度関数として位置を予測することにより、複数の前の位置から複数の予測位置を推定（ｅｘｔｒａｐｏｌａｔｅ）してよい。しかしながら、いくつかの実施形態においてコンピューティングデバイス１００は、前の追跡タッチポイントそれぞれの位置を前の入力フレームと同じであるとして単純に予測してよい。この単純化されたアプローチは、複数のタッチポイントが相対的に遅く移動する可能性が高い場合に、適切であるかも知れない。
【００５０】
ブロック１００４において、予測タッチポイントのそれぞれに関し、コンピューティングデバイス１００は、予測タッチポイントの追跡距離閾値内に位置する現在のタッチポイントに、予測タッチポイントの識別子を割り当てる。各予測タッチポイントは、複数のフレームの間でタッチポイントの位置を追跡するのに用いられうる固有識別子に関連付けられる。追跡距離閾値は、タッチポイントが複数の入力フレーム間で移動し、かつ同じタッチポイントであるとみなされ得るタッチスクリーン１３８上の最大距離を表す。追跡距離閾値は、複数の入力フレームセルの観点で測定されてよい。例えば、いくつかの実施形態において、閾値は７個のセルであってよい。いくつかの実施形態において、コンピューティングデバイス１００は、別個の割り当てタスクにおいて予測タッチポイントごとに識別子を割り当ててよく、これらのタスクのそれぞれは並行した実行のためにプロセッサグラフィックス１２４にディスパッチされてよい。図１１に関連して、識別子の割り当て方法が下でさらに説明される。
【００５１】
ブロック１００６において、複数の予測タッチポイントのそれぞれに関し、コンピューティングデバイス１００は、現在のタッチポイントに割り当てられた全ての重複識別子を除去する。なぜならば、ブロック１００４の方法は予測タッチポイントごとに独立して実行され、同じ識別子が複数の現在のタッチポイントに割り当てられうるためである。この問題を修正するべく、コンピューティングデバイス１００は、予測タッチポイントに最も近い現在のタッチポイントの識別子を維持しつつ、重複識別子を除去する。いくつかの実施形態において、コンピューティングデバイス１００は、別個の除去タスクにおいて、予測タッチポイントごとに重複識別子を除去し、これらのタスクのそれぞれは並行した実行のためにプロセッサグラフィックス１２４にディスパッチされてよい。図１２に関連して、重複識別子の除去方法が下でさらに説明される。
【００５２】
ブロック１００８において、予測タッチポイントごとに、コンピューティングデバイス１００は、閾値距離内の最も近い未割当の現在のタッチポイントに対し、任意の未使用予測タッチポイント識別子を割り当てる。いくつかの実施形態において、コンピューティングデバイス１００は、別個の割り当てタスクにおいて予測タッチポイントごとに未使用予測タッチポイント識別子を割り当ててよく、これらのタスクのそれぞれは、並行した実行のためにプロセッサグラフィックス１２４にディスパッチされてよい。図１３に関連して、未使用予測タッチポイント識別子の割り当て方法が下でさらに説明される。
【００５３】
ブロック１０１０において、入力フレームのブロックごとに、コンピューティングデバイス１００は、未割当の現在の各タッチポイントに対し、新たな固有識別子を割り当てる。上述したように、入力フレームは、複数のセルの複数のスクウェアブロックにグループ化されてよい。いくつかの実施形態において、複数のブロックは４×４のセルのスクウェアであってよく、他の実施形態において、複数のブロックは３×３のセルのスクウェアであってよい。いくつかの実施形態において、コンピューティングデバイス１００は、ブロック内で未割当の現在の各タッチポイントに対する識別子を見つけて割り当てるべく、プロセッサグラフィックス１２４上のブロックごとに割り当てタスクをディスパッチしてよい。例えば、コンピューティングデバイス１００は、グローバルカウンタを維持し、増加する整数値を識別子として割り当ててよい。カウンタは、ロールオーバー（ｒｏｌｌｉｎｇ  ｏｖｅｒ）なしに一般的な個数の固有識別子を可能にするのに十分大きくてよい。例えば、いくつかの実施形態において、符号なしの８ビットの整数がカウンタとして用いられてよく、これは２５６個の固有識別子を可能にする。他の実施例として、複数の識別子が固有であることを保証すべく、コンピューティングデバイス１００は複数の識別子のマップを維持し、当該マップを用いて未使用の識別子を選択してよい。マップは、全２５６ビットを含む、８個の符号なしの３２ビットの整数として具現化されてよく、マップの各ビットは特定の識別子が割り当てられているか否かを表している。
【００５４】
ブロック１０１２においてコンピューティングデバイス１００は、複数のブロックの評価順序を制御すべくブロック間のデータ従属性をセットしてよい。実行順序の制御は、コンピューティングデバイス１００が未割当の現在のタッチポイントに対し、繰り返すのに適した固有識別子のセットを生成することを可能にする。上述したように、データ従属性は、実行順序を制御するべくプロセッサグラフィックス１２４のスコアボード１２８により用いられ得る。例えば、データ従属性は、次の列に進む前に各列を縦方向にトラバースしつつ列方向に複数のブロックを探索するべくセットされてよい。データ従属性は、上で説明されたグローバルカウンタまたは識別子のマップを有してよく、これにより各ブロックが前のブロックの結果に基づいて固有識別子を計算することが可能となる。
【００５５】
ここで図１１を参照すると、使用において、コンピューティングデバイス１００は、現在のタッチポイントに対して識別子を割り当てる方法１１００を実行してよい。方法１１００はブロック１１０２で開始し、ここでコンピューティングデバイス１００は、プロセッサグラフィックス１２４上で並行して、複数の予測タッチポイントのそれぞれについてタスクをディスパッチする。複数のタスクのそれぞれに関し、ブロック１１０４においてコンピューティングデバイス１００は、予測タッチポイントの位置の周りのウィンドウ内で現在の入力フレームの全ての現在のタッチポイントを取得する。上述したように、コンピューティングデバイス１００は、複数の入力フレームセルを複数のスクウェアブロック、例えば４×４のブロックまたは３×３セルブロックにグループ化することでメモリ内の入力フレームをまとめてよい。そのような複数のブロックへのグループ化は、図５のブロック５０２に関連して上で説明された重心検出のための構成と同様であってよい。ブロックごとのタッチポイント情報は、プロセッサグラフィックス１２４により容易にロード、格納、および、その他の処理をされうるフォーマット、例えばイメージまたはテクスチャフォーマットで格納されてよい。例えば、ブロックごとのタッチポイント情報は、３２ビットの浮動２次元表面フォーマット（ｆｌｏａｔ  ｔｗｏ−ｄｉｍｅｎｓｉｏｎａｌ  ｓｕｒｆａｃｅ  ｆｏｒｍａｔ）で格納されてよい。ウィンドウは、予測タッチポイントの追跡距離閾値内の全てのセルを含むのに十分な大きさとなるよう形成される。例えば、７セルの追跡距離閾値をカバーするには２個の４×４のブロックまたは３個の３×３ブロックが必要とされ、追跡距離閾値は予測タッチポイントから全ての方向においてカバーされ得る。そこで、いくつかの実施形態において、４×４のセルのブロックに対し、ウィンドウは５個のブロックのスクウェアであってよく、３個の３×３ブロックに対し、ウィンドウは７個のブロックのスクウェアであってよい。予測タッチポイントを含むブロックは、ウィンドウの中心に位置する。
【００５６】
ブロック１１０６において、コンピューティングデバイス１００は、ウィンドウ内に位置する予測タッチポイントに最も近い現在のタッチポイントを見つける。コンピューティングデバイス１００は、後の処理のために、その最も近い現在のタッチポイントをベストマッチのタッチポイントとして格納する。
【００５７】
ブロック１１０８においてコンピューティングデバイス１００は、ブロック１１０６において識別されたベストマッチのタッチポイントの周りのウィンドウ内で全ての予測タッチポイントを見つける。ウィンドウはブロック１１０４において探索されたウィンドウと同じサイズである。しかしながら、ベストマッチのタッチポイントは異なるブロックに位置しうるので、コンピューティングデバイス１００は、異なる複数のブロックを取得して探索してよい。ブロック１１１０においてコンピューティングデバイス１００は、最も近い予測タッチポイントの識別子をベストマッチのタッチポイントに割り当てる。そこで、ベストマッチのタッチポイントは、ブロック１１０４において最初に探索された予測タッチポイントの識別子とは異なる識別子を割り当てられてよい。識別子の割り当ての後に、方法１１００はリターンする。
【００５８】
ここで図１２を参照すると、使用において、コンピューティングデバイス１００は複数の重複識別子を除去する方法１２００を実行してよい。方法１２００はブロック１２０２で開始し、ここでコンピューティングデバイス１００は、プロセッサグラフィックス１２４上で並行して、複数の予測タッチポイントのそれぞれについてタスクをディスパッチする。ブロック１２０４において、コンピューティングデバイス１００は、予測タッチポイントの周りのウィンドウ内の全ての現在のタッチポイントを取得する。図１０のブロック１１０４に関して上述したように、ウィンドウは、予測タッチポイントの追跡距離閾値内の複数のセルを含んだ全てのブロックを含むサイズに形成され、ブロックサイズに応じて５×５ブロックのスクウェアウィンドウまたは７×７ブロックのスクウェアウィンドウとして具現化されうる。
【００５９】
ブロック１２０６において、コンピューティングデバイス１００は、予測タッチポイントの識別子に適合する識別子を有するウィンドウ内の全ての現在のタッチポイントを見つける。ブロック１２０８において、コンピューティングデバイスは、１より多い現在のタッチポイントが予測タッチポイントと同じ識別子を有するか否かを判定する。そうでない場合には、識別子が除去される必要はなく、方法１２００はリターンする。そうである場合には、方法１２００はブロック１２１０に進む。
【００６０】
ブロック１２１０において、コンピューティングデバイス１００は、適合する識別子を有する複数の現在のタッチポイントの中で、最も近い現在のタッチポイントに対する識別子を維持し、残りから識別子を除去する。識別子が除去された現在のタッチポイントそれぞれは、その元の未割当状態に戻る。そこで、ブロック１２１０の完了の後に、全ての重複識別子は除去され、方法１２００はリターンする。
【００６１】
ここで図１３を参照すると、使用において、コンピューティングデバイス１００は、複数の未使用予測タッチポイント識別子を割り当てる方法１３００を実行してよい。方法１３００はブロック１３０２で開始し、ここでコンピューティングデバイス１００はプロセッサグラフィックス１２４上で並行して、複数の予測タッチポイントのそれぞれについてタスクをディスパッチする。ブロック１３０４において、コンピューティングデバイス１００は、予測タッチポイントが未使用であるか否かを判定する。つまり、コンピューティングデバイス１００は、予測タッチポイントの識別子が何れかの現在のタッチポイントに割り当てられているかを判定する。予測タッチポイントが未使用でない場合、つまり、予測タッチポイントが割り当てられている場合には、方法１３００はリターンする。予測タッチポイントが未使用である場合には、方法１３００はブロック１３０６に進む。
【００６２】
ブロック１３０６において、コンピューティングデバイス１００は、未使用の予測タッチポイントの周りのウィンドウ内の全ての現在のタッチポイントを取得する。図１１のブロック１１０４に関して上述したように、ウィンドウは、予測タッチポイントの追跡距離閾値内の複数のセルを含んだ全てのブロックを含むサイズに形成され、ブロックサイズに応じて５×５ブロックのスクウェアウィンドウまたは７×７ブロックのスクウェアウィンドウとして具現化されうる。ブロック１３０８において、コンピューティングデバイス１００は、最も近い未割当の現在のタッチポイントに対し予測タッチポイント識別子を割り当てる。未割当の現在のタッチポイントがウィンドウ内に全く見つからない可能性がある場合には、予測タッチポイントは未使用のままとなる。予測タッチポイントは、未使用の場合には削除されてよく、或いは、それなりの時間だけ未使用の場合にはエイジアウト（ａｇｅｄ  ｏｕｔ）になってよい（図示せず）。ブロック１３０８の完了の後に、方法１３００はリターンする。
【００６３】
［例］
【００６４】
本明細書に開示された複数の技術の複数の例示的な例が、後述される。複数の技術の実施形態は、後述される複数の例の任意の１つまたは複数、及び任意の組み合わせを含んでもよい。
【００６５】
例１は、タッチポイント重心検出のためのコンピューティングデバイスであって、タッチスクリーンと、タッチスクリーンから入力フレームを受信する入力フレームモジュールと、重心検出モジュールと、を備え、入力フレームは複数のセルを定義し、各セルはタッチデータ値を有し、重心検出モジュールは、入力フレームの複数のセルを複数のブロックにグループ化し、複数のブロックのそれぞれにおいて、信号閾値と予め定められた関係を持つタッチデータ値を有する局所的な最大セルを探索し、複数の局所的な最大セルのそれぞれを重心として識別し、互いのタッチ距離閾値内に位置する複数の重心をマージし、かつ、マージされた複数の重心のそれぞれの周りのクラスタ境界を検出し、各クラスタ境界は、入力フレームの少なくとも１つのセルを含む、コンピューティングデバイスを備える。
【００６６】
例２は例１の主題を備え、複数のブロックのそれぞれは、１６個の連続セルの４セルスクウェアブロック、または、９個の連続セルの３セルスクウェアブロックのうちの１つを有する。
【００６７】
例３は例１および２のいずれかの主題を備え、局所的な最大セルを探索することは、信号閾値以上のタッチデータ値を有する局所的な最大セルを探索することを有する。
【００６８】
例４は例１〜３のいずれかの主題を備え、重心をマージすることは、複数の縦線において複数のブロックをトラバースしてタッチ距離閾値未満だけ縦方向に隔てられた、複数の隣接ブロックにおける複数の重心をマージすることと、複数の横線において複数のブロックをトラバースしてタッチ距離閾値未満だけ横方向に隔てられた、複数の隣接ブロックにおける複数の重心をマージすることと、斜め方向に隣接する複数のペアにおいて複数のブロックをトラバースしてタッチ距離閾値未満だけ斜め方向に隔てられた、複数の隣接ブロックにおける複数の重心をマージすることとを含む。
【００６９】
例５は例１〜４のいずれかの主題を備え、隣接ブロックにおける複数の重心をマージすることは、タッチ距離閾値未満だけ隔てられた重心のペアの第１重心および第２重心を識別することと、重心としての特定を第２重心から除去することとを有し、第１重心は第２重心の第２タッチデータ値より大きい第１タッチデータ値を有する。
【００７０】
例６は例１〜５のいずれかの主題を備え、タッチ距離閾値は２つのセルを有する。
【００７１】
例７は例１〜６のいずれかの主題を備え、複数の縦線において複数のブロックをトラバースし、複数の横線において複数のブロックをトラバースし、斜め方向に隣接する複数のペアにおいて複数のブロックをトラバースするプロセッサグラフィックスをさらに備え、複数の縦線において複数のブロックをトラバースすることは、プロセッサグラフィックスを用いてブロックごとに１つのタスクをディスパッチすることと、複数の縦線において複数のブロックをトラバースするべく、プロセッサグラフィックスのスコアボードを用いて複数のタスクの間のデータ従属性をセットすることとを含み、各タスクは、隣接ブロックに位置する他の重心からタッチ距離閾値内に位置するブロック内で重心をマージすることを含み、複数の横線において複数のブロックをトラバースすることは、プロセッサグラフィックスを用いてブロックごとに１つのタスクをディスパッチすることと、複数の横線において複数のブロックをトラバースするべく、プロセッサグラフィックスのスコアボードを用いて複数のタスクの間のデータ従属性をセットすることとを含み、各タスクは、隣接ブロックに位置する他の重心からタッチ距離閾値内に位置するブロック内で重心をマージすることを含み、斜め方向に隣接する複数のペアにおいて複数のブロックをトラバースすることは、プロセッサグラフィックスを用いて４個のブロックのスクウェアグループごとに１つのタスクをディスパッチすることと、斜め方向に隣接する複数のペアにおいて複数のブロックをトラバースするべく、プロセッサグラフィックスのスコアボードを用いて複数のタスクの間でデータ従属性をセットすることとを含み、各タスクは、隣接ブロックに位置する他の重心からタッチ距離閾値内に位置する複数のブロックのスクウェアグループ内で複数の重心をマージすることを含む。
【００７２】
例８は例１〜７のいずれかの主題を備え、マージされた複数の重心のそれぞれの周りのクラスタ境界を検出することは、重心を囲む複数のセルに対する入力フレームからデータをロードすることと、信号閾値未満のタッチデータ値を含む複数のセルをゼロに設定することと、クラスタ境界を囲む入力フレームの複数のセルを含む入力ウィンドウを定義することと、入力ウィンドウのサイズと等しいサイズを有する比較ウィンドウを構築すべくクラスタの複数のエッジセルを複製することと、エッジセルの複数の差異を決定すべく、比較ウィンドウの対応複製エッジセルのタッチデータ値から、入力ウィンドウの各エッジセルのタッチデータ値を減算することと、エッジセルの複数の差異のいずれもゼロより小さくないとの判定に応じて比較ウィンドウのサイズを増やすことと、エッジセルの複数の差異のいずれかがゼロより小さいとの判定に応じて入力ウィンドウにおける有効セルの数をカウントすることとを有し、各有効セルはゼロより小さくない対応エッジセルの差異を有する。
【００７３】
例９は例１〜８のいずれかの主題を備え、入力フレームデータをロードすることは、重心を囲む複数のセルの１６×１６スクウェアからデータをロードすることを有する。
【００７４】
例１０は例１〜９のいずれかの主題を備え、各エッジセルのタッチデータ値を減算することは、プロセッサグラフィックスの単一命令多重データ減算命令を用いて、入力ウィンドウのエッジを第１ベクトルにパックすることと、比較ウィンドウのエッジを第２ベクトルにパックすることと、第２ベクトルから第１ベクトルを減算することとを有する。
【００７５】
例１１は例１〜１０のいずれかの主題を備え、有効セルの数をカウントすることは、プロセッサグラフィックスの単一命令多重データ加算命令を用いて、有効セルの数をカウントすることを有する。
【００７６】
例１２は例１〜１１のいずれかの主題を備え、マージされた複数の重心のそれぞれの周りのクラスタ境界を検出することは、重心を囲む複数のセルに対する入力フレームからデータをロードすることと、信号閾値未満のタッチデータ値を含む複数のセルをゼロに設定することと、第１ウィンドウ内の複数のエッジセルの第１最大値を計算することと、重心を囲む入力フレームの第２ウィンドウ内の複数のエッジセルの合計を計算することであって、第２ウィンドウは第１ウィンドウを囲むことと、第２ウィンドウ内の複数のエッジセルの第２最大値を計算することと、信号閾値を乗算された第２ウィンドウ内のエッジセル数よりも合計が小さいか否かを判定することと、第２最大値が第１最大値より大きいかを判定することと、信号閾値を乗算された第２ウィンドウ内のエッジセル数よりも合計が小さくないとの判定、および、第２最大値が第１最大より大きくないとの判定に応じて、第１ウィンドウおよび第２ウィンドウのサイズを増やすことと、信号閾値を乗算された第２ウィンドウ内のエッジセル数よりも合計が小さいとの判定、または、第２最大値が第１最大より大きいとの判定に応じて、第１ウィンドウ内の有効セルの数をカウントすることとを含む。
【００７７】
例１３は例１〜１２のいずれかの主題を備え、プロセッサグラフィックスと、並行ディスパッチモジュールとをさらに備え、局所的な最大セルを探索することは、プロセッサグラフィックスにより実行される１つの探索タスクをブロックごとに割り当てることを有し、複数の重心をマージすることは、プロセッサグラフィックスにより実行される１つのマージタスクをブロックごとに割り当てることを有し、マージされた複数の重心のそれぞれの周りのクラスタ境界を検出することは、プロセッサグラフィックスにより実行される１つの検出タスクをマージされた重心ごとに割り当てることを有し、並行ディスパッチモジュールは、プロセッサグラフィックスの複数の実行ユニットを用いて、（ｉ）並行して複数の探索タスクを実行し、（ｉｉ）並行して複数のマージタスクを実行し、（ｉｉｉ）並行して複数の検出タスクを実行する。
【００７８】
例１４は例１〜１３のいずれかの主題を備え、重心検出モジュールは、プロセッサグラフィックスの単一命令多重データ命令を用いて、局所的な最大セルを探索すること、複数の重心をマージすること、または、クラスタ境界を検出することのうち少なくとも１つを実行する。
【００７９】
例１５は、タッチポイント追跡のためのコンピューティングデバイスを備え、コンピューティングデバイスは、タッチスクリーンと、（ｉ）タッチスクリーンから前の入力フレームを受信するとともに、（ｉｉ）タッチスクリーンから現在の入力フレームを受信する入力フレームモジュールと、タッチポイント追跡モジュールとを備え、前の入力フレームは、複数の前の追跡タッチポイントを識別する複数のセルを定義し、現在の入力フレームは、複数のセルを定義するとともに複数の現在のタッチポイントを識別し、タッチポイント追跡モジュールは、前の入力フレームにおいて識別された、複数の前の追跡タッチポイントのそれぞれの位置を予測し、前の追跡タッチポイントの予測された位置の追跡距離閾値内に現在位置を有する現在のタッチポイントに、前の追跡タッチポイントの識別子を割り当て、複数の現在のタッチポイントに割り当てられた複数の重複識別子を除去し、複数の前の追跡タッチポイントの各未割当の識別子を、（ｉ）追跡距離閾値内で前の追跡タッチポイントに最も近い現在のタッチポイントであり、かつ、（ｉｉ）複数の前の追跡タッチポイントの識別子が以前に割り当てられていない現在のタッチポイントに割り当て、未割当の現在の各タッチポイントに固有識別子を割り当てる。
【００８０】
例１６は例１５の主題を備え、複数の前の追跡タッチポイントのそれぞれの位置を予測することは、（ｉ）前の入力フレームにおける複数の前の追跡タッチポイントのそれぞれの位置を決定すること、または、（ｉｉ）複数の前の追跡タッチポイントのそれぞれのスピードを判定し、速度関数として位置を予測することのうち１つを有する。
【００８１】
例１７は例１５および１６のいずれかの主題を備え、前の追跡タッチポイントの識別子を現在のタッチポイントに割り当てることは、前の追跡タッチポイントの予測された位置の追跡距離閾値内に位置する入力フレームの全ての現在のタッチポイントを取得し、取得された複数の現在のタッチポイントのうち、予測された位置に最も近い現在のタッチポイントを識別し、最も近い現在のタッチポイントの追跡距離閾値内に複数の予測された位置を有する、全ての前の追跡タッチポイントを取得し、取得された複数の前の追跡タッチポイントのうち、最も近い現在のタッチポイントに対して最も近い前の追跡タッチポイントを識別し、最も近い前の追跡タッチポイントの識別子を、最も近い現在のタッチポイントに割り当てることを含む。
【００８２】
例１８は例１５〜１７のいずれかの主題を備え、現在のタッチポイントに割り当てられた複数の重複識別子を除去することは、前の追跡タッチポイントの予測された位置の追跡距離閾値内に位置する入力フレームの全ての現在のタッチポイントを取得することと、取得された複数の現在のタッチポイントのうち１つより多いものが、前の追跡タッチポイントの識別子に適合する識別子を有するかを判定することと、取得された複数の現在のタッチポイントのうち１つより多いものが、前の追跡タッチポイントの識別子に適合する識別子を有するとの判定に応じて、取得された複数の現在のタッチポイントのうち、（ｉ）前の追跡タッチポイントに最も近い位置、および、（ｉｉ）前の追跡タッチポイントの識別子に適合する識別子を有する、最も近い現在のタッチポイントを識別し、最も近い現在のタッチポイントの識別子を維持し、かつ、取得された複数の現在のタッチポイントのうち、前の追跡タッチポイントの識別子に適合する識別子を有する、複数の他の現在のタッチポイントの識別子を除去することとを有する。
【００８３】
例１９は例１５〜１８のいずれかの主題を備え、現在の入力フレームは、コンピューティングデバイスのプロセッサグラフィックスにより画像データとしてフォーマットされた現在の入力フレームを有する。
【００８４】
例２０は例１５〜１９のいずれかの主題を備え、プロセッサグラフィックスにより認識された画像データは、３２ビットの浮動２次元表面フォーマットを有する。
【００８５】
例２１は例１５〜２０のいずれかの主題を備え、追跡距離閾値は現在の入力フレームの７個の入力セルを有する。
【００８６】
例２２は例１５〜２１のいずれかの主題を備え、プロセッサグラフィックスおよび並行ディスパッチモジュールをさらに備え、前の追跡タッチポイントの識別子を割り当てることは、プロセッサグラフィックスにより実行される１つの割り当てタスクを、前の追跡タッチポイントごとに割り当てることを含み、複数の重複識別子を除去することは、プロセッサグラフィックスにより実行される１つの除去タスクを、前の追跡タッチポイントごとに割り当てることを含み、未使用の前の追跡タッチポイントそれぞれの識別子を割り当てることは、プロセッサグラフィックスにより実行される１つの未使用識別子割り当てタスクを、前の追跡タッチポイントごとに割り当てることを含み、未割当の現在の各タッチポイントに固有識別子を割り当てることは、現在の入力フレームの複数のセルを複数のブロックにグループ化することと、プロセッサグラフィックスにより実行される１つの固有識別子割り当てタスクを、ブロックごとに割り当てることと、プロセッサグラフィックスのスコアボードを用いて複数のブロックの間のデータ従属性をセットすることとを含み、並行ディスパッチモジュールは、プロセッサグラフィックスの複数の実行ユニットを用いて、（ｉ）並行して複数の割り当てタスクを実行し、（ｉｉ）並行して複数の除去タスクを実行し、（ｉｉｉ）並行して複数の未使用識別子割り当てタスクを実行し、（ｉｖ）並行して複数の固有識別子割り当てタスクを実行する。
【００８７】
例２３は例１５〜２２のいずれかの主題を備え、タッチポイント追跡モジュールは、プロセッサグラフィックスの単一命令多重データ命令を用い、前の追跡タッチポイントの識別子を割り当てること、複数の重複識別子を除去すること、各未割当の識別子を割り当てること、または、未割当の現在の各タッチポイントに固有識別子を割り当てることのうち少なくとも１つを実行する。
【００８８】
例２４は、コンピューティングデバイス上で複数のタッチポイント重心を検出する方法を備え、当該方法は、コンピューティングデバイス上で、コンピューティングデバイスのタッチスクリーンから入力フレームを受信する段階であって、入力フレームが複数のセルを定義し、各セルがタッチデータ値を有する段階と、コンピューティングデバイス上で、入力フレームの複数のセルを複数のブロックにグループ化する段階と、コンピューティングデバイス上で、複数のブロックのそれぞれ内の局所的な最大セルを探索する段階であって、局所的な最大セルは、信号閾値と予め定められた関係を持つタッチデータ値を有する段階と、コンピューティングデバイス上で、複数の局所的な最大セルのそれぞれを重心として識別する段階と、コンピューティングデバイス上で、互いにタッチ距離閾値内に位置する複数の重心をマージする段階と、コンピューティングデバイス上で、マージされた複数の重心のそれぞれの周りのクラスタ境界を検出する段階であって、各クラスタ境界は入力フレームの少なくとも１つのセルを含む段階と、を備える。
【００８９】
例２５は例２４の主題を備え、複数のセルをグループ化する段階は、１６個の隣接セルを４セルのスクウェアブロックにグループ化する段階、または、９個の隣接セルを３セルスクウェアブロックにグループ化する段階のうちの１つを有する。
【００９０】
例２６は例２４および２５のいずれかの主題を備え、局所的な最大セルを探索する段階は、信号閾値以上のタッチデータ値を有する局所的な最大セルを探索する段階を有する。
【００９１】
例２７は例２４〜２６のいずれかの主題を備え、重心をマージする段階は、複数の縦線において複数のブロックをトラバースしてタッチ距離閾値未満だけ縦方向に隔てられた、複数の隣接ブロックにおける複数の重心をマージする段階と、複数の横線において複数のブロックをトラバースしてタッチ距離閾値未満だけ横方向に隔てられた、複数の隣接ブロックにおける複数の重心をマージする段階と、斜め方向に隣接する複数のペアにおいて複数のブロックをトラバースしてタッチ距離閾値未満だけ斜め方向に隔てられた、複数の隣接ブロックにおける複数の重心をマージする段階とを含む。
【００９２】
例２８は例２４〜２７のいずれかの主題を備え、隣接ブロックにおける複数の重心をマージする段階は、タッチ距離閾値未満だけ隔てられた重心のペアの第１重心および第２重心を識別する段階と、重心としての特定を第２重心から除去する段階とを有し、第１重心は第２重心の第２タッチデータ値より大きい第１タッチデータ値を有する。
【００９３】
例２９は例２４〜２８のいずれかの主題を備え、複数の重心をマージする段階は、トラバース方向において２つより少ないセルにより隔てられた隣接ブロック内の複数の重心をマージする段階を有する。
【００９４】
例３０は例２４〜２９のいずれかの主題を備え、複数の縦線において複数のブロックをトラバースする段階は、コンピューティングデバイスのプロセッサグラフィックスを用いてブロックごとに１つのタスクをディスパッチする段階と、複数の縦線において複数のブロックをトラバースするべく、プロセッサグラフィックスのスコアボードを用いて、複数のタスクの間のデータ従属性をセットする段階とを含み、各タスクは、隣接ブロックに位置する他の重心からタッチ距離閾値内に位置するブロック内で重心をマージすることを含み、複数の横線において複数のブロックをトラバースする段階は、プロセッサグラフィックスを用いてブロックごとに１つのタスクをディスパッチする段階と、複数の横線において複数のブロックをトラバースするべく、プロセッサグラフィックスのスコアボードを用いて、複数のタスクの間のデータ従属性をセットする段階とを含み、各タスクは隣接ブロックに位置する他の重心からタッチ距離閾値内に位置するブロック内で重心をマージすることを含み、斜め方向に隣接する複数のペアにおいて複数のブロックをトラバースする段階は、プロセッサグラフィックスを用いて４個のブロックのスクウェアグループごとに１つのタスクをディスパッチする段階と、斜め方向に隣接する複数のペアにおいて複数のブロックをトラバースするべく、プロセッサグラフィックスのスコアボードを用いて、複数のタスクの間のデータ従属性をセットする段階とを含み、各タスクは、隣接ブロックに位置する他の重心からタッチ距離閾値内に位置する複数のブロックのスクウェアグループ内で複数の重心をマージすることを含む。
【００９５】
例３１は例２４〜３０のいずれかの主題を備え、マージされた複数の重心のそれぞれの周りのクラスタ境界を検出する段階は、重心を囲む複数のセルに対する入力フレームからデータをロードする段階と、信号閾値未満のタッチデータ値を有する複数のセルにゼロを書き込む段階と、クラスタ境界を囲む入力フレームの複数のセルを有する入力ウィンドウを定義する段階と、入力ウィンドウのサイズに等しいサイズを有する比較ウィンドウを構築するべくクラスタの複数のエッジセルを複製する段階と、エッジセルの複数の差異を決定するべく、入力ウィンドウの各エッジセルのタッチデータ値を、比較ウィンドウの対応複製エッジセルのタッチデータ値から減算する段階と、エッジセルの複数の差異のいずれもゼロより少なくないとの判定に応じて比較ウィンドウのサイズを増やす段階と、エッジセルの複数の差異のいずれかがゼロより少ないとの判定に応じて入力ウィンドウ内の有効セルの数をカウントする段階と、を有し、各有効セルは、ゼロより小さくない対応エッジセルの差異を有する。
【００９６】
例３２は例２４〜３１のいずれかの主題を備え、入力フレームデータをロードする段階は、重心を囲む複数のセルの１６×１６スクウェアからデータをロードする段階を有する。
【００９７】
例３３は例２４〜３２のいずれかの主題を備え、各エッジセルのタッチデータ値を減算する段階は、プロセッサグラフィックスの単一命令多重データ減算命令を用いて、入力ウィンドウのエッジを第１ベクトルにパックする段階と、比較ウィンドウのエッジを第２ベクトルにパックする段階と、第２ベクトルから第１ベクトルを減算する段階とを有する。
【００９８】
例３４は例２４〜３３のいずれかの主題を備え、有効セルの数をカウントする段階は、プロセッサグラフィックスの単一命令多重データ加算命令を用いて、有効セルの数をカウントする段階を有する。
【００９９】
例３５は例２４〜３４のいずれかの主題を備え、マージされた複数の重心のそれぞれの周りのクラスタ境界を検出する段階は、重心を囲む複数のセルに対する入力フレームからデータをロードする段階と、信号閾値未満のタッチデータ値を有する複数のセルにゼロを書き込む段階と、第１ウィンドウ内の複数のエッジセルの第１最大値を計算する段階と、重心を囲む入力フレームの第２ウィンドウ内の複数のエッジセルの合計を計算する段階であって、第２ウィンドウが第１ウィンドウを囲む段階と、第２ウィンドウ内の複数のエッジセルの第２最大値を計算する段階と、信号閾値を乗算された第２ウィンドウ内のエッジセル数よりも合計が小さいか否かを判定する段階と、第２最大値が第１最大値より大きいか否かを判定する段階と、信号閾値を乗算された第２ウィンドウ内のエッジセル数よりも合計が小さくないとの判定、および、第２最大値が第１最大より大きくないとの判定に応じて、第１ウィンドウおよび第２ウィンドウのサイズを増やす段階と、信号閾値を乗算された第２ウィンドウ内のエッジセル数よりも合計が小さいとの判定、または、第２最大値が第１最大値より大きいとの判定に応じて、第１ウィンドウ内の有効セルの数をカウントする段階と、を有する。
【０１００】
例３６は例２４〜３５のいずれかの主題を備え、局所的な最大セルを探索する段階は、コンピューティングデバイスのプロセッサグラフィックスにより実行される１つの探索タスクをブロックごとに割り当てる段階と、プロセッサグラフィックスの複数の実行ユニットを用いて、並行して複数の探索タスクを実行する段階とを有し、複数の重心をマージする段階は、プロセッサグラフィックスにより実行される１つのマージタスクをブロックごとに割り当てる段階と、プロセッサグラフィックスの複数の実行ユニットを用いて、並行して複数のマージタスクを実行する段階とを有し、マージされた複数の重心のそれぞれの周りのクラスタ境界を検出する段階は、プロセッサグラフィックスにより実行される１つの検出タスクをマージされた重心ごとに割り当てる段階と、プロセッサグラフィックスの複数の実行ユニットを用いて、並行して複数の検出タスクを実行する段階とを有する。
【０１０１】
例３７は例２４〜３６のいずれかの主題を備え、プロセッサグラフィックスの単一命令多重データ命令を用いて、局所的な最大セルを探索する段階、複数の重心をマージする段階、またはクラスタ境界を検出する段階のうち１つを実行する段階をさらに備える。
【０１０２】
例３８は、タッチポイントを追跡する方法を備え、当該方法は、コンピューティングデバイス上で、コンピューティングデバイスのタッチスクリーンから受信された前の入力フレーム内で識別された複数の前の追跡タッチポイントのそれぞれの位置を予測する段階であって、前の入力フレームは複数のセルを定義する段階と、コンピューティングデバイス上で、複数のセルを定義するとともに複数の現在のタッチポイントを識別する現在の入力フレームを、タッチスクリーンから受信する段階と、コンピューティングデバイス上で、前の追跡タッチポイントの予測された位置の追跡距離閾値内に現在位置を有する現在のタッチポイントに対し、前の追跡タッチポイントの識別子を割り当てる段階と、コンピューティングデバイス上で、複数の現在のタッチポイントに割り当てられた複数の重複識別子を除去する段階と、コンピューティングデバイス上で、複数の前の追跡タッチポイントの各未割当の識別子を、（ｉ）追跡距離閾値内の前の追跡タッチポイントに最も近い現在のタッチポイントであって、かつ、（ｉｉ）複数の前の追跡タッチポイントの識別子を以前に割り当てられていない現在のタッチポイントに対して割り当てる段階と、コンピューティングデバイス上で、未割当の現在の各タッチポイントに固有識別子を割り当てる段階とを備える。
【０１０３】
例３９は例３８の主題を備え、複数の前の追跡タッチポイントのそれぞれの位置を予測する段階は、（ｉ）前の入力フレームにおける複数の前の追跡タッチポイントのそれぞれの位置を決定する段階、または、（ｉｉ）複数の前の追跡タッチポイントのそれぞれのスピードを判定し、速度関数として位置を予測する段階のうち１つを有する。
【０１０４】
例４０は例３８および３９のいずれかの主題を備え、前の追跡タッチポイントの識別子を現在のタッチポイントに割り当てる段階は、前の追跡タッチポイントの予測された位置の追跡距離閾値内に位置する、入力フレームの全ての現在のタッチポイントを取得する段階と、取得された複数の現在のタッチポイントのうち、予測された位置に最も近い現在のタッチポイントを識別する段階と、最も近い現在のタッチポイントの追跡距離閾値内に複数の予測された位置を有する全ての前の追跡タッチポイントを取得する段階と、取得された複数の前の追跡タッチポイントのうち、最も近い現在のタッチポイントに最も近い前の追跡タッチポイントを識別する段階と、最も近い前の追跡タッチポイントの識別子を、最も近い現在のタッチポイントに割り当てる段階とを有する。
【０１０５】
例４１は例３８〜４０のいずれかの主題を備え、現在のタッチポイントに割り当てられた複数の重複識別子を除去する段階は、前の追跡タッチポイントの予測された位置の追跡距離閾値内に位置する、入力フレームの全ての現在のタッチポイントを取得する段階と、取得された複数の現在のタッチポイントのうちの１つより多くが、前の追跡タッチポイントの識別子に適合する識別子を有するか否かを判定する段階と、取得された複数の現在のタッチポイントのうちの１つより多くが、前の追跡タッチポイントの識別子に適合する識別子を有するとの判定に応じて、取得された複数の現在のタッチポイントのうち、（ｉ）前の追跡タッチポイントに最も近い位置、および、（ｉｉ）前の追跡タッチポイントの識別子に適合する識別子、を有する、最も近い現在のタッチポイントを識別し、最も近い現在のタッチポイントの識別子を維持し、かつ、取得された複数の現在のタッチポイントのうち、前の追跡タッチポイントの識別子に適合する識別子を有する複数の他の現在のタッチポイントの識別子を除去する段階とを有する。
【０１０６】
例４２は例３８〜４１のいずれかの主題を備え、現在の入力フレームを受信する段階は、コンピューティングデバイスのプロセッサグラフィックスにより画像データとしてフォーマットされた現在の入力フレームを受信する段階を有する。
【０１０７】
例４３は例３８〜４２のいずれかの主題を備え、画像データとしてフォーマットされた現在の入力フレームを受信する段階は、３２ビット浮動２次元表面フォーマットでフォーマットされた現在の入力フレームを受信する段階を有する。
【０１０８】
例４４は例３８〜４３のいずれかの主題を備え、追跡距離閾値は現在の入力フレームの７個の入力セルを有する。
【０１０９】
例４５は例３８〜４４のいずれかの主題を備え、前の追跡タッチポイントの識別子を割り当てる段階は、コンピューティングデバイスのプロセッサグラフィックスにより実行される１つの割り当てタスクを前の追跡タッチポイントごとに割り当てる段階と、プロセッサグラフィックスの複数の実行ユニットを用いて、並行して複数の割り当てタスクを実行する段階とを有し、複数の重複識別子を除去する段階は、プロセッサグラフィックスにより実行される１つの除去タスクを前の追跡タッチポイントごとに割り当てる段階と、プロセッサグラフィックスの複数の実行ユニットを用いて、並行して複数の除去タスクを実行する段階とを有し、未使用の前の追跡タッチポイントそれぞれの識別子を割り当てる段階は、プロセッサグラフィックスにより実行される１つの割り当てタスクを前の追跡タッチポイントごとに割り当てる段階と、プロセッサグラフィックスの複数の実行ユニットを用いて、並行して複数の割り当てタスクを実行する段階とを有し、未割当の現在の各タッチポイントに固有識別子を割り当てる段階は、現在の入力フレームの複数のセルを複数のブロックにグループ化する段階と、プロセッサグラフィックスにより実行される１つの割り当てタスクをブロックごとに割り当てる段階と、プロセッサグラフィックスのスコアボードを用いて、複数のブロックの間のデータ従属性をセットする段階と、プロセッサグラフィックスの複数の実行ユニットを用いて、並行して複数の割り当てタスクを実行する段階とを含む。
【０１１０】
例４６は例３８〜４５のいずれかの主題を備え、プロセッサグラフィックスの単一命令多重データ命令を用いて、前の追跡タッチポイントの識別子を割り当てる段階、複数の重複識別子を除去する段階、各未割当の識別子を割り当てる段階、または、未割当の現在の各タッチポイントに固有識別子を割り当てる段階のうち少なくとも１つを実行する段階をさらに備える。
【０１１１】
例４７はコンピューティングデバイスを備え、当該コンピューティングデバイスは、プロセッサと、プロセッサにより実行される場合にコンピューティングデバイスに例２４〜４６のいずれかに記載の方法を実行させる複数の命令が格納されたメモリとを備える。
【０１１２】
例４８は、実行されることに応じてコンピューティングデバイスが例２４〜４６のいずれかの方法を実行することをもたらす複数の命令が格納された１または複数の機械可読ストレージメディアを備える。
【０１１３】
例４９はタッチポイント重心検出のためのコンピューティングデバイスを備え、コンピューティングデバイスは例２４〜４６のいずれかの方法を実行する手段を有する。
【図１】
2016522522.tif 000003
【図２】
2016522522.tif 000004
【図３】
2016522522.tif 000005
【図４】
2016522522.tif 000006
【図５】
2016522522.tif 000007
【図６】
2016522522.tif 000008
【図７】
2016522522.tif 000009
【図８】
2016522522.tif 000010
【図９】
2016522522.tif 000011
【図１０】
2016522522.tif 000012
【図１１】
2016522522.tif 000013
【図１２】
2016522522.tif 000014
【図１３】
2016522522.tif 000015
【手続補正書】
【提出日】平成27年12月21日(2015.12.21)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
タッチポイント重心検出のためのコンピューティングデバイスであって、
タッチスクリーンと、
前記タッチスクリーンから入力フレームを受信する入力フレームモジュールと、
重心検出モジュールと、
を備え、
前記入力フレームは複数のセルを定義し、各セルはタッチデータ値を有し、
前記重心検出モジュールは、
前記入力フレームの前記複数のセルを複数のブロックにグループ化し、
前記複数のブロックのそれぞれにおいて、信号閾値と予め定められた関係を持つタッチデータ値を有する局所的な最大セルを探索し、
複数の前記局所的な最大セルのそれぞれを重心として識別し、
互いのタッチ距離閾値内に位置する複数の重心をマージし、かつ、
マージされた前記複数の重心のそれぞれの周りのクラスタ境界を検出し、
各クラスタ境界は、前記入力フレームの少なくとも１つのセルを含む、コンピューティングデバイス。
【請求項２】
前記重心をマージすることは、
複数の縦線において前記複数のブロックをトラバースして前記タッチ距離閾値未満だけ縦方向に隔てられた、複数の隣接ブロックにおける複数の重心をマージすることと、
複数の横線において前記複数のブロックをトラバースして前記タッチ距離閾値未満だけ横方向に隔てられた、複数の隣接ブロックにおける複数の重心をマージすることと、
斜め方向に隣接する複数のペアにおいて前記複数のブロックをトラバースして前記タッチ距離閾値未満だけ斜め方向に隔てられた、複数の隣接ブロックにおける複数の重心をマージすることと
を含む、請求項１に記載のコンピューティングデバイス。
【請求項３】
複数の縦線において前記複数のブロックをトラバースし、複数の横線において前記複数のブロックをトラバースし、斜め方向に隣接する複数のペアにおいて前記複数のブロックをトラバースするプロセッサグラフィックスをさらに備え、
複数の縦線において前記複数のブロックをトラバースすることは、
前記プロセッサグラフィックスを用いてブロックごとに１つのタスクをディスパッチすることと、
複数の縦線において前記複数のブロックをトラバースするべく、前記プロセッサグラフィックスのスコアボードを用いて前記複数のタスクの間のデータ従属性をセットすることと
を含み、
各タスクは、前記隣接ブロックに位置する他の重心から前記タッチ距離閾値内に位置する前記ブロック内で重心をマージすることを含み、
複数の横線において前記複数のブロックをトラバースすることは、
前記プロセッサグラフィックスを用いてブロックごとに１つのタスクをディスパッチすることと、
複数の横線において前記複数のブロックをトラバースするべく、前記プロセッサグラフィックスの前記スコアボードを用いて前記複数のタスクの間のデータ従属性をセットすることと
を含み、
各タスクは、前記隣接ブロックに位置する他の重心から前記タッチ距離閾値内に位置する前記ブロック内で重心をマージすることを含み、
斜め方向に隣接する複数のペアにおいて前記複数のブロックをトラバースすることは、
前記プロセッサグラフィックスを用いて４個のブロックのスクウェアグループごとに１つのタスクをディスパッチすることと、
斜め方向に隣接する複数のペアにおいて前記複数のブロックをトラバースするべく、前記プロセッサグラフィックスの前記スコアボードを用いて前記複数のタスクの間でデータ従属性をセットすることと
を含み、
各タスクは、隣接ブロックに位置する他の重心から前記タッチ距離閾値内に位置する複数のブロックの前記スクウェアグループ内で複数の重心をマージすることを含む、請求項２に記載のコンピューティングデバイス。
【請求項４】
マージされた前記複数の重心のそれぞれの周りの前記クラスタ境界を検出することは、
前記重心を囲む複数のセルに対する前記入力フレームからデータをロードすることと、
前記信号閾値未満のタッチデータ値を含む複数のセルをゼロに設定することと、
前記クラスタ境界を囲む前記入力フレームの複数のセルを含む入力ウィンドウを定義することと、
前記入力ウィンドウのサイズと等しいサイズを有する比較ウィンドウを構築すべく前記クラスタの複数のエッジセルを複製することと、
エッジセルの複数の差異を決定すべく、前記比較ウィンドウの対応複製エッジセルのタッチデータ値から、前記入力ウィンドウの各エッジセルのタッチデータ値を減算することと、
エッジセルの前記複数の差異のいずれもゼロより小さくないとの判定に応じて前記比較ウィンドウのサイズを増やすことと、
エッジセルの前記複数の差異のいずれかがゼロより小さいとの判定に応じて前記入力ウィンドウにおける有効セルの数をカウントすることと
を有し、
各有効セルはゼロより小さくない対応エッジセルの差異を有する、請求項１に記載のコンピューティングデバイス。
【請求項５】
マージされた前記複数の重心のそれぞれの周りの前記クラスタ境界を検出することは、
前記重心を囲む複数のセルに対する前記入力フレームからデータをロードすることと、
前記信号閾値未満のタッチデータ値を含む複数のセルをゼロに設定することと、
第１ウィンドウ内の複数のエッジセルの第１最大値を計算することと、
前記重心を囲む前記入力フレームの第２ウィンドウ内の複数のエッジセルの合計を計算することであって、前記第２ウィンドウは前記第１ウィンドウを囲むことと、
前記第２ウィンドウ内の複数のエッジセルの第２最大値を計算することと、
前記信号閾値を乗算された前記第２ウィンドウ内のエッジセル数よりも前記合計が小さいか否かを判定することと、
前記第２最大値が前記第１最大値より大きいかを判定することと、
前記信号閾値を乗算された前記第２ウィンドウ内の前記エッジセル数よりも前記合計が小さくないとの判定、および、前記第２最大値が前記第１最大より大きくないとの判定に応じて、前記第１ウィンドウおよび前記第２ウィンドウのサイズを増やすことと、
前記信号閾値を乗算された前記第２ウィンドウ内の前記エッジセル数よりも前記合計が小さいとの判定、または、前記第２最大値が前記第１最大より大きいとの判定に応じて、前記第１ウィンドウ内の有効セルの数をカウントすることと
を含む、請求項１に記載のコンピューティングデバイス。
【請求項６】
プロセッサグラフィックスと、
並行ディスパッチモジュールと
をさらに備え、
前記局所的な最大セルを探索することは、
前記プロセッサグラフィックスにより実行される１つの探索タスクをブロックごとに割り当てることを有し、
前記複数の重心をマージすることは、前記プロセッサグラフィックスにより実行される１つのマージタスクをブロックごとに割り当てることを有し、
マージされた前記複数の重心のそれぞれの周りの前記クラスタ境界を検出することは、前記プロセッサグラフィックスにより実行される１つの検出タスクをマージされた重心ごとに割り当てることを有し、
前記並行ディスパッチモジュールは、前記プロセッサグラフィックスの複数の実行ユニットを用いて、（ｉ）並行して複数の前記探索タスクを実行し、（ｉｉ）並行して複数の前記マージタスクを実行し、（ｉｉｉ）並行して複数の前記検出タスクを実行する、請求項１〜５のいずれか１項に記載のコンピューティングデバイス。
【請求項７】
前記重心検出モジュールは、前記プロセッサグラフィックスの単一命令多重データ命令を用いて、局所的な最大セルを探索すること、複数の重心をマージすること、または、前記クラスタ境界を検出することのうち少なくとも１つを実行する、請求項６に記載のコンピューティングデバイス。
【請求項８】
タッチポイント追跡のためのコンピューティングデバイスであって、
タッチスクリーンと、
（ｉ）前記タッチスクリーンから前の入力フレームを受信するとともに、（ｉｉ）前記タッチスクリーンから現在の入力フレームを受信する入力フレームモジュールと、
タッチポイント追跡モジュールと
を備え、
前記前の入力フレームは、複数の前の追跡タッチポイントを識別する複数のセルを定義し、
前記現在の入力フレームは、複数のセルを定義するとともに複数の現在のタッチポイントを識別し、
前記タッチポイント追跡モジュールは、
前記前の入力フレームにおいて識別された、前記複数の前の追跡タッチポイントのそれぞれの位置を予測し、
前記前の追跡タッチポイントの予測された前記位置の追跡距離閾値内に現在位置を有する現在のタッチポイントに、前の追跡タッチポイントの識別子を割り当て、
複数の前記現在のタッチポイントに割り当てられた複数の重複識別子を除去し、
複数の前記前の追跡タッチポイントの各未割当の識別子を、（ｉ）前記追跡距離閾値内で前記前の追跡タッチポイントに最も近い現在のタッチポイントであり、かつ、（ｉｉ）複数の前記前の追跡タッチポイントの識別子が以前に割り当てられていない現在のタッチポイントに割り当て、
未割当の現在の各タッチポイントに固有識別子を割り当てる、コンピューティングデバイス。
【請求項９】
前記前の追跡タッチポイントの前記識別子を前記現在のタッチポイントに割り当てることは、
前記前の追跡タッチポイントの予測された前記位置の前記追跡距離閾値内に位置する前記入力フレームの全ての現在のタッチポイントを取得することと、
取得された複数の前記現在のタッチポイントのうち、予測された前記位置に最も近い現在のタッチポイントを識別することと、
前記最も近い現在のタッチポイントの前記追跡距離閾値内に複数の予測された位置を有する、全ての前の追跡タッチポイントを取得することと、
取得された複数の前記前の追跡タッチポイントのうち、前記最も近い現在のタッチポイントに対して最も近い前の追跡タッチポイントを識別することと、
前記最も近い前の追跡タッチポイントの識別子を、前記最も近い現在のタッチポイントに割り当てることとを含む、請求項８に記載のコンピューティングデバイス。
【請求項１０】
前記現在のタッチポイントに割り当てられた前記複数の重複識別子を除去することは、
前記前の追跡タッチポイントの予測された前記位置の前記追跡距離閾値内に位置する前記入力フレームの全ての現在のタッチポイントを取得することと、
取得された複数の前記現在のタッチポイントのうち１つより多いものが、前記前の追跡タッチポイントの前記識別子に適合する識別子を有するかを判定することと、
取得された複数の前記現在のタッチポイントのうち１つより多いものが、前記前の追跡タッチポイントの前記識別子に適合する識別子を有するとの判定に応じて、
取得された複数の前記現在のタッチポイントのうち、（ｉ）前記前の追跡タッチポイントに最も近い位置、および、（ｉｉ）前記前の追跡タッチポイントの前記識別子に適合する識別子を有する、最も近い現在のタッチポイントを識別し、
前記最も近い現在のタッチポイントの前記識別子を維持し、かつ、
取得された複数の前記現在のタッチポイントのうち、前記前の追跡タッチポイントの前記識別子に適合する識別子を有する、複数の他の現在のタッチポイントの前記識別子を除去することと
を有する、請求項８に記載のコンピューティングデバイス。
【請求項１１】
プロセッサグラフィックスおよび並行ディスパッチモジュールをさらに備え、
前記前の追跡タッチポイントの前記識別子を割り当てることは、
前記プロセッサグラフィックスにより実行される１つの割り当てタスクを、前の追跡タッチポイントごとに割り当てることを含み、
前記複数の重複識別子を除去することは、
前記プロセッサグラフィックスにより実行される１つの除去タスクを、前の追跡タッチポイントごとに割り当てることを含み、
未使用の前の追跡タッチポイントそれぞれの前記識別子を割り当てることは、
前記プロセッサグラフィックスにより実行される１つの未使用識別子割り当てタスクを、前の追跡タッチポイントごとに割り当てることを含み、
未割当の現在の各タッチポイントに固有識別子を割り当てることは、
前記現在の入力フレームの複数のセルを複数のブロックにグループ化することと、
前記プロセッサグラフィックスにより実行される１つの固有識別子割り当てタスクを、ブロックごとに割り当てることと、
前記プロセッサグラフィックスのスコアボードを用いて前記複数のブロックの間のデータ従属性をセットすることと
を含み、
前記並行ディスパッチモジュールは、前記プロセッサグラフィックスの複数の実行ユニットを用いて、
（ｉ）並行して複数の前記割り当てタスクを実行し、
（ｉｉ）並行して複数の前記除去タスクを実行し、
（ｉｉｉ）並行して複数の前記未使用識別子割り当てタスクを実行し、
（ｉｖ）並行して複数の前記固有識別子割り当てタスクを実行する、請求項８〜１０の何れか１項に記載のコンピューティングデバイス。
【請求項１２】
前記タッチポイント追跡モジュールは、前記プロセッサグラフィックスの単一命令多重データ命令を用い、
前記前の追跡タッチポイントの前記識別子を割り当てること、
複数の重複識別子を除去すること、
各未割当の識別子を割り当てること、または、
未割当の現在の各タッチポイントに前記固有識別子を割り当てること
のうち少なくとも１つを実行する、請求項１１に記載のコンピューティングデバイス。
【請求項１３】
コンピューティングデバイス上で複数のタッチポイント重心を検出する方法であって、
前記コンピューティングデバイス上で、前記コンピューティングデバイスのタッチスクリーンから入力フレームを受信する段階であって、前記入力フレームが複数のセルを定義し、各セルがタッチデータ値を有する段階と、
前記コンピューティングデバイス上で、前記入力フレームの前記複数のセルを複数のブロックにグループ化する段階と、
前記コンピューティングデバイス上で、前記複数のブロックのそれぞれ内の局所的な最大セルを探索する段階であって、前記局所的な最大セルは、信号閾値と予め定められた関係を持つタッチデータ値を有する段階と、
前記コンピューティングデバイス上で、複数の前記局所的な最大セルのそれぞれを重心として識別する段階と、
前記コンピューティングデバイス上で、互いにタッチ距離閾値内に位置する複数の重心をマージする段階と、
前記コンピューティングデバイス上で、マージされた前記複数の重心のそれぞれの周りのクラスタ境界を検出する段階であって、各クラスタ境界は前記入力フレームの少なくとも１つのセルを含む段階と、
を備える方法。
【請求項１４】
前記複数の重心をマージする段階は、
複数の縦線において前記複数のブロックをトラバースする段階と、
複数の横線において前記複数のブロックをトラバースする段階と、
斜め方向に隣接する複数のペアにおいて前記複数のブロックをトラバースする段階と
を備え、
複数の縦線において前記複数のブロックをトラバースする段階は、
前記コンピューティングデバイスのプロセッサグラフィックスを用いてブロックごとに１つのタスクをディスパッチする段階と、
複数の縦線において前記複数のブロックをトラバースするべく、前記プロセッサグラフィックスのスコアボードを用いて、前記複数のタスクの間のデータ従属性をセットする段階と
を含み、
各タスクは、前記隣接ブロックに位置する他の重心から前記タッチ距離閾値内に位置する前記ブロック内で重心をマージすることを含み、
複数の横線において前記複数のブロックをトラバースする段階は、
前記プロセッサグラフィックスを用いてブロックごとに１つのタスクをディスパッチする段階と、
複数の横線において前記複数のブロックをトラバースするべく、前記プロセッサグラフィックスの前記スコアボードを用いて、前記複数のタスクの間のデータ従属性をセットする段階と
を含み、
各タスクは前記隣接ブロックに位置する他の重心から前記タッチ距離閾値内に位置する前記ブロック内で重心をマージすることを含み、
斜め方向に隣接する複数のペアにおいて前記複数のブロックをトラバースする段階は、
前記プロセッサグラフィックスを用いて４個のブロックのスクウェアグループごとに１つのタスクをディスパッチする段階と、
斜め方向に隣接する複数のペアにおいて前記複数のブロックをトラバースするべく、前記プロセッサグラフィックスの前記スコアボードを用いて、前記複数のタスクの間のデータ従属性をセットする段階と
を含み、
各タスクは、隣接ブロックに位置する他の重心から前記タッチ距離閾値内に位置する複数のブロックの前記スクウェアグループ内で複数の重心をマージすることを含む、請求項１３に記載の方法。
【請求項１５】
マージされた前記複数の重心のそれぞれの周りの前記クラスタ境界を検出する段階は、
前記重心を囲む複数のセルに対する前記入力フレームからデータをロードする段階と、
前記信号閾値未満のタッチデータ値を有する複数のセルにゼロを書き込む段階と、
前記クラスタ境界を囲む前記入力フレームの複数のセルを有する入力ウィンドウを定義する段階と、
前記入力ウィンドウのサイズに等しいサイズを有する比較ウィンドウを構築するべく前記クラスタの複数のエッジセルを複製する段階と、
エッジセルの複数の差異を決定するべく、前記入力ウィンドウの各エッジセルのタッチデータ値を、前記比較ウィンドウの対応複製エッジセルのタッチデータ値から減算する段階と、
エッジセルの前記複数の差異のいずれもゼロより少なくないとの判定に応じて前記比較ウィンドウのサイズを増やす段階と、
エッジセルの前記複数の差異のいずれかがゼロより少ないとの判定に応じて前記入力ウィンドウ内の有効セルの数をカウントする段階と、
を有し、
各有効セルは、ゼロより小さくない対応エッジセルの差異を有する、請求項１３に記載の方法。
【請求項１６】
マージされた前記複数の重心のそれぞれの周りの前記クラスタ境界を検出する段階は、
前記重心を囲む複数のセルに対する前記入力フレームからデータをロードする段階と、
前記信号閾値未満のタッチデータ値を有する複数のセルにゼロを書き込む段階と、
第１ウィンドウ内の複数のエッジセルの第１最大値を計算する段階と、
前記重心を囲む前記入力フレームの第２ウィンドウ内の複数のエッジセルの合計を計算する段階であって、前記第２ウィンドウが前記第１ウィンドウを囲む段階と、
前記第２ウィンドウ内の複数のエッジセルの第２最大値を計算する段階と、
前記信号閾値を乗算された前記第２ウィンドウ内のエッジセル数よりも前記合計が小さいか否かを判定する段階と、
前記第２最大値が前記第１最大値より大きいか否かを判定する段階と、
前記信号閾値を乗算された前記第２ウィンドウ内の前記エッジセル数よりも前記合計が小さくないとの判定、および、前記第２最大値が前記第１最大より大きくないとの判定に応じて、前記第１ウィンドウおよび前記第２ウィンドウのサイズを増やす段階と、
前記信号閾値を乗算された前記第２ウィンドウ内の前記エッジセル数よりも前記合計が小さいとの判定、または、前記第２最大値が前記第１最大値より大きいとの判定に応じて、前記第１ウィンドウ内の有効セルの数をカウントする段階と、
を有する、請求項１３に記載の方法。
【請求項１７】
前記局所的な最大セルを探索する段階は、
前記コンピューティングデバイスのプロセッサグラフィックスにより実行される１つの探索タスクをブロックごとに割り当てる段階と、
前記プロセッサグラフィックスの複数の実行ユニットを用いて、並行して複数の前記探索タスクを実行する段階と
を有し、
前記複数の重心をマージする段階は、
前記プロセッサグラフィックスにより実行される１つのマージタスクをブロックごとに割り当てる段階と、
前記プロセッサグラフィックスの複数の実行ユニットを用いて、並行して複数の前記マージタスクを実行する段階と
を有し、
マージされた前記複数の重心のそれぞれの周りの前記クラスタ境界を検出する段階は、
前記プロセッサグラフィックスにより実行される１つの検出タスクをマージされた重心ごとに割り当てる段階と、
前記プロセッサグラフィックスの複数の実行ユニットを用いて、並行して複数の前記検出タスクを実行する段階と
を有する、請求項１３に記載の方法。
【請求項１８】
前記コンピューティングデバイスの前記プロセッサグラフィックスの単一命令多重データ命令を用いて、前記局所的な最大セルを探索する段階、前記複数の重心をマージする段階、または、前記クラスタ境界を検出する段階のうち少なくとも１つを実行する段階をさらに備える、請求項１７に記載の方法。
【請求項１９】
タッチポイントを追跡する方法であって、
コンピューティングデバイス上で、前記コンピューティングデバイスのタッチスクリーンから受信された前の入力フレーム内で識別された複数の前の追跡タッチポイントのそれぞれの位置を予測する段階であって、前記前の入力フレームは複数のセルを定義する段階と、
前記コンピューティングデバイス上で、複数のセルを定義するとともに複数の現在のタッチポイントを識別する現在の入力フレームを、前記タッチスクリーンから受信する段階と、
前記コンピューティングデバイス上で、前の追跡タッチポイントの予測された前記位置の追跡距離閾値内に現在位置を有する現在のタッチポイントに対し、前記前の追跡タッチポイントの識別子を割り当てる段階と、
前記コンピューティングデバイス上で、複数の前記現在のタッチポイントに割り当てられた複数の重複識別子を除去する段階と、
前記コンピューティングデバイス上で、複数の前記前の追跡タッチポイントの各未割当の識別子を、（ｉ）前記追跡距離閾値内の前記前の追跡タッチポイントに最も近い現在のタッチポイントであって、かつ、（ｉｉ）複数の前記前の追跡タッチポイントの識別子を以前に割り当てられていない現在のタッチポイントに対して割り当てる段階と、
前記コンピューティングデバイス上で、未割当の現在の各タッチポイントに固有識別子を割り当てる段階と
を備える方法。
【請求項２０】
前記前の追跡タッチポイントの前記識別子を前記現在のタッチポイントに割り当てる段階は、
前記前の追跡タッチポイントの予測された前記位置の前記追跡距離閾値内に位置する、前記入力フレームの全ての現在のタッチポイントを取得する段階と、
取得された複数の前記現在のタッチポイントのうち、予測された前記位置に最も近い現在のタッチポイントを識別する段階と、
前記最も近い現在のタッチポイントの前記追跡距離閾値内に複数の予測された位置を有する全ての前の追跡タッチポイントを取得する段階と、
取得された複数の前記前の追跡タッチポイントのうち、前記最も近い現在のタッチポイントに最も近い前の追跡タッチポイントを識別する段階と、
前記最も近い前の追跡タッチポイントの識別子を、前記最も近い現在のタッチポイントに割り当てる段階と
を有する、請求項１９に記載の方法。
【請求項２１】
前記現在のタッチポイントに割り当てられた前記複数の重複識別子を除去する段階は、
前記前の追跡タッチポイントの予測された前記位置の前記追跡距離閾値内に位置する、前記入力フレームの全ての現在のタッチポイントを取得する段階と、
取得された複数の前記現在のタッチポイントのうちの１つより多くが、前記前の追跡タッチポイントの前記識別子に適合する識別子を有するか否かを判定する段階と、
取得された複数の前記現在のタッチポイントのうちの１つより多くが、前記前の追跡タッチポイントの前記識別子に適合する識別子を有するとの判定に応じて、
取得された複数の前記現在のタッチポイントのうち、（ｉ）前記前の追跡タッチポイントに最も近い位置、および、（ｉｉ）前記前の追跡タッチポイントの前記識別子に適合する識別子、を有する、最も近い現在のタッチポイントを識別し、
前記最も近い現在のタッチポイントの前記識別子を維持し、かつ、
取得された複数の前記現在のタッチポイントのうち、前記前の追跡タッチポイントの前記識別子に適合する識別子を有する複数の他の現在のタッチポイントの前記識別子を除去する段階と
を有する、請求項１９に記載の方法。
【請求項２２】
前記前の追跡タッチポイントの前記識別子を割り当てる段階は、
前記コンピューティングデバイスのプロセッサグラフィックスにより実行される１つの割り当てタスクを前の追跡タッチポイントごとに割り当てる段階と、
前記プロセッサグラフィックスの複数の実行ユニットを用いて、並行して複数の前記割り当てタスクを実行する段階と
を有し、
前記複数の重複識別子を除去する段階は、
前記プロセッサグラフィックスにより実行される１つの除去タスクを前の追跡タッチポイントごとに割り当てる段階と、
前記プロセッサグラフィックスの複数の実行ユニットを用いて、並行して複数の前記除去タスクを実行する段階と
を有し、
未使用の前の追跡タッチポイントそれぞれの前記識別子を割り当てる段階は、
前記プロセッサグラフィックスにより実行される１つの割り当てタスクを前の追跡タッチポイントごとに割り当てる段階と、
前記プロセッサグラフィックスの複数の実行ユニットを用いて、並行して複数の前記割り当てタスクを実行する段階と
を有し、
未割当の現在の各タッチポイントに固有識別子を割り当てる段階は、
前記現在の入力フレームの複数のセルを複数のブロックにグループ化する段階と、
前記プロセッサグラフィックスにより実行される１つの割り当てタスクをブロックごとに割り当てる段階と、
前記プロセッサグラフィックスのスコアボードを用いて、前記複数のブロックの間のデータ従属性をセットする段階と、
前記プロセッサグラフィックスの複数の実行ユニットを用いて、並行して複数の前記割り当てタスクを実行する段階と
を含む、請求項１９に記載の方法。
【請求項２３】
前記プロセッサグラフィックスの単一命令多重データ命令を用いて、
前記前の追跡タッチポイントの前記識別子を割り当てる段階、複数の重複識別子を除去する段階、各未割当の識別子を割り当てる段階、または、未割当の現在の各タッチポイントに前記固有識別子を割り当てる段階のうち少なくとも１つを実行する段階をさらに備える、請求項２２に記載の方法。
【請求項２４】
コンピューティングデバイスであって、
プロセッサと、
前記プロセッサにより実行される場合に前記コンピューティングデバイスに請求項１３〜２３の何れか１項に記載の方法を実行させる複数の命令が格納されたメモリと
を備えるコンピューティングデバイス。
【請求項２５】
コンピュータに、請求項１３から２３の何れか１項に記載の方法を実行させるプログラム。
【請求項２６】
請求項２５に記載のプログラムを格納するコンピュータ可読媒体。
【国際調査報告】
2016522522.tif 000016
2016522522.tif 000017