(57)【特許請求の範囲】
【請求項１】
圧縮する画像データについて、各画素の色をプロセッサが実行する複数スレッドの同時並行処理によりそれぞれ検出し、１列の画素の並びにおけるＲＧＢいずれかの同一色連続長さを求め、
前記同一色連続長さの情報に基づき、前記画像データを圧縮し、
前記同一色連続長さを、画面全体を複数に分割し、前記分割後の小ブロックが有する画素数を前記スレッド数に対応させ、前記複数スレッドの同時並行処理をおこない、同一列の他のスレッドで検出された隣接画素の色に基づき求める
ことを特徴とする画像圧縮方法。
【請求項２】
前記同一色連続長さは、第１のプロセッサにより、前記複数スレッドの同時並行処理によって、前記１列の画素の並びで隣接する画素の同一色ごとの連続数をカウントして得ることを特徴とする請求項１に記載の画像圧縮方法。
【請求項３】
前記同一色連続長さは、前記第１のプロセッサを用いたスレッドの同時並行処理により求め、
前記画像データの圧縮は、第２のプロセッサを用いておこなうことを特徴とする請求項２に記載の画像圧縮方法。
【請求項４】
前記同一色連続長さは、前記第１のプロセッサとしてのＧＰＵを用いて求め、前記画像データの圧縮は、前記第２のプロセッサとしてのＣＰＵを用いておこなうことを特徴とする請求項３に記載の画像圧縮方法。
【請求項５】
前記画像データの圧縮は、前記同一色連続長さの情報に基づき、画面全体で最も出現する色をバックグラウンドとして求めた後、
前記同一色連続長さの情報に基づき、前記バックグラウンド以外の色について、面積最大となる矩形範囲の色と大きさと位置を求めることを特徴とする請求項１〜４のいずれか一つに記載の画像圧縮方法。
【請求項６】
前記バックグラウンドが求められた際に当該バックグラウンドの色をエンコードし、
前記面積最大となる矩形範囲が求められた際に当該矩形の色と大きさと位置をエンコードすることを特徴とする請求項５に記載の画像圧縮方法。
【請求項７】
圧縮する画像データについて、各画素の色を複数スレッドの同時並行処理によりそれぞれ検出し、１列の画素の並びにおけるＲＧＢいずれかの同一色連続長さを求め、前記同一色連続長さの情報に基づき、前記画像データを圧縮し、前記同一色連続長さを、画面全体を複数に分割し、前記分割後の小ブロックが有する画素数を前記スレッド数に対応させ、前記複数スレッドの同時並行処理をおこない、同一列の他のスレッドで検出された隣接画素の色に基づき求めるマルチコアのプロセッサを含むことを特徴とする画像圧縮装置。
【請求項８】
前記プロセッサは、各画素の色が複数スレッドの同時並行処理によりそれぞれ検出された１列の画素の並びを格納するメモリに対するアクセスを連続したアドレスを順次読み取ることにより、前記同一色連続長さをカウントすることを特徴とする請求項７に記載の画像圧縮装置。
【請求項９】
前記プロセッサは、
同一色連続長さを求める、スレッドの並列処理可能な第１のプロセッサと、
前記画像データを圧縮する第２のプロセッサとを含むことを特徴とする請求項７に記載の画像圧縮装置。
【請求項１０】
前記第１のプロセッサは、ＧＰＵであり、
前記第２のプロセッサは、ＣＰＵであることを特徴とする請求項９に記載の画像圧縮装置。
【請求項１１】
クライアントから受信した操作コマンドに基づき、圧縮する画像データについて、各画素の色を複数スレッドの同時並行処理によりそれぞれ検出し、１列の画素の並びにおけるＲＧＢいずれかの同一色連続長さを求め、前記同一色連続長さの情報に基づき、前記画像データを圧縮し、前記クライアントに送信し、前記同一色連続長さを、画面全体を複数に分割し、前記分割後の小ブロックが有する画素数を前記スレッド数に対応させ、前記複数スレッドの同時並行処理をおこない、同一列の他のスレッドで検出された隣接画素の色に基づき求めるプロセッサを含むサーバと、
前記サーバに対し前記操作コマンドを送信するごとに、前記操作コマンドに対応した圧縮した画像データを受信し、当該画像データをデコードして画面表示するクライアントと、
を含むことを特徴とするシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像を圧縮する画像圧縮方法、画像圧縮装置およびシステムに関する。
【背景技術】
【０００２】
クラウド・コンピューティングでは、多くのアプリケーションの動作により、高速なネットワーク通信が必要になる。近年では、クライアントの端末は、サーバ側に操作コマンドを送り、サーバ側が操作コマンドに対応した処理を実行するＤａａＳ（Ｄｅｓｋｔｏｐ  ａｓ  ａ  Ｓｅｒｖｉｃｅ）のサービスが提供されている。このようなクラウド・コンピューティングを利用する例として、製品設計の分野ではＣＡＤ画像（デスクトップ画像）の転送がある。このデスクトップ画像は、クラウドのサーバ側が生成してクライアント（特にシンクライアント）の端末に転送する。この際、ネットワークの負荷を低減するために、サーバ側では、デスクトップ画像を圧縮して転送するようになっている。
【０００３】
たとえば、画像圧縮等に用いることができる画像認識の技術として、一定長さ以上の画素の並び（ラン）を抽出して、文字領域を抽出する技術がある（たとえば、下記特許文献１参照。）。また、デスクトップ画像を圧縮する技術としては、画面を小ブロックに分割し、各ブロック内で同一色の矩形を検索してタイリングする技術がある（たとえば、下記非特許文献１参照。）。また、画像処理に特化したＧＰＵ（Ｇｒａｐｈｉｃ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を用い、全画面を複数のブロックに分割し、１ブロックの処理をＧＰＵの１スレッドに割り当て、複数のプロセッサで並列処理する技術がある（たとえば、下記非特許文献２参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１−２１７５８３号公報
【非特許文献】
【０００５】
【非特許文献１】Ｔｒｉｓｔａｎ  Ｒｉｃｈａｒｄｓｏｎ、“Ｔｈｅ  ＲＦＢ  Ｐｒｏｔｏｃｏｌ”、［ｏｎｌｉｎｅ］、２６，Ｎｏｖｅｍｂｅｒ，２０１０、ＲｅａｌＶＮＣ  Ｌｔｄ、［平成２３年８月１５日検索］、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｒｅａｌｖｎｃ．ｃｏｍ／ｄｏｃｓ／ｒｆｂｐｒｏｔｏ．ｐｄｆ＞
【非特許文献２】ＹｏｎｇＬＩＵ、外２名、“ｇＴｉｌｅｄＶＮＣ−ａ２２Ｍｅｇａ−ｐｉｘｅｌ  Ｄｉｓｐｌａｙ  Ｗａｌｌ  Ｄｅｓｋｔｏｐ  Ｕｓｉｎｇ  ＧＰＵｓ  ａｎｄ  ＶＮＣ”、Ｄｅｐａｒｔｍｅｎｔ  ｏｆ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ，Ｕｎｉｖｅｒｓｉｔｙ  ｏｆ  Ｔｒｏｍｓφ、［平成２３年８月１５日検索］、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｕｂ．ｕｉｔ．ｎｏ／ｍｕｎｉｎ／ｂｉｔｓｔｒｅａｍ／ｈａｎｄｌｅ／１００３７／２９５９／ａｐｐｅｎｄｉｘ＿ｂ．ｐｄｆ＞
【発明の概要】
【発明が解決しようとする課題】
【０００６】
クラウド・コンピューティングを利用する場合、多数のクライアントからのアクセスにより、高負荷なＣＡＤアプリケーションが同時に動作することになり、対応してサーバのＣＰＵ、およびＧＰＵ負荷が高くなる。また、上記のようなデスクトップ画像を圧縮するための圧縮処理について、ＧＰＵを効率的に用いた並列処理がおこなえなかった。
【０００７】
すなわち、上記従来の技術による画像圧縮処理では、ＧＰＵは各ブロックの処理で画素を探すために大量のメモリ比較処理が必要となった。画像処理に特化したＧＰＵにおいては、メモリアクセスに時間がかかり、ＧＰＵにおけるメモリ処理は、ＣＰＵよりも低速である。したがって、上記のようにブロック分割による並列化処理をおこなう際に、メモリアクセスに時間がかかり、合計の処理時間は短縮することができなかった。並列プロセッサ固有の問題として、１．メモリアクセスが遅く、特に、メモリ比較処理でメモリのアクセス位置がとびとびになると、急激に低下する。２．分岐処理が悪影響を及ぼし、例として、３２個のスレッドが同期をとりながら進行するので、１スレッドが長い探索に分岐すると、他のスレッドも同期のために待つ必要がある。このようなＧＰＵでの処理時間の遅延によってクライアントに転送するまでの時間がかかることとなり、クライアント側での設計作業等を迅速に遂行することができなくなる。
【０００８】
製品設計の分野でクラウド・コンピューティングを利用する場合、サーバ側のＣＰＵおよびＧＰＵに負荷をかけずにアプリケーションが快適に動作して、デスクトップ画像の圧縮処理等を高速に完了でき、クライアントに転送する手法が必要となる。
【０００９】
開示の画像圧縮方法、画像圧縮装置およびシステムは、上述した問題点を解消するものであり、画像の圧縮を迅速かつ効率的におこなうことを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するため、開示技術は、圧縮する画像データについて、各画素の色をプロセッサが実行する複数スレッドの同時並行処理によりそれぞれ検出し、１列の画素の並びにおけるＲＧＢいずれかの同一色連続長さを求め、前記同一色連続長さの情報に基づき、前記画像データを圧縮し、前記同一色連続長さを、画面全体を複数に分割し、前記分割後の小ブロックが有する画素数を前記スレッド数に対応させ、前記複数スレッドの同時並行処理をおこない、同一列の他のスレッドで検出された隣接画素の色に基づき求めること、を含む。
【発明の効果】
【００１１】
開示の画像圧縮方法、画像圧縮装置およびシステムによれば、画像の圧縮を迅速かつ効率的におこなうことができるという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】図１は、実施の形態にかかる画像圧縮装置を含むシステムを示す図である。
【図２】図２は、実施の形態にかかる画像圧縮処理の手順を示すフローチャートである。
【図３】図３は、ＧＰＵがおこなう圧縮高速化テーブルの作成処理の概要図である。
【図４】図４は、ＧＰＵがおこなう圧縮高速化テーブルの作成処理の手順を示すフローチャートである。
【図５】図５は、ＣＰＵがおこなう画像圧縮処理の手順を示すフローチャートである。
【図６】図６は、バックグラウンド色の決定にかかる処理内容を詳細に示したフローチャートである。
【図７】図７は、同一色の矩形を検出する処理内容を詳細に説明したフローチャートである。
【図８】図８は、ＣＰＵがおこなう圧縮処理の概要図である。
【図９】図９は、図１に示した画像圧縮装置を用いたシステムの適用例を示す図である。
【発明を実施するための形態】
【００１３】
（システム構成例）
以下に添付図面を参照して、開示技術の好適な実施の形態を詳細に説明する。図１は、実施の形態にかかる画像圧縮装置を含むシステムを示す図である。このシステム１００は、画像圧縮装置として機能するサーバ１０１と、クライアント１０２とからなる。このシステム１００では、たとえば、クライアント１０２がサーバ１０１に操作コマンドを送り、サーバ１０１が操作コマンドに対応した処理を実行し、クライアント１０２に操作コマンドに対応したＣＡＤ画像（デスクトップ画像）等のデータを送信するＤａａＳのサービスを利用する。
【００１４】
クライアント１０２は、ＣＰＵ１０２ａおよび図示しないＲＯＭ，ＲＡＭ等のメモリを含み、キーボード１０３やマウス１０４等の操作により、所望する処理の操作コマンドをネットワーク１１０を介してサーバ１０１に送信する。ディスプレイ１０５には、操作および処理内容が表示される。
【００１５】
サーバ１０１は、ＧＰＵ１０１ａ、ＣＰＵ１０１ｂ、図示しないＲＯＭ，ＲＡＭ等を含む。このサーバ１０１には、予め製品設計用のアプリケーション、たとえばＣＡＤアプリケーションが格納されているディスク装置１２０が接続されている。そして、サーバ１０１は、ネットワーク１１０を介してクライアント１０２から操作コマンドを受信すると、ＣＰＵ１０１ｂおよびＧＰＵ１０１ａがＣＡＤアプリケーションを実行し、実行結果であるデスクトップ画像（ＣＡＤ画像）をネットワーク１１０を介してクライアント１０２に送信する。クライアント１０２は、受信したデスクトップ画像をディスプレイ１０５に表示する。
【００１６】
サーバ１０１は、全体の処理をＣＰＵ１０１ｂが統括制御し、ＧＰＵ１０１ａは、ＣＰＵ１０１ｂと分担して画像処理を実行する。ＧＰＵ１０１ａについては、マルチコアのプロセッサで構成され、プログラム（ＣＡＤアプリケーション）実行時における複数のスレッドを並列に同時実行する。
【００１７】
（デスクトップ画像の圧縮処理内容）
つぎに、サーバ１０１が実行するデスクトップ画像の圧縮処理内容について説明する。サーバ１０１は、ＧＰＵ１０１ａとＣＰＵ１０１ｂとが分担してデータ量が大きいＣＡＤ画像等のデスクトップ画像を圧縮処理する。ＧＰＵ１０１ａは、デスクトップ画像の圧縮にかかるプレ処理（後述する圧縮高速化テーブルの作成）を実行し、このＧＰＵ１０１ａの情報を基にＣＰＵ１０１ｂが圧縮処理を実行する。
【００１８】
（画像圧縮処理の手順）
図２は、実施の形態にかかる画像圧縮処理の手順を示すフローチャートである。ＧＰＵ１０１ａは、ＣＰＵ１０１ｂがおこなう圧縮処理のプレ処理として、クライアントに送信するデスクトップ画像を読み込み、圧縮高速化テーブルを作成し、この圧縮高速化テーブルをＣＰＵ１０１ｂに出力する。
【００１９】
はじめに、ＧＰＵ１０１ａは、クライアントに送信するデスクトップ画像の全画面を所定のブロック、たとえば１６×１６の画像の小ブロックに分割し、Ｎ個のブロックを得る（ステップＳ２０１）。このＮ個は、たとえば、ＧＰＵ１０１ａが有するＮ個（たとえば２５６個）のプロセッサに対応して設定する。なお、サーバ１０１は、新たなデスクトップ画像を送信する際に、前回、クライアント１０２に送信したデスクトップ画像との差分のみを抽出し、この差分のデスクトップ画像に対する圧縮処理をおこなう構成とすることもでき、この場合には、よりネットワーク１１０上でのデータ量を削減できる。
【００２０】
つぎに、Ｎ個のプロセッサによる並列処理を開始する（ステップＳ２０２）。Ｎ個のプロセッサがおこなう各処理（ステップＳ２０３）について説明すると、１つのプロセッサは、処理番号（１〜Ｎ）から自プロセッサが処理するブロックを特定し（ステップＳ２１３）、この処理ブロックについて圧縮高速化テーブルを作成する（ステップＳ２１４）。Ｎ個のプロセッサは、それぞれこの圧縮高速化テーブルを作成し、ＣＰＵ１０１ｂに転送する。この後、ＣＰＵ１０１ｂは、圧縮高速化テーブルを利用した圧縮処理を実行する（ステップＳ２０４）。
【００２１】
（ＧＰＵがおこなうプレ処理について）
図３は、ＧＰＵがおこなう圧縮高速化テーブルの作成処理の概要図である。ＧＰＵ１０１ａは、図２に示す１つの小ブロック（１６×１６画素＝２５６画素）について、同時に２５６スレッドの起動を開始する。この際、Ｘ座標について、同一色の画素の並びの個数（同一色シーケンス数）をＭとする。図３に示す例では、最上段１列について、画素毎のＲＧＢ各色をそれぞれ検出した結果、左から順に、Ｒ（赤）画素の同一色連続長さ（Ｒｕｎ  Ｌｅｎｇｔｈ）が３、Ｇ（緑）画素の同一色連続長さが５、Ｒ（赤）画素の同一色連続長さが３、Ｂ（青）画素の同一色連続長さが２、赤画素の同一色連続長さが３であったとする。この場合、この１列あたりの同一色シーケンス数Ｍ＝５である。たとえば、１列あたり平均Ｍ＝５であると、図３全体では、Ｍ＝８０となり、２５６（＝１６×１６）に比してＭの数は小さくなる。ＧＰＵ１０１ａでは、上記同一色の連続数（Ｒｕｎ  Ｌｅｎｇｔｈ）を、ＣＰＵ１０１ｂに転送する。
【００２２】
図４は、ＧＰＵがおこなう圧縮高速化テーブルの作成処理の手順を示すフローチャートである。図２のステップＳ２１４の処理内容の詳細を示している。ＧＰＵ１０１ａは、図２により２５６分割された１つの小ブロックについて、同時に２５６スレッドの起動を開始する（ステップＳ４０１）。ＧＰＵ１０１ａのＮ（２５６）個の各プロセッサに対し、スレッド番号Ｍ（１〜２５６）から自プロセッサが処理するデスクトップ画像上での座標を指定する（ステップＳ４１１）。
【００２３】
ここで、Ｘ，Ｙ座標について、各スレッドごとに処理開始する座標位置を異ならせて同時並列処理をおこなう。たとえば、座標Ｘについて、Ｘ＝Ｍ％１６，Ｙ＝Ｍ／１６とすると、スレッド１は、Ｍ＝１であり、座標（Ｘ，Ｙ）＝（１，０）、スレッド１２８は、Ｍ＝１２８であり、座標（Ｘ，Ｙ）＝（０，８）、スレッド２５６は、Ｍ＝２５６であり、座標（Ｘ，Ｙ）＝（０，１６）の位置から処理を開始する。なお、［％］は割り算の余り、［／］は割り算の商である。
【００２４】
つぎに、各スレッド（１〜２５６）は、同一色連続長さを初期値（０）とし（ステップＳ４１２）、１列（最大１６画素）以下であるか判断し（ステップＳ４１３）、この１列（最大１６画素）の間において、他のスレッドで検出され、Ｘ軸方向に同一色で連続する画素があれば、同一色連続長さに１を加算する（ステップＳ４１４）。ここで同一色ではない場合、あるいは最大１６画素を超えた場合には、ステップＳ４１３，Ｓ４１４のループを抜けて終了する。
【００２５】
上記処理により、図３に示したように、同一色連続長さが得られ、この同一色連続長さ（Ｒｕｎ  Ｌｅｎｇｔｈ）をＣＰＵ１０１ｂに転送し、終了する。
【００２６】
上記処理によれば、異なる１画素ごとに対応したスレッドが同時並行処理され、高速処理できるようになる。また、ステップＳ４１４による同一色連続長さの加算はメモリ領域へのアクセスがシリアルである（アドレスが連続している）ため、ＧＰＵ１０１ａが用いるメモリへのアクセスを効率的におこなえる。特に、ＧＰＵ１０１ａでは、水平方向のＸ軸（１軸）での同一色連続長さ（Ｒｕｎ  Ｌｅｎｇｔｈ）だけを並列計算するため、メモリ上でも連続する領域となり、ＧＰＵ１０１ａに適合した処理であり、高速化できる。
【００２７】
（ＣＰＵがおこなう圧縮処理について）
つぎに、ＣＰＵ１０１ｂがおこなう圧縮処理について説明する。図５は、ＣＰＵがおこなう画像圧縮処理の手順を示すフローチャートである。ＣＰＵ１０１ｂは、ＧＰＵ１０１ａから同一色連続長さ（Ｒｕｎ  Ｌｅｎｇｔｈ）を取得する（ステップＳ５０１）。なお、この際、同一色連続長さに対応した同一色シーケンス数Ｍは、最大の２５６個以下となる。上記図３に示す例ではＭ＝８０で済む。
【００２８】
そして、同一色連続長さに基づき、デスクトップ画面上において、最も出現する色をバックグラウンド（背景色）としてエンコード（圧縮処理）する（ステップＳ５０２）。この処理は、同一色シーケンス数Ｍ回のループ処理でおこなわれる（詳細は後述する）。
【００２９】
つぎに、ステップＳ５０２で判定したバックグラウンド以外の色の画素を探す（ステップＳ５０３）。この処理は、最大でも同一色シーケンス数Ｍ回のループ処理でおこなえる。
【００３０】
この後、ステップＳ５０３でみつかった画素を左上の座標位置にもつ色について、面積最大となる矩形を検出する（ステップＳ５０４）。この処理では、Ｘ軸方向についてのループ処理は無く、Ｙ軸方向に最大でも１６回のループ処理で済む。
【００３１】
最後に、ステップＳ５０４で検出された矩形の色、左上座標位置、縦横（Ｘ，Ｙ）サイズをエンコードし（ステップＳ５０５）、処理を終了する。なお、この後、ＣＰＵ１０１ｂは、ステップＳ５０２で処理したエンコード後のバックグラウンドの情報と、ステップＳ５０５で処理したエンコード後の各矩形の情報をネットワーク１１０を介してクライアント１０２に送信する。
【００３２】
クライアント１０２では、ＣＰＵ１０２ａが受信したバックグラウンドの情報をデコード（復号）して、デスクトップのバックグラウンド（背景色）としてディスプレイ１０５に表示する。また、ＣＰＵ１０２ａは、この背景色上に、受信した各矩形の情報をデコード（復号）して、各座標位置に対応する縦横サイズおよび色でディスプレイ１０５に表示する。
【００３３】
図６は、バックグラウンド色の決定にかかる処理内容を詳細に示したフローチャートである。ＣＰＵ１０１ｂが実行する図５のステップＳ５０２の処理の詳細を示している。はじめに、出現した色であるＣｏｌｏｒ［２５６］と、最大出現色であるＭａｘｃｏｌｏｒと、最大出現数ＭａｘＣｎｔをそれぞれ０で初期化する（ステップＳ６０１）。そして、以下の処理について、画素数２５６に対応して、変数ｉが０から２５５までカウントするまでの間処理実行する（ステップＳ６０２）。
【００３４】
まず、出現したＣｏｌｏｒＤａｔａ［ｉ］が出現済みＣｏｌｏｒにあるか判断する（ステップＳ６０３）。ここで、新たな色のため出現済みＣｏｌｏｒでなければ（ステップＳ６０３：Ｎｏ）、ＣｏｌｏｒＤａｔａ［ｉ］を新規登録する。また、ＣｏｌｏｒＤａｔａ［ｉ］の出現数にＲｌｅ（Ｒｕｎ  Ｌｅｎｇｔｈの略）［ｉ］を設定する。また、変数ｉにＲｌｅ［ｉ］を加算する（ステップＳ６０４）。一方、出現済みＣｏｌｏｒであれば（ステップＳ６０３：Ｙｅｓ）、同じ色であるＣｏｌｏｒＤａｔａ［ｉ］の出現数にＲｌｅ［ｉ］を加算する。また、変数ｉにＲｌｅ［ｉ］を加算する（ステップＳ６０５）。
【００３５】
上記ステップＳ６０４あるいはステップＳ６０５の実行後、ＣｏｌｏｒＤａｔａ［ｉ］の出現数が最大出現数ＭａｘＣｎｔより大きいかを判定する（ステップＳ６０６）。ＣｏｌｏｒＤａｔａ［ｉ］の出現数が最大出現数ＭａｘＣｎｔより大きければ（ステップＳ６０６：Ｙｅｓ）、ステップＳ６０７に移行し、ＣｏｌｏｒＤａｔａ［ｉ］の出現数が最大出現数ＭａｘＣｎｔより大きくなければ（ステップＳ６０６：Ｎｏ）、ステップＳ６０７を実行せずにステップＳ６０２に戻る。
【００３６】
ステップＳ６０７では、最大出現色Ｍａｘｃｏｌｏｒに、ＣｏｌｏｒＤａｔａ［ｉ］を設定する。また、最大出現数ＭａｘＣｎｔにＣｏｌｏｒＤａｔａ［ｉ］の出現数を設定する（ステップＳ６０７）。以下、ステップＳ６０２に戻り異なる画素ｉについて処理を継続する。以上の処理により最大出現色であるＭａｘｃｏｌｏｒが示す色がバックグラウンド（背景色）として決定される。
【００３７】
図７は、同一色の矩形を検出する処理内容を詳細に説明したフローチャートである。ＣＰＵ１０１ｂが実行する図５のステップＳ５０４の処理の詳細を示している。はじめに、処理済みフラグｆｌｇ［２５６］を０で初期化する（ステップＳ７０１）。Ｙ軸について変数ｊが０から１６までの間でループ処理をおこなう（ステップＳ７０２〜ステップＳ７１２の処理）。また、Ｘ軸について、変数ｉが０から１６までの間でループ処理をおこなう（ステップＳ７０３〜ステップＳ７１１の処理）。
【００３８】
そして、ステップＳ５０３でも使った画素のＣｏｌｏｒＤａｔａについて、このＣｏｌｏｒＤａｔａ［ｉ＋１６×ｊ］はバックグラウンドの色と等しい（同じである）か判断する（ステップＳ７０４）。バックグラウンドと同じ色であれば（ステップＳ７０４：Ｙｅｓ）、処理を抜けてステップＳ７０３に戻る。異なる色であれば（ステップＳ７０４：Ｎｏ）、処理済みフラグｆｌｇ［ｉ＋１６×ｊ］が１（同色）と等しいか判断する（ステップＳ７０５）。等しければ（ステップＳ７０５：Ｙｅｓ）、ステップＳ７０３に戻る。
【００３９】
ステップＳ７０５の結果、等しくなければ（ステップＳ７０５：Ｎｏ）、処理済みフラグｆｌｇ［ｉ＋１６×ｊ］からｆｌｇ［ｉ＋１６×ｊ＋Ｒｌｅ［ｉ＋１６×ｊ］］までの画素に１を設定する（ステップＳ７０６）。Ｒｌｅは、各画素ごとに見た同一色連続長さである。
【００４０】
つぎに、Ｙ軸について変数ｋがｊ＋１から１６までの間でループ処理をおこなう（ステップＳ７０７〜ステップＳ７１０の処理）。そして、Ｒｌｅ［ｉ＋１６×ｊ］とＲｌｅ［ｉ＋１６×ｋ］が等しい（色）か判断する（ステップＳ７０８）。等しくなければ（ステップＳ７０８：Ｎｏ）、ステップＳ７０３に戻る。等しければ（ステップＳ７０８：Ｙｅｓ）、処理済みフラグｆｌｇ［ｉ＋１６×ｋ］からｆｌｇ［ｉ＋１６×ｋ＋Ｒｌｅ［ｉ＋１６×ｋ］］まで１（同色）を設定する（ステップＳ７０９）。
【００４１】
以上の処理により、見つかった画素を左上にもち同一色で、かつ面積が最大の矩形を検出することができる。そして、上記の処理によれば、Ｘ軸方向は、プレ圧縮により１列分の処理が既におこなわれているので、Ｘ軸方向について新たに同一色の範囲検出のためのループ処理は不要である。Ｙ軸方向についても、上記Ｘ軸の１列について既に同一色が検出されているため、全体の１６列について最大１６回分のループ処理で済む。このように、ＣＰＵ１０１ｂがおこなうバックグラウンド上での異なる色の範囲（矩形）検出は、全体のループ回数を少なくでき、ＣＰＵ１０１ｂの圧縮処理を高速化できるようになる。
【００４２】
図８は、ＣＰＵがおこなう圧縮処理の概要図である。図８には、図３と同じ１つの小ブロック（１６×１６画素）について記載してある。ＣＰＵ１０１ｂは、各画素ごとの色の配列ＣｏｌｏｒＤａｔａ［２５６］を出力する。図８に示す例では、ＣｏｌｏｒＤａｔａ［０］＝｛２５６，０，０｝、ＣｏｌｏｒＤａｔａ［１］＝｛２５６，０，０｝、ＣｏｌｏｒＤａｔａ［２］＝｛２５６，０，０｝、ＣｏｌｏｒＤａｔａ［３］＝｛０，２５５，０｝、…となる。｛｝内は、赤（Ｒ）、緑（Ｇ）、青（Ｂ）の順とする。
【００４３】
また、ＣＰＵ１０１ｂは、各画素ごとの同一色連続長さＲｌｅ［２５６］を作成し、出力する。図８に示す例では、Ｒｌｅ［０］＝３、Ｒｌｅ［１］＝２、Ｒｌｅ［２］＝１、Ｒｌｅ［３］＝５である。ＣＰＵ１０１ｂは、これらＣｏｌｏｒＤａｔａ［２５６］と、Ｒｌｅ［２５６］に基づき、バックグラウンド（背景色）と、バックグラウンド上での矩形の色、左上座標位置、縦横サイズを求めて、画像データを圧縮し、クライアント１０２に転送する。
【００４４】
図９は、図１に示した画像圧縮装置を用いたシステムの適用例を示す図である。図９において、ネットワーク１１０は、サーバ９０１，９０２とクライアント９３１〜９３４とが通信可能なネットワークであり、たとえば、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネット、携帯電話網などで構成される。
【００４５】
サーバ９０２は、クラウド９２０を構成するサーバ群（サーバ９２１〜９２５）の管理サーバである。クライアント９３１〜９３４のうち、クライアント９３１はノート型パソコン、クライアント９３２はデスクトップ型パソコン、クライアント９３３は携帯電話機（スマートフォン、ＰＨＳ（Ｐｅｒｓｏｎａｌ  Ｈａｎｄｙｐｈｏｎｅ  Ｓｙｓｔｅｍ）でもよい）、クライアント９３４はタブレット型端末である。図９のサーバ９０１，９０２，９２１〜９２５によって、図１に示した画像圧縮装置（サーバ）１０１を実現することができ、図９のクライアント９３１〜９３４によって、図１に示したクライアント１０２を実現することができる。
【００４６】
以上説明した実施の形態によれば、デスクトップ画像について、プレ圧縮し、このプレ圧縮のデータを用いて画像圧縮する２段階とし、これら段階をそれぞれ異なるプロセッサを用いて処理するようにした。特に、プレ圧縮は、ＧＰＵを用いてデスクトップ画像上の同一色の画素の並びを複数のスレッド（プロセッサ）で同時並行処理して同一色連続長さを検出し、ＣＰＵに転送するため、ＧＰＵにおけるメモリアクセスを効率的におこなえ、高速に処理できる。また、ＣＰＵは、ＧＰＵから同一色連続長さの情報を得るため、ＣＰＵで同一色連続長さの検出をおこなう必要が無く、得られた同一色連続長さの情報に基づき、デスクトップ画像上での同一色の並び（バックグラウンドおよびバックグラウンド上での矩形画像）を効率的に検出することができる。これにより、デスクトップ画像の圧縮にかかる全体処理をＧＰＵおよびＣＰＵの機能に適した機能分担ができ、これらＧＰＵおよびＣＰＵいずれの負担も軽減でき、圧縮を効率的におこなうことができ、迅速にクライアントに送信できるようになる。
【００４７】
また、上記実施の形態では、ＧＰＵとＣＰＵを用いて圧縮処理をおこなう構成としたが、マルチコアのＣＰＵを用いて上記ＧＰＵの処理内容をおこなうこともでき、この場合においても、圧縮の全体処理を効率的におこなえるようになる。
【００４８】
そして、上記の実施の形態によれば、特に、デスクトップ画像として製品設計時におけるＣＡＤ画像等、データ量が大きい画像の画像圧縮に対して有効であり、ＤａａＳ等のサービス利用時においてサーバは、デスクトップ画像を迅速にクライアントに送信でき、サーバレスポンスを改善でき、クライアントにおける操作性を向上でき、システム全体の利便性を向上できるようになる。
【００４９】
上述した実施の形態に関し、さらに以下の付記を開示する。
【００５０】
（付記１）圧縮する画像データについて、各画素の色を複数スレッドの同時並行処理によりそれぞれ検出し、１列の画素の並びにおける同一色連続長さを求め、
前記同一色連続長さの情報に基づき、前記画像データを圧縮することを特徴とする画像圧縮方法。
【００５１】
（付記２）前記同一色連続長さは、第１のプロセッサにより、前記複数スレッドの同時並行処理によって、前記１列の画素の並びで隣接する画素の同一色ごとの連続数をカウントして得ることを特徴とする付記１に記載の画像圧縮方法。
【００５２】
（付記３）前記同一色連続長さは、前記第１のプロセッサを用いたスレッドの同時並行処理により求め、
前記画像データの圧縮は、第２のプロセッサを用いておこなうことを特徴とする付記１または２に記載の画像圧縮方法。
【００５３】
（付記４）前記同一色連続長さは、前記第１のプロセッサとしてのＧＰＵを用いて求め、前記画像データの圧縮は、前記第２のプロセッサとしてのＣＰＵを用いておこなうことを特徴とする付記１〜３のいずれか一つに記載の画像圧縮方法。
【００５４】
（付記５）圧縮する画像データについて、画面全体を複数のブロックに分割し、前記分割後の小ブロックが有する画素数を前記スレッド数に対応させることにより、前記複数スレッドの同時並行処理をおこない前記同一色連続長さを求めることを特徴とする付記１〜４のいずれか一つに記載の画像圧縮方法。
【００５５】
（付記６）前記画像データの圧縮は、前記同一色連続長さの情報に基づき、画面全体で最も出現する色をバックグラウンドとして求めた後、
前記同一色連続長さの情報に基づき、前記バックグラウンド以外の色について、面積最大となる矩形の色と大きさと位置を求めることを特徴とする付記１〜５のいずれか一つに記載の画像圧縮方法。
【００５６】
（付記７）前記バックグラウンドが求められた際に当該バックグラウンドの色をエンコードし、
前記面積最大となる矩形が求められた際に当該矩形の色と大きさと位置をエンコードすることを特徴とする付記６に記載の画像圧縮方法。
【００５７】
（付記８）圧縮する画像データについて、各画素の色を複数スレッドの同時並行処理によりそれぞれ検出し、１列の画素の並びにおける同一色連続長さを求め、前記同一色連続長さの情報に基づき、前記画像データを圧縮するマルチコアのプロセッサを含むことを特徴とする画像圧縮装置。
【００５８】
（付記９）前記プロセッサは、各画素の色が複数スレッドの同時並行処理によりそれぞれ検出された１列の画素の並びを格納するメモリに対するアクセスを連続したアドレスを順次読み取ることにより、前記同一色連続長さをカウントすることを特徴とする付記８に記載の画像圧縮装置。
【００５９】
（付記１０）前記プロセッサは、
同一色連続長さを求める、スレッドの並列処理可能な第１のプロセッサと、
前記画像データを圧縮する第２のプロセッサとを含むことを特徴とする付記８に記載の画像圧縮装置。
【００６０】
（付記１１）前記第１のプロセッサは、ＧＰＵであり、
前記第２のプロセッサは、ＣＰＵであることを特徴とする付記１０に記載の画像圧縮装置。
【００６１】
（付記１２）クライアントから受信した操作コマンドに基づき、圧縮する画像データについて、各画素の色を複数スレッドの同時並行処理によりそれぞれ検出し、１列の画素の並びにおける同一色連続長さを求め、前記同一色連続長さの情報に基づき、前記画像データを圧縮し、前記クライアントに送信するプロセッサを含むサーバと、
前記サーバに対し前記操作コマンドを送信するごとに、前記操作コマンドに対応した圧縮された画像データを受信し、当該画像データをデコードして画面表示するクライアントと、
を含むことを特徴とするシステム。
【００６２】
（付記１３）前記画像データは、クライアントが表示するデスクトップ画像であることを特徴とする付記１２に記載のシステム。
【符号の説明】
【００６３】
１００  システム
１０１ａ  ＧＰＵ
１０１ｂ，１０２ａ  ＣＰＵ
１０１  画像圧縮装置（サーバ）
１０２  クライアント
１０３  キーボード
１０４  マウス
１０５  ディスプレイ
１１０  ネットワーク
【図１】
0006003032.tif 000002
【図２】
0006003032.tif 000003
【図３】
0006003032.tif 000004
【図４】
0006003032.tif 000005
【図５】
0006003032.tif 000006
【図６】
0006003032.tif 000007
【図７】
0006003032.tif 000008
【図８】
0006003032.tif 000009
【図９】
0006003032.tif 000010