(57)【要約】  非格子タイルをソース・ビットマップから抽出することによって、ビットマップ・リモーティングを加速するシステム、方法、およびコンピューター読み取り可能記憶媒体を開示する。サーバーが、ソース画像を取り込み、繰り返される可能性が高いフィーチャーを識別し、画像をタイルに区分する。繰り返される可能性が高いフィーチャーの一部が入っているタイル毎に、サーバーはその一部を、タイルの優勢色で置き換える。次いで、本システムは、新たなタイルおよびフィーチャーの組み合わせ、ならびにクライアントが以前に受け取り格納しているタイルおよびフィーチャーに対する指示を、これらのタイルおよびフィーチャーに基づいてどのように画像を再現するかという指示と共に、クライアントに送る。【選択図】図７
2013513859.tif 000002
【特許請求の範囲】
【請求項１】
画像のフィーチャーに対する境界を識別するステップであって、前記フィーチャーが前記画像に対するタイリング方式の少なくとも１つのタイルに対応する、ステップと、
前記フィーチャーが未だキャッシュに格納されていない場合、前記フィーチャーを前記キャッシュに格納するステップと、
少なくとも１つのタイルを生成するために、前記タイリング方式にしたがって前記画像をタイルに区分するステップと、
前記フィーチャーに対応するタイル毎に、前記フィーチャーによって占有される前記タイルの一部を、前記タイルの置換画像で置き換えるステップと、
前記キャッシュに未だ格納されていない各タイルを、前記キャッシュに格納するステップと、
を備えている、方法。
【請求項２】
請求項１記載の方法であって、更に、
前記キャッシュに基づいて、通信デバイスが各タイル、および前記フィーチャーを有するか否か判定を行うステップと、
通信ネットワークを通じて、前記通信デバイスが有していない各タイルおよび前記フィーチャーを、表示のために前記通信デバイスに送るステップと、
前記通信ネットワークを通じて、前記通信デバイスが有していない各タイルおよび前記フィーチャーの指示を、表示のために前記通信デバイスに送るステップと、
を備えている、方法。
【請求項３】
請求項２記載の方法において、前記キャッシュに基づいて、通信デバイスが前記フィーチャーを有するか否か判定を行うステップが、
前記フィーチャーをキャッシュしたときに、前記キャッシュのキャッシュ・ヒットが生じたときに、前記通信デバイスが前記フィーチャーを有することを判定するステップを含み、
前記キャッシュのキャッシュされたフィーチャーが、前記フィーチャーと同じ画像を表す、方法。
【請求項４】
請求項２記載の方法において、画像のフィーチャーに対する境界の識別が、フィーチャー粒度に基づいて、ホスト通信デバイスによって実行され、前記フィーチャー粒度が、前記ホスト通信デバイス、前記通信デバイス、または前記通信ネットワークの特性によって決定される、方法。
【請求項５】
請求項２記載の方法であって、更に、前記タイルまたはフィーチャーを前記通信デバイスに送る前に、少なくとも１つのタイルまたは前記フィーチャーを圧縮するステップを備えている、方法。
【請求項６】
請求項１記載の方法において、画像のフィーチャーに対する境界を識別するステップが、
前記画像の白黒表現を生成するステップを含む、方法。
【請求項７】
請求項１記載の方法において、前記フィーチャーが既に前記キャッシュに格納されている場合、更に、
前記画像の第２のフィーチャーに対する第２の境界を識別するステップと、
前記第２のフィーチャーが未だ前記キャッシュに格納されていないことを判定するステップと、
前記フィーチャーと前記第２のフィーチャーとを含む複合フィーチャーを生成するステップと、
前記複合フィーチャーを通信ネットワークを通じて通信デバイスに、前記フィーチャーおよび前記第２のフィーチャーが前記複合フィーチャー内においてどのように格納されているかという指示と共に送るステップと、
を備えている、方法。
【請求項８】
請求項１記載の方法において、前記フィーチャーが線を含み、前記フィーチャーに対する境界を識別するステップが、更に、
実質的に同様の色の複数の直線状画素を、前記フィーチャーとして識別するステップを含む、方法。
【請求項９】
請求項１記載の方法において、前記フィーチャーが、前記画像と直前の画像との間における動きを含み、前記フィーチャーに対する境界を識別するステップが、更に、
前記画像の一部の前記直前の画像の一部に対するモーション・ベクトルを決定するために、前記画像を処理するステップを含む、方法。
【請求項１０】
請求項１記載の方法において、タイルの置換画像が、前記タイルの優勢色を含む、方法。
【請求項１１】
請求項１記載の方法であって、更に、
前記画像の第２のフィーチャーに対する第２の境界を識別するステップと、
前記フィーチャーおよび前記第２フィーチャーが同じ画像を表すことを判定するステップと、
前記フィーチャーを通信ネットワークを通じて通信デバイスに送るステップと、
前記第２フィーチャーが前記フィーチャーに対応するという指示を、前記通信ネットワークを通じて前記通信デバイスに送るステップと、
を備えている、方法。
【請求項１２】
複数のタイル指示を受け取る回路であって、各タイル指示が、タイル、またはタイルのキャッシュにおける位置と、格子上において各タイル指示を表示する位置とを含む、回路と、
フィーチャー指示を受け取る回路であって、前記フィーチャー指示が、フィーチャー、またはフィーチャーの前記キャッシュにおける位置と、前記フィーチャーを表示する位置とを含む、回路と、
画像を表示する回路であって、前記画像が、前記フィーチャーと重ね合わせた前記格子上における各タイル指示を含む、回路と、
を備えている、システム。
【請求項１３】
請求項１２記載のシステムにおいて、前記フィーチャー指示が複数のフィーチャーと、当該フィーチャー指示内における各フィーチャーの位置の指示とを含み、更に、
各フィーチャーの前記位置の各指示に基づいて、前記フィーチャー指示内における各フィーチャーを判定する回路を備えている、システム。
【請求項１４】
請求項１２記載のシステムにおいて、前記フィーチャーが、テキスト、線、または前記画像と直前に受け取った画像との間における動きを含む、システム。
【請求項１５】
請求項１４記載のシステムにおいて、前記フィーチャーがテキストを含み、前記フィーチャーが、更に、
前記テキストと共に表示するフォントの指示を含む、システム。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]  コンピューターは一度は分離され、または他のコンピューターとは最小限の相互作用を有するか殆ど相互作用を有していなかったが、今日ではコンピューターはローカル・エリア・ネットワーク（ＬＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、ダイアルアップ接続等を通じて、多種多様の他のコンピューターと相互作用を行う。インターネットの広範囲にわたる成長によって、コンピューター間の接続は増々重要になり、多くの新たな用途および技術への扉を開いた。大規模ネットワークが成長したこと、および低コスト・パーソナル・コンピューターの広範囲にわたって入手可能になったことが、多くの人々が作業し、相互作用し、通信し、そして遊ぶ方法を根本的に変化させた。
【０００２】
[0002]  増々普及しつつある１つのネットワーキング形態は、リモート・プレゼンテーション・システム(remote presentation system)と一般的に呼ぶことができ、Remote Desktop Protocol（ＲＤＰ）、Independent Computing Architecture（ＩＣＡ）というようなプロトコル、ならびにデスクトップおよび他のアプリケーションをリモート・ユーザーと共有するためのその他のプロトコルを用いることができる。このような計算システムは、通例、キーボード押下およびマウス・クリックまたは選択をクライアントからサーバーに送信し、ネットワーク接続（例えば、インターネット）を通じて、画面更新を逆方向に中継する。したがって、ユーザーは、彼らの機械がＬＡＮの一部として動作しているかのような体験を有するが、実際には、クライアント・デバイスには、アプリケーションのスクリーンショットがサーバー側に現れたときに、これらが送られるに過ぎない。
【０００３】
[0003]  グラフィクス・データをクライアントに送るためには、通常２つの技法が用いらており、これらの技法は、グラフィクス・プリミティブおよび他の動作を送り、クライアント側のサブルーチンに何をそしてどのように描画するのか命令する技法と、ビットマップ画像を表示のためにクライアントに送る技法である。多くの場合、グラフィクス・プリミティブを送る方が、そのグラフィクス・プリミティブの目に見える実行結果を送るよりも、少ない帯域幅で済む。例えば、１１文字のストリング"Hello world"についてのテキスト・プリミティブは、１１ユニコード・バイトで表すことができる。各キャラクタを１２画素×１２画素のエリアに表示しようとする場合、”Hello world"のビットマップ表現を表現するには、約２００倍多いバイトが必要となり、したがって約２００倍広い帯域幅が必要となる。
【０００４】
[0004]  同様に、双方共不透明な矩形のグラフィクス・プリミティブ表現、および画像のスクロールには、これらのビットマップ相当物よりも１桁少ない帯域幅しか必要とされない。同等のビットマップ表現ならば、かなり圧縮することができるが、それでもなお少なくとも数キロバイトが必要であるのが一般的である。不透明な矩形のグラフィクス・プリミティブ表現は、通例、４バイト以下しか必要としない。同様に、画像スクロール（「画面対画面ブリット」(screen-to-screen blit)と呼ぶこともある）は、約１０バイトを占めるコマンドとして、グラフィクス・プリミティブで表現することができる。８００画素×４００画素のウィンドウを移動させることのビットマップ形態は、１．８３ＭＢも（８００×４００画素エリアに、画素当たり３バイトを乗算し、前の位置および新たな位置を考慮に入れるために２倍する）必要となる、即ち、約１０，０００倍の空間が必要となる場合がある。
【０００５】
[0005]  以前に格納した画像を送ろうとするときのように、送るべきグラフィクス・プリミティブが入手できないときがある。このような場合、ビットマップ・フレーム（アプリケーション・ウィンドウのような）をクライアントに送るとき、ビットマップ・フレームを再分割してタイルにすることができる。次いで、これらのタイルをクライアント側でキャッシュし、２つのビットマップ間でタイルが繰り返されるときに、サーバーは、そのタイルを再度クライアントに送るのではなく、キャッシュされたタイルをクライアントが表示するための命令を送る。これは、リモート・プレゼンテーション・セッションの帯域幅コストを、特にタイルが頻繁に繰り返されるときに、大きく低減する。
【０００６】
[0006]  しかしながら、ビットマップ・タイルをキャッシュするこれらの技法を用いても、ビットマップを送るのに必要となる帯域幅は、グラフィクス・プリミティブを送るのに必要な帯域幅をなおも大きく上回る。更に、ウィンドウをスクロールする画素数が、タイルの１つの寸法における画素数の偶数倍でないときのように、キャッシングが非効率的であることが証明された場合も多くある。画像が実質的に同一であることに変わりがなくても、タイルとは同じように整列しないので、既にキャッシュされているタイルは使用不可になる。
【発明の概要】
【０００７】
[0007]  したがって、リモート・プレゼンテーション・セッションを通じてビットマップ画像を送るのに必要な帯域幅を低減することができれば、従来技術に対する改良となるであろう。
【０００８】
[0008]  本開示の一実施形態では、サーバー・システムが、リモート・プレゼンテーション・セッションにおいて送られる画像を分析して、繰り返される可能性があるフィーチャー(feature)（画像内で繰り返されるもの、またはサーバーが当該セッションにおいて送る複数の画像間で繰り返されるものの双方）を求める。これらのフィーチャーは、テキスト、アプリケーションのナビゲーション・ボタンというような事項を含むことができる。
【０００９】
[0009]  サーバーは、画像において、繰り返される確率が最も高いセグメントを突き止めることによって、画像内にあるフィーチャーの各インスタンスを特定する。次いで、このようにして発見された各セグメントは、フィーチャーであると宣言され、ハッシュ・シグネーチャー(hash signature)が割り当てられる。
【００１０】
[0010]  次いで、サーバーは、各フィーチャーによって占有されているエリアを、所定の値と置き換える。この所定の値は、そのエリアの優勢色、または、近隣画素の繰り返しとすることができ、ランレングス、したがって、圧縮を最大限大きくすることができる。次いで、サーバーはこの画像をタイルに分割する。
【００１１】
[0011]  次に、サーバーは、新たなフィーチャーおよび新たなタイルをキャッシュする。サーバーは、これらのフィーチャーおよびタイルのいずれかが既にリモート・プレゼンテーション・セッションのクライアント計算機上に格納されているか否か判断する。クライアントが既にこれらのフィーチャーまたはタイルを格納している場合、サーバーはクライアントに、この画像内においてそのしかるべき位置にそれを表示するように命令する。クライアントが未だこれらのフィーチャーやタイルを格納していない場合、サーバーは、それを格納することおよび画像内におけるそのしかるべき位置にそれを表示することの双方の指示と共に、それをクライアントに送る。
【００１２】
[0012]  本開示は、これらの教示を実現するシステム、方法、およびコンピューター読み取り可能記憶媒体を含む。
[0013]  本開示は「ビットマップ」画像に言及するが、これらの教示は種々のフォーマットで表現される画像にも適用できることは認められよう。
【００１３】
[0014]  尚、本開示の１つ以上の種々の態様は、本明細補において言及される本開示の態様を実行するための回路および／またはプログラミングを含むことができるがこれらには限定されないこと、これらの回路および／またはプログラミングは、システム設計者の設計選択に応じて、本明細書において言及される態様を実行するように構成されたのであれば、ハードウェア、ソフトウェア、および／またはファームウェアのいずれの組み合わせでも事実上可能であることは、当業者には認めることができよう。
【００１４】
[0015]  以上に述べたことは摘要であり、必然的に、詳細の簡略化、一般化、および省略を含む。この摘要は、例示に過ぎず、限定を全く意図していないことは、当業者には認められよう。
【００１５】
[0016]  ソース・ビットマップから非格子タイルを抽出することによって、ビットマップ・リモーティング(remoting)を加速するシステム、方法、およびコンピューター読み取り可能媒体について、添付図面を参照しながら更に説明する。
【図面の簡単な説明】
【００１６】
【図１】図１は、本明細書において記載される技法を具体化することができる汎用計算環境の一例を示す。
【図２】図２は、リモート・プレゼンテーション・セッションにおいて送信されるサンプル画像を示す。
【図３Ａ】図３Ａは、図２の画像が白黒表現に変換された後における、サンプル画像を示す。
【図３Ｂ】図３Ｂは、１つ以上のフィーチャーを識別するために区分された後における、図３Ａの画像を示す。
【図４】図４は、図３Ｂにおいて識別され、図２のサンプル画像に適用された、フィーチャーを示す。
【図５Ａ】図５Ａは、リモート・プレゼンテーション・セッションにおいて送信される、図２と同様の、別のサンプル画像を示す。
【図５Ｂ】図５Ｂは、図５Ａの画像のテキストのみの区分を示す。
【図５Ｃ】図５Ｃは、図５Ａの画像のテキスト以外の区分を示す。
【図６Ａ】図６Ａは、部分的にフィーチャーが入っているタイルを示す。
【図６Ｂ】図６は、フィーチャーを取り除き、タイルの優勢特性で置き換えた後における、図６Ａのタイルを示す。
【図７】図７は、サーバーが非格子タイルをソース・ビットマップから抽出することによって、ビットマップ・リモーティングを加速する動作手順の一例を示す。
【図８】図８は、クライアントが非格子タイルをソース・ビットマップから抽出することによって、ビットマップ・リモーティングを加速する動作手順の一例を示す。
【発明を実施するための形態】
【００１７】
[0029]  図１は、本明細書において記載する技法を採用することができる汎用計算機のブロック図である。計算システム環境１２０は、適した計算環境の一例に過ぎず、ここで開示される主題の使用範囲や機能について、何の限定も示唆することを意図していない。また、計算環境１２０が、本明細書において例示されるいずれの１つのコンポーネントまたはコンポーネントの組み合わせに関して何らかの依存性または要件を有するように解釈してはならない。実施形態によっては、図示する種々の計算エレメントが、本開示の特定の態様をインスタンス化するように構成されている回路を含むこともあり得る。例えば、本開示において用いられる回路という用語は、ファームウェアまたはスイッチによって機能（１つまたは複数）を実行するように構成されている特殊ハードウェア・コンポーネントを含むことができる。別の実施形態例では、回路という用語は、機能（１つまたは複数）を実行するために動作可能なロジックを具現化するソフトウェア命令によって構成される汎用演算装置、メモリー等を含むことができる。回路がハードウェアおよびソフトウェアの組み合わせを含む実施形態例では、実装者(implementer)は、ロジックを具体化するソース・コードを書くことができ、ソース・コードを機械読み取り可能コードにコンパイルすることができ、この機械読み取り可能コードを汎用演算装置によって処理することができる。技術的現状では、ハードウェア、ソフトウェア、またはハードウェア／ソフトウェアの組み合わせの間には殆ど差がないというところまで発展していることを当業者は認めることができるので、特定の機能を実行するためにハードウェアまたはソフトウェアのどちらを選択するかということは、実装者に委ねられた設計選択事項である。更に具体的には、ソフトウェア・プロセスを等価のハードウェア構造に変換することができ、更にハードウェア構造自体を等価のソフトウェア・プロセスに変換することができることを、当業者は認めることができる。つまり、ハードウェアの実施態様およびソフトウェアの実施態様のどちらを選択するかということは、実装者に委ねられた設計選択事項の１つである。
【００１８】
[0030]  コンピューター１４１は、通例、種々のコンピューター読み取り可能媒体を含む。コンピューター読み取り可能媒体は、コンピューター１４１がアクセス可能な入手可能な媒体であればいずれでも可能であり、揮発性および不揮発性の双方、リムーバブル、および非リムーバブル媒体を含む。システム・メモリー１２２は、リード・オンリー・メモリー（ＲＯＭ）１２３およびランダム・アクセス・メモリー（ＲＡＭ）１６０のような揮発性および／または不揮発性メモリーの形態で、コンピューター記憶媒体を含む。基本入出力システム１２４（ＢＩＯＳ）は、起動中のように、コンピューター１４１内のエレメント間におけるデーター転送を補助する基本的なルーチンを含み、通例ＲＯＭ１２３内に格納されている。ＲＡＭ１６０は、通例、演算装置１５９が直ちにアクセス可能であるデーターおよび／またはプログラム・モジュール、または現在これによって処理されているデーターおよび／またはプログラム・モジュールを収容する。一例として、そして限定ではなく、図１は、オペレーティング・システム１２５、アプリケーション・プログラム１２６、その他のプログラム・モジュール１２７、およびプログラム・データー１２８を示す。
【００１９】
[0031]  また、コンピューター１４１は、その他のリムーバブル／非リムーバブル揮発性／不揮発性コンピューター記憶媒体も含むことができる。一例にすぎないが、図１は、非リムーバブル不揮発性磁気媒体からの読み取りおよびこれへの書き込みを行なうハード・ディスク・ドライブ１３８、リムーバブル不揮発性磁気ディスク１５４からの読み取りおよびこれへの書き込みを行なう磁気ディスク・ドライブ１３９、ならびにＣＤ  ＲＯＭまたはその他の光媒体のようなリムーバブル不揮発性光ディスク１５３からの読み取りおよびこれへの書き込みを行なう光ディスク・ドライブ１４０を示す。動作環境の一例において使用可能なその他のリムーバブル／非リムーバブル、揮発性／不揮発性コンピューター記憶媒体には、限定ではなく、磁気テープ・カセット、フラッシュ・メモリー・カード、ディジタル・バーサタイル・ディスク、ディジタル・ビデオ・テープ、ソリッド・ステートＲＡＭ、ソリッド・ステートＲＯＭ等が含まれる。ハード・ディスク・ドライブ１３８は、通例、インターフェース１３４のような非リムーバブル・メモリー・インターフェースを介してシステム・バス１２１に接続され、磁気ディスク・ドライブ１３９および光ディスク・ドライブ１４０は、通例、インターフェース１３５のようなリムーバブル・メモリー・インターフェースによって、システム・バス１２１に接続する。
【００２０】
[0032]  先に論じ図１に示すドライブおよびそれらに付随するコンピューター記憶媒体は、コンピューター読み取り可能命令、データー構造、プログラム・モジュール、およびコンピューター１４１のその他のデーターを格納する。図１では、例えば、ハード・ディスク・ドライブ１３８は、オペレーティング・システム１５８、アプリケーション・プログラム１５７、他のプログラム・モジュール１５６、およびプログラム・データー１５５を格納するように示されている。尚、これらの構成要素は、オペレーティング・システム１２５、アプリケーション・プログラム１２６、他のプログラム・モジュール１２７、およびプログラム・データー１２８と同じでも異なっていても可能であることを注記しておく。オペレーティング・システム１５８、アプリケーション・プログラム１５７、他のプログラム・モジュール１５６、およびプログラム・データー１５５は、ここで、少なくともこれらが異なるコピーであることを示すために、異なる番号が与えられている。ユーザーは、キーボード１５１、および一般にマウス、トラックボールまたはタッチ・パッドと呼ばれているポインティング・デバイス１５２のような入力デバイスによって、コマンドおよび情報をコンピューター１４１に入力することができる。他の入力デバイス（図示せず）には、マイクロフォン、ジョイスティック、ゲーム・パッド、衛星ディッシュ、スキャナー等を含むことができる。これらおよびその他の入力デバイスは、多くの場合、ユーザー入力インターフェース１３６を介して、演算装置１５９に接続されている。ユーザー入力インターフェース１３６は、システム・バスに結合されているが、パラレル・ポート、ゲーム・ポート、またはユニバーサル・シリアル・バス（ＵＳＢ）によって接続することも可能である。モニター１４２またはその他のタイプの表示装置も、ビデオ・インターフェース１３２のようなインターフェースを介して、システム・バス１２１に接続されている。モニターに加えて、コンピューターは、スピーカー１４４およびプリンター１４３のような、その他の周辺出力装置も含むことができ、これらは出力周辺インターフェース１３３を通じて接続することができる。
【００２１】
[0033]  コンピューター１４１は、リモート・コンピューター１４６のような１つ以上のリモート・コンピューターへの論理接続を用いて、ネットワーク環境において動作することも可能である。リモート・コンピューター１４６は、パーソナル・コンピューター、サーバー、ルーター、ネットワークＰＣ、ピア・デバイス、またはその他の共通ネットワーク・ノードとすることができ、通例、コンピューター１４１に関して先に説明したエレメントの多くまたは全てを含むが、図１にはメモリー記憶装置１４７のみを示す。図１に示す論理接続は、ローカル・エリア・ネットワーク（ＬＡＮ）１４５およびワイド・エリア・ネットワーク（ＷＡＮ）１４９を含むが、他のネットワークも含むことができる。このようなネットワーク環境は、事務所、企業規模のコンピューター・ネットワーク、イントラネットおよびインターネットにおいては一般的である。
【００２２】
[0034]  ＬＡＮネットワーク環境で用いる場合、コンピューター１４１は、ネットワーク・インターフェースまたはアダプター１３７を介してＬＡＮ１４５に接続する。ＷＡＮネットワーク環境で用いる場合、コンピューター１４１は、通例、モデム１５０、またはインターネットのようなＷＡＮ１４９を通じて通信を設定するその他の手段を含む。モデム１５０は、内蔵でも外付けでもよく、ユーザー入力インターフェース１３６またはその他の適切な機構を介してシステム・バス１２１に接続することができる。ネットワーク環境では、コンピューター１４１に関係付けて図示したプログラム・モジュール、またはその一部は、リモート・メモリー記憶装置に格納することもできる。一例として、そして限定ではなく、図１は、リモート・アプリケーション・プログラム１４８がメモリー・デバイス１４７に存在するものとして示している。尚、図示のネットワーク接続は一例であり、コンピューター間で通信リンクを確立する他の手段も使用可能であることは認められよう。
【００２３】
[0035]  図２は、リモート・プレゼンテーション・セッションにおいて送信されるサンプル画像２０２を示す。画像２０２には、テキスト２０４およびサブ画像２０６の双方が入っている。この画像は、コンピュータ・デスクトップ全体、またはあるアプリケーションのためのウィンドウというような、その何らかの部分集合を含むことができる。
【００２４】
[0036]  画像２０２は、サーバーのグラフィクス・スタックから、このサーバーによって受信することができる。次いで、このサーバーは、以下の技法にしたがって画像を処理し、それをクライアントに送信することができる。サーバーは、このクライアントのディスプレイ・デバイス上に表示するために、このクライアントと共にリモート・プレゼンテーション・セッションを実行している。一実施形態では、このサーバーは図１の計算機を備えている。
【００２５】
[0037]  図３Ａは、図２のサンプル画像２０２が、画像３０２の白黒表現に変換された後における、サンプル画像２０２を示す。これは、閾値峻別方式を用いると、得ることができる。閾値峻別方式では、ある画像における画素値（例えば、赤−緑−青（ＲＧＢ）値）が閾値未満である場合、これらを全て黒（ＲＧＢでは、これは１６進数００００００として表すことができる）に設定することができ、画像における画素値が閾値よりも大きい場合、これらを全て白（ＲＧＢでは、これは１６進数ＦＦＦＦＦＦとして表すことができる）に設定することができる。
【００２６】
[0038]  図３Ｂは、図３Ａの画像３０２を、１つ以上のフィーチャー３０２ｂを識別するために区分した後における、画像３０２を示す。一実施形態では、サーバーが画像２０２を直接区分することができる。利用可能なクライアントおよびサーバーの処理リソースおよび帯域幅というような、セッション・システム全体の具体的特性によっては、セッション実行にとって最適なフィーチャーのサイズが、様々に変化することもある。実施形態では、フィーチャーとは、単語、１つの単語の何らかの部分集合（文字を含む）、アプリケーションのナビゲーション・アイコン（「文書印刷」ボタンのような）、またはリモート・プレゼンテーション・セッションにおいて送られる画像の内部にあるサブ画像（ウェブ・ブラウザ・ウィンドウをセッションにおいて送ろうとするときに、ウェブ・ブラウザーによって表示される画像のような）であってもよい。フィーチャーは、境界、即ち、そのフィーチャーを取り囲む周囲を有すると考えることもできる。図示した実施形態では、境界の形状は矩形になっている。しかしながら、種々の形状の境界でも、本技法を使用することが可能である。
【００２７】
[0039]  一実施形態では、ここで論じられるクライアントが図１の計算機を備えているのであってもよい。
[0040]  一実施形態では、サーバーおよびクライアントが、リモート・プレゼンテーション・セッションの最中に通信して、用いるフィーチャー粒度を決定する。これは、サーバーおよびクライアントがリモート・プレゼンテーション・セッションを開始するときに、取り決めることができる。また、これは、クライアントの利用可能な処理リソースが減少した場合というような、セッションのパラメータが変化するに連れて、リモート・プレゼンテーション・セッションの最中に取り決めることもできる。
【００２８】
[0041]  一実施形態では、サーバーは、接続セグメント・アルゴリズムを用いて、画像３０２を処理することによって、画像３０２のフィーチャーを識別する。接続セグメント・アルゴリズムは、画像のフィーチャーに対する枠取りを決定する。次いで、これらの枠取りを逆に画像３０２に適用して、画像３０２全体に対する各フィーチャーの境界を決定することができる。
【００２９】
[0042]  サーバーは、以下のように、接続セグメント・アルゴリズムを実行することができる。サーバーは、強度閾値を用いることによって、テキストまたは背景の一部であるというラベルを、画像３０２の各画素に付ける。その画素が黒かまたは黒に近い場合、テキストと見なされ、そうでない場合背景と見なされる（画素が暗い背景の上に明るい色のテキストを含む場合、これは逆になる）。次いで、サーバーはテキストであると判定されたこれらの画素の、４接続画素グループ(4-connected groups of pixels)を全て発見する。画素が４接続であると見なすことができるのは、テキストであると判定された画素の直接右、左、上、または下に、この画素がある場合である。一実施形態では、サーバーは、４接続テキスト画素グループ全ての代わりに、８接続テキスト画素グループ全て（４接続グループに加えて、対角線方向に接続されているだけのもの）を発見する。次いで、サーバーは、４接続テキスト画素グループ毎に、枠取りを決定する。一実施形態では、この枠取りは、それよりも小さい枠取りが存在しないように、４接続画素グループを取り囲む水平線および垂直線で構成された矩形となる。
【００３０】
[0043]  図４は、画像４０２において識別され画像２０２に適用された、画像のフィーチャー３０２ｂを示す。元の画像２０２に対してフィーチャーが識別されると、次にこの画像２０２を処理して、これらのフィーチャーを画像の残り部分から分離することができる。
【００３１】
[0044]  図５Ａは、リモート・プレゼンテーション・セッションにおいて送信する、図２と同様の、別のサンプル画像５０２を示す。
[0045]  図５Ｂは、図５Ａの画像５０２のテキストのみの区分５０２ｂを示す。画像２０２のテキスト部および画像部を分離し、次いで各サブ画像に対して動作を実行すると、本明細書において開示する技法をやり易くすることができる。この区分動作を実行する実施形態では、画像に対して光学キャラクター認識（ＯＣＲ）アルゴリズムを実行し、認識されたキャラクターではないものを全て画像から取り除くことによって、テキストのみの区分を行うことができる。
【００３２】
[0046]  図５Ｃは、図５Ａの画像５０２の非テキスト区分５０２ｃを示す。サーバーが図５Ｂの詳細な説明において記載したＯＣＲアルゴリズムを実行する場合、サーバーは、ＯＣＲアルゴリズムが識別した各キャラクターを取り除くことによって、画像５０２ｃを生成することができる。
【００３３】
[0047]  図６Ａは、タイル６０２を示し、その一部にはフィーチャー６０４の一部が入っている。文字「ｈ」がフィーチャー６０４を構成する。フィーチャー６０４の一部が、タイル６０２の上に延びている。また、タイル６０２の中にはオブジェクト６０６もある。一実施形態では、オブジェクト６０６は、フィーチャー６０４またはフィーチャー６０４の一部として識別することができる。
【００３４】
[0048]  図６Ｂは、フィーチャー６０４が取り除かれ、タイルの優勢特性と置き換えられた後における、図６Ａのタイル６０２を示す。「優勢特性」とは、本明細書において用いられる場合、タイルにおいてフィーチャーと置き換えるために用いられると、そのタイルを圧縮する際に役立つ画像を示す。多くの場合、タイルの優勢特性は、タイルの優勢色である。即ち、フィーチャーによって占有されていないタイルの部分において最も頻繁に発見される１つの色である。本実施形態では、オブジェクト６０６が存在するが、優勢特性は、タイルの殆どを占有する白の背景であり、したがって、フィーチャー６０４は全て白で置き換えられる。
【００３５】
[0049]  フィーチャーがタイル全体を占める実施形態では、このタイルは優勢特性を有さず、このような優勢特性を判定すべき、フィーチャーによって占有されない部分を有さないと考えることができる。この場合、フィーチャーは、１色のべた塗りのような、容易に圧縮可能な画像と置き換えるとよい。尚、フィーチャーによって完全に占有されているこのようなタイル全てに対して同じ優勢特性を用いることが有効となる場合がある。これは、タイルに対するキャッシュ・ヒットの回数が増加し、したがって、クライアントに送る必要があるタイル数が減少するからである。
【００３６】
[0050]  図７は、サーバーが非格子タイルをソース・ビットマップから抽出することによって、ビットマップ・リモーティングを加速する動作手順の一例を示す。尚、本開示のあらゆる実施形態において、あらゆる動作を実行しなければならないのではなく、動作手順の多くの機能的部分集合および並び替え(permutation)を実施してもよいことは、認められてしかるべきである。
【００３７】
[0051]  動作７０２は、画像２０２のような画像のフィーチャーに対して境界を識別することを示し、このフィーチャーは、当該画像に対するタイリング方式(tiling scheme)の少なくとも１つのタイルに対応する。これは、例えば、図３および図４に関して既に論じた技法を用いることによって行うことができる。一実施形態では、このタイリング方式は、画像を矩形タイルの格子に分割することを伴う。フィーチャーはこの格子に制約されず、複数のタイルの全部または一部に現れても、または１つのタイルの一部に現れてもよく、あるいは丁度１つのタイルを占有してもよい。
【００３８】
[0052]  一実施形態では、画像にフィーチャーに対して境界を識別することは、フィーチャー粒度に基づき、ホスト通信デバイスによって行われる。フィーチャー粒度は、サイズのように、どのようにフィーチャーを認識するかに影響を及ぼすあるものとすることができる。一実施形態では、フィーチャー粒度は、個々の文字を別個のフィーチャーとして扱わなければならないことを示すことがある。一実施形態では、フィーチャー粒度は、個々の単語を別個のフィーチャーとして扱わなければならないことを示すこともある。
【００３９】
[0053]  一実施形態では、フィーチャー粒度は、サーバー（または「ホスト通信デバイス」）、クライアント（または「通信デバイス」）、または通信ネットワークの特性によって決定される。ホスト通信デバイス、通信デバイス、または通信ネットワークの特性は、リモート・プレゼンテーション・セッションの遂行に影響を及ぼすものであり、通信ネットワークを通じて送られるパケットのサイズ、またはホスト通信デバイスのシステム・アーキテクチャーの詳細(particularities)というようなものとするとよい。
【００４０】
[0054]  一実施形態では、境界を識別する場合、図３に関して論じたように、画像の白黒表現を生成することを含む。一実施形態では、画像の白黒表現を生成する場合、図３に関して論じたような閾値峻別方式にしたがって画像を処理することを含む。一実施形態では、フィーチャーに対して境界を識別する場合、図４に関して論じたような接続セグメント・アルゴリズムによって画像を処理することを含む。
【００４１】
[0055]  一実施形態では、フィーチャーはテキストを含み、このフィーチャーに対して境界を識別する場合、光学キャラクター認識（ＯＣＲ）アルゴリズムによって画像を処理することを含む。得られたテキストは、画像の各タイル内においてそれを各タイルの優勢特性と置き換えることによって、画像から取り去ることができる。これについては、以下で更に詳しく論ずる。次いで、これらのタイルをテキスト（情報交換用米国標準コード、ＡＳＣＩＩフォーマットで表現されたような）、およびこのテキストをタイル上のどこに重ねるのかという指示と共に送ることができる。これについては、以下で更に詳しく論ずる。
【００４２】
[0056]  一実施形態では、フィーチャーは水平または垂直線を含む。サーバーは、画像上において、垂直および水平両方向にランレングス計数アルゴリズムを実行することができる。このアルゴリズムは、一致したまたは密接に一致した直線的画素（閾値よりも高いまたは低い全ての画素というような）のストリングを判定する。次いで、これらの線は、画像の各タイル内においてそれを、各タイルの優勢特性と置き換えることによってというようにして、画像の各タイルから抽出することができる。これについては、以下で更に詳しく論ずる。次いで、これらの線を別個に符号化し（画像内における開始座標および終了座標、線の色、および線の幅を示すことによってというようにして）、タイルと共に表示するために、クライアントに送ることができる。これについては、以下で更に詳しく論ずる。
【００４３】
[0057]  一実施形態では、フィーチャーは、ウィンドウをスクロールするときのような、画面間の移動（または、「画面間のブリット」）を含み、フィーチャーに対する境界を識別する場合、この画像を処理して、直前の画像の一部に対するこの画像の一部のモーション・ベクトルを判定することを含む。サーバーは、クライアントに送られた、または送ろうとする複数の画像間でモーション・ベクトルを照合することができる。サーバーは、テキストおよび線（前述の技法を用いて、画像内において画像内で判定された）のような画像特性がどこで移動したかというパターンを判定することによって、モーション・ベクトルを照合することができる。次いで、画像がどちらの方向にそしてどのように移動したかを示すことによるというようにして、各タイルを送るよりは遙かに少ない帯域幅を用いることによって、これをクライアントに表現することができる。
【００４４】
[0058]  フィーチャーに関するこれらの技法は、組み合わせて実行することができ、例えば、テキストおよび線を、スクロールされる画像から抽出することができる。
[0059]  動作７０４は、フィーチャーが未だキャッシュに格納されていないときに、このフィーチャーをキャッシュに格納することを示す。サーバーは、各フィーチャーに遭遇したときにこれに対してハッシュ・アルゴリズムを実行し、ハッシュス・アルゴリズムの結果に基づいてフィーチャーのシグネチャーをキャッシュに格納し、更にクライアント・キャッシュにおいて格納されるフィーチャーの対応する位置を格納することによってというようにして、フィーチャーのキャッシュを維持することができる。フィーチャーのシグネチャーは、フィーチャー自体よりも、格納要件を最小に抑えるために格納することができる。これを行う際、新たなフィーチャーに遭遇する毎に、サーバーは、そのフィーチャーに以前にも遭遇したことがあるか否か判定することができるので、そのフィーチャーに対する参照のみをクライアントに送ればよい（キャッシュ・ヒットが判定された場合であり、更に、そのフィーチャーが、キャッシュに格納されており、そのヒットをもたらしたフィーチャーと同一であることを判定する）。また、そのフィーチャーが以前には遭遇していない場合、フィーチャー自体をクライアントに送らなければならない（キャッシュ・ヒットがない場合であり、同一のフィーチャーに以前には遭遇していないことを示す）。
【００４５】
[0060]  一実施形態では、キャッシュは最大のサイズ、つまり、有限の水平線を有する。このため、キャッシュがその最大サイズに達したとき、余裕を作るためにどのフィーチャーおよび／またはタイルを除去しなければならないか判定を行う。この判定は、どのフィーチャーおよび／またはタイルが繰り返される可能性が最も低いか、したがって、キャッシュに入れておく効果が最も低いかという発見的方法に基づいて行うことができる。同様に、キャッシュのその最大サイズに達したとき、またはその最大サイズに達するかもしれないとき、新たなフィーチャーおよび／またはタイルをキャッシュに追加すべきか否かに関する判定を行うことができる。
【００４６】
[0061]  一実施形態では、キャッシュは、高度に構造化された（階層的）キャッシュから成る。このように高度に構造化されたキャッシュは、フィーチャー、フィーチャーのグループ、およびフィーチャーのグループのグループというように、異なるレベルの粒度に基づいて編成することもできる。例えば、「ａ」、「ｎ」、および「ｄ」のようなフィーチャーに遭遇した場合、これらのフィーチャーのグループ、即ち、「ａｎｄ」という単語にも遭遇することができる。そして、この単語「ａｎｄ」を含む句というような、このようなフィーチャーのグループを含むグループにも、遭遇することができる。これらのフィーチャーのグループは、フィーチャー自体に加えて、キャッシュすることができる。
【００４７】
[0062]  動作７０６は、タイリング方式にしたがって画像をタイルに区分して、図６のタイルと同様な、少なくとも１つのタイルを生成することを示す。一実施形態では、画像が１２画素の偶数倍の寸法を有していないのでなければ、タイルは、１２画素×１２画素の寸法を有する。画像が１２画素の偶数倍の寸法を有していない場合、各列における１つ以下のタイル、および各行における１つのタイルが、１２画素×１２画素よりも小さい寸法を有する場合もある。
【００４８】
[0063]  動作７０８は、フィーチャーに対応するタイル毎に、そのフィーチャーによって占有されているタイルの一部を、そのタイルに合わせた画像と置き換えることを示す。これは、例えば、図６Ａおよび図６Ｂに関して先に論じた技法を用いることによって、行うことができる。
【００４９】
[0064]  動作７１０は、キャッシュに未だ格納されていない各タイルを、キャッシュに格納することを示す。一実施形態では、タイルの格納は、動作７０４において論じたように、フィーチャーを格納するのと同様に行われる。一実施形態では、タイルおよびフィーチャーを別個のキャッシュに格納する。一実施形態では、タイルおよびフィーチャーを１つのキャッシュに格納する。タイルがタイルと衝突し、フィーチャーがフィーチャーと衝突する可能性の方が、タイルがフィーチャーと衝突する可能性よりも高いので、ある種のシステム上では、２つのキャッシュを用いることが、性能上有益となることもある。同様に、所与のシステムの詳細によっては、１つのキャッシュを用いる方が好ましい場合もある。
【００５０】
[0065]  動作７１２は、キャッシュに基づいて、通信デバイスが各タイル、およびフィーチャーを有するか否か判定を行うことを示す。一実施形態では、この通信デバイスはクライアントである。サーバーがタイルおよびフィーチャーをクライアントに送ると、クライアントはこれらのタイルおよびフィーチャーをそれ自体の１つ以上のキャッシュにキャッシュする。このクライアントのキャッシュは、格納されたタイルまたはフィーチャー、およびこのタイルまたはフィーチャーに対して実行したハッシュ・アルゴリズムの対応する結果を含むことができる。したがって、サーバーが、現在のタイルまたはフィーチャーと同じ画像を表すタイルまたはフィーチャーが既にそのキャッシュの中に存在すると判断した場合（フィーチャーのシグネチャーを見ることによって行われる）、クライアントは既にタイルまたはフィーチャーをそのキャッシュの中に有していると判断される（または、現在の画像についてのデータを送信する際に、そのタイルまたはフィーチャーが送られる）。キャッシュ・ヒットがない場合、クライアントはそのタイルまたはフィーチャーを有していない。キャッシュ・ヒットがあり、そしてそのヒットを生じさせた、既にキャッシュされているタイルまたはフィーチャーの中（キャッシュ水平線の中に）に、現在のタイルやフィーチャーと同じものがないとサーバーが判断した場合、クライアントはそのタイルもフィーチャーも有していない。それ以外の場合、サーバーは、クライアントがそのタイルまたはフィーチャーを有している（または、直ぐに有するであろう）と判断する。
【００５１】
[0066]  動作７１４は、通信デバイスが有していない各タイルおよびフィーチャーを、通信ネットワークを通じて、表示のために計算機に送ることを示す。クライアントが有していない各タイルおよびフィーチャーは、動作７１２の技法にしたがって判断することができる。一実施形態では、各タイルおよびフィーチャーはアクティブなリモート・プレゼンテーション・セッションのコンテンツ内における別個の画像として送られる。一実施形態では、サーバーがフィーチャーを纏めて、フィーチャーおよび／またはタイルの１つのビットマップにグループ化し、この複合ビットマップをクライアントに、複合ビットマップのどの部分が各フィーチャーおよびタイルに対応するのかという指示と共に送ることによって、セッションの遂行を改善することができる。一実施形態では、フィーチャーおよびタイル毎に、別個の複合ビットマップを用いることができる。
【００５２】
[0067]  一実施形態では、クライアントに送られるタイルおよびフィーチャーの内少なくとも一部が、これらが送られる前に、圧縮され、クライアントがこれらを受信した後に、クライアントによって伸張される。
【００５３】
[0068]  動作７１６は、通信デバイスが有する各タイルおよびフィーチャーの指示を、通信ネットワークを通じて、表示のために計算機に送ることを示す。クライアントが有する各タイルおよびフィーチャーは、動作７１２の技法にしたがって判断することができる。例えば、タイルには、２つの積分値(integral values)を付随させるとよい。１つは、このタイルの左上角を配置すべき左上角より下にある画素数を示す値であり、１つはこのタイルの左上角を配置すべき左上角よりも右側にある画素数を示す値である。
【００５４】
[0069]  一実施形態では、動作７１４および７１６の技法にしたがって送られるタイル（１つまたは複数）、フィーチャー（１つまたは複数）、およびその指示（１つまたは複数）は、クライアントが、対応するタイルまたはフィーチャーを、それが再現する画像のどこに配置すべきかという指示と共に送られる。
【００５５】
[0070]  図８は、ソース・ビットマップから非格子タイルを抽出することによって、クライアントがビットマップ・リモーティングを加速する動作手順の一例を示す。尚、本開示のあらゆる実施形態において、あらゆる動作を実行しなければならないのではなく、動作手順の多くの機能的部分集合、および並び替え(permutation)を実施してもよいことは、認められてしかるべきである。
【００５６】
[0071]  動作８０２は、複数のタイル指示を受信することを示し、各タイル指示は、タイルまたはタイルのキャッシュにおける位置、および各タイル指示を格子上で表示する位置を含む。
【００５７】
[0072]  動作８０４は、フィーチャー指示を受信することを示し、このフィーチャー指示は、フィーチャーまたはフィーチャーのキャッシュにおける位置、およびこのフィーチャーを表示する位置を含む。
【００５８】
[0073]  図７に関して更に詳細に論じたように、フィーチャー指示が複数のフィーチャー、およびフィーチャー指示内における各フィーチャーの位置の指示を含む実施形態では、クライアントは、各フィーチャーの位置の各指示に基づいて、フィーチャー指示内にある各フィーチャーを判定することができる。
【００５９】
[0074]  一実施形態では、フィーチャーは、テキスト、線、または画像と直前に受信した画像との間の動きを含む。フィーチャーがテキストから成る実施形態では、フィーチャー指示は、そのテキストを表示すべきフォントの指示を含む。
【００６０】
[0075]  動作８０６は、画像を表示することを示し、この画像は、フィーチャーと共に重ねられた格子上における各タイルの指示を含む。
結論
[0076]  本開示は、種々の図に示したような、好ましい態様と関連付けて説明したが、本開示から逸脱せずにその同じ機能を実行するために、他の同様の態様を用いること、または変更や追加を、記載した態様に対して行ってもよいことは言うまでもない。したがって、本開示は、いずれの1つの態様にも限定されず、添付した特許請求の範囲にしたがって、その広さや範囲を解釈してしかるべきである。例えば、本明細書において説明した種々の手順は、ハードウェアまたはソフトウェア、あるいは双方の組み合わせで実施することができる。つまり、開示した実施形態の方法および装置、あるいはそのある種の態様または部分は、フロッピー・ディスケット、ＣＤ−ＲＯＭ、ハード・ドライブ、またはその他のあらゆる機械読み取り可能記憶媒体というような、有形媒体において具体化されたプログラム・コード（即ち、命令）という形態をなすことができる。このプログラム・コードを、コンピューターのような、機械にロードして実行すると、この機械が、開示した実施形態を実際に行うように構成された装置となる。ここに開示した明細書を考慮することによって、本明細書において明示的に説明した特定の実施態様に加えて、他の態様や実施態様も当業者には明白となろう。尚、本明細書および例示した実施態様は、単なる例として考慮されることを意図している。
【図１】
2013513859.tif 000003
【図２】
2013513859.tif 000004
【図３Ａ】
2013513859.tif 000005
【図３Ｂ】
2013513859.tif 000006
【図４】
2013513859.tif 000007
【図５Ａ】
2013513859.tif 000008
【図５Ｂ】
2013513859.tif 000009
【図５Ｃ】
2013513859.tif 000010
【図６Ａ】
2013513859.tif 000011
【図６Ｂ】
2013513859.tif 000012
【図７】
2013513859.tif 000013
【図８】
2013513859.tif 000014
【国際調査報告】
2013513859.tif 000015
2013513859.tif 000016