(57)【特許請求の範囲】
【請求項１】
ＬＺＷ符号化された圧縮データを伸長する情報処理装置であって、
ＬＺＷ符号化された圧縮データから１符号語ずつ入力し、入力した符号語がＬＺＷ符号におけるクリアコード又は終了コードであると判定されるまで、一時バッファに格納する入力手段と、
前記入力した符号語が前記クリアコード又は前記終了コードであると判定された場合、前記一時バッファに既に記憶された符号語群の中から、ＬＺＷ符号の文字列テーブルを参照するテーブル参照符号語を特定し、前記一時バッファ内の符号語群のうち前記テーブル参照符号語で示される位置の符号語に対して前記文字列テーブルへの登録対象とすることを示す識別情報を生成する生成手段と、
前記一時バッファから読出した符号語が前記テーブル参照符号語である場合には、当該符号語で示される前記文字列テーブルのエントリアドレス位置にある文字列を復号結果として出力し、前記一時バッファから読出した符号語が前記文字列テーブルを参照しない符号語である場合には、当該符号で示される前記文字列を復号結果として出力する復号手段と、
前記復号手段による復号処理中に、前記一時バッファから読出した符号語が前記識別情報を有するか否かを判定する判定手段と、
該判定手段により、前記一時バッファから読出した符号語が前記識別情報を有すると判定された場合、前回復号して出力した文字列に、今回復号出力する文字列の先頭文字を追加することで得られる新文字列を、前記文字列テーブルの、前記一時バッファから読出した符号語で示されるエントリアドレス位置に登録する登録手段と
を備えることを特徴とする情報処理装置。
【請求項２】
前記一時バッファを少なくとも２つ有し、一方を前回の前記クリアコードを検出するまでに格納した符号化データの伸長処理のために利用し、もう一方を前記入力手段による、前記クリアコード又は前記終了コードに至るまでの新たなＬＺＷ符号化データを格納するために利用することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
更に、前記一時バッファに符号語を格納する際に、当該符号語に対する前記復号手段で得られる文字列のデータ長を算出し、当該データ長をもとに、前記符号語の出力する位置を制御することを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
ＬＺＷ符号化された圧縮データを伸長する情報処理装置の制御方法であって、
入力手段が、ＬＺＷ符号化された圧縮データから１符号語ずつ入力し、入力した符号語がＬＺＷ符号におけるクリアコード又は終了コードであると判定されるまで、一時バッファに格納する入力工程と、
生成手段が、前記入力した符号語が前記クリアコード又は前記終了コードであると判定された場合、前記一時バッファに既に記憶された符号語群の中から、ＬＺＷ符号の文字列テーブルを参照するテーブル参照符号語を特定し、前記一時バッファの符号語群のうち前記テーブル参照符号語で示される位置の符号語に対して前記文字列テーブルへの登録対象とすることを示す識別情報を生成する生成工程と、
復号手段が、前記一時バッファから読出した符号語が前記テーブル参照符号語である場合には、当該符号語で示される前記文字列テーブルのエントリアドレス位置にある文字列を復号結果として出力し、前記一時バッファから読出した符号語が前記文字列テーブルを参照しない符号語である場合には、当該符号で示される前記文字列を復号結果として出力する復号工程と、
判定手段が、前記復号工程による復号処理中に、前記一時バッファから読出した符号語が前記識別情報を有するか否かを判定する判定工程と、
登録手段が、該判定工程により、前記一時バッファから読出した符号語が前記識別情報を有すると判定された場合、前回復号して出力した文字列に、今回復号出力する文字列の先頭文字を追加することで得られる新文字列を、前記文字列テーブルの、前記一時バッファから読出した符号語で示されるエントリアドレス位置に登録する登録工程と
を有することを特徴とする情報処理装置の制御方法。
【請求項５】
コンピュータに読み込ませ実行させることで、前記コンピュータを、請求項１乃至３のいずれか１項に記載の情報処理装置の各手段として機能させることを特徴とするプログラム。
【請求項６】
請求項５に記載のプログラムを格納したことを特徴とするコンピュータが読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は圧縮されたデータを伸張する伸張技術に関するものである。
【背景技術】
【０００２】
近年、画像や文字を表すデータ量は大きくなってきており、保存、送信のためにデータ圧縮が行われる。例えば、特許文献１などにおいてＬＺＷの圧縮技術が知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００１−２６７９３０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ＬＺＷ符号は辞書式圧縮技術の１つである。一般に、この種の符号化データを伸張する時には、復元される可能性のある文字列を「辞書（テーブル）」に順次登録してゆく処理が発生する。しかし、辞書に登録するのは、あくまで復元される可能性がある文字列を登録するわけであるから、必ずしも辞書に登録した文字列が利用されるものではない。すなわち、辞書の使用の効率化、すなわち、消費メモリ容量の削減という点で、まだまだ改善の余地があった。
【０００５】
本発明は、上述したような辞書として用いる文字列テーブルへの非効率的な登録に係る処理の回数を抑制することにより、ＬＺＷ符号を効率良く伸張する技術を提供しようとするものである。
【課題を解決するための手段】
【０００６】
この課題を解決するため、例えば本発明の情報処理装置は以下の構成を備える。すなわち、
ＬＺＷ符号化された圧縮データを伸長する情報処理装置であって、
ＬＺＷ符号化された圧縮データから１符号語ずつ入力し、入力した符号語がＬＺＷ符号におけるクリアコード又は終了コードであると判定されるまで、一時バッファに格納する入力手段と、
前記入力した符号語が前記クリアコード又は前記終了コードであると判定された場合、前記一時バッファに既に記憶された符号語群の中から、ＬＺＷ符号の文字列テーブルを参照するテーブル参照符号語を特定し、前記一時バッファ内の符号語群のうち前記テーブル参照符号語で示される位置の符号語に対して前記文字列テーブルへの登録対象とすることを示す識別情報を生成する生成手段と、
前記一時バッファから読出した符号語が前記テーブル参照符号語である場合には、当該符号語で示される前記文字列テーブルのエントリアドレス位置にある文字列を復号結果として出力し、前記一時バッファから読出した符号語が前記文字列テーブルを参照しない符号語である場合には、当該符号で示される前記文字列を復号結果として出力する復号手段と、
前記復号手段による復号処理中に、前記一時バッファから読出した符号語が前記識別情報を有するか否かを判定する判定手段と、
該判定手段により、前記一時バッファから読出した符号語が前記識別情報を有すると判定された場合、前回復号して出力した文字列に、今回復号出力する文字列の先頭文字を追加することで得られる新文字列を、前記文字列テーブルの、前記一時バッファから読出した符号語で示されるエントリアドレス位置に登録する登録手段とを備える。
【発明の効果】
【０００７】
本発明によれば、辞書として用いる文字列テーブルへの非効率的な登録に係る処理の回数を抑制することにより、ＬＺＷ符号を効率良く伸張することが可能になる。
【図面の簡単な説明】
【０００８】
【図１】ハードウェア構成図。
【図２】ＬＺＷ符号の伸張処理の手順を示すフローチャート。
【図３】ＬＺＷ符号の伸張処理の様子を表す図。
【図４】機能構成図。
【図５】並列に伸張処理を行う場合の一例を示す図。
【図６】カラー画像の伸張処理を行う場合の一例を示す図。
【発明を実施するための形態】
【０００９】
以下、添付図面に従って、本発明に係る実施形態を詳細に説明する。
【００１０】
図１は、本実施形態に適用される情報処理装置（画像復号装置）の構成例である。図１において、プロセッサ１０１は、バス１００を通じて、メモリ１０２、ハードディスク１０３、キーボード１０４、ポインティングデバイス１０５、ビデオアダプタ１０６、および、ネットワークアダプタ１０７と接続されている。また、ビデオアダプタ１０６には、表示部１０８が接続されている。プロセッサ１０１は、メモリ１０２に記憶された処理手順、例えば後述する処理手順に相当するコンピュータプログラムに従って、上述した各構成部を制御する。メモリ１０２には、ＯＳ（オペレーティングシステム）や、実施形態における伸長処理用のアプリケーションプログラムがロードされ、プロセッサ１０１によって実行される。また、メモリ１０２は、各種データやテーブルを一時的に記憶するためにも利用される。ハードディスク１０３には、本システムが本実施形態で必要とするコンピュータプログラムや各種データが記録されている。ユーザは、キーボード１０４やポインティングデバイス１０５により、本システムに情報を入力することができる。ビデオアダプタ１０６は、種々の情報を表示部１０８に表示させる。またこのシステムは、ネットワークアダプタ１０７およびネットワーク１１０を介して外部装置と接続でき、外部機器との間で、後述する種々のデータを通信できる。なお、伸張対象のＬＺＷ符号データ（ファイル）や伸張に必要な各種データはハードディスク１０３に格納される。そして、ハードディスク１０３に格納されたデータは、必要に応じてメモリ１０２に読み込まれ、プロセッサ１０１により処理される。なお、上記１０１〜１０８の各処理部は、一体型の装置に含まれることとする。しかしながら、上記各部が別装置として存在し、それらが連携して動作するシステムにも本発明を適用できる。
【００１１】
以下、主に図２〜図４を用いて、本実施形態におけるＬＺＷ符号の伸張処理を詳しく説明する。図２は、本実施形態において、ＬＺＷ符号を伸張する手順を示すフローチャートである。図３は、ＬＺＷ符号が伸張される様子を視覚的に表す図である。図４は、図１のシステムが“ＴＩＦＦファイルから画像を復元するＴＩＦＦインタプリタ”として機能する場合の各種機能を表示した図である。即ち、図４は、上述した図１を機能面から見た図に相当する。
【００１２】
まず図４について説明する。同図のＴＩＦＦインタプリタに入力されるＴＩＦＦファイルは、ハードディスク１０３に相当する所定の記憶媒体に記憶されたものである。一時バッファ５０３、「辞書」として機能する文字列テーブル５０６、イメージコンテキスト５１５は、上述のメモリ１０２にプロセッサ１０１により確保されるものである。タグ解析部５１１、イメージ解析部５１２、色変換部５１３、一時バッファ制御部５０２、文字列テーブル制御部５０４などは、上述のプログラムの一部としてメモリ１０２またはハードディスク１０３に保持される。また各種の入出力部は、メモリ１０２またはハードディスク１０３またはプロセッサ１０１におけるデータの入出力機能に相当する。出力画像は、最終的に利用されるカラーのビットマップデータに相当し、ハードディスク１０３もしくはメモリ１０２上に保持される。なお、メモリ１０２とハードディスク１０３の２つの記憶媒体の代わりに、単一の記憶媒体を用いて本実施形態を実行しても良い。図４で行われる一連の処理は、図１に示すキーボード１０４あるいはポインティングデバイス１０５からの指示入力、あるいはネットワーク１１０から受信する指示信号によってプロセッサ１０２が開始することになる。ＴＩＦＦインタプリタは、上記指示を検知すると、指定されたＴＩＦＦファイルを入力する。タグ解析部５１１は、展開されるＴＩＦＦファイル５１０に含まれるタグ情報と呼ばれる情報を解析する。ここで解析されたタグ情報はイメージコンテキスト５１５として所定の記憶媒体に保持される。このタグ情報には、符号化対象画像の解像度を表す情報、画像データが表す色空間、圧縮符号化の方式、レイアウト情報等が含まれている。イメージ解析部５１２は、イメージコンテキスト５１５に格納されたタグ情報に基づいて、ＴＩＦＦファイル５１０に含まれる画像データを処理し、色変換部５１３に出力する。もし、上記タグ情報における圧縮符号化の方式に基づいて、上記画像データがＬＺＷ方式で圧縮されていると判定された場合には、このイメージ解析部５１２は、後述するデータ伸張部に、圧縮された画像データを出力する。更に、イメージ解析部５１２は、そのデータ伸張部で伸張された画像データを入力し、後段の色変換部５１３に圧縮されていない画像データとして出力する。上記データ伸張部は、ＬＺＷ符号入力部５０１、一時バッファ制御部５０２、一時バッファ５０３、文字列テーブル制御部５０４、伸張文字列出力部５０５、文字列テーブル５０６などから構成される。これらによる伸張処理については後で詳述する。なお、図４におけるデータ伸張部として、ＬＺＷ方式で圧縮されたデータを伸張する機能だけを表示したが、公知のＺＩＰ、ＭＨ、ＭＲ、ＭＭＲ、ＪＰＥＧなどの圧縮画像データについても、不図示のデータ伸張機能により伸張できる。色変換部５１３は、イメージ解析部５１２で処理された画像データ（例えば、ＬＺＷ方式で圧縮された画像データを伸張して得られた画像データ）を入力する。そして、入力された画像データを、上記タグ情報に基づいて、出力画像として適切な色空間の画像データに変換する。画像出力部５１４は、色変換部５１３から出力された画像データに、出力画像として必要な解像度の画像データへ変換する等の処理を施した後、出力画像として出力する。この出力画像は、図１の表示部１０８に表示されたり、ネットワーク１１０から外部装置へ出力されたりする。
【００１３】
次に、図２（ａ），（ｂ）のフローチャートを用いて、上記データ伸張部がＬＺＷ符号を伸張する処理を説明する。この一連の処理は、図１のハードディスク１０３等に記憶されたプログラムをプロセッサ１０１がメモリ１０２にロードし、実行することにより実現される。図２（ａ）は全体の処理を示している。
【００１４】
まず、Ｓ２０１において、ＬＺＷ符号入力部５０１は、イメージ解析部５１２よりＬＺＷ符号化データから１符号語分だけ取得する。Ｓ２０２において、一時バッファ制御部５０２は、ＬＺＷ符号入力部５０１から上記１符号語分のＬＺＷ符号を取得し、「取得したＬＺＷ符号がクリアコード（１０進数で「２５６」）または終了コード（１０進数で「２５７」）であるか」を判定する。ここで、クリアコードとは、文字列テーブル（辞書）を初期化することを意味する符号である。また、終了コードとは、伸長処理が終了することを意味する符号である。もしＳ２０２において、「取得したＬＺＷ符号がクリアコードまたは終了コードである」と判定した場合には、以下のＳ２０３〜Ｓ２０９の処理を実行する。もしＳ２０２において、「取得したＬＺＷ符号がクリアコードまたは終了コードでない」と判定した場合には、Ｓ２０３〜Ｓ２０８をスキップし、Ｓ２０９の処理を実行する。
【００１５】
Ｓ２０３において、一時バッファ制御部５０２は、後述するＳ２０９で一時バッファ５０３に保持されたＬＺＷ符号を参照し、後述する「文字列テーブル内のそれぞれの文字列が実際に出現しているか否か」を判定する。前述したように、ＬＺＷ符号の伸長では、実際にはＬＺＷ符号として符号化されない文字列も文字列テーブルに登録している場合が在り得る。Ｓ２０４において、文字列テーブル制御部５０４および伸張文字列出力部５０５によって、後述する伸張データの出力処理を行う。Ｓ２０５において、一時バッファ制御部５０２は、Ｓ２０１で取得したＬＺＷ符号が終了コードであるかを判定する。そして、終了コードである場合には伸張処理（文字列テーブル制御部５０４および伸張文字列出力部５０５への符号出力）を終了する。Ｓ２０６において、一時バッファ制御部５０２は一時バッファ５０３を初期化する。Ｓ２０７において、ＬＺＷ符号入力部５０１はＬＺＷ符号を１符号分取得する。Ｓ２０８において、一時バッファ制御部５０２は、Ｓ２０７で取得したＬＺＷ符号が終了コードであるかを判定する。もし終了コードである場合には、伸張処理を終了する。もし終了コードでないと場合には、Ｓ２０９に処理を進める。Ｓ２０９において、一時バッファ制御部５０２は、１符号分のＬＺＷ符号を一時バッファ５０３に保持させる。具体的には、Ｓ２０２でＮＯの時は、Ｓ２０１で取得した１符号分のＬＺＷ符号を保存する。また、Ｓ２０８でＮｏの時は、Ｓ２０７で取得した１符号分のＬＺＷ符号を保存する。
【００１６】
次に、上記Ｓ２０４の伸張データの出力処理の詳細を図２（ｂ）のフローチャートに従って説明する。Ｓ２１１において、文字列テーブル制御部５０４は、一時バッファ５０３に保持したＬＺＷ符号を１符号分取得する。Ｓ２１２において、文字列テーブル制御部５０４は、このＬＺＷ符号が一時バッファ５０３に格納された先頭の符号であるかを判定する。もしＬＺＷ符号が先頭の文字を表すと判定された場合にはＳ２１３に進む。Ｓ２１２においてＬＺＷ符号が先頭の文字ではないと判定された場合には、Ｓ２１７に進む。Ｓ２１３において、上記ＬＺＷ符号に対応する文字列テーブル５０６内の文字列を伸張文字列出力部５０５が出力する。Ｓ２１４において、文字列テーブル制御部５０４は、文字列テーブル５０６を初期化する。Ｓ２１５において、文字列テーブル制御部５０４は、Ｓ２１３で今回復号し出力した文字列を、前回復号出力した文字列として保存する。Ｓ２１７において、伸張文字列出力部５０５は、文字列テーブル５０６を参照し、取得したＬＺＷ符号に対応する文字列を伸張文字列出力部５０５が出力する。
【００１７】
Ｓ２１８において、文字列テーブル制御部５０４は、Ｓ２０３の判定結果である「文字列テーブル内のそれぞれの文字列が実際に出現しているか否か」に基づいて、以下の制御を行う。
【００１８】
このＳ２１８において、使用すると判定された場合には、Ｓ２１９に進む。Ｓ２１９において、文字列テーブル制御部５０４は、前回復号出力した文字列に、今回復号出力した文字列の先頭文字を加えた新文字列を文字列テーブル５０６に追加登録する。Ｓ２１６において、文字列テーブル制御部５０４は、上述した各ステップ（Ｓ２１１〜Ｓ２１５、Ｓ２１７〜Ｓ２１９）の選択的な実施を、全ＬＺＷ符号に対して行ったか判定する。もし、未実施のＬＺＷ符号が残っている場合にはＳ２１１に戻り、上述した処理を繰り返す。もし、未実施のＬＺＷ符号が残っていない場合には、処理を終了する。
【００１９】
図３（ａ）に具体的な処理対象のデータを表示しつつ、図２の手順に従ったデータ伸張部の伸張処理を説明してゆく。ここで、説明を簡単にするため、図４のデータ伸張部に入力されるＬＺＷ符号語は、「２５６，６５，６６，２５８，６７，２６０，６７，２６０，２５８，２５７」であるとする。
【００２０】
ＬＺＷ符号入力部５０１および一時バッファ制御部５０２によって、クリアコードもしくは終了コードの出現を検出するまで、一時バッファ５０３にＬＺＷ符号を保持する。その具体的手段は以下のとおりである。まずＳ２０１において最初のＬＺＷ符号「２５６」を入力する。これはクリアコードであるため、Ｓ２０２での判定結果はＹｅｓとなり、Ｓ２０３を実行する。Ｓ２０３では一時バッファ５０３の内容で使用されているＬＺＷ符号を求めるものであるが、この段階では一時バッファ５０３に代入したものはないので特に処理はない。同様にＳ２０４についても一時バッファ５０３が空であるため特に処理はない。Ｓ２０１で受信したＬＺＷ符号が終了コードではないため、Ｓ２０５の判定結果はＮｏとなり、Ｓ２０６を実行する。Ｓ２０６では一時バッファ５０３の内容を初期化し空とする。Ｓ２０７では２番目のＬＺＷ符号「６５」を入力する。これは終了コードではないため、Ｓ２０８の判定結果はＮｏとなり、Ｓ２０９を実行する。Ｓ２０９では、一時バッファ５０３に先ほどのＬＺＷ符号「６５」を登録（格納）し、Ｓ２０１に戻る。
【００２１】
次に、Ｓ２０１において３番目のＬＺＷ符号「６６」を入力する。これはクリアコードではないため、Ｓ２０２の判定結果、次にＳ２０９を実行する。Ｓ２０９では一時バッファ５０３にＬＺＷ符号「６６」を登録し、Ｓ２０１に戻る。
【００２２】
同様にＬＺＷ符号「２５８」「６７」「２６０」「６７」「２６０」「２５８」までの各符号は先に述べたＬＺＷ符号「６６」の例と同じシーケンスによって、一時バッファ５０３に順次登録されていく。この時点で一時バッファ５０３内には符号語群「６５、６６、２５８、６７、２６０、６７、２６０、２５８」が登録されていることになる。
【００２３】
こうして、Ｓ２０１において最後のＬＺＷ符号「２５７」を入力したとする。この符号は終了コードであるため、Ｓ２０２からＳ２０３に処理が進むことになる。
【００２４】
次に、Ｓ２０３ではそれぞれのエントリ番号（図中のＮｏ．に相当）について、一時バッファ内のＬＺＷ符号が文字列テーブル５０６（辞書）を参照するものであるか否かを判定する。具体的には、格納順に符号語を読出し、その符号語の値が「２５８」以上となっているＬＺＷ符号が出現する場合に、使用すると見なせばよい。実施形態のＬＺＷ符号列の場合には、「２５８」および「２６０」が出現しているため、これらを登録するＮｏ．２、４の符号に対して使用判定結果を「Ｙｅｓ」とすればよい。ここで一時バッファ内に登録されているＬＺＷ符号の種類は重複しているものを除外すると「６５、６６、６７、２５８、２６０」である。
【００２５】
上記をより具体的に説明する。一時バッファ５０３に登録されているＬＺＷ符号の先頭であるＮｏ．１に対しては、文字列テーブル５０６への追加は行われない。そして、Ｎｏ．２以降については、文字列テーブル５０６への登録される可能性はある。それ故、図３（ａ）に示す如く、一時バッファにおいて、Ｎｏ．２以降のＬＺＷ符号については、「２５８」から順番にｉｎｄｅｘ番号を割り当てる。つまり、Ｎｏ．３のＬＺＷ符号語に対して「２５９」、Ｎｏ．４のＬＺＷ符号語には「２６０」が、Ｎｏ．５の符号語には「２６１」のｉｎｄｅｘが割り当てられる。以下同様である。なお、このｉｎｄｅｘ番号が、実際にテーブルに格納されるものではない。図示は、あくまでも理解しやすくするためである。
【００２６】
一方、一時バッファに実際に出現する、文字列テーブル５０６を参照するＬＺＷ符号（符号語の値が「２５８」以上の符号）は、「２５８」と「２６０」がある。このＬＺＷが示す値が上記のｉｎｄｅｘと見なすと、その値を持つＬＺＷ符号語は、Ｎｏ．２とＮｏ．４であることがわかる。故に、図３（ａ）に示すように、一時バッファのＮｏ．２と４のＬＺＷ符号が文字テーブルへの登録対象であることを示すため、の「使用判定結果」の項目に、「Ｙｅｓ」のフラグ（識別情報）を付加する。この「使用判定結果」の項目に、「Ｙｅｓ」となった符号語を別な表現で示すと「文字列テーブル参照符号語」と言うことができる。
【００２７】
なお、符号語の値が２５５以下のものについてはＬＺＷ符号と出力する文字列が同じであるため辞書登録する必要がない。また、符号「２５６」はクリアコード、「２５７」は終了コードであるため、これらを除いた「２５８」以降のＬＺＷ符号が一時バッファ内で出現しているかを判定すればよい。
【００２８】
Ｓ２０４の内容として、次に、この一時バッファ５０３を元に伸張データ出力処理を実施する。データの伸張処理は従来技術と同様であるが、文字列テーブル５０６への登録に関しては、先に行った使用判定結果のフラグの値に基づき、エントリ番号「２５８」および「２６０」のみを登録するとすればよい。
【００２９】
その具体的な流れは以下のとおりとなる。なお、一時バッファ５０３から符号を順番に読込むためのカウンタが用意されているものとする。そして、一時バッファ５０３から、このカウンタで示される順番の符号語を入力すると共に、次の符号を入力するためにカウントアップするものとして説明する。
【００３０】
先ず、Ｓ２１１において、一時バッファ５０３からＮｏ．１のＬＺＷ符号「６５」を入力する。これは一時バッファ内で先頭であるため、Ｓ２１２の判定結果、Ｓ２１３を実行する。Ｓ２１３では「６５」に対応する文字列を復号結果として出力する。先にも述べたとおり、２５５以下のＬＺＷ符号に対応する文字列はＬＺＷ符号そのものであるため文字コードで「６６」（１６進数表記ｘｘＨで示すと「４１Ｈ」）、文字としては“Ａ”が出力される。そしてＳ２１４では文字列テーブル５０６が初期化され空となる。Ｓ２１５では、前回復号出力した文字列として“Ａ”が保持される。一時バッファ５０３にはまだＬＺＷ符号があるため、Ｓ２１６の判定結果、Ｓ２１１が実行される。
【００３１】
次にＳ２１１においてＮｏ．２のＬＺＷ符号「６６」を入力する。これは一時バッファ内で先頭ではないため、Ｓ２１２の判定結果はＮｏとなり、Ｓ２１７が実行される。Ｓ２１７では先ほど同様２５５以下であるため、ＬＺＷ符号そのものを出力する。つまり、文字コードで６６、文字としては“Ｂ”が出力される。このＮｏ．２は一時バッファ内で参照されるＬＺＷ符号を登録することが判定されている。このため、Ｓ２１８での判定結果はＹｅｓとなり、Ｓ２１９が実行される。この場合、着目符号は２番目の符号であり、カウンタの値は２である。従って、文字列テーブル５０６のエントリ番号は「２５６」＋「２」＝「２５８」となり、前回復号出力した文字列“Ａ”と、今回復号出力した文字列“Ｂ”の先頭文字である“Ｂ”を結合した新文字列“ＡＢ”を、文字列テーブル５０６のエントリアドレス位置「２５８」に登録する。なお、エントリアドレス「２５８」は、図３（ａ）の一時バッファのｉｎｄｅｘでもあるので、それを活用しても構わない。Ｓ２１５では前回復号出力した文字列として”Ｂ“が登録される。一時バッファ５０３にはまだＬＺＷ符号があるため、Ｓ２１６の判定結果、Ｓ２１１が実行される。この時点では出力される文字列は「ＡＢ」となっている。
【００３２】
続き、Ｓ２１１においてＮｏ．３のＬＺＷ符号「２５８」を入力する。これは一時バッファ内で先頭ではないため、Ｓ２１２の判定結果、Ｓ２１７が実行される。このＬＺＷ符号は２５８以上であるため、文字列テーブル５０６からエントリアドレス位置「２５８」に対応する文字列“ＡＢ”を参照し、それを復号結果として出力する。Ｎｏ．３に対しては文字列テーブル５０６への登録は不要である判定されているので、Ｓ２１８の判定結果、Ｓ２１５が実行される。Ｓ２１５では前回復号出力した文字列として”ＡＢ“が登録される。Ｓ２１６の判定結果、Ｓ２１１が実行される。この時点では出力される総文字列は「ＡＢＡＢ」となっている。
【００３３】
Ｓ２１１においてＮｏ．４のＬＺＷ符号語「６７」を入力する。これは一時バッファ内で先頭ではないため、Ｓ２１２の判定結果、Ｓ２１７が実行される。Ｓ２１７では先ほど同様２５５以下であるため、ＬＺＷ符号そのものを出力する。つまり、文字コードで６７、文字としては“Ｃ”が出力される。このＮｏ．４は一時バッファ内で参照されるＬＺＷ符号を登録することが判定されているため（使用判定結果のフラグが「Ｙｅｓ」となっているため）、Ｓ２１９が実行される。この場合、着目符号は４番目の符号であり、カウンタの値は４である。従って、エントリアドレスは、２５６＋４＝２６０となる。それ故、Ｓ２１９では前回復号出力した文字列“ＡＢ”と、今回復号出力した文字列“Ｃ”の先頭文字である“Ｃ”を結合した“ＡＢＣ”を、文字列テーブル５０６のエントリアドレス位置「２６０」に登録する。Ｓ２１５では前回復号出力した文字列として”Ｃ“が登録される。一時バッファ５０３にはまだＬＺＷ符号があるため、Ｓ２１６の判定結果、Ｓ２１１が実行される。この時点では出力される総文字列は「ＡＢＡＢＣ」となっている。
【００３４】
Ｓ２１１において、Ｎｏ．５のＬＺＷ符号「２６０」を入力する。これは一時バッファ内で先頭ではないため、Ｓ２１２の判定結果、Ｓ２１７が実行される。このＬＺＷ符号は２５８以上であるため、文字列テーブル５０６からエントリ番号２６０に対応する文字列“ＡＢＣ”を参照し、出力する。Ｎｏ．５に対しては文字列テーブル５０６への登録は不要である判定されているので、Ｓ２１８の判定結果、Ｓ２１５が実行される。Ｓ２１５では前回復号出力した文字列として”ＡＢＣ“が登録される。Ｓ２１６の判定結果、Ｓ２１１が実行される。この時点では出力される総文字列は「ＡＢＡＢＣＡＢＣ」となっている。
【００３５】
Ｓ２１１において、Ｎｏ．６のＬＺＷ符号「６７」を入力する。これは一時バッファ内で先頭ではないため、Ｓ２１２の判定結果、Ｓ２１７が実行される。Ｓ２１７では先ほど同様２５５以下であるため、ＬＺＷ符号そのものを出力する。つまり、文字コードで６７、文字としては“Ｃ”が出力される。Ｎｏ．６に対しては文字列テーブル５０６への登録は不要である判定されているので、Ｓ２１８の判定結果、Ｓ２１５が実行される。Ｓ２１５では前回復号出力した文字列として”Ｃ“が登録される。Ｓ２１６の判定結果、Ｓ２１１が実行される。この時点では出力される総文字列は「ＡＢＡＢＣＡＢＣＣ」となっている。
【００３６】
Ｓ２１１において、Ｎｏ．７のＬＺＷ符号「２６０」を入力する。これは一時バッファ内で先頭ではないため、Ｓ２１２の判定結果、Ｓ２１７が実行される。このＬＺＷ符号は２５８以上であるため、文字列テーブル５０６からエントリ番号２６０に対応する文字列“ＡＢＣ”を参照し、出力する。Ｎｏ．７に対しては文字列テーブル５０６への登録は不要である判定されているので、Ｓ２１８の判定結果、Ｓ２１５が実行される。Ｓ２１５では前回復号出力した文字列として“ＡＢＣ“が登録される。Ｓ２１６の判定結果、Ｓ２１１が実行される。この時点では出力される総文字列は「ＡＢＡＢＣＡＢＣＣＡＢＣ」となっている。
【００３７】
Ｓ２１１において、Ｎｏ．８のＬＺＷ符号「２５８」を入力する。これは一時バッファ内で先頭ではないため、Ｓ２１２の判定結果、Ｓ２１７が実行される。このＬＺＷ符号は２５８以上であるため、文字列テーブル５０６からエントリアドレス「２５８」に対応する文字列“ＡＢ”を参照し、それを復号結果として出力する。Ｎｏ．８に対しては文字列テーブル５０６への登録は不要である判定されているので、Ｓ２１８の判定結果、Ｓ２１５が実行される。Ｓ２１５では前回復号出力した文字列として“ＡＢ“が登録される。
【００３８】
以上の処理で全バッファを処理したため、Ｓ２１６の判定結果、本処理は終了となる。この時点では出力される総文字列は「ＡＢＡＢＣＡＢＣＣＡＢＣＡＢ」となっている。
【００３９】
ここまでで、Ｓ２０４の処理は終了する。引き続きＳ２０５の処理を継続する。Ｓ２０１で入力されたＬＺＷ符号が終了コードであったため、Ｓ２０５の判定結果、ＬＺＷ展開処理が終了となる。
【００４０】
以上により、使用されるエントリ番号の文字列のみを文字列テーブルに登録することが可能となる。それ故、文字列テーブルに登録するための文字列の生成処理が省かれるので、処理が簡略化できる。また、その文字列テーブルに登録回数が減ることにより、文字列テーブルが肥大化することを抑制することもできる。それ故、実施形態がＬＺＷ符号のデータ伸張処理の効率化を図ることが可能となる。
【００４１】
ここで、圧縮データ入力処理中に、伸張データ出力処理が並列的に実行される構成を用いても良い（図５（ａ）を参照されたい）。例えば、一時バッファを２つ用意する（一時バッファ１、一時バッファ２）。一時バッファ１に対する圧縮データ入力工程が終了すると、一時バッファ１を参照した伸張データ出力工程を開始できる。これと同時に、もう一方の一時バッファ２に対する圧縮データ入力工程処理が開始可能となる。これにより２つの工程が並列動作できるＬＺＷの２並列伸張処理が実現できる。なお、一時バッファの個数は特に限定するものではなく、３つ以上用いても良い。
【００４２】
また、圧縮データ入力処理中に、複数の伸張データ出力処理が並列的に実行される構成を用いても良い（図５（ｂ）を参照されたい）。この実現には一時バッファ５０３に登録文字列長情報を追加する方法が望ましい。使用判定結果を記録した後に、一時バッファ内のＬＺＷ符号を走査し伸張文字列長の長さを逐次算出する（図３（ｂ）を参照されたい）。ＬＺＷ符号が２５５以下であれば１が、ＬＺＷ符号が２５６以上であれば、前回の出力文字列の長さに１を加えたものが出力文字列長となる。この出力文字列長の総和を求めることで、ある一時バッファ内のＬＺＷ符号を伸張した場合の伸張データ長を算出できる。これにより、一時バッファ制御部において実伸張文字列出力部を用いずとも伸張データ長の総和を算出できる。この情報は、圧縮データ入力処理時に伸張データ出力長を求めると共に、それぞれの伸張データ出力部が上述の伸張データ出力長をもとに伸張データ出力を行う位置決定を可能とする。よって、任意位置からの伸張が可能となるだけではなく、複数の伸張データ出力工程を同時に実施することも可能となる。なお、一時バッファ及び文字列テーブルを３つ以上設け、複数の伸張データ出力処理が同時に実行されても良い。また、伸張文字列長を求めずに、それぞれの伸張データ出力処理を実施した後で結合する手段を取っても良い。
【００４３】
また、本発明の好適な利用形態として、ＴＩＦＦファイルの面順次データ伸張処理への適用例を説明する。ＴＩＦＦファイルフォーマットでは画素情報を点順次あるいは面順次のいずれかで保持することが可能である。例えば、ＲＧＢの三原色を用いて画素を表現する場合に、点順次ではＲＧＢＲＧＢＲＧＢ…という順序に、面順次ではＲＲＲ…ＧＧＧ…ＢＢＢという順序に画素情報が並ぶ。しかしながらＬＺＷ伸張では文字列テーブルを、復号処理中（伸張処理中）に動的に生成するため、あるＬＺＷ符号がどれだけの伸張文字列に伸張されるのかを実際に伸張せずに（つまり文字列テーブルを生成せずに）認識することは出来なかった。従来技術ではそれぞれの面の圧縮データ開始位置を特定することが難しかった。そのため、面順次データを１面分伸張した後に点順次データに並び替えるという方法が用いられる。しかし、Ａ４サイズ、６００ｄｐｉ、２４ｂｐｐのＲＧＢ画像の場合には１面を表すために必要な記憶領域は１００ＭＢとなる。これにより必要となるメモリ量が増加すると製品コスト増に繋がる場合がある。更に更なる高解像度（１２００ｄｐｉもしくは２４００ｄｐｉ）あるいはＣＭＹＫ色空間や特色を含み５色以上を取り扱う場合、Ａ３などの大きな用紙サイズをサポートする場合には、必要となる記憶領域は更に増加する。
【００４４】
本発明は以上の課題に対しても有効に働くことができる。本発明を適用した場合での処理の流れについては図６（ａ）を、データに関する流れについては図６（ｂ）を参照されたい。一時バッファを導入した本発明では上述した通り、一時バッファ制御部によって、ある一時バッファを伸張したときのデータ長を予め算出しておくことが可能となる。これを元に、面順次データを伸張する場合において一時バッファ制御部によってそれぞれの面を開始する圧縮データの位置を特定できる。これにより、複数の圧縮データ位置からデータ伸張が実施できるため、画素情報を全て伸張することなく、点順次データへ変換することが可能となる。その流れを以下に図６に合わせて説明する。まず最終的な伸張データを分割する任意の個数（あるいはサイズ）を決定する。この例では、α、β、γの３つにわけるものとする。次に、一時バッファ１〜４に対して圧縮データ入力工程を行う。その結果をそれぞれの一時バッファ１〜４を伸張したときの伸張データ長が求められる。これから、それぞれの面に対して伸張するべきデータの開始位置が求められる。この例では、スレッド２では一時バッファ１の先頭からＲ−αを、スレッド３では一時バッファ２の途中からＧ−αを、スレッド４では一時バッファ３の途中からＢ−αを、それぞれ伸張する。途中よりＬＺＷ符号を参照する場合にはそこまでの文字列テーブル登録処理は予め実施しておく。それぞれの面の部分データに対する伸張処理が終了したら、伸張データを並び替えることで、点順次データを生成する。これにより巨大な面順次データであっても比較的少ないメモリ量で伸張処理が可能となる。この処理は、並列的な伸張処理と組み合わせることでより効率的な処理が実現できるが、本質的には１スレッド上で逐次的に処理しても使用メモリ量削減効果は得られる。
【００４５】
以上に示したとおり、一時バッファを導入することにより、圧縮データ入力処理と、伸張データ出力処理との独立性を確立させることができる。これにより展開処理時に、参照されることのない文字列を文字列テーブルに登録することを回避することが出来、効率的な展開処理を実現できる。
【００４６】
（その他の実施例）
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
0005523144.tif 000002
【図２】
0005523144.tif 000003
【図３】
0005523144.tif 000004
【図４】
0005523144.tif 000005
【図５】
0005523144.tif 000006
【図６】
0005523144.tif 000007