(57)【要約】【課題】高速なロッシー／ロスレス圧縮を可能にする。【解決手段】プリンタの圧縮／伸長機能を内蔵した集積回路（ＩＣ）において、符号化時に、バンドバッファより画素データＩ／Ｆ２８０１を介し画素データがウェーブレット変換ブロック２８０３に入力して可逆ウェーブレット変換され、変換係数の最高重要度データは符号化するためコンテクストモデル２８０５へ渡される。変換係数の低重要度データは係数データＩ／Ｆ２８０４を介しバンドバッファに格納され、その後、読み出されてコンテクストモデル２８０５へ渡され符号化される。【選択図】図４７
2007267384.tif 000002
【特許請求の範囲】
【請求項１】
バッファ、
該バッファに格納されている画素に対し可逆ウェーブレット変換を行って係数を出力に生成するための、該バッファに接続された入力を有するウェーブレット変換ユニット、
及び
該ウェーブレット変換ユニットから出力されるウェーブレット変換画素のビットプレーン及び該バッファより受け取った該バッファに格納されたウェーブレット変換画素のビットプレーンを符号化するための、該該ウェーブレット変換ユニットに接続されたコーダを具備してなる圧縮システム。
【請求項２】
該バッファが少なくとも１つの画素バンドを格納するためのバンドバッファからなることを特徴とする請求項１記載の圧縮システム。
【請求項３】
該コーダが、コンテクストモデルと並列エントロピーコーダを具備し、
最高重要度データは埋め込まれず、バッファリングされずに係数順に符号化され、低重要度データの一部はバッファリングされ、埋め込まれ、そして重要度順にメモリに書き込まれることを特徴とする請求項１記載の圧縮システム。
【請求項４】
該コーダが高速並列コーダからなることを特徴とする請求項１記載の圧縮システム。
【請求項５】
該コーダがＱＭコーダからなることを特徴とする請求項１記載の圧縮システム。
【請求項６】
該コーダが有限状態マシンコーダからなることを特徴とする請求項１記載の圧縮システム。
【請求項７】
符号化データインターフェースをさらに具備することを特徴とする請求項１記載の圧縮システム。
【請求項８】
バッフアより受け取った画素情報をウェーブレット変換するステップ、ここで、係数の少なくとも１つのビットプレーンでウェーブレット変換画素を表現する、
該バッファ内の画素を符号化ビットプレーンによって置き換えるステップ、及び
該バッファ内のビットプレーンを符号化するステップを含んでなる圧縮方法。
【請求項９】
バンドバッファ、
逆変換処理を施される係数のための複数の符号化単位、
出力装置へ出力される画素を格納するための少なくとも１つの符号化単位、
該出力装置へ出力される既に逆変換された係数に対応する画素のための少なくとも１つの符号化単位、及び
該バンドバッファに接続された伸長器を具備してなり、該伸長器が圧縮データを変換係数に伸長し、該変換係数を該バンドバッファに書き込み、該バンドバッファより該変換係数を再び読み出し、それに逆変換を施して画素値を生成し、それを該バンドバッファに書き込むことを特徴とする伸長システム。
【請求項１０】
係数を最高重要度データと低重要度データとに分割するステップ、
最高重要度データを直ちに係数順に符号化するためコンテクストモデルへ送るステップ、
低重要度データ及び複数の指示ビットをメモリに格納するステップ、
及び
係数の集合中の全係数の最高重要度データを符号化した後に、低重要度データを符号化し、該複数の指示ビットに部分的に基づいた順序で埋め込むステップを含んでなる圧縮方法。
【請求項１１】
入力データを受け取るように接続された入力と、偶数サンプルと奇数サンプルを転送するための第１と第２の出力とを持つ入力バッフア、
該偶数サンプルと該奇数サンプルを受け取って係数を生成するように接続され、その水平ローパス係数と垂直ハイパス係数が当該順変換装置の出力であるところの第１レベル変換ユニット、
該第１レベル変換ユニットによって生成されたｓｓ係数を受け取るように接続された第１入力と、より上のレベルの変換フィルタ処理からのｓｓ係数を受け取るように接続された第２入力とを有するメモリ、
より上のフィルタ処理のためにＳＳ係数を順序付けするための、該メモリに接続された第１入力を持つ順序付けユニット、及び
複数の変換レベルを適用するために該順序付けユニットに接続された第１のフィルタユニットを具備してなり、該フィルタユニットは該順序付けユニットより受け取ったｓｓ係数に対しより上のレベルの変換を行い、該フィルタユニットが生成するｓｓ係数は該メモリの該第２入力と該順序付けユニットの第２の入力にフィードバックされることを特徴とする順変換装置。
【請求項１２】
画像を圧縮するための装置であって、圧縮器、及び、該圧縮器に接続された作業域メモリを具備してなり、該作業域メモリは画像と同じサイズであり、該圧縮器は画像中の画素より大きな係数を使用して画像を符号化するために該作業域を利用することを特徴とする圧縮装置。
【請求項１３】
最高重要度データと低重要度データとからなる情報を符号化する方法であって、
最高重要度データを符号化するステップ、
０のヘッドビットだけから構成されていない各係数の低重要度データにおける最初のビットプレーンの位置を符号化するステップ、及び
０のヘッドビットだけから構成されていない低重要度データの各ビットプレーンを符号化するステップを含んでなる符号化方法。
【請求項１４】
最高重要度データと低重要度データからなる情報を符号化する装置であって、
最高重要度データを符号化するための手段、
０のヘッドビットのみからなるものでない各係数の低重要度データにおける最初のビットプレーンの位置を符号化するための手段、及び
０のヘッドビットのみからなるものでない低重要度データの各ビットプレーンを符号化するための手段を具備してなる符号化装置。
【請求項１５】
情報のｍ項符号化の方法であって、
所定数の係数を調べるステップ、
該所定数の係数中の全てのヘッドビットが符号化されるまで、全てのヘッドビットを毎サイクル１つずつエントロピー符号化するステップ、及び
該所定数の係数の符号ビット及びテールビットを同じサイクルで符号化するステップを含んでなる符号化方法。
【請求項１６】
集積回路チップとメモリとの間で画素データを転送するための画素データインターフェース、
該画素データインターフェースを介し、該メモリへ及び該メモリから情報を転送するための、該画素データインターフェースに接続された可逆ウェーブレット変換部、
該可逆ウェーブレット変換部より与えられたデータを符号化するためのコンテクストを提供するための、該可逆ウェーブレット変換部に接続されたコンテクストモデル、
該可逆ウェーブレット変換部によって生成された係数を、該コンテクストモデルによって提供されたコンテクストに基づいて符号化するための符号化器を具備してなる集積回路。
【請求項１７】
符号化データを復号化するための復号化装置であって、
符号化データを受け取り、該符号化データを確率予測値に基づいて復号化するために接続され、カレントラインから復号化されたビットを生成する少なくとも１つのビットジェネレータ、
該カレントラインから復号化されたビットに基づいて確率予測値を提供するために該少なくとも１つのビットジェネレータに接続された確率予測マシン、及び
部分コンテクストアドレスに基づいて複数のコンテクストを該確率予測マシンに与えるための、該確率予測マシンに接続されたコンテクストモデルを具備してなり、該確率予測マシンが該復号化されたビットに基づいて該複数のコンテクストからコンテクストを選択することを特徴とする復号化装置。
【請求項１８】
低重要度データと最高重要度データを受け取り、どのビットプレーンがデータを含んでいるか判定するために接続され、該低重要度データの処理時に使用される符号化単位全体の最初のオンビットを持つビットプレーンの指示を生成する先頭ビットプレーンユニット、
低重要度データと最高重要度データを受け取り、該低重要度データのための指示情報を生成するために接続された比較メカニズム、
符号ビット、最高重要度データ、及びデータを持つ最初のビットプレーンの指示を受け取るように接続され、条件付け情報を提供するため係数を遅延させるメモリ、
該符号ビットのためのコンテクストを提供するため該メモリに接続された第１のコンテクストモデル、
ヘッドビットのためのコンテクストを提供するため該メモリ及び該最高重要度データに接続された第２のコンテクストモデル、
テールビットのためのコンテクストを提供するため該メモリ及び該最高重要度データに接続された第３のコンテクストモデルを具備してなるコンテクストモデル装置。
【請求項１９】
符号化レートを確認するため符号語の平均長を測定するステップ、及び、所要の圧縮量に基づいて圧縮レートを調整するステップを含んでなる圧縮実行方法。
【請求項２０】
コンテクストモデル、
該コンテクストモデルに接続された確率予測マシン、
該確率予測マシンに接続されたビットジェネレータ、及び
平均符号語長を測定することによって符号化レートを制御するための、該ビットジェネレータに接続された符号化器レート制御手段を具備してなる符号化システム。
【請求項２１】
変換係数の集合のデータビットプレーンの最低重要度部分を処理する方法であって、
メモリから第１の量のデータを読み出すステップ、及び
該変換係数の集合の下位のビットプレーン中のデータの少ない変換ビットプレーンを補うため、該第１の量のデータの読み出しと同時に該第１の量のデータより大きな第２の量のデータをメモリに書き込むステップを含んでなる変換係数処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ圧縮及び伸長システムの分野に係り、特に、圧縮／伸長システムにおけるロスレス及びロッシーのデータ符号化及び復号化に関する。
【背景技術】
【０００２】
データ圧縮は、大量のデータの蓄積及び伝送のために非常に有用なツールである。例えば、文書のファクシミリ伝送のような画像伝送に要する時間は、圧縮を利用して画像の再生に必要とされるビット数を減らすと飛躍的に短縮される。
【０００３】
従来より、多くの様々なデータ圧縮手法が存在している。圧縮手法は、おおまかに分類すると２つのカテゴリー、つまりロッシー符号化とロスレス符号化とに分けることができる。ロッシー符号化とは、情報の損失を生じ、したがって元のデータの完全な再現が保証されない符号化のことである。ロッシー符号化の目標とするところは、元のデータから変わったとしても、その変化が不快であったり目だったりしないようにすることである。ロスレス圧縮では、情報がすべて保存され、データは完全に復元可能な方法で圧縮される。
【０００４】
ロスレス圧縮では、入力シンボルもしくは輝度データが出力符号語に変換される。入力としては、画像データ、音声データ、１次元データ（例えば空間的または時間的に変化するデータ）、２次元データ（例えば２つの空間軸方向に変化する（または１つの空間次元と１つの時間次元で変化する）データ）、あるいは多次元／マルチスペクトルのデータがあろう。圧縮がうまくいけば、その符号語は、符号化前の入力シンボル（または輝度データ）のために必要とされたビット数より少ないビット数で表現される。ロスレス符号化法には、辞書符号化方式（例えば、Lempel-Ziv方式）、ランレングス符号化方式、計数符号化方式、エントロピー符号化方式がある。ロスレス画像圧縮では、圧縮は予測またはコンテクストと符号化に基づいている。ファクシミリ圧縮用ＪＢＩＧ標準(ISO/IEC
11544)と、ＤＰＣＭ（差分パルス符号変調−連続階調画像用のＪＰＥＧ標準のオプション）は画像用のロスレス圧縮の例である。ロッシー圧縮では、入力シンボルまたは輝度データは、量子化され、しかるのちに出力符号語へ変換される。量子化の目的とするところは、データの重要な特徴量を保存する一方で、重要でない特徴量を除去することである。ロッシー圧縮システムは、量子化に先立ち、エネルギー集中をするための変換を利用することが多い。ＪＰＥＧは画像データ用のロッシー符号化法の一例である。
【０００５】
画像信号処理における近年の開発は、効率的かつ高精度のデータ圧縮符号化方式の追求に関心を集中してきた。変換またはピラミッド信号処理の様々な方式が提案されており、その中に多重解像度ピラミッド処理方式とウェーブレット・ピラミッド処理方式とがある。これら２方式はサブバンド処理方式及び階層処理方式とも呼ばれる。画像データのウェーブレット・ピラミッド処理方式は、クァドレチャーミラーフィルタ（Quadrature  Mirror  filter;ＱＭＦ）を用いてオリジナル画像のサブバンド分割をする特殊な多重解像度ピラミッド処理方式である。なお、他の非ＱＭＦウェーブレット方式もある。ウェーブレット処理方式に関し、これ以上の情報を得るには、例えば非特許文献１、２を参照されたい。また、可逆変換に関する情報を得るには、非特許文献３を参照されたい。
【非特許文献１】Antonini，M.，et  al.，“Image  Coding  Using  Wavelet  Transform”，IEEE  Transactions  on  Image  Processing，Vol.1，No.2，April  1992
【非特許文献２】Shapiro，J.，“An  Embedded  Hierarchical  Image  Coder  Using  Zerotrees  of  Wavelet  Coefficients”，Proc．IEEE  Data  Compression  Conference，pgs．214-223，1993
【非特許文献３】Said，A．and  Pearlman，W.，“Reversible  Image  Compression  via  Multiresolution  Representation  and  Predictive  Coding”，Dept．of  Electrical，Computer  and  System  Engineering，Renssealaer  Polytechnic  Institute，Troy，NY  1993
【発明の開示】
【発明が解決しようとする課題】
【０００６】
圧縮は、しばしば非常に時間がかかり、また膨大なメモリを必要とする。より高速に、かつ／又は、可能なかぎり少ないメモリで、圧縮を行うのが望ましい。品質を保証できない、圧縮率が不十分である、あるいはデータレートが制御可能でないという理由で、圧縮が全く利用されなかった応用分野もある。しかし、伝送及び／又は記憶すべき情報量を減らすため圧縮の利用が望ましい。
【０００７】
デジタルコピア、プリンタ及び多機能機器は、フレーム記憶を備えると性能が非常に向上する。フレーム記憶が圧縮されれば、これら製品におけるフレーム記憶に必要とされるメモリが減り、したがってそのコストが削減される。しかし、多くのフレーム記憶はランダムアクセスメモリ（ＲＡＭ）で実現される。ＲＡＭは高速であるが一般に高価である。ハードディスクもメモリとして使用でき、一般に安い（一般にＲＡＭほど高価ではない）と考えられる。したがって、システムの製造者であれば、フレーム記憶などにＲＡＭにかえてハードディスクを用い、より安価なシステムを製造することが有利であると考えるであろう。
【０００８】
速度が重要なアプリケーションにとってハードディスクを使用することの一つの問題点は、ＲＡＭほど高速にハードディスクから情報を直接呼び出すことが困難であることである。また、多くのハードディスクは、情報をディスクに格納する時に、ディスクに格納可能な情報量を増加させるため圧縮を利用する。この圧縮の実行に要する時間も、速度が重要なアプリケーションでハードディスクの使用をためらわせる要因であろう。ハードディスクの使用、圧縮の利用に内在する速度の遅さが、速度の重要なアプリケーションにハードディスクを使用することを難しくしている。
【０００９】
よって、本発明は、高速なロッシー／ロスレス圧縮を可能にすることを主たる目的とする。本発明のもう一つの目的は、高価なＲＡＭに代えて安価なハードディスクを使用可能なシステムを提供することを目的とする。本発明の他の目的は、速度をハードディスクにマッチングさせ、かつ、圧縮を利用してハードディスクをプリントエンジンなどのシステムの他の部分の帯域幅にマッチングさせることができるようにすることである。また、本発明の別の目的は、圧縮及び伸長のための時間がＲＡＭ速度に比べそれほど遅くない場合にＲＡＭを使用できるようにすることである。本発明の他の目的は、以下の説明から明らかになろう。
【課題を解決するための手段】
【００１０】
上記目的を達成するため、以下に列挙した構成の装置、システム及び方法が本発明に包含される。
【００１１】
（１）バッファ；
該バッファに格納されている画素に対し可逆ウェーブレット変換を行って係数を出力に生成するための、該バッファに接続された入力を有するウェーブレット変換ユニット；
該ウェーブレット変換ユニットから出力されるウェーブレット変換画素のビットプレーン及び該バッファより受け取った該バッファに格納されたウェーブレット変換画素のビットプレーンを符号化するための、該該ウェーブレット変換ユニットに接続されたコーダを具備してなるシステム。
【００１２】
（２）該バッファが少なくとも１つの画素バンドを格納するためのバンドバッファからなることを特徴とする前記（１）のシステム。
【００１３】
（３）該コーダがコンテクストモデルと並列エントロピーコーダを具備し；
最高重要度データは埋め込まれず、バッファリングされずに係数順に符号化され、低重要度データの一部はバッファリングされ、埋め込まれ、そして重要度順にメモリに書き込まれることを特徴とする前記（１）のシステム。
【００１４】
（４）該コーダが高速並列コーダからなることを特徴とする前記（１）のシステム。
【００１５】
（５）該コーダがＱＭコーダからなることを特徴とする前記（１）のシステム。
【００１６】
（６）該コーダが有限状態マシンコーダからなることを特徴とする前記（１）のシステム。
【００１７】
（７）符号化データインターフェースをさらに具備することを特徴とする前記（１）のシステム。
【００１８】
（８）バッフアより受け取られた画素情報をウェーブレット変換するステップ、ここで、係数の少なくとも１つのビットプレーンがウェーブレット変換画素を表現する；
該バッファ内の画素を符号化ビットプレーンによって置き換えるステップ；及び
該バッファ内のビットプレーンを符号化するステップを含んでなる圧縮方法。
【００１９】
（９）バンドバッファ；
逆変換処理を施される係数のための複数の符号化単位；
出力装置へ出力される画素を格納するための少なくとも１つの符号化単位；
該出力装置へ出力される既に逆変換された係数に対応する画素のための少なくとも１つの符号化単位；
該バンドバッファに接続された伸長器を具備してなり、該伸長器が圧縮データを変換係数に伸長し、該変換係数を該バンドバッファに書き込み、該バンドバッファより該変換係数を再び読み出し、それに逆変換を施して画素値を生成し、それを該バンドバッファに書き込む伸長システム。
【００２０】
（１０）該伸長器が圧縮データをある記憶領域から読み出すことを特徴とする前記（９）の伸長システム。
【００２１】
（１１）該記憶領域がハードディスクからなることを特徴とする前記（１０）の伸長システム。
【００２２】
（１２）該バンドバッファに接続されたプリントエンジンをさらに有することを特徴する前記（９）の伸長システム。
【００２３】
（１３）係数を最高重要度データと低重要度データに分割するステップ；
最高重要度データを直ちに係数順に符号化するためコンテクストモデルへ送るステップ；
低重要度データ及び複数の指示ビットをメモリに格納するステップ；
及び
係数の集合中の全係数の最高重要度データを符号化した後に、低重要度データを符号化し、該複数の指示ビットに部分的に基づいた順序で埋め込むステップを含んでなる方法。
【００２４】
（１４）該指示ビットが第１のビットと第２のビットからなることを特徴とする前記（１３）の方法。
【００２５】
（１５）該指示ビット中の第１ビットが、該係数の低重要度データの先頭ビットがヘッドビット又はテールビットであるか否か指示し、該指示ビット中の第２ビットが、該指示ビット中の該第１ビットが該係数の低重度データの先頭ビットがヘッドビットであると指示するときに、符号ビットを表すことを特徴とする前記（１３）の方法。
【００２６】
（１６）該指示ビットが低重要度データに隣接して格納されることを特徴とする前記（１３）の方法。
【００２７】
（１７）入力データを受け取るように接続された入力と、偶数サンプルと奇数サンプルを転送するための第１と第２の出力を持つ入力バッフア；
該偶数サンプルと該奇数サンプルを受け取って係数を生成するように接続され、その水平ローパス係数と垂直ハイパス係数が当該順変換装置の出力であるところの第１レベル変換ユニット、；
該第１レベル変換ユニットによって生成されたｓｓ係数を受け取るように接続された第１入力と、より上のレベルの変換フィルタ処理からのｓｓ係数を受け取るように接続された第２入力とを有するメモリ；
より上のフィルタ処理のためにＳＳ係数を順序付けするための、該メモリに接続された第１入力を持つ順序付けユニット；及び
複数の変換レベルを適用するために該順序付けユニットに接続された第１のフィルタユニットを具備してなり、該フィルタユニットは該順序付けユニットより受け取ったｓｓ係数に対しより上のレベルの変換を行い、該フィルタユニットが生成するｓｓ係数は該メモリの該第２入力と該順序付けユニットの第２入力にフィードバックされる順変換装置。
【００２８】
（１８）該第１レベル変換ユニットは入力データの２×２ブロックを処理することを特徴する前記（１７）の順変換装置。
【００２９】
（１９）該第１レベル変換ユニットが：
第１と第２の出力を持つ、第１レベル水平変換を行うための第２のフィルタユニット；
該第２のフィルタユニットの該第１出力に接続された第１のシングルディレイ；
該第２のフィルタユニットの該第２出力に接続された第２のシングルディレイ；
該第２のフィルタユニットの該第２出力に接続されたダブルディレイ；
該第１シングルディレイ及び該ダブルディレイの出力に接続された第１のマルチプレクサ；
該第２フィルタユニットの出力及び該第２シングルディレイの出力を受け取るように接続された第２のマルチプレクサ；及び
該第１及び第２のマルチプレクサからの出力を受け取って第１レベル垂直変換を行うために接続された第３のフィルタユニットを具備してなることを特徴とする前記（１７）の順変換装置。
【００３０】
（２０）画像を圧縮するための装置であって、
圧縮器；
該圧縮器に接続された作業域メモリを具備してなり、該作業域メモリは画像と同じサイズであり、該圧縮器は画像中の画素より大きな係数を使用して画像を符号化するために該作業域を利用する圧縮装置。
【００３１】
（２１）最高重要度データと低重要度データとからなる情報を符号化する方法であって、
最高重要度データを符号化するステップ；
０のヘッドビットだけから構成されていない各係数についての低重要度データ中の先頭ビットプレーンの位置を符号化するステップ；
０のヘッドビットだけから構成されていない低重要度データの各ビットプレーンを符号化するステップを含んでなる方法。
【００３２】
（２２）該情報がウェーブレット係数からなることを特徴とする前記（２１）の方法。
【００３３】
（２３）該先頭の低重要度ビットプレーンの位置を符号化するステップが、低重要度データのビットプレーン全体にわたるルックアヘッドの実行を含むことを特徴とする前記（２１）の方法。
【００３４】
（２４）該最高重要度データを符号化するステップが：
各木に関し、
ｓｓ係数を符号化するステップ；
最高重要度データに対するルックアヘッドを実行するステップ；及び各非ｓｓ係数について
データを有する各ビットプレーンのためのヘッド又はテールビットを符号化するステップ；及び
該係数が非０ならば符号ビットを符号化するステップ
を含んでなることを特徴とする前記（２１）の方法。
【００３５】
（２５）該ルックアヘッドが木ルックアヘッドからなり、該ルックアヘッドを実行するステップが、ｓｓ係数を符号化することと、木全体の非０ヘッドビットを持つ先頭の０のビットプレーンを符号化することを含むことを特徴とする前記（２４）の方法。
【００３６】
（２６）最高重要度データは１ウェーブレット木が一度に処理されることを特徴とする前記（２４）の方法。
【００３７】
（２７）該ルックアヘッドが、ウェーブレット木内の全ての非ｓｓ係数に関し全て０のヘッドビットからなるビットプレーンを決定することを特徴とする前記（２１）の方法。
【００３８】
（２８）個別に符号化すべき最初のビットプレーンを識別するステップをさらに含むことを特徴とする前記（２７）の方法。
【００３９】
（２９）個別に符号化すべき最初のビットプレーンを識別するステップが、第２分割の全ての非ｓｓ係数が０であることを第１のビットによって指示すること、及び、第１分割の全ての非ｓｓ係数が０であることを第２のビットによって指示することを含んでなることを特徴とする前記（２８）の方法。
【００４０】
（３０）該最高重要度データを符号化するステップが：
各木に関し、
ｓｓ係数を符号化するステップ；
各木の全ての非ｓｓ係数に対しヘッドビットが全て０のビットプレーンを確定するためのルックアヘッドを実行するステップ；
木全体の最高重要度データが０であるか判定するステップ；
木全体の最高重要度データが０でないならば、
木の全ての係数に関し、
木中の最初の非ｓｓ係数であって、データを含んでいる最初のビットプレーンから始まるカレント係数を全ビットプレーンについて符号化するステップ；
カレント係数が０でなければ符号ビットを符号化するステップを含んでなることを特徴とする前記（２１）の方法。
【００４１】
（３１）該低重要度データを符号化するステップが：
各木に関し；
各係数毎に；
ルックアヘッド区間の始まりならばルックアヘッドを実行するステップ；
ルックアヘッドが非アクティブならばヘッド又はテールビットを符号化するステップ；及び
最初のオンビットが出現済みでかつルックアヘッドが非アクティブならば符号ビットを符号化するステップ
を含んでなることを特徴とする前記（２１）の方法。
【００４２】
（３２）最高重要度データと低重要度データからなる情報を符号化する装置であって、
最高重要度データを符号化するための手段；
０のヘッドビットのみからなるものでない各係数についての低重要度データにおける最初のビットプレーンの位置を符号化するための手段；
０のヘッドビットのみからなるものでない低重要度データの各ビットプレーンを符号化するための手段を具備してなる装置。
【００４３】
（３３）該情報がウェーブレット係数からなることを特徴とする前記（３２）の装置。
【００４４】
（３４）該最初の低重要度ビットプレーンの位置を符号化するための手段が、低重要度データの全ビットプレーンにわたってルックアヘッドを行うための手段を具備してなることを特徴とする前記（３２）の装置。
【００４５】
（３５）該最重要度データを符号化するための手段が：
各木のｓｓ係数を符号化するための手段；
各木の最重要度データに対するルックアヘッドを実行するための手段；
各木の各非ｓｓ係数について、データを持つ各ビットプレーンに関するヘッド又はテールビットを符号化するための手段；及び
各木の各非ｓｓ係数について、その係数が０でないときに符号ビットを符号化するための手段を具備してなることを特徴とするクレーム３２の装置。
【００４６】
（３６）該ルックアヘッドは木ルックアップからなり、該ルックアヘッドを実行するための手段は、ｓｓ係数を符号化するための手段と、全ての木について非０のヘッドビットを持つ最初の０のビットプレーンを符号化するための手段とを具備してなることを特徴とする前記（３５）の装置。
【００４７】
（３７）最高重要度データは１ウェーブレット木が一度に処理されることを特徴とする前記（３５）の装置。
【００４８】
（３８）該ルックアヘッドを実行するための手段が、ウェーブレット木内の全ての非ｓｓ係数について全て０のヘッドビットからなるビットプレーンを確定することを特徴とする前記（３２）の装置。
【００４９】
（３９）個別に符号化すべき最初のビットプレーンを識別するための手段をさらに具備することを特徴とする前記（３８）の装置。
【００５０】
（４０）該個別に符号化すべき最初のビットプレーンを識別するための手段が、第２分割の全ての非ｓｓ係数が０であることを第１のビットによって指示するための手段と、第１分割の全ての非ｓｓ係数が０であることを第２のビットによって指示するための手段とを具備してなることを特徴とする前記（３９）の装置。
【００５１】
（４１）該最高重要度データを符号化するための手段が：
各木のｓｓ係数を符号化するための手段；
各木内の全ての非ｓｓ係数について、全て０のヘッドビットであるビットプレーンを確定するためのルックアヘッドを実行するための手段；
各木の木全体の最高重要度データが０であるか判定するための手段；
木全体の最高重要度データが０でなければ、木内の全係数の全ビットプレーンについてカレント係数のビットを符号化するための手段、ここでカレント係数はデータを含んでいる最初のビットプレーンから始まる木中の最初の非ｓｓ係数である；及び
木全体の最高重要度データが０でない場合に木内の全係数のカレント係数が０でないときに符号ビットを符号化するための手段を具備してなることを特徴とする前記（３２）の装置。
【００５２】
（４２）該低重要度データを符号化するための手段が：
ルックアヘッド区間の始まりならば各木の各係数に対するルックアヘッドを行うための手段；
ルックアヘッドが非アクティブならば各木の各係数のヘッド又はテールビットを符号化するための手段；及び
最初のオンビットが出現済みでかつルックアヘッドが非アクティブならば各木の各係数の符号ビットを符号化するための手段、を具備してなることを特徴とする前記（３２）の装置。
【００５３】
（４３）所定数の係数を調べるステップ；
該所定数の係数中の全てのヘッドビットが符号化されるまで、全てのヘッドビットを毎サイクル１つずつエントロピー符号化するステップ；
該所定数の係数の符号ビット及びテールビットを同じサイクルで符号化するステップを含んでなることを特徴とする情報のｍ項符号化の方法。
【００５４】
（４４）ＩＣチップとメモリとの間で画素データを転送するための画素データインターフェース；
該画素データインターフェースを介し、該メモリへ及び該メモリから情報を転送するための、該画素データインターフェースに接続された可逆ウェーブレット変換部；
該可逆ウェーブレット変換部より与えられたデータを符号化するためのコンテクストを提供するための、該可逆ウェーブレット変換部に接続されたコンテクストモデル；
該可逆ウェーブレット変換部によって生成された係数を、該コンテクストモデルによって提供されたコンテクストに基づいて符号化するための符号化器を具備してなる集積回路（ＩＣ）。
【００５５】
（４５）該可逆ウェーブレット変換部から該メモリへ係数を符号化することなく転送するために接続された係数データインターフェースをさらに具備することを特徴とする前記（４４）の集積回路。
【００５６】
（４６）該係数データインターフェースが係数を該メモリから該コンテクストモデルへ符号化のために転送することを特徴とする前記（４４）の集積回路。
【００５７】
（４７）エントロピー符号化データをメモリへ供給するための符号化データインターフェースをさらに具備することを特徴とする前記（４４）の集積回路。
【００５８】
（４８）符号化データを復号化するための復号化器をさらに具備することを特徴とする前記（４７）の集積回路。
【００５９】
（４９）復号化器にエントロピー符号化データを復号化するため与える符号化データインターフェースをさらに具備することを特徴とする前記４８の集積回路。
【００６０】
（５０）可逆色空間変換を行うために該画素データインターフェースと該可逆ウェーブレット変換部の間に接続された可逆色空間変換器をさらに具備することを特徴とする前記（４４）の集積回路。
【００６１】
（５１）符号化データを受け取り、該符号化データを確率予測値に基づいて復号化するために接続され、カレントラインから復号化されたビットを生成する少なくとも１つのビットジェネレータ；
該カレントラインから復号化されたビットに基づいて確率予測値を提供するために該少なくとも１つのビットジェネレータに接続された確率予測マシン；
部分コンテクストアドレスに基づいて複数のコンテクストを該確率予測マシンに与えるために該確率予測マシンに接続されたコンテクストモデルを具備してなり、該確率予測マシンが該復号化ビットに基づいて該複数のコンテクストからコンテクストを選択することを特徴とする、符号化データを復号化するための復号化装置。
【００６２】
（５２）既に読み出されていて、したがってそのデータが該確率予測マシン内で利用可能であるアドレスを検出するため該確率予測マシンに接続された同一アドレス指示手段をさらに具備し、該同一アドレス指示手段はアドレッシングされる部分コンテクストに基づいてデータが該確率予測マシン内に既に存在することの指示を、該確率予測マシンに対し発生することを特徴とする前記（５１）の復号化装置。
【００６３】
（５３）該部分コンテクストアドレスを提供するために該コンテクストモデルに接続された複数のシフトレジスタをさらに具備することを特徴とする前記（５１）の復号化装置。
【００６４】
（５４）複数の上ラインを与えるために接続されたラインバッファをさらに具備することを特徴とする前記（５１）の復号化装置。
【００６５】
（５５）低重要度データと最高重要度データを受け取り、どのビットプレーンがデータを含んでいるか判定するために接続され、該低重要度データの処理時に使用される符号化単位全体の最初のオンビットを持つビットプレーンの指示を生成する先頭ビットプレーンユニット；
低重要度データと最高重要度データを受け取り、該低重要度データのための指示情報を生成するため接続された比較メカニズム；
符号ビット、最高重要度データ、及びデータを持つ最初のビットプレーンの指示を受け取るために接続され、条件付け情報を提供するため係数を遅延させるメモリ；
符号ビットのためのコンテクストを提供するため該メモリに接続された第１のコンテクストモデル；
ヘッドビットのためのコンテクストを提供するため該メモリ及び該最高重要度データに接続された第２のコンテクストモデル；
テールビットのためのコンテクストを提供するため該メモリ及び該最高重要度データに接続された第３のコンテクストモデルを具備してなることを特徴とするコンテクストモデル装置。
【００６６】
（５６）入力データを最高重要度データと低重要度データとに分けるための分割メカニズムをさらに具備することを特徴とする前記（５５）のコンテクストモデル装置。
【００６７】
（５７）該分割メカニズムがバレルシフタからなることを特徴とする前記（５６）のコンテクストモデル装置。
【００６８】
（５８）該バレルシフタが量子化レベルに基づいてデータをシフトすることを特徴とする前記（５７）のコンテクストモデル装置。
【００６９】
（５９）該比較メカニズムが：
最高重要度データが０であるか判定することによりテールビットが既に出現したことを表示するためのもので、その出力がテールオンビットであるところの第１の比較ユニット；
最高重要度データが１であるか判定するものであって、該最高重要度データが１である時に、その出力が０である第２の比較ユニット；及び
該第２の比較ユニットの出力及び符号ビットを受け取って、セレクト入力が第１の状態のときに第１のテールビットを出力し、セレクト入力が第２の状態のときに符号を出力するために接続されたマルチプレクサを具備してなることを特徴とする前記（５５）のコンテクストモデル装置。
【００７０】
（６０）該セレクト入力は該第１の比較ユニットのテールオン出力からなることを特徴とする前記（５８）のコンテクストモデル装置。
【００７１】
（６１）該第１と第２の比較ユニット中の少なくとも１つはビット比較器からなることを特徴とする前記（５８）のコンテクストモデル装置。
【００７２】
（６２）該先頭ビットプレーンユニットが：
係数とフィードバックを受け取るように接続されたＯＲゲート；
該ＯＲゲートの出力を受け取るために接続されたレジスタ；及び
該レジスタの出力を受け取り、１を持つ係数の最初のビットプレーンを指示するために接続されたプライオリティエンコーダを具備してなることを特徴とする前記（５５）のコンテクストモデル装置。
【００７３】
（６３）該レジスタが、その内容を符号化単位の始まりでリセットするためのリセット入力を有することを特徴とする前記（６２）のコンテクストモデル装置。
【００７４】
（６４）該リセット入力が各木の始まりでも該レジスタの内容をリセットすることを特徴とする前記（６３）のコンテクストモデル装置。
【００７５】
（６５）符号化レートを確認するため符号語の平均長を測定するステップ；
及び所要の圧縮量に基づいて圧縮レートを調整するステップを含んでなる圧縮実行のための方法。
【００７６】
（６６）該符号化レートが圧縮が第１の要求レベルより下であることを示すときに量子化量を増加させるステップ；及び
該符号化レートが圧縮が第２の要求レベルより上であることを示すときに量子化量を減少させるステップをさらに含むことを特徴とする前記（６５）の方法。
【００７７】
（６７）該第１と第２の要求レベルが同一でないことを特徴とする前記（６６）の方法。
【００７８】
（６８）符号語の平均長を測定するステップがビット生成の後で行われることを特徴とする前記（６５）の方法。
【００７９】
（６９）新たな圧縮レートを復号化器へ通知するステップをさらに含むことを特徴とする前記（６５）の方法。
【００８０】
（７０）該通知が明示的であることを特徴とする前記（６９）の方法。
【００８１】
（７１）該通知が暗黙的であることを特徴とする前記（６９）の方法。
【００８２】
（７２）コンテクストモデル；
該コンテクストモデルに接続された確率予測マシン；
該確率予測マシンに接続されたビットジェネレータ；及び
平均符号語長を測定することによって符号化レートを制御するための、該ビットジェネレータに接続された符号化器レート制御手段を具備してなるシステム。
【００８３】
（７３）該符号化器レート制御手段が量子化を調整することを特徴とする前記
（７２）のシステム。
【００８４】
（７４）新たな量子化レベルに関し復号化器に通知するためのシグナリングブロックをさらに具備することを特徴とする前記（７２）のシステム。
【００８５】
（７５）該符号化器の圧縮データストリーム出力に対するヘッダデータを生成するためのシグナリングブロックをさらに具備し、該ヘッダデータが新たな量子化レベルを復号化器に対し指示するため該圧縮データストリームに連結されることを特徴とする前記（７２）のシステム。
【００８６】
（７６）該符号化器レート制御手段が、該量子化レベルが該復号化器で後に使用するため必要である旨の指示を記憶することを特徴とする前記（７２）のシステム。
【００８７】
（７７）変換係数の集合のデータビットプレーンの最低重要度部分を処理する方法であって：
メモリから第１の量のデータを読み出すステップ；
該変換係数の集合の下位のビットプレーン中のデータの少ない変換されたビットプレーンを補うため、該第１の量のデータの読み出しと同時に該第１の量のデータより大きな第２の量のデータをメモリに書き込むステップを含んでなる方法。
【００８８】
（７８）最低重要度部分係数を記憶するために必要とされるビットが、ビットプレーン数が減少するにつれ増加することを特徴とする前記（７７）の方法。
【発明の効果】
【００８９】
本発明によれば、高速なロッシー／ロスレス圧縮が可能になり、また、圧縮／伸長システムに安価なハードディスクを使用可能となり、また、速度をハードディスクにマッチングさせ、かつ、圧縮を利用してハードディスクをプリントエンジンなどのシステムの他の部分の帯域幅にマッチングさせることが可能になる等々の多くの効果を得られる。
【発明を実施するための最良の形態】
【００９０】
圧縮及び伸長のための方法及び装置について述べる。以下の説明において、遅延の種類、ビットレート、フィルタの種類等々の様々な具体例が示される。しかし、当業者には、そのような具体例によらずに本発明を実施し得ることが明白になろう。他方、本発明をいたずらに難解にしないため、周知の構造及びデバイスはブロック図の形式で表し、詳しくは示さない。
【００９１】
以下の詳細説明のかなりの部分は、コンピュータメモリ内のデータビットに対する演算のアルゴリズム及び記号表現によって与えられる。このようなアルゴリズム記述及び表現は、データ処理技術分野の当業者によって、その研究の内容を他の当業者に対し最も効率的に伝えるために用いられる手段である。あるアルゴリズムがあり、それが概して、希望する結果に至る自己矛盾のないステップ系列だと考えられるとしよう。これらのステップは、物理量の物理的処理を必要とするものである。必ずという訳ではないが、これらの物理量は記憶、転送、結合、比較、その他処理が可能な電気的または磁気的信号の形をとるのが普通である。これらの信号をビット、値、要素、記号、文字、用語、数値等で表わすのが、主に慣用上の理由から、時に都合がよいことが分かっている。
【００９２】
しかしながら、このような用語や同様の用語は、適切な物理量と関係付けられるべきであり、また、これら物理量につけた便宜上のラベルに過ぎないということに留意すべきである。以下の説明から明らかなように、特に断わらない限り、「処理」「演算」「計算」「判定」「表示」等々の用語を用いて論じることは、コンピュータシステムのレジスタ及びメモリの内部の物理的（電子的）な量として表現されたデータを処理して、コンピュータシステムのメモリまたはレジスタ、同様の情報記憶装置、情報伝送装置あるいは表示装置の内部の同様に物理量として表現された他のデータへ変換する、コンピュータシステムあるいは同様の電子演算装置の作用及びプロセスを指すものである。
【００９３】
本発明はまた、本明細書に述べる操作を実行するための装置にも関係する。この装置は、要求目的のために専用に作られてもよいし、あるいは、汎用コンピュータを内蔵プログラムにより選択的に駆動または再構成したものでもよい。そのようなプログラムは、それに限定されないが、コンピュータのシステムバスにそれぞれ接続されたフロッピーディスク、光ディスク、ＣＤ−ＲＯＭ、光磁気ディスク、リードオンリーメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気カード又は光カード、あるいは電子的命令の格納に適したその他の媒体など、コンピュータの読み出し可能な記憶媒体に格納してよい。本明細書に提示されるアルゴリズム及び表示は、本質的に、どのような特定のコンピュータ、その他装置とも関わりがない。様々な汎用マシンを本明細書に述べたところに従ったプログラムと一緒に利用してよいが、必要とされる方法のステップの実行のためのより特化した装置を作るほうが好都合であるかもしれない。これら多様なマシンに要求される構造は以下の説明より明らかになろう。さらに、いかなる特定のプログラミング言語とも関連付けることなく本発明を説明する。本明細書において述べるように、本発明を実現するために多様なプログラミング言語を使用し得ることが理解されよう。
【００９４】
下記用語が以下の説明に用いられる。これら各種用語にはすでに語義がある。しかし、規定された語義は、それら用語が当該分野において知られている範囲に限定して考えられるべきでない。これら語義は、本発明の理解を手助けするために規定されたものである。
【００９５】
ＡＢＳ符号化：
ビット生成のための単純なコード（例えばランコード）と使用符号語に基づく確率予測（例えばテーブルを用いる確率予測）を利用する並列エントロピー符号化法。一実施例にあっては、ＡＢＳ符号化は数個のコーダからのストリームのマルチプレキシング及びデマルチプレキシングのための方法も含む。
【００９６】
桁揃え（alignment）：
ある周波数帯域内の変換係数の、他の周波数帯域に対するシフト度合。
【００９７】
算術符号化：
有限精度演算によるShannon/Elias符号化、バイナリ・エントロピーコーダに限らない。
【００９８】
Ｂ符号化：
圧縮のために有限状態マシンを利用するバイナリ・エントロピーコーダ。Huffman符号化と違って、有限状態マシンの利用がバイナリ・シンボルをうまく処理し、ある範囲の入力確率に対して有効である。
【００９９】
バイナリ・エントロピーコーダ：
最高確率シンボル（ｍｐｓ）及び最低確率シンボル（ｌｐｓ）として表現されることの多いバイナリ(yes/no)デシジョンに基づいて動作するノイズレスのコーダ。
【０１００】
バイナリ方式：
画素のエッジ−フィル(edge-fill)Ｇｒａｙエンコーディングと特殊なコンテクストモデルを用いる符号化方式。
【０１０１】
バイナリ方式コンテクストモデル：
２値及び階調数が少ない画像データのためのコンテクストモデル。
【０１０２】
ビット・シグニフィカンス（bit-significance)：
符号（sign）絶対値表現に似た数表現で、ヘッド(head)ビットの後に符号(sign)ビットが続き、さらに、テール(tail)ビットがあれば、その後に続く。埋め込み(embedding)は、この数表現に対しビットプレーン順に符号化する。
【０１０３】
子ベース(child-based)順：
２次元画像のスキャン順。ラスタ順に似ているが、２×２ブロック単位で動作する。ある「親」周波数帯域をラスタ順にスキャンすることを考える。各係数は４個の子を持っているであろう。これらの子は、左上のものから始めて右上、左下、右下と順序付けられ、その後に次の親と次の４つの子の組が続き、以下同様にラインの終わりまで続く。そして処理は次の２ラインに戻り、最終的に右下コーナーで終わる。どのラインもスキップされない。子ベース順は２×２ブロック順とも呼ばれる。
【０１０４】
係数：
変換後の成分。
【０１０５】
成分：
画像の構成要素。成分が画素を構成する。例えば、赤、緑、青の帯域は成分帯域である。個々の画素は赤、緑、青の成分から構成される。成分と成分帯域に、画像への空間写像を持つ任意の種類の情報を含めることができる。
【０１０６】
コンテクストモデル：
符号化しようとするカレント・ビットに関し因果的に利用できる情報で、カレント・ビットに関する過去に学習した情報を提供してエントロピー符号化のための条件付確率予測を可能にする。２値画像において、ある画素のための１つの可能なコンテクストは、同じラインの先行２画素と前ラインの３画素である。
【０１０７】
分割レベル：
ウェーブレット分割ピラミッド内の位置。解像度と直接関係がある。
【０１０８】
効率変換：
係数への最高のエネルギー集中を達成すると同時に最小のビット数を用いてそれら係数を表現する変換。
【０１０９】
埋め込みコンテクストモデル：
コンテクストビンと結果の重要度レベルへの分割を、重要な値が保存されれば効率的なロッシー圧縮が得られるように行うコンテクストモデル。
【０１１０】
順序付けによる埋め込み：
明示的な重要度のラベリングはないが、最も重要なデータが初めの部分にくるように圧縮データが順序付けされる、埋め込みコンテクストモデルの特殊ケース。
【０１１１】
埋め込み量子化：
コードストリームに包含される量子化。例えば、重要度レベルが最高のレベルから最低のレベルへと順に並べられているときには、コードストリームの単なる打ち切りによって量子化が行われる。タグ、マーカー、ポインタ、その他の信号によって同じ働きを得ることができる。復号化時には画像に対し多重量子化を行うことができるが、符号化時には単一の埋め込み量子化しか行うことができない。
【０１１２】
エントロピーコーダ：
カレント・ビットを、確率予測に基づいて符号化又は復号化する装置。本明細書では、エントロピーコーダは多重コンテクストバイナリコーダとも呼ばれることがある。カレント・ビットのコンテクストは何らかの選ばれた配置の「近傍」ビットであり、カレント・ビット（１ビットまたは複数ビット）の最適表現のための確率予測を可能にする。一実施例では、エントロピーコーダはバイナリコーダ、並列ランレングスコーダ、又はHuffmanコーダである。
【０１１３】
エントリー・ポイント：
既知の符号化状態で始まる符号化データ中のポイント。復号化器は、この点から、その前データを復号化することなく復号化を開始できる。これには、大抵の場合、コンテクストとバイナリ・エントロピーコーダを所期状態にリセットする必要がある。各符号化単位の符号化データはエントリーポイントから始まる。
【０１１４】
固定長：データの特定ブロックを圧縮データの特定ブロックへ変換する方式。例えばＢＴＣ（ブロック符号化）と、ＶＱ（ベクトル量子化）のいくつかの方式。固定長コードは固定レート・固定サイズのアプリケーションに適するが、レート・歪み性能は可変レート方式に比べ劣ることが多い。
【０１１５】
固定レート：
ある一定の画素レートを維持し、帯域幅の限定された通信路を持つアプリケーション又はシステム。一実施例においては、この目標を達成するため、全体的に平均した圧縮というより、局所的に平均した圧縮が達成される。例えば、ＭＰＥＧは固定レートを要求する。
【０１１６】
固定サイズ：
限られたサイズのバッファを持つアプリケーション又はシステム。一実施例では、この目標を達成するため全体的に平均した圧縮がなされる。例えば、プリント・バッファ。（アプリケーションは、固定レートのことも、固定サイズのことも、その両方のこともある。）
周波数帯域：
各周波数帯域は、同じフィルタ処理系列によりもたらされる一群の係数を表す。
【０１１７】
ヘッド・ビット：
ビット・シグニフィカンス表現において、ヘッドビットとは、最上位ビッから最初の非ゼロのビットまでの、該最初の非ゼロビットを含めた絶対値ビットである。
【０１１８】
ハフマン(Huffman)コーダ：
一般に、各シンボルに対して整数個のビットを発生する固定長コーダ。
【０１１９】
重要度レベル：
埋め込みデータの１つのビットプレーン全体に対応する、圧縮される前の符号化データの単位。重要度レベルは、異なった係数周波数帯域からの適切なビットプレーン全てを含む。
【０１２０】
ＬＰＳ（最低確率シンボル）：
５０％未満の確率を持つバイナリデシジョンにおける事象(outcome)。
２つの事象が等確率の時にどちらがｍｐｓ又はｌｐｓに選ばれるかは符号化器と復号化器が同じ選定をするならば重要なことではない。
【０１２１】
ロスレス／ノイズレス／可逆符号化：
原データの完全な復元が可能な方法によるデータ圧縮。
【０１２２】
ロッシー符号化：
原データの完全な復元を保障しないデータ符号化。視覚的に不快であったり目立ったりしないように、原データから変化してもよい。多くの場合、固定レートが可能である。
【０１２３】
ＭＰＳ（最高確率シンボル）：
５０％を超える確率を持つバイナリデシジョンにおける事象。
【０１２４】
重複変換：
単一のソース標本点が同じ周波数の複数の係数に寄与する変換。その例に、多くのウェーブレット及び重複直交変換がある。
【０１２５】
親係数：カレントの係数又は画素と同じ画像空間をカバーする、すぐ上の階層レベルの係数又は画素。例えば図１において、１ＳＤ係数の親は２ＳＤ係数であり、これは３ＳＤ係数の親である。
【０１２６】
確率予測マシン／モジュール：
コンテクスト内での確率を追跡する、符号化システムの要素。
【０１２７】
プログレッシブ画素深度：
フル解像度のデータのビットプレーンが浅いほうから深いほうへ順序付けられたコードストリーム。
【０１２８】
プログレッシブ・ピラミッド：
解像度が下がる毎に各次元が２分の１（面積では４分の１）になる解像度成分の系列。
【０１２９】
Ｑコーダ：
乗算が加算によって置き換えられ、確率が離散値に限定され、確率予測値がビット出力時に更新されるバイナリ算術コーダ。
【０１３０】
ラスター順：
２次元画像のスキャン順。左上コーナーからスタートして左から右へ移動し、それから次ラインの左端に戻り、最終的に右下コーナーで終了する。どのラインもスキップされない。
【０１３１】
可逆変換：
一実施例では、圧縮結果を原データに復元可能な、整数演算により実現される効率変換。
【０１３２】
テールビット（又はテール）：
ビット・シグニフィカンス表現で、テール(tail)ビットとは最上位の非ゼロのビットより下位の絶対値ビットである。
【０１３３】
タイル（tile）データセグメント：
一つの符号化単位を完全に記述するコードストリームの部分。
【０１３４】
ＴＳ変換：
２・６（Ｔｗｏ−Ｓｉｘ）変換。２タップ・ローパス分析フィルタと６タップ・ハイパス分析フィルタからなる特殊な可逆ウェーブレットフィルタ対。合成フィルタは、分析フィルタのクァドレチャーミラー(quadrature  mirror)フィルタである。
【０１３５】
ＴＴ変換：
２・１０（Two-Ten）変換。２タップ・ローパス分析フィルタと１０タップ・ハイパス分析フィルタからなる特殊な可逆ウェーブレットフィルタ対。合成フィルタは分析フィルタのクァドレチャー・ミラー・フィルタである。
【０１３６】
統合型（unified）ロスレス／ロッシー：
同じ圧縮システムが、ロスレス復元又はロッシー復元が可能なコードストリームを提供する。本発明の一実施例では、このコードストリームは復号化器に対する設定情報も指令もなくてよい。
【０１３７】
ウェーブレット・フィルタ：
ウェーブレット変換に使われるハイパスとローパスの合成フィルタ及び分析フィルタ。
【０１３８】
ウェーブレット変換：
「周波数」及び「時間（又は空間）」の両方の領域の拘束条件がある変換。一実施例では、ハイパスフィルタとローパスフィルタからなる変換である。結果として得られた係数は１／２に間引かれ（臨界フィルタ処理され）、それらフィルタがローパス係数にかけられる。
【０１３９】
ウェーブレット木：
最高レベルのウェーブレット分割のＳＳ部内の単一の係数と関係付けられた係数と画素。係数の個数はレベル数の関数である。図１は、１つのウェーブレット木に含まれる係数を示す。ウェーブレット木のスパンは、分割レベル数に依存する。例えば、ウェーブレット木のスパンは、１レベル分割では４画素、２レベル分割では１６画素、等々である。図５９に、１つのウェーブレット木に集約される画素の個数を様々なレベル数の場合について示す。２次元の場合、各ウェーブレット木はＳＤ，ＤＤ，ＤＳと呼ばれる３つの部分木からなる。
【０１４０】
＜概要＞
本発明は、符号化部及び復号化部を持つ圧縮／伸長システムを提供する。符号化部は入力データを符号化して圧縮データを生成する働きをし、他方、復号化部は既に符号化されたデータを復号化して元の入力データの再構成データを生成する働きをする。入力データとして、画像（静止画像あるいは動画像）、音声等々の様々な種類のデータがあり得る。一実施例では、データはデジタル信号データであるが、デジタル化したアナログデータ、テキストデータ形式、その他の形式も可能である。そのデータのソースは、例えば符号化部及び／又は復号化部のためのメモリまたは通信路である。
【０１４１】
本発明において、符号化部及び／又は復号化部の構成要素は、ハードウエアによって実現されてもよいし、あるいはコンピュータシステム上で利用されるようなソフトウエアによって実現されてもよい。本発明はロスレス圧縮／伸長システムを提供する。本発明は、ロッシー圧縮／伸長を実行するようにも構成できる。
【０１４２】
本発明のシステムは、可逆ウェーブレットによる高速のロッシー／ロスレス圧縮を用いるが、これについては後により詳しく説明する。このシステムは、例えばレーザープリンタのようなプリンタであるかもしれない。一実施例では、このプリンタは与えられたページの記憶に安価なハードディスクを用いることにより、必要とされる高価なランダムアクセスメモリ（ＲＡＭ）の量を大幅に削減する。そのハードディスク又は他の記憶装置の限定された帯域幅を、プリントエンジンに必要とされる、より大きな帯域幅に合わせるために圧縮が利用される。本発明の符号化技術はプリントエンジンの要求する高速、リアルタイム性を満たし、さらに本発明は、画像の特性及びハードディスクのバースト性に応じて、優れたロッシー圧縮又はロスレス圧縮のどちらも可能である。
【０１４３】
以下の詳細な説明において、可逆ウェーブレットによる圧縮の概要、圧縮フレーム記憶のアプリケーション、カラーレーザープリンタ、プリンタ・チップの実例について述べる。プリンタのレンダリング・エンジンはハードディスクを記憶に利用する。ハードディスクはプリント・エンジンより低速であるので、レートを整合させるため圧縮が利用される。ディスプレイリスト(display  list)技法も、レンダリング中に必要とされるメモリを減らすために利用してよい。ディスプレイリスト・ベースのレンダリングエンジンは、圧縮システムが画像のバンドを独立に処理することを許容する。なお、プリンタシステムに関連して本発明を説明するが、本発明は圧縮及び／又は伸長サブシステムを含む他のシステムにも適用可能である。
【０１４４】
また、埋め込み統合型ロスレス／ロッシー圧縮システムについても本明細書において述べる。システムの埋め込み特性は、品質をディスクの転送レートにより決定可能にする。圧縮が容易な画像（例えば、テキスト及び／又は線画からなる殆どの文書）の場合、ロスレス圧縮がなされる。圧縮しにくい画像（例えば、ノイズの多い自然画像及び／又は中間調のある文書）の場合、高品質のロッシー圧縮がなされる。
【０１４５】
カラー画像のロスレス圧縮と高品質ロッシー圧縮の両方をサポートするシステムに関する説明については、米国特許出願第08/642,518号（1996年５月３日受理、“Compression  and  Decompression  with  Wavelet  Style  and  Binary  Style  Including  Quantization  by  Device-Dependent  Parser”）、及び、米国特許出願第08/436,662(1995年５月８日受理、“Method  and  Apparatus  for  Reversible  Color  Conversion”)を参照されたい。
【０１４６】
＜可逆ウェーブレット＞
本発明は、可逆ウェーブレットによる圧縮を利用する。
【０１４７】
＜ウェーブレット分割＞
本発明は、初めに、可逆ウェーブレットを利用して、（画像データとしての）画像または他のデータ信号の分割を行う。本発明において、可逆ウェーブレット変換は、整数係数を持つ信号のロスレス復元が可能な完全再構成システムを整数演算で実現する。効率逆変換は、行列式が１（又はほぼ１）の変換行列を使用する可逆変換である。
【０１４８】
本発明は、可逆ウェーブレットを用いることにより、有限精度の演算でロスレス圧縮をすることが可能である。画像データに可逆ウェーブレット変換を適用することにより生成される結果は、係数の系列である。
【０１４９】
本発明の可逆ウェーブレット変換は、１組のフィルタを用いて実現できる。一実施例では、それらのフィルタは、本明細書においてＴＳ変換もしくは２・６変換と呼ばれる変換を行うための２タップ・ローパスフィルタと６タップ・ハイパスフィルタである。他の一実施例では、それらのフィルタは、本明細書においてＴＴ変換もしくは２・１０変換と呼ばれる変換を行うための２タップ・ローパスフィルタと１０タップ・ハイパスフィルタである。これらフィルタは、加減算（とハードワイヤのビットシフト）だけで実現することができる。
【０１５０】
ＴＴ変換には、ＴＳ変換に比べると、少なくとも１つの長所と、少なくとも１つの短所がある。長所は、ＴＴ変換がＴＳ変換よりも良好な圧縮が得られることである。ＴＴ変換の短所は、１０タップのフィルタが長い分、高いハードウェアコストを要することである。
【０１５１】
＜２次元ウェーブレット分割＞
本発明のローパスフィルタ及びハイパスフィルタを用いて、多重解像度分割が行なわれる。分割レベル数は可変であり任意数でよいが、現在のところ分割レベル数は２レベルから８レベルまでである。最大レベル数は、ｌｏｇ2（入力の長さ又は幅の最大値）である。
【０１５２】
画像のような２次元データに対し変換を行う最も普通のやり方は、１次元フィルタを別々に適用する方法、つまり、ラインに沿って適用し、次に列に沿って適用するという方法である。第１レベルの分割により４つの異なった帯域の係数が得られ、これらは本明細書ではＳＳ，ＤＳ，ＳＤ，ＤＤと呼ばれる。これら文字は、ロー（Ｌ）パスフィルタとハイ（Ｈ）パスフィルタにそれぞれ対応する前述のスムーズ(Ｓ)フィルタとディテール(Ｄ)フィルタを指す。したがって、ＳＳ帯域はライン方向及び列方向の両方のスムーズフィルタより得られた係数からなっている。
【０１５３】
ウェーブレット分割の各周波数部分帯域はさらに分割することができる。最も普通のやりかたはＳＳ部分帯域だけをさらに分割する方法であり、各分割レベルのＳＳ周波数部分帯域が生成された時にそれをさらに分割することになろう。このような多重分割はピラミッド分割と呼ばれる。記号ＳＳ，ＳＤ，ＤＳ，ＤＤと分割レベル番号によって各分割を表示する。
【０１５４】
なお、本発明のＴＳ変換、ＴＴ変換のいずれかを用いても、ピラミッド分割によって係数のサイズは増加しない。
【０１５５】
可逆ウェーブレット変換が再帰的に画像に適用される場合、第１レベルの分割は最も細かいディテールもしくは解像度に対し作用する。第１分割レベルで、画像は４つの部分画像（すなわち部分帯域）に分解される。各部分帯域は、１つの空間周波数帯域を表わしている。第１レベルの部分帯域は１ＳＳ，１ＳＤ，１ＤＳ，１ＤＤと表される。原画像を分割するプロセスに水平と垂直の両次元について１／２サブサンプリングが含まれるので、第１レベルの部分帯域１ＳＳ，１ＳＤ，１ＤＳ，１ＤＤはそれぞれ、入力が持っていた画像の画素（または係数）の１／４の個数の係数を持つ。
【０１５６】
部分帯域１ＳＳは、水平方向の低い周波数の情報と垂直方向の低い周波数の情報を同時に含んでいる。一般に、画像エネルギーの大部分は、この部分帯域に集中している。部分帯域１ＳＤは、水平方向の低い周波数の情報と垂直方向の高い周波数の情報（例えば水平方向エッジの情報）を含んでいる。部分帯域１ＤＳは、水平方向の高い周波数の情報と垂直方向の低い周波数の情報（例えば垂直方向エッジの情報）を含んでいる。部分帯域１ＤＤは、水平方向の高い周波数の情報と垂直方向の高い周波数の情報（例えばテクスチャ又は斜めエッジの情報）を含んでいる。
【０１５７】
この後に続く下位の第２、第３、第４分割レベルはそれぞれ、前レベルの低周波数ＳＳ部分帯域を分割することによって作られる。第１レベルの部分帯域１ＳＳが分割されて、やや精細な第２レベルの部分帯域２ＳＳ，２ＳＤ，２ＤＳ，２ＤＤが作られる。同様に、部分帯域２ＳＳが分割されて、精細度の粗い第３レベルの部分帯域３ＳＳ，３ＳＤ，３ＤＳ，３ＤＤが生成される。また、部分帯域３ＳＳが分割されることにより、精細度がより粗い第４レベルの部分帯域４ＳＳ，４ＳＤ，４ＤＳ，４ＤＤが作られる。１／２サブサンプリングにより、第２レベルの各部分帯域は原画像の１６分の１の大きさである。このレベルの各標本（つまり画素）は、原画像中の同一位置のやや細いディテールを表す。同様に、第３レベルの各部分帯域は、原画像の６４分の１の大きさである。このレベルでの各画素は、原画像中の同一位置のかなり粗いディテールを表す。また、第４レベルの各部分帯域は原画像の２５６分の１の大きさである。
【０１５８】
分割された画像はサブサンプリングのために原画像より大きさが小さいので、原画像の格納に使用されたメモリを、分割された部分帯域の全部の格納のために使用できる。つまり、３レベル分割の場合、原画像と分割部分帯域１ＳＳ，２ＳＳは捨てられてしまい、保存されない。
【０１５９】
４つの部分帯域分割レベルについて述べたが、個々のシステムの要求に応じて、それ以上のレベルを生成することも可能である。また、ＤＣＴのような他の変換又は一次元配置の部分帯域を用いて、異なった親子関係を定義してもよい。
【０１６０】
なお、本発明のウェーブレットフィルタによれば、ピラミッド分割は係数サイズを増加させない。
他の実施例においては、ＳＳのほかに他の部分帯域も分割されるかもしれない。
【０１６１】
＜ウェーブレットの木構造＞
ピラミッド分割のウェーブレット係数には自然で有用な木構造がある。部分帯域分割の結果は、最終の分割レベルに対応したただ一つのＳＳ周波数部分帯域である。これに対し、レベル数と同数のＳＤ，ＤＳ，ＤＤ帯域がある。この木構造により、ある周波数帯域内の係数の親は、それより低い解像度の同じ周波数帯域内の係数であり、かつ同じ空間位置関係にあることが明らかになる。
【０１６２】
本発明においては、各木は、ＳＳ係数と、３つの部分木すなわちＤＳ，ＳＤ，ＤＤの部分木からなる。本発明の処理は、普通、これら３つの部分木に対して行われる。各木のルートは、純粋に平滑な係数である。画像のような２次元信号の場合、３つの部分木があり、それぞれの部分木は４つの子を持つ。この木階層構造は２次元信号に限定されない。例えば、１次元信号の場合、各部分木は１つの子を持つ。これ以上の高い次元は、１次元の場合及び２次元の場合から導き出される。
【０１６３】
多重解像度分割のプロセスは、フィルタ系列を使って行うことができる。１次元の典型的フィルタを使って実現される２次元２レベル変換の例については、米国特許出願第08/498,695号（1995年６月30日受理、“Method  and  Apparatus  For  Compression  Using  Reversible  Wavelet  Transforms  and  an  Embedded  Codestream”）及び米国特許出願第08/498,036号（1995年６月30日受理、“Reversible  Wavelet  Transform  and  Embedded  Codestream  Manipulation”）を参照されたい。
【０１６４】
＜順ウェーブレット変換の実行＞
本発明では、２回の1-D演算によって、すなわち、まず水平方向の1-D演算を行い、次に垂直方向の1-D演算を行うことによって、ウェーブレット変換が実施される。一実施例においては、あるハードウェアで水平方向の演算を実行し、別のハードウェアで垂直方向の演算を実行する。
【０１６５】
レベル数で反復回数が決まる。一実施例では、水平方向と垂直方向の両方についてＴＴ変換を使って、４レベル分割が実行される。別の実施例では、ＴＴ変換に代えＴＳ変換を使って、４レベル分割が実行される。
【０１６６】
本発明の変換は、演算効率が非常に優れている。一実施例において、本発明は、必要とされるオンチップ及びオフチップのメモリの容量と帯域幅を減らすように、変換で行われる計算を順序付けする。
【０１６７】
＜変換のための計算順序とデータフロー＞
前述のように本発明においては、変換の計算のための基本単位はウェーブレット木である。４レベル変換の場合を考えると、各ウェーブレット木は１６×１６の画素ブロックである。１６×１６ブロックの画素（ＣＭＹＫ画像の場合は４成分全部）が本発明の変換部に入力され、係数生成のための可能な計算が全て実行される。（逆変換も同様であり、１６×１６の係数ブロックが入力され、可能な全ての計算が実行される）
本発明は重複変換を用いるため、先行の隣接木からの情報が記憶されて計算に利用される。カレントのウェーブレット木と先行隣接情報との間の境界は、本明細書ではシーム(seam)と呼ばれる。本発明の変換を実行するためにシームを越えて保存される情報については、後に詳述する。
【０１６８】
＜ウェーブレット木の順序付け＞
特定のアプリケーション（例えば印刷）の場合、本発明の符号化単位は幅が大きく長さが小さいため、変換を計算するためのウェーブレット木の順序付けが重要である。一実施例では、各符号化単位は４０９６×２５６画素からなる。
【０１６９】
以下の説明では、符号化単位はそれぞれ４０９６×２５６画素からなる。しかしながら、それ以外のサイズの符号化単位にも以下に述べる順序付けを適用可能であることに留意されたい。図２はラスタ順と同様の順序を示す。この順序を、本明細書では長シーム変換順と呼ぶ。図２において、太線はシームを越えて保存されるデータ量を示し、また、どの位のメモリ量が変換の計算に必要とされるかを示している。このデータは、水平方向変換の場合には１つのウェーブレット木に比例するが、垂直方向の変換の場合には画像の幅（本例では４０９６）に比例する。このデータのためのメモリ量では、外部メモリを使用する必要があるかもしれない。しかし、ラスタ順に近いため、逆変換期間に、ウェーブレット木の１つの水平行が画素へ変換されると直ちにデータを変換部から（例えば、プリンタのアプリケーションではプリンタへ）出力することができる。
【０１７０】
図３は別の順序を示すもので、この順序を本明細書では短シーム順と呼ぶ。シームのためのメモリ量は、水平方向の変換の場合には符号化単位の高さ（本例では２５６）に比例し、垂直方向の変換の場合には１つのウェーブレット木に比例する。この順序によれば必要なメモリ量が大幅に減少し、オンチップ記憶が可能になる。
【０１７１】
図４は、別の短シーム順を示す。メモリ量が２つのウェーブレット木に比例するという負担があるが、ラスタ順に処理される連続した画素の個数が増加する。この順序又はそれに類似した順序によって、シーム(seam)メモリのコストをほとんど増加させることなく、バンドバッファの高速ページモードＲＡＭ又はＥＤＯ(extended  data  out)ＲＡＭをより効率的に使用できる。この効率向上が得られるのは、殆どのメモリが隣接したメモリロケーションのアクセスのために最適化されているからである。したがって、シーム順により隣接メモリアクセスの使用が増加することで、メモリ使用効率の向上がもたらされる。
【０１７２】
＜１つのウェーブレット木を得るための計算＞
以下の式はＴＳ変換とＴＴ変換の両方を定義する。入力x(n)に対するローパスフィルタの出力であるスムーズ（smooth）信号s(n)と、ハイパスフィルタの出力であるディテール（detail）信号d(n)は次式のように計算される。
【０１７３】
【数１】
2007267384.tif 000003
【０１７４】
逆変換は次式で示される。
【０１７５】
【数２】
2007267384.tif 000004
【０１７６】
ただし、p(n)は次式により計算される。
【０１７７】
【数３】
2007267384.tif 000005
【０１７８】
ＴＳ変換とＴＴ変換はt(n)の定義が異なる。
【０１７９】
ＴＳ変換の場合は次のとおりである。
【０１８０】
【数４】
2007267384.tif 000006
【０１８１】
ＴＴ変換の場合は次のとおりである。
【０１８２】
【数５】
2007267384.tif 000007
【０１８３】
なお、以下の説明において、
【０１８４】
【数６】
2007267384.tif 000008
【０１８５】
は切り捨てて丸めること、つまり打ち切りを意味し、床関数と呼ばれることがある。
【０１８６】
＜ＴＳ変換＞
６タップ・フィルタと２タップ・フィルタを偶数位置に使用する結果、３つの情報を記憶しなければならない。６タップ・フィルタは２ディレーを必要とする。２タップ・フィルタは、その結果を６タップ・フィルタの結果に対し中心に置くことができるようにするために１ディレーを必要とする。具体的には、２つのs(・)値と、１つのｄ(・)値又はｄ(・)計算の部分結果を記憶する必要がある。これらの値のメモリは、フィルタ処理がシームを跨いでも跨がなくても、同じである。
【０１８７】
図５から図１２は、本発明のウェーブレット木に対し４レベル変換のためのＴＳ変換フィルタを適用する度に得られる結果を示すものである。これらの図において、ローパスフィルタの出力はスムーズ（smooth）の代わりに“s”と表示されており、ハイパスフィルタの出力はデイテール（detail）の代わりに“d”と表示されている。“B”は“d”の計算に用いられる中間値、すなわちx(2n)-x(2n+1)値を意味する。“B”値は順変換時に用いられ、逆変換の場合には、どの計算にも用いられない“d”値がその場所に格納される。記号“sd”は、ある係数が、水平方向のローパスフィルタをかけてから垂直方向のハイパスフィルタをかけた結果であることを示す。“ds”，“dd”，“ss”，“dB”，“sB”の意味も同様である。太線の四角は２５６個の入力画素に対応する。網掛けした“s”，“ds”，“ss”値は、前のウェーブレット木を使って計算され、カレントのウェーブレット木で用いるために記憶される。
【０１８８】
順変換の場合、レベル２，レベル３及びレベル４の変換の入力は前レベルで得られた“ss”係数である。“sd”，“ds”，“dd”係数は完成しているから、計算された時に出力可能である。逆変換は全ての計算を逆順に、すなわち、レベルを最初に第４レベル、次に第３レベル、第２レベル、最後に第１レベルの順に、方向を初めに垂直方向、次に水平方向の順にして行う。変換のパス内では、順変換と逆変換のデータフローは同一であり、計算が異なるだけである。
【０１８９】
＜ＴＳ変換のハードウェア＞
図１３は、１次元フィルタを実現するための順／逆フィルタユニットの一実施例のブロック図である。メモリと計算ユニットだけが示されており、ハードワイアド・シフトは示されていない。図１３において、フィルタユニット４０００は順変換及び逆変換の両方を処理する。他の実施例は順変換と逆変換のために別々のユニットを使用する。順変換の場合、サイズ“n”の入力が用いられ、“s”出力と“d”出力が生成される。逆変換の場合、“s”入力と“d”入力が使われ、別の出力が
生成される。
【０１９０】
加算器４００１は、ｎビットの入力を受け取り、それら入力を加算して出力x(2n+2)+x(2n+3)を出すように接続される。加算器４００２は一方のｎビット入力を他方のｎビット入力から減算し、x(2n+2)-x(2n+3)の値を出力する。加算器４００１，４００２の出力はマルチプレクサ（ｍｕｘ）４００３，４００４の一方の入力にそれぞれ接続される。ｍｕｘ４００３，４００４の他方の入力は、ｓ入力とｄ入力を受け取るようにそれぞれ接続されている。一実施例では、ｓ入力はｎビットであり、ｄ入力はｎビットより大きい。
【０１９１】
ｍｕｘ４００３，４００４の出力は、フィルタが順モードか逆モードかを指示する順／逆制御信号によって制御される。順モード、逆モードのいずれにおいても、ｍｕｘ４００３の出力はs(n+1)である。他方、ｍｕｘ４００４の出力は、順モードではp(n+1)であり、逆モードではd(n+1)である。ｍｕｘ４００３，４００４の出力は、ｍｕｘ４００６から出力されるs(n)のフィードバックとともにレジスタファイル４００５の入力と接続される。レジスタファイル４００５は１つのウェーブレットの長さ分の各成分のためのエントリーを持つ。データは通常、レジスタファイル４００５を通過する。空間位置に基づき、レジスタファイル４００５への入力は遅延されて出力される。アドレス入力がレジスタファイル４００５の出力を制御する。一実施例では、レジスタファイル４００５は、１バンクにつき１つのポートを持つ２つのメモリバンクからなり、２つのメモリバンクを交互にピンポン式にアクセスして使用される。
ｍｕｘ４００３の出力はフィルタユニットのｓ出力でもある。
【０１９２】
レジスタファイル４００５の出力は、シームバッファ入力４０２０の外部バッファデータとともにｍｕｘ４００６の入力に接続される。その出力４００６Ａは、ｍｕｘ４００３の出力が２回遅延されたs(n-1)である。出力４００６Ｂは、s(n+1)を１回遅延されたs(n)である。出力４００６Ｃは、順変換のときはp(n)であり、逆変換のときはd(n)である。ｍｕｘ４００６はまた、外部にバッファされるシーム(seam)データをシームバッファ出力４０２１に出力するように制御される。出力４００６Ｃは、加算器４００８，４００９の一方の入力に接続される。加算器４００８，４００９の他方の入力はｍｕｘ４０１５の出力である。ｍｕｘ４０１５は境界条件を処理する。境界上では、ｍｕｘ４０１５は、その入力の一方に布線された０を出力する。実施例によっては、布線の０は別の値を使うように変更されるかもしれない。非境界の条件では、加算器４００７により一方の入力s(n+1)から他方の入力s(n-1)を減算することによって出力されるt(n)をｍｕｘ４０１５は出力する。
【０１９３】
加算器４００８は、ｍｕｘ４００６の出力４００６Ｃとｍｕｘ４０１５の出力を加算し、フィルタユニットのｄ出力を発生する。
加算器４００９は、ｍｕｘ４０１５の出力からｍｕｘ４００６の出力４００６Ｃを減算する。加算器４００９の出力はｍｕｘ４００６の出力４００６Ｂのs(n)と加算器４０１０によって加算され、フィルタユニットのｎビット出力が生成される。加算器４００９の出力はまた、加算器４０１１によってｍｕｘ４００６の出力４００６Ｂであるs(n)から減算され、加算器４０１１はフィルタユニットの他方のｎビット出力を逆向きに出力する。
【０１９４】
１つのウェーブレット木より長いシームの場合には、シームデータは、レジスタファイル４００５ではなく、オンチップのスタティックＲＡＭ（ＳＲＡＭ）又は外部メモリに格納されるかもしれない。ｍｕｘ４００６は、このような付加的なシームメモリに対するアクセスを提供する。
【０１９５】
フィルタユニット４０００のハードウェアコストの大部分は、レジスタファイル４００５によるものである。全体の必要メモリ量はフィルタユニットの個数によって決まる。一実施例では、３つの値（s,s,d又はss,ss,sd)を記憶するために合計６０ロケーションが必要とされる。それより多数のフィルタユニットが使用される時には、それぞれのフィルタユニットのための必要メモリは、それより少ない。したがって、多数のフィルタユニットを使用するハードウェアコストは低い。
【０１９６】
高速の逆変換は、復号化の終了と印刷のようなデータ出力動作の開始との間の遅れ時間の短縮を可能にする。これは、伸長のために必要な作業域メモリを減少させ、より大きな符号化単位を可能にする。高速の順変換は、より大きな帯域幅を使用可能な時にフィルタがデータのバーストを処理できるようにし、したがって、ルックアヘッドによってコンテクストモデルがデータを素早く処理できる時には、変換がより多くのデータをコンテクストモデルに供給することを可能にする。符号化期間に順変換がコンテクストモデルに追従できないと、符号化中のディスクの帯域幅が無駄になり、印刷の開始時間を遅らせる。また、多数のフィルタを備えることにより、制御及びデータフローを単純化できる。
【０１９７】
図１４は本発明による第１レベル順変換の一実施例のブロック図である。図１４において、図１３で説明したような２つのフィルタユニット４０１，４０２は、変換の第１レベルを実行する。フィルタユニット４０１はレベル１の水平変換を行い、フィルタユニット４０２はレベル１の垂直変換を行う。一実施例では、第１レベル変換は入力の２×２ブロックを処理する。４つのレジスタ４０３〜４０６はフィルタユニット４０１の出力を遅延させるためのディレーユニットとして働く。これは子ベース順と呼ばれる。レジスタ４０３はフィルタユニット４０１のｓ出力を受け取り、レジスタ４０４，４０５はｄ出力を受け取る。レジスタ４０４の出力はレジスタ４０６の入力に接続される。レジスタ４０３，４０６の出力はｍｕｘ４０７の入力に接続され、フィルタユニット４０１のｓ出力とレジスタ４０５の出力はｍｕｘ４０８の入力に接続される。２つのｍｕｘ４０７，４０８は、フィルタユニット４０１から出力された係数を遅延したものからフィルタユニット４０２の入力を選択する。
【０１９８】
フィルタユニット４０１は、２つの垂直方向に隣接した入力対を連続的に処理して４つの係数を生成し、これら係数は各成分毎にレジスタ４０３〜４０６によって適切に遅延されてフィルタユニット４０２に入力することができる。４つの結果のうちの３つは直ちに出力することができるが、“ss”出力はさらに処理される。
【０１９９】
第１レベル順変換は２×２配置の４画素のグループを処理する。説明のため、第１行に画素ａ，ｂがあり、第２行に画素ｃ，ｄがあるとする。図１４の第１レベル変換の動作は次のとおりである。最初のサイクルで、フィルタユニット４０１によって水平変換が画素ａ，ｂに施される。フィルタユニット４０１はＳab，Ｄabを生成し、Ｓabはレジスタ４０３に格納され、Ｄabはレジスタ４０４，４０５に格納される。次のサイクルで、画素ｃ，ｄがフィルタユニット４０１によって水平処理が行われ。このフィルタユニット４０１を適用した結果、ＳcdとＤcdが生成され、Ｓcdはレジスタ４０３に、Ｄcdはレジスタ４０４，４０５に格納される。このサイクルで、レジスタ４０３からのＳabとレジスタ４０５からのＳcdをフィルタユニット４０２が処理して変換の垂直パスを実行し、ＳＳとＳＤを生成する。また、この第２サイクル期間中に、値Ｄabはレジスタ４０４からレジスタ４０６へ移動する。次のサイクルで、レジスタ４０６からの値Ｄabとレジスタ４０５からの値Ｄcdがフィルタユニット４０２により処理され、フィルタユニット４０２は出力ＤＳ，ＤＤを生成する。同じサイクル中に、フィルタユニット４０１は次の２×２ブロックのａ，ｂ画素を処理する。
【０２００】
図１５は、本発明による順変換の一実施例のブロック図である。図１５において、レベル１変換部５０２はレベル１変換を実行する。一実施例では、レベル１変換部５０２は図１４のレベル１変換部からなる。フィルタユニット５０５は変換のレベル２，３，４を処理する。メモリ５０３は“ss”係数を、変換を実行するために必要なだけの係数が得られるまで記憶する。記憶する必要がある係数の個数を図６０に示す。（各ロケーションは各成分の１つの係数を格納する）
順序ユニット５０４は、適切な入力をフィルタユニット５０５にマルチプレクスする。入力バッファ５０１と出力バッファ５０６は、この変換部に要求される転送順序とバンドバッファ又はコンテクストモデルに要求される順序との間の整合をとるために必要であろう。
【０２０１】
逆変換の場合、データフローが逆にされ、レベル４逆変換が行われたのちにレベル３、レベル２、レベル１の変換が順に行われる。レベル２変換の出力は第１レベル変換ハードウェアであるレベルレベル１変換部５０２へ入力される。また、垂直フィルタ処理が水平フィルタ処理の前に行われる。水平フィルタ処理と垂直フィルタ処理は一方がシーム用の付加的メモリに対するアクセスを必要とする以外は同じであるから、少量のマルチプレキシングによってデータフローを逆にすることが可能である。逆変換の前に、２バイト係数を、２つの信号用ビットを持つ埋め込み形式から普通の２の補数の数値へ変換する必要がある。
図１４及び図１５に示した要素は、ＴＴ変換の場合にも同様に使用できる。
【０２０２】
＜変換タイミング＞
図１５の順変換部の変換タイミングは、個々のフィルタユニットのタイミングがベースになる。第１のフィルタユニットすなわちフィルタユニット４０１は水平方向レベル１変換を計算し、第２のフィルタユニットすなわちフィルタユニット４０２は垂直方向レベル１変換を計算する。第３のフィルタユニットすなわちフィルタユニット５０５はレベル２〜４の変換を計算し、又は遊休状態である。
【０２０３】
一実施例では、第３のフィルタユニット（５０５）は、遊休状態でなければ、偶数クロックサイクル期間中に水平変換を計算し、奇数クロックサイクル期間中に垂直変換を計算する。逆変換のためのタイミングも同様である（ただし逆になる）。
【０２０４】
以下に述べる例では、ウェーブレット木内の２×２ブロックは、ラスタ順の転置順に処理される。なお、ウェーブレット木内の２×２ブロックがラスタ順に処理されるならば、高速ページモードＤＲＡＭ／ＥＤＯ(extended  data  out)ＤＲＡＭをサポートするために必要とされる入／出力（Ｉ／Ｏ）バッファリングがもっと少なくなるかもしれない。
【０２０５】
図１６は、係数が出力される時のタイミング図である。以下のタイミングは画素毎のタイミングである。１画素あたり４つの成分がある。
【０２０６】
時刻０から開始  do：
for
(x+0;x<16/2;y++)
for(y=0;y<16;y++)
(x,y)にレベル１水平フィルタを適用
時刻１から開始  do:
for(x=0;y<16/2;y++)/
for(y=0;y<16/2;y++)
for(xx=-1;xx<1;xx++)  /*  0=smmoth,-1=previous  detail  */
(2*x+xx,y)にレベル１垂直フィルタを適用
for(x=0;x<8/2;x++)
時刻18+x*32から開始、偶数時刻にdo:
for(y=0;y<8;y++)
(x,y)にレベル２水平フィルタを適用
for(x=0;x<8/2;x++)
時刻21+x*32から開始、奇数時刻にdo:
for(y=0;y<8/2;y++)
for(xx=-1;xx<1;xx++)  /*  0=smooth,-1=previous  detail  */
(2*x+xx,y)にレベル２垂直フィルタを適用
for(x=0;x<4/2;x++)
時刻66+x*64から開始、偶数時刻にdo:
for(y=0;y<4;y++)
(x,y)にレベル３水平フィルタを適用
for(x=0;x<4/2;x++)
時刻69+x*64から開始、奇数時刻にdo:
for(y=0;y<4/2;y++)
for(xx=-1;xx<1;xx++)  /*  0=smooth,-1=previous  detail*/
(2*x+xx,y)にレベル３垂直フィルタを適用
時刻138に
(0,0)にレベル４水平フィルタを適用
時刻140に
(0,1)にレベル４水平フィルタを適用
時刻141に
(0,0)にレベル４垂直フィルタを適用  /*  smooth  */
時刻143に
(-1,0)にレベル４垂直フィルタを適用  /*  previous  detail  */
【０２０７】
＜ＴＴ変換＞
図１７から図２４はＴＴ変換の各１次元フィルタ処理の結果（出力）を示す。太線の長方形は、現在処理されている入力画素に対応する１つのウェーブレット木内の係数を示し、網掛けしたものは記憶されている前ウェーブレット木からの係数を示す。“B”と記された値は記憶される中間結果である（また、隣接標本間の差分である）。ＴＴ変換はＴＳ変換と似ているが、もっと多くのメモリを必要とする。
【０２０８】
図２５は、１０タップの順／逆フィルタユニットのブロック図である。なお、ハードワイアド・シフト(hardwired  shfts)と丸めオフセット(rounding  offsets)は煩雑さを避けるため示されていない。図２５中のｍｕｘ８０６を変換境界でのミラー処理のためにも使用できることに注意されたい。ミラー処理を１回行うために、重複ユニットの“d”入力のゼロイング(zeroing)とs(n+2)入力のマルチプレキシングも行う必要がある。
【０２０９】
図２５において、加算器８０１，８０２は、フィルタユニットの順パス期間中に２ｎビット入力を受け取るように接続される。加算器８０１は２ｎビット入力を加算して値を出力し、この値はｍｕｘ８０３の一方の入力に与えられる。加算器８０２は一方の入力を他方の入力から減算し、ｍｕｘ８０４の一方の入力への出力を発生する。ｍｕｘ８０３，８０４はまた、フィルタユニットの逆モード動作のためにｓ，ｄ入力をれぞれ受け取るように接続される。ｍｕｘ８０３の出力はｎビット入力で、これはs(n+2)であり、ｍｕｘ８０４の出力はn+1ビット入力で、これは順パスのp(n+2)、逆パスのd(n+2)である。
【０２１０】
ｍｕｘ８０３，８０４の出力はメモリ８０５の入力に接続される。メモリ８０５の入力には、ｍｕｘ８０６の出力８０６Ａ，８０６Ｄ〜８０６Ｆも接続されるる。メモリ８０５は、その入力を空間配置に基づいて遅延させて出力に出す。一実施例では、メモリ８０５はレジスタファイル、又は、２つのバンクを有しかつ１バンクあたり１つのポートを持ちピンポン式に動作させられるＳＲＡＭから構成される。メモリ８０５の入力には、ｍｕｘ８０６へ送出される出力を制御するためにアドレスが入力される。一実施例では、このアドレスは１成分あたり１６又は２８ロケーションを格納する。
【０２１１】
メモリ８０５の出力は、シームバッファ入力８０２より受け取る外部バッファデータとともにｍｕｘ８０６の入力に接続される。ｍｕｘ８０６の出力８０６Ａは、s(n+1)、すなわちｍｕｘ８０３の出力のs(n+2)を１回遅延（シングルディレー）させたものである。ｍｕｘ８０６の出力８０６Ｂは、s(n)すなわちｍｕｘ８０３の出力を２回遅延（ダブルディレー）させたものである。ｍｕｘ８０６の出力８０６Ｃは、順パスではp(n)すなわちｍｕｘ８０６の出力を２回遅延させたものであり、逆パスではd(n)すなわちｍｕｘ８０４の出力を２回遅延させたものである。ｍｕｘ８０６の出力８０６Ｅは、s(n-1)すなわちｍｕｘ８０３の出力を３回遅延させたものである。最後に、出力８０６Ｆは、順パスではp(n+1)、すなわちｍｕｘ８０４の出力を１回遅延させたものであり、逆パスではd(n+1)すなわちｍｕｘ８０４の出力を１回遅延させたものである。
【０２１２】
重複ユニット８０７は、ｍｕｘ８０３の出力並びにｍｕｘ８０６の出力８０６Ａ，８０６Ｄ，８０６Ｅを受け取るように接続される。重複ユニット８０７は、その入力に応答してt(n)を発生する。重複ユニットの一実施例を図２６に示す。
【０２１３】
重複ユニット８０７の出力t(n)は加算器８０８，８０９に接続される。加算器８０８はt(n)をｍｕｘ８０６の出力８０６Ｃと加算し、フィルタユニットのＤ出力を生成する。加算器８０９は、ｍｕｘ８０６の出力８０６Ｃをt(n)から減算する。加算器８０９の出力は加算器８１０，８１１の各入力に接続される。加算器８１０は、加算器８０９の出力とｍｕｘ８０６の出力８０６Ｂを加算し、逆フィルタユニットとして動作時のフィルタユニットのｎビット出力の１つを発生する。加算器８１１は、加算器８０９の出力をｍｕｘ８０６の出力８０６Ｂから減算し、逆フィルタとして動作時のフィルタユニットの他方の出力を生成する。
【０２１４】
図２６は、図２５の順／逆フィルタのための重複ユニットの一実施例のブロック図である。図２６において、この重複ユニットは加算器９０１〜９０６、乗算器９０７〜９０９、除算器９０１からなる。乗算器及び除算器はハードワイアド・シフトであってもよい。
【０２１５】
図２６の重複ユニットは、前述のＴＴ変換のためのt(n)を計算する。図２６において、加算器９０１はs(n+2)入力を受け取り、それをs(n-2)入力から減算するように接続され、加算器９０３の一方の入力に接続される出力を発生する。加算器９０２は、s(n-1)を受け取り、それをs(n+1)から減算するように接続される。加算器９０２の出力は乗算器９０７，９０８の入力に接続される。乗算器９０７は、その入力を２倍する。一実施例においては、この乗算は、入力のビットを１ビット左シフトすることによりなされる。乗算器９０７の出力は加算器９０３の他方の入力に接続される。
【０２１６】
乗算器９０８は、加算器９０２の出力を１６倍する。一実施例では、この乗算は、加算器９０２から出力されるビットを４ビット左シフトすることによりなされる。乗算器９０８の出力は、加算器９０５の一方の入力に接続される。加算器９０３の出力は、加算器９０４の一方の入力と乗算器９０９の入力に接続される。
【０２１７】
乗算器９０９は加算器９０３の出力を２倍する。一実施例では、この乗算は、加算器９０３より出力されるビットを１ビット左シフトすることによりなされる。乗算器９０９の出力は加算器９０４の他方の入力に接続される。加算器９０４の出力は加算器９０６の入力に接続され、ハードワイヤド入力である３２と加算される。加算器９０６の出力は除算器９１０の入力に接続される。除算器９１０は、入力を６４で除算する。一実施例では、この除算は、入力のビットを６ビット右シフトすることによりなされる。除算器９１０の出力はt(n)出力となる。なお、図２６は、各出力にカレント値を示している。
【０２１８】
可逆ＴＳ変換、可逆Ｔ変換の両方において、Ｓ変換と同様に、ローパスフィルタを、入力信号x(n)のレンジが出力信号s(n)のレンジと同じになるように作ることができる。すなわち、スムーズ(smooth)出力は増大しない。入力信号が８ビット深さのときは、スムーズ出力もｂビットである。例えば、信号が８ビット画像のときには、ローパスフィルタの出力も８ビットである。このことは、スムーズ出力が例えば連続的にローパスフィルタをかけることにより更に圧縮されるピラミッドシステムにとって重要な特性である。従来のシステムにおいては、出力信号のレンジが入力信号のレンジより大きいため、連続的にフィルタをかけることが困難である。また、変換の整数演算に系統誤差がないので、ロッシーシステムの全ての誤差を量子化によって制御可能である。さらに、ローパスフィルタは、２つのタップしか持たないため、非重複フィルタになる。この特性は、ハードウェア化のために重要である。
【０２１９】
＜埋め込み順序づけ＞
本発明では、ウェーブレット分割の結果生成された係数はエントロピー符号化される。本発明では、係数は最初に埋め込み順序付けを施されるが、この埋め込み順序付けにおいては、視覚的に重要な順に係数が順序付けられ、より一般的には、何等かの誤差距離（例えば、歪み距離）に関連して係数が順序付けられる。誤差距離または歪み距離には、ピーク誤差と平均２乗誤差（ＭＳＥ）が含まれる。また、順序付けは、ビット・シグニフィカンス（bit-significance）空間配置より、データベース照会のための妥当性を優先させるように、また方向別に（垂直、水平、斜め等）、行ってもよい。
【０２２０】
データの順序付けは、コードストリームの埋め込み量子化を生じさせるために行われる。本発明においては、２つの順序付け方法が用いられる。すなわち、その一つは係数を順序付けするためのものであり、もう一つは係数中の２進値を順序付けするためのものである。本発明の順序付けはビットストリームを生成し、このビットストリームはその後にバイナリ・エントロピーコーダにより符号化される。
【０２２１】
＜ビット・シグニフィカンス表現＞
原成分が符号無しの時でも、大抵の変換係数は符号付き数値である（少なくとも１つのディテール(detail)フィルタから出力される係数はどれも符号付きである）。一実施例では、係数内の２進値に用いられる埋め込み順序はビットプレーン順である。係数は、符号化される前に、ビット・シグニフィカンス表現で表される。ビット・シグニフィカンス表現は、最上位ビット（ＭＳＢ）ではなくて、符号ビットが最初の非ゼロの絶対値ビットと一緒にエンコードされる符号・絶対値表現である。すなわち、符号ビットは、絶対値ビット全体の前に来るのではなく、最初の非ゼロの絶対値ビットの次に来る。また、符号ビットは、最上位の非ゼロ絶対値ビットと同じビットプレーン内にあるとみなされる。
【０２２２】
ビット・シグニフィカンス形式は数値を３組のビット、すなわちヘッドビット、テール(tail)ビット及び符号ビットによって表現する。ヘッドビットとは、ＭＳＢから最初の非ゼロ絶対値ビットまでの全てのゼロビット（最初の非ゼロ絶対値ビットを含む）である。最初の非ゼロ絶対値ビットが現れるビットプレーンで、係数の重要度が定まる。テールビットは、最初の非ゼロ絶対値ビットの後からＬＳＢまでの絶対値ビットからなる。符号ビットはただ単に符号(sign)を表わすもので、例えば０は正符号を、１は負符号を表す。ＭＳＢが非ゼロビットの、±２のｎ乗のような数値は、ヘッドビットを１ビットしか持たない。ゼロの係数は、テールビットも符号ビットも持たない。図６１は−７から８までの４ビット係数の取り得る全ての値を示す。
【０２２３】
図６１において、各段に表されるビット・シグニフィカンス表現は１ビット又は２ビットを含む。２ビットの場合、その最初のビットは最初の１のビットであり、その後に符号ビットが来る。
【０２２４】
画素の輝度に関して起こるような、値が非負整数の場合、採用し得る順序はビットプレーン順（例えば、最上位ビットプレーンから最下位ビットプレーンへの順序）である。２の補数による負整数も許容される実施例では、符号ビットの埋め込み順序は、整数の絶対値の最初の非ゼロビットと同じである。したがって、１つの非ゼロビットが符号化されるまで、符号ビットは考慮されない。例えば、符号・絶対値表記法によれば、１６ビット数−７は
１００００００００００００１１１
である。ビットプレーン・ベースでは、初めの１２デシジョン(decision)は“非有意”すなわちゼロとなる。最初の１のビットは１３番目のデシジョンに見つかる。次に符号ビット（“負”）が符号化される。符号ビットが符号化された後、テールビットが処理される。１４番目と１５番目のデシジョンは共に“１”である。
【０２２５】
係数は最上位のビットプレーンから最下位のビットプレーンへと符号化されるので、データのビットプレーン数が正確にわからなければならない。本発明においては、データから計算される、又は画像の深さ及びフィルタ係数から導き出される係数値の絶対値の上境界を見つけることによって、ビットプレーン数が決定される。例えば、その上境界が１４９のときには、有意な８ビットつまり８つのビットプレーンがある。ソフトウエアの速度では、ビットプレーン符号化を利用できないかもしれない。別の実施例では、ビットプレーンが符号化されるのは、係数が２進数として意味をなす時だけである。
【０２２６】
＜係数桁揃え（alignment）＞
本発明は、ビットプレーン符号化の前に、係数を相互に桁揃えする。こうするのは、ＦＦＴやＤＣＴと同様、異なった周波数部分帯域内の係数は異なった周波数を表すからである。本発明は、係数を桁揃えすることにより量子化を制御する。軽く量子化される係数ほど早いビットプレーン側へ桁揃えされる（例えば左へシフトされる）。よって、ストリームが打ち切られる場合、これらの係数は、それを定義するビットが、より重く量子化された係数に比べ多くなる。
【０２２７】
一実施例では、係数はＳＮＲ又はＭＳＥからみて最高のレート・歪み性能が得られるように桁揃えされる。ＭＳＥのような統計誤差距離から見てほぼ最適の桁揃えを含め、可能な多くの桁揃えがある。あるいは、桁揃えは係数データの物理視覚的（physchovisual)量子化を可能にするかもしれない。桁揃えは画像品質に（換言すればレート・歪み曲線に）相当な影響を及ぼすが、ロスレスシステムの最終的な圧縮率には殆ど影響を与えない。特殊な量子化である注目領域忠実度符号化には、他の桁揃え、すなわち解像度プログレッシブ桁揃えが合うかもしれない。
【０２２８】
桁揃えは、圧縮データのヘッダ中で指示されてもよいし、個別のアプリケーション用に固定されてもよい（すなわちシステムが１つの桁揃えしか持たない）。様々なサイズの係数に関する桁揃えは、符号化器及び復号化器の両方に分かっているので、エントロピーコーダの効率に全く影響を与えない。
【０２２９】
ｂビット／画素の画像の２レベルのＴＳ変換及びＴＴ変換分割における各種係数のビット深さが図２８に示されている。図２９は、本発明において係数桁揃えに用いられる周波数帯域に対する乗数の一例である。係数の桁揃えのために、1-ＤＤ係数のサイズが基準として用いられ、このサイズに対するシフトが与えられる。ｎシフトは２のｎ乗倍することである。
【０２３０】
一実施例では、最大の係数の絶対値に対して係数をシフトすることにより、画像中の全ての係数の桁揃えを生成する。そして、桁揃え後の係数は、重要度レベルと呼ばれるビットプレーン単位で、最上位の重要度レベルより最下位の重要度レベルへと処理される。符号は、各係数の最後のヘッドビットと一緒に符号化される。符号ビットは最後のヘッドビットの重要度レベルにある。重要なことは、桁揃えがエントロピーコーダへビットが送られる順序を制御するに過ぎないことである。割増０ビットのパッディング、シフト、格納、符号化が実際に行われるわけではない。
【０２３１】
図６２に係数桁揃えのための桁揃え数の一例を示す。
様々なサイズの係数に関する桁揃えは、符号化器と復号化器の両方に分かっているのでエントロピーコーダの効率にはまったく影響を与えない。
同じデータセットの符号化単位が異なった桁揃えを持つ場合があることに注意されたい。
【０２３２】
＜コードストリームの順序付け及びコンテクストモデル＞
図２７は、コードストリームの順序付けと、符号化単位内部の順序付けを示す。図２７において、ヘッダ１００１の後に、符号化単位１００２が上の帯域より下の帯域へと順に続く。（単一の画像タイプ用にデザインされたアプリケーションでは、ヘッダ１００１はオプションである。）
各符号化単位は、最高重要度のデータ１００３、低重要度データ１００４、最低重要度のデータ１００５からなる。
【０２３３】
コンテクストモデルは、データが符号化される順序とデータの特定ビット用の条件付けの両方を決定する。順序付けについてまず考える。データの最高レベルの順序付けは前述した。データは、変換順にロスレス符号化される「最高重要度のデータ」（ＭＩＣと呼ぶこともある）と、埋め込み統合型ロスレス／ロッシー方式で符号化される「低重要度のデータ」（ＬＩＣと呼ぶこともある）とに分けられる。
【０２３４】
各ビットプレーン内で係数が処理される順序は、低い解像度より高い解像度へ向かう順（低い周波数より高い周波数へ向かう順）である。各ビットプレーン内の係数部分帯域の順序は、高いレベル（低解像度、低周波数）より低いレベル（高解像度、高周波数）への順である。各周波数部分帯域の内部において、符号化はある決まった順序でなされる。一実施例では、その順序はラスター順、２×２ブロック順、Ｓ字状(serpentine)順、Ｐｅａｎｏスキャン順、等々である。
【０２３５】
図２７のコードストリームを用いる４レベル分割の場合、その順序は次のとおりである。
4-SS,4-DS,4-SD,4-DD,3-DS,3-SD,3-DD,2-DS,2-SD,2-DD,1-DS,1-SD,1-DD
【０２３６】
本発明に利用される水平コンテクストモデルの一実施例を以下に説明する。このモデルは、空間的、スペクトル的な係数の従属性に基づいて符号化単位内のビットを利用する。近傍係数及び親係数に関して得られる２進値を、コンテクストを生成するために利用できる。しかし、コンテクストはデコーダビリティと因果関係があり、また、多少は効率的適応と因果関係がある。
【０２３７】
本発明は、バイナリ・エントロピーコーダのために、係数により生成された埋め込みビット・シグニフィカンス順のビットストリームをモデル化するためのコンテクストモデルを提供する。
【０２３８】
図５６は、符号化単位の各係数の近傍係数を示す。図５６において、近傍係数は分かりやすい地理的表記法で表されている（例えば、Ｎ＝北、ＮＥ＝北東、等々）。図５６のＰのような、ある係数とカレント・ビットプレーンが与えられると、コンテクストモデルは、そのビットプレーンより前の符号化単位全ての任意の情報を利用できる。このコンテクストモデルの場合、注目係数の親係数も利用される。
【０２３９】
ヘッドビットは、最も圧縮できるデータである。したがって、圧縮率を上げるため、大量のコンテクストもしくは条件付けが使われる。近傍係数又は親係数の値を注目係数の注目ビットのコンテクストを決定するために利用するのではなく、その情報は図３０に関連して説明する２つの指示ビットにまとめられる。この情報は、メモリに格納されてもよいし、近傍係数又は親係数から動的に計算されてもよい。
【０２４０】
＜メモリからディスクへの埋め込み＞
本発明のための埋め込みスキームの一実施例は、データの符号化の開始時にはバンドバッファメモリ全体がデータで塞がっているので、作業域メモリとして利用できる余分なスペースがバンドバッファメモリ内にないという事実をベースにしている。本発明においては、埋め込まれるデータはメモリに格納され、また重要度が低いデータである。それより重要度の高いデータは直接符号化される。重要度が最低のデータはいくつかの最下位ビットからなる。
【０２４１】
一実施例において、各係数の一部が後に符号化するためメモリに再書き込みされるときには、的確な符号化を保証するために、符号ビットが分かっていることは勿論、ヘッドビットとテールビットも分からなければならない。一実施例では、ヘッド、テール及び符号ビットの情報を指示するために２ビット又はそれ以上（例えば、３ビット、４ビット、５ビット等々）の指示ビットが用いられる。
【０２４２】
一実施例では、８ビットのメモリロケーションが使用される場合、２ビットの指示ビットでヘッド、テール及び符号ビットの情報を指示する。２ビットの指示ビットを使用すれば、最低重要度の６重要度レベルを２指示ビットと一緒にメモリに再書き込みすることができる。１つの指示ビットで、６重要度レベルの最上位ビットがヘッドビットであるかテールビットであるかを指示する。第１の指示ビットがヘッドビットであることを指示するときには、第２の指示ビットはその係数の符号である。他方、第１の指示ビットがメモリに再書き込みされたデータの最上位ビットがテールビットであることを指示するときには、第２の指示ビットは自由な指示ビットであり追加的なテール情報、例えば最高重要度のテールビットが最初のテールビットであるか、もっと後のテールビットであるかを指示することができる。
【０２４３】
図３０は、最高重要度のデータ１３０１（ＭＩＣと呼ばれる）と低重要度のデータ１３０２（ＬＩＣと呼ばれる）に分割された係数を示す。一実施例では、ＭＩＣは各係数の上位６ビットからなり、ＬＩＣは下位６ビットからなる。最高重要度データ１３０１はコンテクストモデルへ送られ、直ちに係数順に符号化される。このデータについては、外部メモリにバッファリングする必要はない。低重要度データ１３０２はメモリ（例えばＲＡＭ）に書き込まれ、その後、重要度順に符号化され埋め込まれる。また、データ中の２ビットの指示ビットがメモリに書き込まれる。指示ビット１３０３は、メモリに書き込まれたデータの最上位ビットがヘッドビットであるか否かを示す。指示ビット１３０４は、係数の符号を与えるか、そのデータに最初のテールビットが含まれているか否かを示す。なお、指示ビットは、低重要度データ１３０２と連結した形で記憶してもよいし、データ１３０２を記憶しているメモリと関連した別のメモリ又はメモリロケーションに、係数の各部分に関連した指示ビットを識別できように格納してもよい。
【０２４４】
図６３中の例で２ビットの指示ビットの使い方を示す。図６３の欄は図３０のデータ形式と一致するように配列されている。符号ビットは“S”で示され、テールビットは“T”で表され、何でも構わないビットは“X”で表され、テールオン（tail-on）ビットの値は“h”又は“t”で表されている。図６３において、指示ビットは、ｈ＝０，ｔ＝１である。この取り決めを、他の実施例において、そのまま用いてよい。一実施例では、図６３の０の符号ビットは正符号を示し、１の符号ビットは負符号を示す。その逆の割り当てを用いてもよい。なお、符号ビットは常に最初の“on”ビットと一緒に保存されるので、同時に符号化して埋め込むことができる。
図６３において、“T”は係数の対応ビットを指し、０又は１である。
【０２４５】
一実施例では、復号化期間中に、最高重要度のデータは、それが復号化される時にメモリに書き込まれ、同時に、低重要度データを記憶するためにメモリを初期化するため、適当な２つの指示ビットがメモリに書き込まれる。（係数の桁揃えによっては最高重要度データの一部が次のバイトにも格納されることがある）この初期化によって、低重要度データを１度に１ビットプレーンずつ復号化するのに、１係数あたり１バイト（実施例によっては、１バイト未満）を読み出して書き込むだけでよい。係数が読み出されて逆変換に入力される時に、その係数は普通の数値形式（例えば２の補数形式）に変換される。
【０２４６】
“最高重要度データ”と“低重要度データ”のほかに、符号化時に捨てられる又は量子化されるデータもあるかもしれない。係数は、量子化スケールファクタ（２のQ-1乗）で割られる。（係数の量子化はＪＰＥＧ規格に述べられている）
発明においては、除算はビットプレーンの切り捨てによって行われるので、量子化は２のベキ乗である。例えば、Ｑ＝１は１による除算を意味するから、係数は変化しないが、Ｑ＝２は２による除算を意味するから、１つのビットプレーンが切り捨てられるということである。これらの除算は、シフト例えば、Ｑ＝２のときは１ビット位置分のシフト）によって行ってもよい。図３１と図３２は、様々な部分帯域について、量子化と係数桁揃えの両方を考慮した最高重要度データと低重要度データの形式を示す。
【０２４７】
図３１は、データが切り捨てられないロスレスのケースを示す。ＪＰＥＧの規約にならい、これを量子化Ａ＝１と呼ぶ。というのは、現実の係数が１で除算される（損失なし）であるからである。最高重要度データは網が掛けられていない。低重要度データは網掛けされている。
【０２４８】
図３２は、１ビットプレーン分のデータが切り捨てられたケースを示す。１つのビットプレーンを切り捨てることは２で割ることと等価であるので、Ｑ＝２である。捨てられたビットプレーンは黒で表されている。
【０２４９】
図３１と図３２に示されているもののほかに、最高重要度データにはＳＳ係数も含まれることに注意されたい。係数ビットは８ビットデータとして示されているが、可逆色空間を使用するときには８ビットのデータが必要となり、色差係数のサイズが１ビットだけ増加する。
【０２５０】
本発明において、符号ビットのコンテクストモデルは、最後のヘッドビットの次の符号の符号化を含む。Ｎ係数が正であるか負であるか、符号がまだ符号化されていないか否かによって、符号に関するコンテクストは３つ存在する。あるいは、符号について１つのコンテクストだけを用いてもよい、すなわち符号を常に５０％として符号化してもよい。
【０２５１】
＜ウェーブレット係数の符号化順序＞
ウェーブレット係数の符号化順序の一例を次の擬似コードにまとめる：
最高重要度データを符号化
最初のデータのある低重要度ビットプレーンの位置を符号化
for各低重要度データビットプレーン  do
１つの低重要度データビットプレーンを符号化
【０２５２】
最高重要度データが符号化される時に、０のヘッドビットだけでない低重要度データの最初のビットプレーンを、各係数について求める。こうすることで、符号化器及び復号化器が低重要度データのビットプレーン全体についてルックアヘッド(look-ahead)をすることが可能になる。このことは、全情報がＫ係数にありＣＭＹ係数が全て０の白黒データ単位の符号化の場合に有用である。ビットプレーンを個別的に符号化しないことは、特にR2(7)が使用可能な最長のランレングスコードである場合に、圧縮率を向上させる。（“R2”コードについては、米国特許第5,381,145号及び同5,583,500号を参照されたい）
しかし、４つの並列符号化コア(core)が同時に成分を処理するときには、処理速度は符号化すべき最多のビットプレーンを持つ成分によって決まる。他の成分に割り当てられたコアは、符号化されないビットプレーンの期間中、遊休状態である。
【０２５３】
前記擬似コードの処理の一実施例を説明するフローチャートが図３３に示されている。図３３において、コンテクストモデルはまず最高重要度部分（ＭＩＣ）を符号化する（処理ブロック１４０１）。ＭＩＣの符号化後、処理ロジックは低重要度部分（ＬＩＣ）の最初のデータを持つビットプレーンの位置を符号化する（処理ブロック１４０２）。これは符号化単位全体に対するものである。ＬＩＣに６個のビットプレーンがあるときには、そのビットプレーンのどれもデータを含まないか、１個、又は２個、３個、４個、５個あるいは６個のビットプレーンがデータを含む。次に処理ロジックは、カレントＬＩＣビットプレーン変数に、この最初のデータを持つＬＩＣビットプレーンを設定する（処理ブロック１４０３）。
【０２５４】
データのあるＬＩＣビットプレーンが全て符号化されたか判定する（処理ブロック１４０４）。その全部が符号化済みならば処理は終了するが、そうでなければ１つのＬＩＣビットプレーンを符号化し（処理ブロック１４０５）、カレントＬＩＣビットプレーン変数に、次のＬＩＣビットプレーンを設定する（処理ブロック１４０６）。そして、処理は処理ブロック１４０４にループバックする。
【０２５５】
＜最高重要度データの符号化順序＞
最高重要度データの符号化順序の一実施例は次の通りである：
for  各木  do
SS係数を符号化
MICルックアヘッドを実行（又は木ルックアヘッドを実行）
for  各非SS係数
for  データのある各ビット（プレーン）do
ヘッドビット又はテールビットを符号化
if  係数は０でない
符号ビットを符号化
【０２５６】
最高重要度データは、１ウェーブレット木が一度に処理される。繰り返しになるが、最高重要度データは埋め込まれない。ＭＩＣルックアヘッドにより、ウェーブレット木内のＳＳでない全係数についてヘッドビットがオールゼロでないビットプレーンを決定する。一実施例では、個別に符号化すべき最初のビットプレーンを識別するのに４ビット数値で十分である。図３４に示す他の実施例においては、１つのビットが、第２分割のＳＳ以外の全ての係数１５０１（網掛け領域）が０であることを示すために用いられ、もう１つのビットが、第１分割のＳＳ以外の全ての係数１５０３が０であることを示すために用いられる。これら２ビットが、最初のビットプレーンの識別のために用いられる４ビットに加えて用いられる。
【０２５７】
他の実施例においては、ＳＳ係数が符号化され、次に木全体について非ゼロのヘッドビットを持つ最初のビットプレーンが符号化される、木ルックアヘッドが用いられるかもしれない。
【０２５８】
ＳＳ係数と最初のビットプレーンの符号化のために条件付けが利用されるときにコンテクスト再来遅延を補償するため、ＳＳ係数のビット（可逆色空間を使用するなら９ビット）の実際の符号化／復号化とルックアヘッド値を交替させてよい。条件付けが利用されないときには、交替は必要とされない。
【０２５９】
前述のように、本発明のコンテクストモデルはルックアヘッドを利用する。このルックアヘッドの一例が、最高重要度データすなわち最高重要度部分（ＭＩＣ）に対し用いられてよい。一実施例では、図３４に示すように、各木のために６ビット、すなわち、最大ビットプレーンのために４ビット、レベル０オールゼロのビットプレーンのために１ビット、レベル１オールゼロのビットプレーンのために１ビット、が用いられる。最大ビットプレーンがゼロのときには、余分な２ビットが冗長であるが大したことではない。別の方法では、”（孤立した）ゼロ／非ゼロ”を判定するため適応的符号化判定が用いられる。非ゼロ係数については、以下によりさらに記述される：
・係数の値と符号を決定するためのＭ項演算（合計：２サイクル／係数）
・“±１／非±１”を判定するため適応的符号化判定が用いられる。
絶対値が１のときに符号を求め、絶対値が１を超えるときに符号と値を求めるために、もう１サイクル使用される。（合計：３サイクル／係数）
・同様に、“±１／非±１”、“±２,3／非±２,3”等々を合計４サイクル／係数で行うことができる。
・以下の手順：
if  MICビットプレーン全部は０でない  then
デシジョン“-1,0,1”又は“その他”を適応符号化
if  “-1,0,1”  then
“0”又は“-1,+1”を適応符号化
if  “-1,+1”  then
符号ビットを記述
else
“-3,-2,2,3”又は“その他”を適応符号化
if  “-3,-2,2,3”  then
“-2,2”又は“-3,3”を１ビットで記述
符号ビットを記述
else
木に対し決定された最大ビット数で値を記述
符号ビットを記述
【０２６０】
なお、１ビット又は複数ビットの”記述”は、適応符号化でも、５０％確率での符号化でも、単なる符号化データストリームへのコピーでもよい。
【０２６１】
全部又は大部分のビットプレーンを個別に符号化すべきときには、変換のいくつかのレベルに桁揃えのため利用されないビットプレーンがあり、この利用されないビットプレーンは符号化されない。ヘッドビット及びテールビットについてのビット−コンテクスト遅延(bit  to  context  delay)の処理については多くの選択肢がある。一つの方法は、３つの係数、DD,SD及び,DSを交互に処理する方法である。非０係数の符号ビットは係数の最後に符号化できる。これは、最高重要度データは全部が常にロスレスであり、最初の”オン”ビットのすぐ後に続く必要はないからである。
【０２６２】
最高重要度部分（ＭＩＣ）を符号化するための擬似コードを説明するフローチャートの一例が図３５に示されている。図３５において、処理ロジックが最初の木をカレント木とすることから処理が始まる（処理ブロック１６０１）。次に、処理ロジックはＳＳ係数を符号化する（処理ブロック１６０２）。ＳＳ係数の符号化後、処理ロジックは当該木のＭＩＣ中のデータを持つ最初のビットプレーンの位置を符号化する（処理ブロック１６０３）、すなわちＭＩＣルックアヘッドを行う。
【０２６３】
次に、処理ロジックは、木全部のＭＩＣがゼロであるか判定する（処理ブロック１６０４）。木全部のＭＩＣがゼロならば処理ロジックは処理ブロック１６１４に進むが、そうでなければ、処理ブロック１６０５に移行し、処理ロジックは当該木の最初の非ＳＳ係数をカレント係数にする。
【０２６４】
カレント係数を木の最初の非ＳＳ係数に設定した後、処理ロジックは、データを持つ最初のビットプレーンをカレントビットプレーンにする（処理ブロック１６０６）。次に処理ロジックは、カレントビットプレーンのカレント係数の１つのビットを符号化する（処理ブロック１６０７）。その後、処理ロジックは、その全てのビットプレーンが符号化されたか判定する（処理ブロック１６０８）。ビットプレーン全部の符号化が済んでいないときには、処理ブロックは次のビットプレーンをカレントビットプレーンとし（処理ブロック１６０９）、処理ブロック１６０７へ進む。全部のビットプレーンが符号化されてしまったときには、処理ロジックはカレント係数がゼロであるか判定する（処理ブロック１６１０）。カレント係数がゼロでなければ、処理ロジックは符号ビットを符号化し（処理ブロック１６１１）、処理ブロック１６１３へ進む。カレント係数がゼロならば、処理ロジックは処理ブロック１６１３へ進む。
【０２６５】
処理ブロック１６１３で、処理ロジックは木内の全係数の符号化が済んだか判定する。木の全係数の符号化が済んでいなければ、処理ロジックは木内の次の係数をカレント係数とし（処理ブロック１６１２）、処理ブロック１６０６へ進む。木内の全係数が符号化されてしまったときには、処理ロジックは全ての木の符号化が済んだか判定する（処理ブロック１６１４）。全ての木が符号化されたときには処理が終了するが、そうでなければ処理ブロック１６１５に進み、処理ロジックは次の木をカレント木とし、処理ブロック１６０２に移行する。
【０２６６】
図３６は、最高重要度データの符号化パス期間に利用されるフォーマッティング・ユニット及びコンテクストモデルの一実施例のブロック図である。図３６において、バレルシフタ１７０１は、最高重要度データが最小ディスク帯域を超えないようにしてロスレス圧縮を保証するため、係数の絶対値と符号化時に用いられた量子化レベルを受け取るように接続される。このように、量子化レベルでバレルシフタ１７０１を制御する。一実施例では、バレルシフタ１７０１は、絶対値ビットを０，１，２又は３ビットだけシフトして１，２，４又は８の量子化をサポートする。他の実施例では、これより低い又は高い量子化数がサポートされる、例えば２量子化をサポートするだけである。
【０２６７】
バレルシフタ１７０１の出力は、下位の６ビットプレーンすなわち低重要度データと、残りの高位ビットプレーンすなわち最高重要度データとからなる。他の実施例では、これら２出力を生じさせるために単純な分離メカニズムが用いられる。
【０２６８】
バレルシフタ１７０１の両出力は先頭ビットプレーンユニット１７０２に入力され、データを含んでいるビットプレーンが判別される。先頭ビットプレーンユニット１７０２は、低重要度データ処理時に用いられる全ての符号化単位について、最初の”オン”ビットを持つビットプレーンを見つけるために利用される。（図２７参照）。もう一つの先頭ビットプレーンユニット１７０６も、バレルシフタ１７０１から出力される最高重要度データを受け取るよう接続されている。先頭ビットプレーンユニット１７０６は、高重要度データ処理時に各木に対し利用される。先頭ビットプレーンユニットの一実施例を、図３７を参照して後述する。
【０２６９】
バレルシフタ１７０１は比較ユニット１７０３，１７０４にも接続される。これら比較ユニット１７０３，１７０４は最高重要度データに対し２つの比較を行い、低重要度データのための２ビットの指示情報を発生する。比較ユニット１７０３は、最高重要度データが０であるか判定することにより、テールビットが既に出現したか（すなわち、符号化がもうテール内であるか）指示する。比較ユニット１７０３の出力がテールオンビットである。比較ユニット１７０４は、最高重要度データが１であるか否か判定する。最高重要度データが１であると、図６３から、出力は０である。比較ユニット１７０４の出力は、マルチプレクサ（ＭＵＸ）１７０５の一方の入力に接続される。ｍｕｘ１７０５の他方の入力は符号ビットを受け取るように接続されている。ｍｕｘ１７０５のセレクト入力は比較ユニット１７０３の出力によって制御され、比較ユニット１７０３の出力がテールビットであると指示するときにきｍｕｘ１７０５の出力は“先頭テール”ビット１３０４である。しかし、比較ユニット１７０３の出力がヘッドビットであると指示するときには、ｍｕｘ１７０５は符号を出力するように制御される。
【０２７０】
一実施例では、比較ユニット１７０３，１７０４は単純なビット比較器により構成される。
【０２７１】
メモリ１７０７が、符号ビット、バレルシフタ１７０１より出力される最高重要度データ、及び先頭ビットプレーンユニット１７０６の出力を受け取るように接続される。メモリ１７０７は、親と近傍の情報を条件付けに利用できるよう係数を遅延させるために利用される。メモリ１７０７の構成は後述する。
【０２７２】
コンテクストモデル（ＣＭ）１７１０〜１７１２は符号、ヘッド、テール、その他のビットのための条件付けを与える。これら各コンテクストモデルについては後述する。
【０２７３】
図３７は、先頭ビットプレーンユニットの一実施例を示す。図３７において、先頭ビットプレーンユニット１８００は、係数とレジスタ１８０２の出力からのフィードバックを受け取るように接続されたＯＲゲート１８０１を有する。ＯＲゲート１８０１の出力はレジスタ１８０２の入力に接続される。レジスタ１８０２は、木スタート／符号化単位リセット指示によって制御される。レジスタ１８０２の出力はプライオリティエンコーダ１８０３に接続される。プライオリティエンコーダ１８０３の出力は、先頭ビットプレーンユニット１８００の出力である。
【０２７４】
初めに、レジスタ１８０２がクリアされる。レジスタ１８０２の各ビットは、ＯＲゲート１８０１によって入力係数の各ビットと論理和がとられる。係数の０の各ビットについては、レジスタ１８０２の値は現在の値のままであり、それがプライオリティエンコーダ１８０３へ出力される。係数の１の各ビット（例えば先頭の１）については、ＯＲゲート１８０１のレジスタ１８０２への出力は１であり、これがプライオリティエンコーダ１８０３へ入力される。そして、プライオリティエンコーダ１８０３は先頭の１を見つけるが、これが係数の１を持つ最初のビットプレーンである。
【０２７５】
＜低重要度データの処理順序＞
最低重要度データの各ビットプレーンは以下のように処理される：
for  各木  do
for  各係数  do
if  ルックアヘッド区間の始まり
ルックアヘッドを実行
if  ルックアヘッドはアクティブでない
ヘッドビット又はテールビットを符号化
if  先頭の“オン”ビット
符号ビットを符号化
【０２７６】
ＬＩＣビットプレーンの符号化プロセスの一実施例を図３８のフローチャートに示す。ＬＩＣビットプレーン符号化プロセスは、処理ロジックが最初の木をカレント木にすることから始まる（処理ブロック１９０１）。次に、処理ロジックは、カレント木の最初の非ＳＳ係数をカレント係数とする（処理ブロック１９０２）。カレント木の最初の非ＳＳ係数をカレント係数とした後、処理ブロックは符号化がルックアヘッド区間の開始点に対するものか判定する（処理ブロック１９０３）。符号化プロセスがルックアヘッド区間の開始点にあるきには、処理ロジックはルックアヘッドを行う（処理ブロック１９０４）、そして処理ブロック１９０５に進む。符号化プロセスがルックアヘッド区間の開始点にないときには、処理ロジックは直ちに処理ブロック１９０５に移行し、ルックアヘッドがアクティブであるか判定する。
【０２７７】
ルックアヘッドがアクティブならば、処理ロジックは処理ブロック１９０９へ進み、カレント木の全係数が符号化されたか判定する。カレント木の全係数が符号化されたときには処理ブロック１９１３から処理が継続するが、そうでないときには、処理ロジックはルックアヘッド区間の後のカレント木の次の係数をカレント係数とし（処理ブロック１９１０）、処理ブロック１９０３へ進む。
【０２７８】
ルックアヘッドがアクティブでないときには、処理ロジックはヘッドビット又はテールビットを符号化し（処理ブロック１９０６）、次に最初の非ゼロビットが受け取られたか判定する（処理ブロック１９０７）。最初の非ゼロビットが受け取られていないならば、処理ロジックは処理ブロック１９１１へ進む。最初の非ゼロビットが受け取られているならば、処理ブロック１９０８に進み、処理ロジックは符号ビットを符号化し、そして処理は処理ブロック１９１１へ進む。
【０２７９】
処理ブロック１９１１で、処理ロジックはカレント木の全係数が符号化されたか判定する。カレント木の全係数が符号化済みでなければ、処理ロジックはカレント木の次の係数をカレント係数とし（処理ブロック１９１２）、処理ブロック１９０３へ移行する。カレント木の全係数が符号化されたならば処理ブロック１９１３に進み、処理ロジックは全ての木が符号化されたか判定する。全ての木が符号化済みでなければ、処理ロジックは次の木をカレント木とし（処理ブロック１９１４）、処理ブロック１９０２から処理を継続する。全木が符号化済みならば、処理は終了する。
【０２８０】
１つのウェーブレット木を一度に処理することは重要ではないが、変換はデータをその順に読み書きさせるため、それが都合がよいであろう。ウェーブレット木毎にデータが処理されるときには、ビット−コンテクスト遅延を、ＤＤ，ＳＤ，ＤＳ係数間の交替（部分木間の交替）によって調整できる。別の方法として、一度に１つの部分帯域を符号化してもよい。どのような順序を選んだとしても、異なった部分帯域の桁揃えに用いられないヘッド／テールビットは、符号化されることがないから、無駄なサイクルを必要としない。
【０２８１】
図３９は、低重要度データのためのルックアヘッド及びコンテクストモデルの一実施例のブロック図である。一実施例では、最高重要度データ及び低重要度データは、符号、ヘッド及びテールビットのための条件付けを与える同じコンテクストモデル（ＣＭ）を利用する。
【０２８２】
図３９において、コンテクストモデル２００１〜２００３は入力データを受け取るように接続される。符号コンテクストモデル２００１はテールオンビット、符号／先頭テールビット指示及びデータを受け取るように接続される。ヘッドビットコンテクストモデル２００２は、テールオンビット及びデータを受け取るように接続される。テールビットコンテクストモデル２００３は、テールオンビット、符号／先頭テールビット指示及びデータを受け取るように接続される。各コンテクストモデル２００１〜２００３は、そのに入力に応じて１つのコンテクストを生成する。
【０２８３】
コンテクストモデル２００１〜２００３によって生成されるコンテクストは、ｍｕｘ２００４の入力に接続される。ｍｕｘ２００４は、前ビット及びビットシグニフィカンス表現そのものによって制御される。ヘッドビットコンテクストモデル２００２は、データ入力に１のビットが来るまで利用される。符号コンテクストモデル２００１は、最後のビットがヘッドの最初の１のビットであった時に利用される。その後、テールビットコンテクストモデル２００３が利用される。
【０２８４】
ｍｕｘ２００４の出力は、“＝ヘッド？”ユニット２００５及び先入れ／先出し（ＦＩＦＯ）バッファ２００６に接続される。“＝ヘッド？”ユニット２００５は、現在のコンテクストが近傍及び親の０のヘッドビットがあるヘッドビットコンテクストであるか調べる。コンテクストが全てヘッドにあるときには、“＝ヘッド？”ユニット２００５から出る信号でＦＩＦＯバッファ２００６をクリアする。
【０２８５】
コンテクストと結果は、ルックアヘッド区間中、ＦＩＦＯ２００６又は他のメモリにバッファされる。ルックアヘッド区間の終わりで、必要ならば、ルックアヘッド・デシジョン及び／又は個々のデシジョンが符号化される。一度に１ウェーブレット木ずつ係数が処理される場合には、ルックアヘッド用のＦＩＦＯは、単一のＦＩＦＯを全ての部分帯域のために用いてもよいし、部分帯域毎に１つずつ、複数のＦＩＦＯを用いてもよい。
【０２８６】
なお、マルチプレキシングを減らしたいのであれば、最高重要度データもルックアヘッドを利用してもよい。しかし、各木毎にルックアヘッドと先頭ビットプレーンの両方を利用するのは、やや冗長である。
【０２８７】
ある成分に割り当てられたコアが符号ビットを符号化するときには、同じビットプレーンの符号ビットを符号化しない、他成分に割り当てられたコアは遊休状態となる。したがって、各コアが別のビットプレーンの符号ビットを符号化するときには、最高４クロックサイクルを符号ビットに対して使用してよい。一実施例では、１係数につき、最高６ビットのヘッド又はテールビットがある。
【０２８８】
タイミングに関し考えられる１つの問題点は、最高重要度部分が十分に圧縮されることにより、そのデータの一部分の復号化期間にディスクが遊休状態になることである。バンドバッフアに十分なメモリ帯域があるならば、最高重要度データの処理を高速化するためルックアヘッドを利用してもよい。その場合、低重要度データがヘッドの始まりとなることがある。また、ディスクが、最高持続レートより高いバースト転送レートを有しても大丈夫であろう。ハードディスクは、かなりのバッファを持っているのが普通で、このバッファに先読みすることで遊休時間が排除されるであろう。
【０２８９】
＜コンテクストモデルの一部の条件付け＞
コンテクストモデルで利用される条件付けは、ハードウェアコストと圧縮率との兼ね合いで決まる。したがって、以下の部分では、条件付けのための多くの選択肢を提示し設計者の検討に供する。
【０２９０】
＜ＳＳ係数のためのコンテクストモデル＞
コンテクストモデルの一実施例においては、ＳＳ係数は符号化されない。ＳＳ係数は原データの高々２５６分の１であるので、それらを符号化する利益は殆どない。もしＳＳ係数を符号化したいなら、Ｇｒａｙエンコーディング、同一係数中の前ビットによる条件付け、及び／又は前係数中の対応ビットによる条件付けによって処理してよかろう。
【０２９１】
＜先頭ビットプレーンのためのコンテクストモデル＞
各ウェーブレット木の最高重要度データについての先頭ビットプレーン情報の４ビットは、ＳＳ係数と同様な方法で処理できる。これは原データのサイズを５２１分の１しか増加させない。一実施例では、それらは、原データに比べサイズが小さいため符号化されなくともよく、また、Ｇｒａｙエンコーディングと何らかの条件付けをしてもよい。
同様に、図３４に従って６ビットが用いられるときには、それら６ビットをＳＳ係数と同様に処理してよい。
【０２９２】
＜ヘッドビットのためのコンテクストモデル＞
図４０は、ヘッドビットのための条件付けを提供するコンテクストモデルの一実施例のブロック図である。図４０において、コンテクストモデル２１００は、ビットプレーンコンテクストモデルに見られるものと同様のシフトレジスタを含む。重要な相違点は、カレントビットプレーンの先行係数を利用せず、条件付けがテールオン情報をベースにしており、全ての先行ビットプレーンとカレントビットプレーン中の既に符号化された情報を利用することである。また、符号化されたビットプレーン又はビットプレーン群と、重要度レベル及び部分帯域バケッティングにより生成された符号化部分帯域又は部分帯域群のレートを識別するため数ビットを利用することである。
【０２９３】
図４０において、コンテクストモデル２１００は２つの入力、すなわちカレント重要度レベル２１１０とメモリからの係数２１１１を有する。カレント重要度レベル２１１０はテールオン情報／ビットジェネレータブロック２１０１と重要度レベル・部分帯域バケッティング(bucketing)ブロック２１０２の入力に接続される。メモリからの係数２１１１はブロック２１０１とレジスタ２１０３〜２１０６に接続される。
【０２９４】
ブロック２１０１は、係数を受け取って１のビットの有無を判定する。一実施例では、ブロック２１０１は１のビットの場所も特定する。ブロック２１０１の出力は、テールオン情報に基づいた１ビット又は２ビットである。一実施例では、テール情報は、最初の非０絶対値ビットが観測されているか否か（先頭の“オンビット”が観測されたか否か）を表し、また、観測されているならば、何ビットプレーン前かを表す。図６４はテール情報ビットの説明である。
【０２９５】
この２ビットのテール情報から、そのテール情報がゼロか否かを示す１ビットの“テール・オン”値が合成される。一実施例では、テール情報とテール・オンビットは係数が符号化された直後に更新される。別の実施例では、その更新は、並列的コンテクスト生成を可能にするため、もっと後に行われる。
【０２９６】
さらに、この２ビットは、符号化される重要度レベルを示すために利用される。最初の２ビットプレーンは値０を、第２の２ビットプレーンは値１を、第３の２ビットプレーンは値２を、残りのビットプレーンは値３を使用する。さらに、すべてゼロの、ヘッドビットのランレングス・エンコーディングがある。
【０２９７】
ヘッドビットのためのコンテクストの１０ビットは、親とＷ（西）係数それぞれからの２ビット情報、Ｎ（北），Ｅ（東），ＳＷ（南西），Ｓ（南）の各係数からの１ビット情報、２ビットの重要性レベル情報からなる。
【０２９８】
一実施例では、一部又は全ての周波数帯域についてテール情報が用いられない。こうすることにより、周波数帯域を、その親を前もって復号化することなく復号化できるようになる。
【０２９９】
別の実施例では、各周波数帯域のビットプレーンの重要度レベルへの割り当てに、一つの桁揃えを用いる。親のテール・オン情報の決定に、もう一つの桁揃えを利用するが、これは実際に符号化されたものより少ない親ビットプレーンを利用する。これは、ある周波数帯域のいくつかのビットプレーンを、同じ重要度レベルの親の対応ビットプレーンを復号化せずに復号化できるようにする（図５７参照）。例えば、ＭＳＥ桁揃えに基づいた親のテール・オン情報によらず、ピラミッド桁揃えにより画像を符号化できる（図５８参照）。これにより、復号化器は、ピラミッド桁揃えで復号化して、ＭＳＥ桁揃えを模擬し又はピラミッド桁揃えとＭＳＥ桁揃えの間の任意の桁揃えを模擬することができる。
【０３００】
図４０において、ブロック２１０１の出力はレジスタ２１０３〜２１０６の入力に接続される。レジスタ２１０３〜２１０６は近傍データを蓄積する。例えば、上／左シフトレジスタ２１０３は、カレント係数の直上のビットを、そのラインの間中保持する。カレント・シフトレジスタ２１０４はカレントラインの係数のビットを保持し、下／右シフトレジスタ２１０５はシフトレジスタの直下ラインからのラインを保持する。最後に、親レジスタ２１０６は親データを保持する。こられシフトレジスタの出力がコンテクストを構成する。
【０３０１】
重要度レベル・部分帯域バケッティング(bucketing)ブロック２１０２の出力もコンテクストとして利用される。複数の部分帯域及び異なったレベルを同じコンテクストで符号化しようとする時にコンテクストの一部となるような場合である。そのような場合、ブロック２１０２の出力は、レジスタ２１０３〜２１０６の出力と組み合わされてコンテクストを構成する。そのような場合でなければ、コンテクストはレジスタ２１０３〜２１０６の出力だけから構成される。
また、コンテクストモデル２１００から１つのビットが出力される。
【０３０２】
カレントビットプレーンのデータを使用するためのビット−コンテクスト遅延を考慮して、ＤＤ，ＳＤ，ＤＳ係数間の交替により符号化を行ってもよい（部分木間の交替）。
【０３０３】
なお、条件付けに必要となる係数を格納するためにメモリが必要となる（図３６参照）。全ての近傍係数及び親により条件付けするコンテクストモデルの一実施例のためのメモリ使用方法を図４１に示す。短シーム変換順を想定している。（外部メモリを使用して長シーム変換順をサポートすることもできる。それには、メモリ量と帯域幅の両方の追加が必要となろう。）
高レベルの親による条件付けは非常にコストがかかる。ある木のレベル４のＤＤ係数は、当該木のレベル１のＤＤ係数の殆どより１６木だけ後になるまで計算されない。また、後で符号化される係数全体（図４１の影が付けられていない係数）を記憶することは、後に条件付けで利用するためのテールオン情報（図４１の影が付けられたもの）だけを記憶する場合にくらべて非常にコストがかかる。同じ木にある“西”情報と当該“西”木のからのデータなしに生成される親のみに基づいて条件付けをすれば、必要となるメモリ量が大幅に減少するであろう。親又は西の情報が得られない場合には、北又は東から得られる情報をコピーするのが有効である。
【０３０４】
＜符号ビットのコンテクストモデル＞
符号ビットのための条件付けを与えるコンテクストモデルは単純である。上の画素の符号が分かっているときには、それが条件付けのために利用される。上の画素の符号が分かっていないときには、そのビットは符号化されない。（(R2(0))が利用される。あるいは、全符号ビットについて不符号化(R2(0))を使用できる）。
【０３０５】
図４２は、符号ビットのためのコンテクストモデルの一実施例のブロック図である。図４２において、ｍｕｘ２３０１は、北の符号ビット２３０３と０のビット２３０４を受け取り、北のテールオンビット２３０２により制御されることにより、北のテールオンビット２３０２が１のときに北の符号ビット２３０３を出力し、そうでないときに０を出力する。このように、北の画素は、その南の画素に対するコンテクストを提供するための北テールオンビット２３０２と北符号ビット２３０３を供給する。
【０３０６】
＜テールビットのコンテクストモデル＞
テールビットに対しては条件付けは利用されない。一実施例では、固定した確率状態が用いられ、確率更新は用いられない。図６５は、テールビットに用いられるコードの３つの選択肢を表す。R2(1)とR2(0)を用いる２番目の選択肢が良い選択である。
【０３０７】
一実施例では、Ｍ≒６０％，Ｌ≒４０％なる確率に好適な黄金比コードは次のとおりである：
入力        符号語
ＭＭＭ      ００
ＭＭＬ      １１０
ＭＬ        ０１
ＬＭ        １０
ＳＳ        １１１
【０３０８】
＜コンテクストビン(bin)の要約＞
システムで利用可能なコンテクストビンの最小個数は次のとおりである。ＳＳ，各木の先頭ビットプレーン、符号及びテールビットはすべて符号化されない（R2(0)コードが使われる）。ＰＥＭ状態や最高確率シンボル（ＭＰＳ）ビットを記憶する必要はないが、R2(0)コードを選択するためのロジックがなければならない。したがって、これをどのように考えるかによるが、ハードウェアコストは０又は１コンテクストビンである。ヘッドビットに対しては適応符号化が用いられるべきである。低重要度データは、１ビットプレーンが一度に符号化されるから、ビットプレーンによる条件付けは重要でない。最高重要度データについては、各ウェーブレット木の先頭ビットプレーンは、ビットプレーン数を十分に減少させるであろうから、それらビットプレーンによる条件付けは重要でない。部分帯域による条件付けの有効性は、どのようなものかあまり明確でないが、これもこの最小のコンテクスト例では無視できる。３つの近傍係数と１つの親係数のテールビットを合計４ビット（１６コンテクストビン）のために使用してよい。１つの追加のコンテクストビンをルックアヘッドのために使用してよい。（メモリサイズが依然として２のベキ乗となるように、２つのコンテクストビンを一緒にマッピングしてルックアヘッド用の空きを作るのが、より好都合であるかもしれない。）
【０３０９】
４つのコアを用い（コンテクストを４回複写する必要がある）、また１コアあたり２つのコンテクストメモリバンクを用いる場合、”符号化されない”コンテクストをどのように考えるか、また２つのヘッドコンテクストビンが一緒にマッピングされるか否かによって、使用すべきコンテクストの最小個数は１２８と１４４の間となろう。
【０３１０】
十分な条件付けのあるシステムは以下のとおりである：
・ＳＳ（９ビット）と先頭ビットプレーン（４ビット）のために、１ビットあたり４コンテクストビン、合計５２コンテクストビンを使用する。（これらコンテクストビンはバンクに分割されてもよい、複写される必要はない。）
・テールビットは符号化されず、R2(0)とR2(1)の両方が使用される。これをどう考えるかによるが、そのコストは０，１又は２コンテクストビンである。
・２つの適応的コンテクストと１つの”無コード”コンテクストが符号ビットのために用いられる。
・ヘッドビットは近傍係数／親係数のために８ビット、部分帯域／ビットプレーン情報のために２ビット（１０２４コンテクストビン）を使用し得る。
・１つのコンテクストがルックアヘッドのために使用される。
【０３１１】
コンテクストモデルの他の例が、入力係数を符号／絶対値形式に変換する符号／絶対値ユニットの一例とともに、米国特許出願第08/498,695号（1995年６月30日受理、“Method  and  Apparatus  For  Compression  Using  Reversible  Wavelet  Transforms  and  an  Embedded  Codestream”）、米国特許出願第08/498,036号(1995年６月30日受理、“Reversible  Wavelet  Transform  and  Embedded  Codestream  Manipulation”)、米国特許出願第08/642,518号（1996年５月３日受理、“Compression  and  Decompression  with  Wavelet  Style  amd  Binary  StyleIncluding  Quantization  by  Device-Dependent  Parser”）、及び、米国特許出願第08/643,268号（1996年５月３日受理、“Compression/Deconpression  Using  Reversible  Embedded  Wavelets”)、に記載されている。
【０３１２】
このコンテクストモデルはデータのエントロピー符号化のためのコンテクストを提供する。一実施例では、本発明によって行われる全てのエントロピー符号化は、バイナリ・エントロピーコーダによって実行される。単一のコーダを使用して単一の出力コードストリームを生成してもよい。あるいは、多数の（現実の又は仮想の）コーダを使用して多数の（現実の又は仮想の）データストリームを生成してもよい。
【０３１３】
＜ＬＩＣのためのＭ項符号化＞
図４３は、ＬＩＣに対するＭ項符号化の利用を表している。Ｍ項符号化を圧縮符号化のために利用すると、ルックアヘッドとして作用する（図示の如く）。初めに、次の８係数の状態が調べられる。ヘッドに何かあると、ヘッドビットに対しエントロピー符号化が行われ、８係数の全ヘッドビットが符号化されるまで、全ヘッドビットが毎サイクル１ビットずつエントロピー符号化される。図４３において、１のヘッドビットは第１サイクル及び第３サイクルで符号化されるが、０のヘッドビットは第２サイクル及び第４サイクルで符号化される。全ヘッドビットがエントロピー符号化されると、符号ビットとテールビットが同一サイクルで符号化される。例えば、図４３において、１のヘッドビットの次にくる符号ビット及びテールビットは全て第５サイクルで符号化される。このようにして、全体のサイクル数が減少する。
【０３１４】
＜本発明の印刷システムへの応用＞
図４４は、プリンタのフロントエンドの一実施例のブロック図である。図４４において、レンダラー(renderer)２５０１はページ記述言語又はディスプレイリストの形式のデータを受け取る。レンダラー２５０１は、ラスター画像処理によって構成されてもよい。各ロケーション（例えばスポット）毎に、レンダラー２５０１は、その色（アプリケーションによるが、例えば、白黒、８ビットＲＧＢ値、８ビットＣＭＹＫ値）を決定する。レンダラー２５０１の出力は、バンドにフォーマットされた画素の集合であり、バンドバッファ（メモリ）２５０３に格納される。
【０３１５】
他の実施例では、Adobe  Postscript（登録商標）やMicrosoft  Windows（登録商標）ＧＤＩのようなページ記述言語（ＰＤＬ）によるデータはディスプレイリストへ変換される。このディスプレイリストは画素のバンドを生成するために用いられる。この実施例では、画素は連続階調値を表すと仮定され、プリントエンジンに必要とされる何らかの中間調処理もしくはディザ処理が、伸長後に行われることになろう。
【０３１６】
本発明においては、バンドバッファ２５０３として使用されるメモリは、圧縮用作業域としても使用される（必要メモリを増加させない）。この二重利用については詳しく後述する。
【０３１７】
圧縮器２５０４は各画素バンドを圧縮する。圧縮器２５０４に対する入力が中間調処理もしくはディザ処理された画素であるときにも圧縮器２５０４は動作するが、ウェーブレット処理による場合、圧縮率は良くないであろう。中間調処理もしくはディザ処理された画素に対してはバイナリコンテクストモデルを利用できる。圧縮器２５０４は圧縮データをディスク２５０５に書き込む。ディスク２５０５はハードディスクかもしれない。別の実施例では、ディスク２５０５はランダムアクセスメモリ（ＲＡＭ）、フラッシュメモリ、光ディスク、磁気テープ、任意の種類の記憶手段、任意種類の通信チャネルかもしれない。
【０３１８】
図４５は、プリンタのバックエンドの一実施例のブロック図である。図４５において、プリンタのバックエンド２５００はディスク２５０５に接続された伸長器２６０２、バンドバッファ（メモリ）２６０３、プリントエンジン２６０４からなる。伸長器２６０２は、ハードディスク２５０５から圧縮データを読み込んで伸長する。伸長されたデータは画素形式でバンドバッファ（メモリ）２６０３に格納される。バンドバッファ２６０３は、圧縮器２５０４のための作業域として働くバンドバッファ２５０３と同じメモリでもよい。プリントエンジン２６０４に対し画素をリアルタイムに送ることができるようにするため、伸長器２６０２はバンドバッファ２６０３をデータが十分に満たされた状態に保つ。
【０３１９】
図４６は、オプショナルな画質改善を含む別の実施例である。図４６において、伸長器２６０２より出力される画素は画質改善ブロック２７０５を介してバンドバッファ２６０３に入力するが、他の情報すなわち未だ画素になっていない情報（部分的な係数）はバンドバッファ２６０３へ直接送られる。画質改善ブロック２７０５は、補間処理、平滑化処理、誤差拡散処理、中間調処理及び／又はディザ処理などの機能を果たす。
【０３２０】
伸長器２６０２とバンドバッファ２６０３の間に必要となる帯域幅のため、伸長器２６０２はまず、変換係数をバンドバッファ２６０３に書き込み、バンドバッファ２６０３をアクセスして特定の係数を取り込み、逆変換を行ってからバンドバッファ２６０３に再び書き込む。なお、バンドバッファ２６０３は、作業域としては小さいかもしれない。例えば、１ページの画像が６４Ｍバイトでバンドバッファ２６０３が１６Ｍバイトでも、小さな作業域メモリだと考えられるであろう。
【０３２１】
例えば、３２ビット／画素（８ビットの４成分ＣＭＹＫ）、４００ｄｐｉのＡ４画像で、８ページ／分の場合に必要とされる、バンドバッファ２６０３からプリントエンジン２６０４へのデータレートは、約８Ｍバイト／秒である。代表的なハードディスクの転送速度はおおよそ２Ｍバイト／秒（例えば１．７〜３．５Ｍバイト／秒）である。したがって、ディスク２５０５の帯域幅をプリンタの帯域幅に整合させるためには、約４：１の圧縮率が要求される。一実施例によれば、図４４の圧縮器２５０４及び図４５又は図４６の伸長器２６０２が、単一の集積回路チップに収容される。
【０３２２】
図４７は、プリンタの圧縮／伸長機能を内蔵した集積回路（ＩＣ）チップの一実施例のブロック図である。図４７において、画素データインターフェース２８０１はバンドバッファ（不図示）と接続される。画素データインターフェース２８０１は、バンドバッファに対する読み書きのためのアドレスを生成する。可逆色空間変換を行うため、オプショナルの可逆色空間変換器２８０２が含まれるかもしれない。係数データインターフェース２８０４は、読み書きのためのアドレスを生成し、また２バイト係数を正しくアセンブルする。係数データインターフェース２８０４は、画素データインターフェース２８０１と一緒に、外部メモリにある必要のあるラインバッファリング又は係数バッファリングを制御する。係数データインターフェース２８０４と、可逆色空間変換の利用については後により詳しく説明する。
【０３２３】
なお、双方向の矢印は、データがいずれの向きにも流れ得ることを意味している。例えば、データを圧縮する時には、ＩＣチップの様々なコンポーネントを通じてデータは左から右へ流れる。他方、データ伸長時には、データはおおむね右から左へ向かって流れる。
【０３２４】
データの符号化時には、画素データインターフェース２８０１から、又は可逆色空間変換器２８０２から（それが含まれているとき）、画素をウェーブレット変換ブロック２８０３が受け取ってウェーブレット変換を施す。一実施例において、ウェーブレット変換ブロック２８０３により実行される変換は重複ウェーブレット変換である。これはロスレス及びロッシーの画像圧縮のためのエネルギー集中をする。ロッシー圧縮の場合、ＪＰＥＧの悩みであるブロック境界歪みが回避される。フィルタ係数は、適切に桁揃えされた時には、スカラー量子化で良好なロッシー圧縮結果が得られるように正規化される。一実施例では、ウェーブレット変換ブロック２８０３は、２・６変換を行う。他の実施例では、ウェーブレット変換ブロック２８０３は２・１０変換を行う。ウェーブレット変換ブロック２８０３は他の公知の変換を行ってもよい。ウェーブレット変換ブロック２８０３の様々な具体例について後に詳述する。
【０３２５】
ウェーブレット変換ブロック２８０３から出力された係数は、後で符号化するため、係数データインターフェース２８０４を介してメモリ（例えばバンドバッファ）へ再び書き込まれることがある。一実施例では、メモリに再書き込みされるデータは低重要度データであり、その詳細は後述する。このようなデータは、その後にＩＣチップに読み込まれ符号化される。
【０３２６】
ウェーブレット変換ブロック２８０３より出力された係数、又は係数データインターフェース２８０４を介して受け取られた係数は、コンテクストモデル２８０５に供給される。コンテクストモデル２８０５は、符号化器／復号化器２８０６によるデータの符号化（又は復号化）のためのコンテクストを提供する。一実施例では、コンテクストモデル２８０５はデータを直接的に符号化へ渡すことができる。このように、コンテクストモデル２８０５は最高重要度コンテクストモデルとして動作する。各種のコンテクストモデルの実現構成は前述した。
【０３２７】
一実施例では、符号化器／復号化器２８０６は高速並列コーダからなる。高速並列コーダは、数ビットを並列に処理する。一実施例では、高速並列コーダはＶＬＳＩハードウェアで実現され、あるいは圧縮性能を犠牲にすることなくマルチプロセッサ・コンピュータで実現される。本発明において利用し得る高速並列コーダの一例が、1995年１月10日発行の米国特許第5,381,145号“Method  and  Apparatus  for  Parallel  Decoding  and  Encoding  of  Data”に述べられている。
【０３２８】
他の実施例では、バイナリ・エントロピーコーダはＱコーダ、ＱＭコーダ、有限状態マシンコーダ等からなる。ＱＭコーダは周知の効率バイナリエントロピーコーダである。有限状態マシン（ＦＳＭ）コーダは確率及び事象(outcome)から圧縮ビットストリームへの単純な変換を提供する。一実施例では、有限状態マシンコーダは、テーブルルックアップにより、符号化器及び復号化器の両方として実現される。多様な確率予測法を、このような有限状態マシンコーダで利用できる。一実施例では、本発明の有限状態マシンコーダは、1993年12月21日発行の米国特許第5,272,478号“Method  and  Apparatus  for  Entropy  Coding”に記載されているＢコーダからなる。
【０３２９】
符号化器／復号化器２８０６の出力は、ディスク又は他の記憶媒体あるいは他の通信路とのインターフェースを提供する符号化データインターフェース２８０７に接続される。
【０３３０】
符号化データインターフェース２８０７は、ディスクとの間で符号化データを送受する。一実施例では、ＳＣＳＩインターフェースコントローラがチップに含まれているならば、それはこの点に実装されるであろう。他の実施例では、符号化データインターフェース２８０７は外部のＳＣＳＩコントローラと通信する。ＳＣＳＩ以外の記憶又は通信が利用されてもよい。
【０３３１】
伸長期間に、符号化データインターフェース２８０７を介し、ディスク（又は他のメモリ装置もしくは通信路）より符号化データが符号化器／復号化器２８０６に受信され、そこでコンテクストモデル２８０５より与えられるコンテクストを使って伸長される。伸長により得られた係数はウェーブレット変換ブロック２８０３によって逆変換される。（なお、一実施例ではウェーブレット変換ブロック２８０３が順変換と逆変換の両方を遂行するが、他の実施例では順変換と逆変換は別々のブロックにより行われる。）
ウェーブレット変換ブロック２８０３の出力は画素からなり、これはオプショナルな色空間変換を施され、画素データインターフェース２８０１を介してバンドバッファへ出力される。
【０３３２】
印刷期間におけるシステムの基本タイミングが図４８に示されている。図４８において、各符号化単位の符号化データがディスクから読み出される。可能な限り多くのデータが読み出され、短時間遅れて、係数が復号化される。復号化が終わると、逆ウェーブレット変換が計算される。この変換の終了後、画素をプリントエンジンへ送ることができる。なお、図４８中の影付けは、特定の符号化単位に対し様々なアクションが何時生じるかを明らかにする。
【０３３３】
＜メモリからディスクへの係数埋め込み＞
図２７は、本発明における符号化データの構成を示す。図２７において、最高重要度データ１００３は変換された直後に係数順に符号化される（埋め込まれない）。したがって、このデータはバッファされる必要がない。一実施例では、最高重要度データ１００３は、常にディスクから読み出すことができるように、その量が制限される。
【０３３４】
ある量の低重要度データ１００４がバッファされ、埋め込まれ、そしてディスクに重要度の順に書き込まれる。バッファし、埋め込みし、書き込むことができるデータ量は、転送時間によって決まる。すなわち、システムは、ディスクからの転送時間が終了するまでデータを読み込む。ディスクの転送レートによって、どれだけのデータが保存されるかが決まる。これらのレートは分かっており、また個々の転送の物理特性に依存している。
【０３３５】
圧縮しにくい画像の場合、符号化期間に捨てられるデータもある。このデータは最低重要度データ１００５として示されている。最良のディスク転送レートの場合でも最低重要度データを読み出させる可能性が全くないのであれば、そのデータをディスクに格納する理由がない。多くの、おそらく殆どの画像では、データが捨てられることはないであろう。
【０３３６】
符号化データの順序付けと、それを達成する方法については、既に詳しく説明した。
【０３３７】
以下、圧縮時及び伸長時のバンドバッファの管理について述べ、続いて符号化データの埋め込みスキームについて説明する。変換、コンテクストモデル及び符号化器／復号化器の並列化のハードウェアによる実現例についても説明する。
【０３３８】
＜画素及び係数のインターフェース＞
図４９は、画素データの編成方法の一例を示す。図４９において、ページ３０００はバンド３００１〜３００４に分割される。一実施例では、ページ３０００はページ記述言語又はディスプレイリストによる１ページの記述からなり、各バンドの画素を生成するために使用される。一実施例では、バンド３００１〜３００４のそれぞれは、ディスプレイリスト技法によって、別々にラスタライズされる。各バンド３００１〜３００４はさらに符号化単位（例えば３００１Ａ〜３００１Ｄ）に分割される。
【０３３９】
１バンドにつき多数の符号化単位を用いる利点は、伸長期間にバンドバッファの部分部分を循環的に（ピンポンバッファと同様に）作業域として使用できることである。換言すれば、ある部分の画素を伸長しバンドバッファに格納し、プリンタへ送ると同時に、バンドバッファの別の部分を係数を復号化している間格納するための作業域として使用しつつ、その係数に対応した画素を記憶するためにバンドバッフアのもう１つの部分を使用することができる。
【０３４０】
図５０は、ページ３１００のバンドバッファ３１０１を示す。バンドバッファ３１０１は符号化単位３１０１Ａ〜３１０１Ｄからなる。符号化単位３１０１Ａ，３１０１Ｂは、伸長器が係数を格納するための作業域として働く。符号化単位３１０１Ｃはプリンタへ送る画素を記憶し、一方、符号化単位３１０１Ｄは伸長器が次の画素を格納するための作業域として働く。
【０３４１】
ページ３１００全体が印刷される時に、バンドバッファ３１０１の部分部分を循環的に使用できる。例えば、次の符号化単位として、符号化単位３１０１Ｄの画素がプリンタへ出力される画素である。そうなった時に、符号化単位３１０１Ｂ，３１０１Ｃは伸長器が係数を記憶するための作業域として使用される。またその時に、符号化単位３１０１Ａは伸長器が次にプリンタへ出力する画素を記憶するための作業域として使用される。
【０３４２】
本発明においては、係数は画素より大きい。したがって、２倍のメモリが作業域メモリに割り当てられる。別の実施例では、バンドは多くの又はより少ない符号化単位に分割される。例えば、一実施例では、バンドはそれぞれ８個の符号化単位に分割される。
【０３４３】
＜メモリ帯域幅＞
画素データインターフェースと係数データインターフェースは協力してバンドバッファメモリを効率的に管理する。高速ページモードＤＲＡＭ、ＥＤＯ（extended  data  out)ＤＲＡＭ、その他の連続アクセスに適したメモリが使用されるときには、これらインターフェースは連続したアドレスのデータを十分な長さのバーストとして転送し、メモリの可能帯域幅を有効に利用する。連続したアドレスに対するバーストアクセスをサポートするために、いくつかの小バッファが必要とされるかもしれない。
【０３４４】
図５１は、並列メモリアクセス要求を説明する復号化タイミング図である。図５１において、復号化に必要とされる帯域幅は以下のとおりである。一実施例において、２ＭＨｚ画素クロック、８ＭＨｚ成分クロック、３２ＭＨｚ復号化器クロックが用いられ、また、プリントエンジンが１バイト／成分クロックを要求し、変換器が１係数につき２バイトを読み込み、１成分につき１バイトを書き込むことを思い出されたい。変換が符号化単位時間の半分で実行されるとすれば、変換は６バイト／成分クロックを必要とする。変換速度は、計算時間ではなくメモリ帯域幅によって制限される。２４バイト／成分クロックの帯域幅を利用できるならば、符号化単位時間の８分の１の時間内で変換を計算できるであろう。外部メモリがシームのために使用されるときには、変換は余分な帯域幅を必要とするかもしれない。一実施例では、符号化データの最高重要度部分については、係数を復号化するのに１成分クロックあたり２バイトの書き込みを必要とする。符号化データの低重要度部分の各ビットプレーンについては、復号化するのに１成分クロックにつき１バイトの読み出しと書き込みを必要とする。なお、これは実施例によってはもっと小さいかもしれない。両方の動作が符号化単位時間の半分を使うならば、４バイト／成分クロックの帯域幅と２４バイト／成分クロックの帯域幅がそれぞれ必要となろう。コンテクストシーム情報のために外部メモリが使用されるならば、余分な帯域幅が必要となるかもしれない。
【０３４５】
一実施例では、最高のバーストモード転送速度は、４メモリアクセス／成分クロック（１アクセス／復号化器クロック）である。したがって、３２ビットのデータバスを用いれば、最高転送速度は１６バイト／成分クロックよりやや小さい。６４ビットのデータバスを用いれば、最高転送速度は３２バイト／成分クロックよりやや小さい。
【０３４６】
＜ＬＩＣメモリの必要帯域幅の削減＞
ＬＩＣの各係数の各ビットは、復号化中に外部メモリの１回の読み出しと１回の書き込みを必要とする。（符号化には１回の読み出ししか必要としない。）これらのメモリアクセスが必要とされるメモリ帯域幅の大半の原因である。一実施例では、各ＬＩＣ係数を８ビット単位で記憶する代わりに、可能な時に８ビット未満を使って係数を記憶することにより必要な帯域幅を減らす。
【０３４７】
図６６は、各ビットプレーンの復号化のためＬＩＣ係数を記憶するのに必要なメモリ量を表している。図６６において、ＭＩＣの処理時に１係数につき１ビット（テールオンビット）が書き込まれる。ビットプレーン５のために書き込まれるものがビットプレーン４のために再び読み出される：テールオンビットと、ビット５が何であったかと、ビット５が１であったときの符号ビットを含む２〜３ビットである。割合は、各ビットプレーンについて、何パーセントの係数が関係しているかを示す。これは、図３１を見ればもっと明瞭になろう。図３１において、ＤＤ１からＤＳ４，ＳＤ４までの部分帯域からの全係数がビットプレーン５にデータを持つので（網掛けされているように）、ビットプレーン５は全ての部分帯域からの係数を持つ。ビットプレーン０はＤＤ１部分帯域からの係数しか持たない。図６６に示されるように、ビットプレーン４とビットプレーン５は共に全部分帯域からの係数を有するので、その割合は１００％であるが、ビットプレーン０は２５％の係数しか持たない（ＤＤ１部分帯域に）。復号化が進むにつれ、いくつかのビットプレーンはビットプレーン０に達する前に完了する。
【０３４８】
図６６において、復号化の開始時はビットプレーンの復号化は全く行われていないため、全ての係数の１ビット（１係数につき１ビット）だけ読み出されヘッド又はテールであるか調べられる。復号化が進むにしたがい１係数あたりのビット数が増加する。
【０３４９】
図５２は、読み出されたデータより大きなデータの書き込みを処理するため循環アドレッシングを利用する方法を説明するものである。このようなことが起きるのは、処理の結果、初めに読み出されたビットより多い、書き込むべきビットが発生するからである。図５２において、プロセスは１係数あたり１ビット（メモリスペースの８分の１である）を書き込むことから始まる。続いて、１係数あたり１ビットが読み出され、同時に１係数あたり２〜３ビットが書き込まれる。次に、１係数あたり２〜３ビットが読み出され、同時に１係数あたり３〜４ビットが書き込まれる。これがデータ全部が処理されるまで続く。
【０３５０】
ハードウェア構成を簡略化するためのいくつかの選択肢がある。常に最小数のビットを使用するのではなく、ことによれば１，２，３，４，６又は８ビットだけが使用されるかもしれない。これは、サイズによっては１ビットが無駄なるかもしれない。ＬＩＣにおいて符号ビットが符号化されないか分かっていないときでも、符号ビットのためのスペースは常に使用できるだろう。
【０３５１】
メモリ帯域幅を一層減少させるであろう選択肢は、テールオンビットを必要でないときには記憶しないことかもしれない。例えば、ビットプレーン０を書き込む時には、ヘッドビットかテールビットの６ビットがある。これらビットのどれかが非０ならば、テールオンは真のはずであり、テールオン値を記憶する必要はなく、符号ビットを第７ビットとして記憶させることができる。
【０３５２】
最高重要度部分（ＭＩＣ）のためのメモリ帯域幅も可変長記憶方法によって減らしてもよい。いつも１係数あたり８ビットを使用する代わりに、最小数のビットを使用するだけでも節減をもたらすだろう。０係数の代わりに６ビットのルックアヘッド値（図３４に示すような）を記憶すれば、メモリが一層効率的に使用されることになろう。
【０３５３】
＜可逆色空間＞
本発明は、２つの色空間の間の変換を完全に可逆的でかつ整数演算で実行可能とする可逆色空間変換を随意に実行できるようにする。すなわち、変換された色空間データを逆変換することにより、順変換過程で丸めや打ち切りが行われようと既存のデータを全て得ることができる。可逆色空間変換は、本願出願人に譲渡された米国特許出願第08/436,662号（1995年５月８日受理、“Method  and  Apparatus  for  Reversible  Color  Conversion”)に記載されている。
【０３５４】
色空間変換は、ロスレスの結果を提供する能力を損なわずに反対(opponent)色空間の利点を活かす。ロスレスの場合、反対色空間は相関を弱め圧縮を向上させる。ロッシーの場合、反対色空間は輝度情報を色差情報より軽く量子化させ視覚的品質の向上をもたらす。本発明の変換に可逆色空間が使用されると、輝度及び色差係数の埋め込みはロッシー圧縮としてはサブサンプリングよりも優れており、しかもロスレス圧縮が可能である。
【０３５５】
可逆色空間が使用されるときには、８ビット輝度成分の最上位ビットと９ビット色差成分が同じ桁揃えとなるように係数を桁揃えするのが望ましい。ロッシー圧縮のためには、この桁揃えは色差データを輝度データの２倍に量子化せしめ、また輝度のロスレス圧縮と色差のロッシー（ただし非常に高品質の）圧縮を可能にする。これらの結果は共にHuffman視覚系の特性を利用する。
【０３５６】
＜他の画素操作＞
プリンタは、殆ど又は全体が非連続階調の文書をしばしば処理する。例えば、黒と白だけ（０と２５５の値だけ）からなるテキスト画像が普通であろう。一実施例では、バンドのヒストグラムが作られる。例えば、０，２５５黒／白だけの画像（Ｋ成分）を０，１画像に再写像することができる。同様のコンパクション(compaction)をスポットカラー画像に対して施すことができる。なお、コンパクションが使われるときには、圧縮はロスレスでなければならない。しかし、コンパクションが行われる時には、達成されるロスレス圧縮は実質的に改善される。
【０３５７】
また、本明細書に述べた重複ウェーブレット変換を使う代わりに、ロスレス、ビットプレーン・ベースの、ＪＢＩＧのようなコンテクストモデルによって、２値画像とスポットカラー画像を処理することもできる。
【０３５８】
他の実施例では、システムがバイナリモードを持つように設計されるかもしれない。図５４は、ＪＢＩＧ方式コンテクストモデルテンプレートと類似したバイナリコンテクストモデルの一実施例を示す。図５４において、シフトレジスタ３５０１〜３５０３はＪＢＩＧ標準にしたがう複数のビットを提供する。シフトレジスタ３５０１，３５０２は、ラインバッファ３５００より２つ上のラインと１つ上のラインを受け取る。この“上”ラインは、図５６に示されるような、テンプレートの北西（ＮＷ）位置、北（Ｎ）位置及び北東（ＮＥ）位置の画素に対応するビットを提供する。シフトレジスタ３５０１，３５０２の出力は直接的にコンテクストモデル（メモリ）３５０５に与えられる。シフトレジスタ３５０３の出力は、ＪＢＩＧ標準の適応的テンプレートを実現できるオプショナルなｍｕｘ３５０４へ与えられる。コンテクストメモリ（モデル）３５０５は確率予測マシン３５０６に接続され、確率予測マシン３５０６はビットジェネレータ３５０７へ接続される。コンテクストメモリ（モデル）３５０５、確率予測マシン３５０６、ビットジェネレータ３５０７は相互に従来周知の方法で動作する。
【０３５９】
ｍｕｘ３５０４の出力は、シフトレジスタ３５０１，３５０２の出力及びビットジェネレータ３５０７からのフィードバックと共に、コンテクストメモリ３５０５のアドレッシングに使われるコンテクストビンアドレスを形成する。一実施例では、コンテクストメモリ３５０５は、一実施例では、コンテクストメモリ３５０５に、各確率状態を記述するための６ビットからなるコンテクストモデルが１，０２４個入っている。これは１，０２４×６ビットのコンテクストメモリを必要とする。
【０３６０】
ビットジェネレータ３５０７は、カレント・ラインから復号化されたビットを、コンテクストアドレスの一部として提供するので、コンテクストメモリに対するアクセス時間を含んだ大きな“ビット−コンテクスト”遅延がある。
【０３６１】
図５５は、シフトレジスタ３５０１，３５０２の出力及びマルチプレクサ３５０４の出力を受け取る同一アドレス指示ブロック３６０１と協力し、確率予測マシンをアクセスするために、カレント・ラインからの復号化ビットを使用する他の実施例を示す。ＰＥＭ３５０６は、前ビットを受け取り、それを利用して、使用されたコンテクスト対の中から適切な１つのコンテクストを選択する。選択されたコンテクストは更新され、両コンテクストはメモリに再書き込みされる。同一アドレス指示ブロック３６０１は、既に読み出されてデータが確率予測マシン内にあるアドレスを検出する。同一アドレス指示ブロック３８０１は、メモリ内の失効した情報に代えてＰＥＭ内に既にあるデータ（更新されたデータかもしれない）を使用するための信号も発生する。
【０３６２】
一実施例では、復号化器は各確率状態を記述する６ビットからなる１０２４個のコンテクストビンを含む。これは５１２×１２ビットのコンテクストメモリを必要とする。シフトレジスタ３５０１，３５０２の出力は、マルチプレクサ３５０４の出力と共に、前ビットだけが利用されない部分コンテクストビンアドレスを与える。これにより、コンテクストメモリ３５０５から１対のコンテクストビンが選択される。コンテクストビンの２ビット以上を部分コンテクストから排除できる。各メモリロケーションに２のｎ乗個の確率状態が入る。ここでｎは排除されたビットの個数である。
【０３６３】
“ビット−コンテクスト”遅延が減少することに注意されたい。前ビットが復号化される前にコンテクストメモリアクセスが生じてもよい。前ビットが復号化される前に、対をなす両状態に対するＰＥＭ状態の処理が並列的に開始してもよい。高速動作を達成できる。
【０３６４】
＜符号化器レート制御＞
符号化器のレート制御を行うには、データを量子化する能力があるだけでなく、量子化に関する決定ができるようにレートを測定することも必要である。レートが圧縮が良好でないこと（すなわち所望のレベルでないこと）を示すときには、量子化を増大させてよい。他方、レートが圧縮が高すぎることを示すときには、量子化を減少させてよい。レート制御決定は符号化器と復号化器とで全く同じように行われねばならない。
【０３６５】
符号化器と復号化器が同じ決定をするよう保証する一方法は、シグナリング(signaling)を使うことである。符号化器は所定のインターバルでレートを測定し、次インターバルで利用するため量子化Ｑをメモリに記憶する。復号化器は単純に各インターバルのための量子化をメモリから取り出す。これには余分なメモリが必要である。例えば、（Ｑの+2,+1,0,-1の変化の表示又は1,2,3,4のＱの記憶のための）２５６ロケーション×２ビットのオンチップＳＲＡＭは、４０９６ライン画像に対し１６ライン毎に量子化Ｑを変化させるのに足りるであろう。
【０３６６】
レート測定には様々な選択肢がある。図５３は、符号化器と復号化器のペアを示す。図５３に示す符号化器／復号化器ペアは、コンテクストモデル（ＣＭ）、確率予測モデル／マシン（ＰＥＭ）、及びビットジェネレータ（ＢＧ）、並びにランカウント(run  count)並べ換えユニット、インターリーブド(interleaved)ワード並べ換えユニット及びシフタからなる。説明については、本願出願人に譲渡された、また引用により本明細書に組み込まれる米国特許第5,381,145号及び同第5,583,500号を参照されたい。
【０３６７】
復号化器がレートを同じ場所で測定できないとしても、レート測定値は明確でなければならない。例えば、レート測定値は、圧縮コードストリームの一部として復号化器に与えられる。
【０３６８】
小さい方のサークル(図５３中の位置２）として示した、もう一つのレート測定の選択肢は、符号化器においてインターリーブド・ワードの始まりをカウントすることである。これは、他の実施例では、ビット生成ステージ(図５３中の位置４）の後で行われる。符号化器と復号化器は同時に符号語に取りかかるため、レートの暗黙的なシグナリングを用いてもよい。このカウントを、レジスタと符号語長を加算する加算器からなる平均符号語長を測定する計算ハードウェアによって行ってもよい。このカウントと平均ビット数測定を行うためのハードウェアは当該技術分野では周知であり、図５３にブロック３４０１として示されている。このブロックを、システム中の別の場所（例えば、符号化器及び復号化器の両方の位置１，２，３，４）で同様の測定をするために用いてもよいことは明らかであろう。
【０３６９】
他の選択肢は、ビットジェネレータの後及びインターリーブド・ワード並べ換えユニットの前(図５３の位置３）で完全な符号語のサイズをカウントする方法や、ディスクに実際に書き込まれたデータ量を測定する方法（図５３の位置１）であろう。
【０３７０】
レート測定は暗黙的でもよい。すなわち、符号化器と復号化器の両方で同じレート測定計算を行う。例えば、符号化器と復号化器が、新しい符号語が始まる度に符号語の平均サイズを累積してもよい。これは図５３の位置４に示されている。（実際のサイズを使うことはできない。符号化器は符号語の終わりまでサイズが分からないからである。）
コアに使用されるＲコードのサイズがR2(0)からR2(7)まで変わるときには、平均符号語サイズは１ビットから４．５ビットまで変化する。確率予測がうまくいけば、平均を使うことは非常に正確であろう。そうでなくとも、最小符号語長と最大符号語長の差は平均に対し一般的にそれほど大きくないので、予測値は依然として有効である。Rz(k)符号語の平均サイズはk/2+1ビットである。
【０３７１】
目標とするところは、ほぼ全ての場合に、最高重要度データが十分に圧縮され、かつ無量子化(Q=1)が必要とならないことであろう。“病理学の”画像だけは量子化（Ｑ＞１）を必要とする。しかし、量子化機能を含むことにより、病理学の画像に対しシステムが動かなくならないよう保証することができる。
【０３７２】
符号化器レート制御のもう一つの利益は、最大帯域幅に達した時に低重要度データの符号化を止めることができることである。これは符号化スピードを増加させ、データ出力のためのトータル時間を減少させる（例えばトータル印刷時間を減らす）。
【０３７３】
量子化変化の結果（Ｑの値）を記憶することが重要である。例えば、量子化が変化する場合、一群の係数中の最大係数の決定は首尾一貫していなければならない。また、（ビットプレーンが捨てられる場合に）量子化係数を再構成するのに、最良の結果を得るためには捨てられたビットプレーン数を考慮する必要がある。
【０３７４】
＜高速の並列符号化とコンテクストモデル＞
本発明のエントロピー符号化部は２つの部分からなる。一つは並列動作する高速符号化コアで、確率予測とビット生成をする。もう一つはコンテクストモデルで、符号化に使うコンテクストを提供する。
【０３７５】
所要速度を達成するために必要なコアの個数はアプリケーション次第である。
【０３７６】
エントロピー符号化システムの他の部分は、本発明の係数のためのコンテクストモデルである。コンテクストモデルを構築するにあたって、とり得るトレードオフが数多くある。本発明は、一実施例において、本発明の高速並列コーダの使用をサポートするための並列化を可能にするコンテクストモデルを低いハードウェアコストで提供する。このコンテクストモデルの実施例は前述した。
【０３７７】
ウェーブレット係数のためのコンテクストモデルについてだけ説明したが、本発明はウェーブレット係数だけをサポートするコンテクストモデルに限定されるものではない。例えば、２値画像又はスポットカラー画像のためにビットプレーン符号化モードが必要ならば、米国特許出願第08/642,518号(1996年５月３日受理、“Compression  and  Decompression  with  Wavelet  Style  and  Binary  Style  Including  Quantization  by  Device-Dependent  Parser”)、及び、米国特許出願第08/643,268号(1996年５月３日、“Compression/Decompression  Using  Reversible  Embedded  Wavelets”に述べられているような、補助のコンテクストモデルを利用してよい。
【０３７８】
＜並列化＞
一実施例では、係数のビット数が８ビットから１２ビットまで（可逆色空間が使われるときには１３ビットまで）の場合に、１係数あたり８ビットを符号化／復号化するために４つの高速符号化コアが使用される。一実施例では、１つのコアに４成分のそれぞれが割り当てられ、並列化とデータフローを単純化する。各係数は、（ルックアヘッドのためのデシジョン等を含む）ビットの符号化／復号化のために最大１６サイクルまで使うことができる。
【０３７９】
本発明は、一部のコアがそのルックアヘッドの成功により遊休状態であったり別のコアが先頭の“オン”ビットの後の符号ビットを処理中であっても、各成分用コアを同期した状態に維持する。コンテクストモデルを動作させるためのトータル時間は、データによって変動し、特にルックアヘッドの有効性によって大きく変動し、また、それほどではないが先頭の“オン”ビットの位置によっても変動する。
【０３８０】
以上の説明を読めば当業者には本発明の多くの変形及び修正が明白となるであろうから、説明のために図示、説明された特定の実施例は限定することを意図したものでは決してないものと理解されるべきである。
【図面の簡単な説明】
【０３８１】
【図１】コンテクスト従属関係を示す図である。
【図２】ラスタ順と同様の順序を示す図である。
【図３】短シーム順の一例を示す図である。
【図４】短シーム順の他の例を示す図である。
【図５】ＴＳ変換のレベル１水平処理結果を示す図である。
【図６】ＴＳ変換のレベル１垂直処理結果を示す図である。
【図７】ＴＳ変換のレベル２水平処理結果を示す図である。
【図８】ＴＳ変換のレベル２垂直処理結果を示す図である。
【図９】ＴＳ変換のレベル３水平処理結果を示す図である。
【図１０】ＴＳ変換のレベル３垂直処理結果を示す図である。
【図１１】ＴＳ変換のレベル４水平処理結果を示す図である。
【図１２】ＴＳ変換のレベル４垂直処理結果を示す図である。
【図１３】順／逆フィルタの一例のブロック図である図である。
【図１４】本発明による第１レベル順変換の一例のブロック図である。
【図１５】本発明による完全な順変換の一例を示すブロック図である。
【図１６】係数出力時のタイミング図である。
【図１７】ＴＴ変換のレベル１水平処理結果を示す図である。
【図１８】ＴＴ変換のレベル１垂直処理結果を示す図である。
【図１９】ＴＴ変換のレベル２水平処理結果を示す図である。
【図２０】ＴＴ変換のレベル２垂直処理結果を示す図である。
【図２１】ＴＴ変換のレベル３水平処理結果を示す図である。
【図２２】ＴＴ変換のレベル３垂直処理結果を示す図である。
【図２３】ＴＴ変換のレベル４水平処理結果を示す図である。
【図２４】ＴＴ変換のレベル４垂直処理結果を示す図である。
【図２５】１０タップの順／逆フィルタユニットのブロック図である。
【図２６】図２５に示す順／逆フィルタにおける重複ユニットの一例のブロック図である。
【図２７】コードストリームの順序付け及び符号化単位内の順序付けを示す図である。
【図２８】ｂビット／画素の入力画像を２レベルＴＳ変換及びＴＴ変換で分解した場合の各種係数のビット深さを示す図である。
【図２９】本発明において係数桁揃えに用いられる周波数帯域に対する乗数の一例を示す図である。
【図３０】最高重要度データと低重要度データとに分割した係数を示す図である。
【図３１】データが捨てられることのないロスレスのケースを示す図である。
【図３２】データの１ビットプレーンが捨てられたケースを示す図である。
【図３３】圧縮／伸長システムの動作の一例を示すフローチャートである。
【図３４】一つの木に対し６ビットが用いられる例を示す図である。
【図３５】最高重要度部分の符号化を示すフローチャートである。
【図３６】最高重要度データの符号化パスに用いられるフォーマッティングユニット及びコンテクストモデルの一例のブロック図である。
【図３７】先頭ビットプレーンユニットの一例を示すブロック図である。
【図３８】ＬＩＣビットプレーンの符号化プロセスの一例を示すフローチャートである。
【図３９】低重要度データのためのルックアヘッド・モデル及びコンテクストモデルの一例を示すブロック図である。
【図４０】ヘッドビットのためのコンテクストモデルの一例を示すブロック図である。
【図４１】全ての隣り合うもの及び親による条件付けがあるコンテクストモデルの一例のためのメモリ使用方法を示す図である。
【図４２】符号ビットのためのコンテクストモデルの一例を示すブロック図である。
【図４３】ＬＩＣに対する並列符号化の一例を示す図である。
【図４４】プリンタのフロントエンドの一例を示すブロック図である。
【図４５】プリンタのバックエンドの一例を示すブロック図である。
【図４６】プリンタのバックエンドの他の例を示すブロック図である。
【図４７】プリンタの圧縮／伸長機能を含む集積回路チップの一例を示すブロック図である。
【図４８】印刷時の基本タイミングを示す図である。
【図４９】画素データの編成方法の一例を示す図である。
【図５０】バンドバッファを示す図である。
【図５１】同時メモリアクセス要求を明らかにする復号化タイミング図である。
【図５２】読み出されたデータより大きなデータの書き込みを処理するための循環アドレッシングの利用法を示す図である。
【図５３】符号化器と復号化器のペアを示すブロック図である。
【図５４】バイナリコンテクストモデルの一例を示すブロック図である。
【図５５】バイナリコンテクストモデルの他の例を示すフロック図である。
【図５６】符号化単位の各係数の近傍係数を示す図である。
【図５７】ＭＳＥ桁揃えに基づいたピラミッド桁揃えを示す図である。
【図５８】ウェーブレット係数のＭＳＥ桁揃えを示す図である。
【図５９】様々なレベル数の場合のウェーブレット木のスパンを示す表図である。
【図６０】記憶する必要のある”ｓｓ”係数の個数を示す表図である。
【図６１】４ビット係数のビットシグニフィカンス表現を示す表図である。
【図６２】係数桁揃えのための桁揃え数を示す表図である。
【図６３】最高重要度データ及び低重要度データの指示ビットを説明する表図である。
【図６４】テール情報の定義を示す表図である。
【図６５】テールビットに用いられる確率状態を示す表図である。
【図６６】各ビットプレーンの復号化のためのＬＩＣ係数の記憶に要するメモリ量を示す表図である。
【符号の説明】
【０３８２】
４０１，４０２  フィルタユニット
４０３〜４０６  レジスタ
４０７，４０８  マルチプレクサ（ｍｕｘ）
５０１  入力バッファ
５０２  レベル１変換部
５０３  ”ｓｓ”遅延メモリ
５０４  レベル２〜４順序ユニット
５０５  フィルタユニット
５０６  出力バッファ
８０１，８０２  加算器
８０３，８０４  マルチプレクサ（ｍｕｘ）
８０５  メモリ
８０６  マルチプレクサ（ｍｕｘ）
８０７  重複ユニット
８０７〜８１１  加算器
９０１〜９０６  加算器
９０７〜９０９  乗算器
９１０  除算器
１００１  ヘッダ
１００２  符号化単位
１００３  最高重要度データ
１００４  低重要度データ
１００５  最低重要度データ
１３０１  最高重要度データ
１３０２  低重要度データ
１３０３，１３０４  指示ビット
１７０１  バレルシフタ
１７０２，１７０６  先頭ビットプレーンユニット
１７０３，１７０４  比較ユニット
１７０５  マルチプレクサ（ｍｕｘ）
１７０７  メモリ
１７１０  符号コンテクストモデル
１７１１  ヘッドコンテクストモデル
１７１２  テールコンテクストモデル
１８０１  ＯＲゲート
１８０２  レジスタ
１８０３  プライオリティエンコーダ
２００１  符号コンテクストモデル
２００２  ヘッドコンテクストモデル
２００３  テールコンテクストモデル
２００４  マルチプレクサ（ｍｕｘ）
２００５  ”＝ヘッド？”ユニット
２００６  ＦＩＦＯバッファ
２１０１  テールオン情報／ビットジェネレータブロック
２１０２  重要度レベル・部分帯域バケッティングブロック
２１０３  上／左シフトレジスタ
２１０４  カレントシフトレジスタ
２１０５  下／右シフトレジスタ
２１０６  親レジスタ
２３０１  マルチプレクサ（ｍｕｘ）
２５０１  レンダラー
２５０３  バンドバッファ
２５０４  圧縮器
２５０５  ディスク
２６０２  伸長器
２６０３  バンドバッファ
２６０４  プリントエンジン
２７０５  画質改善ブロック
２８０１  画素データインターフェース
２８０２  可逆色空間変換器
２８０３  ウェーブレット変換ブロック
２８０４  係数データインターフェース
２８０５  コンテクストモデル
２８０６  符号化器／復号化器
２８０７  符号化データインターフェース
３５００  ラインバッファ
３５０１〜３５０３  シフトレジスタ
３５０４  マルチプレクサ（ｍｕｘ）
３５０５  コンテクストメモリ
３５０６  確率予測マシン（ＰＥＭ）
３５０７  ビットジェネレータ
３６０１  同一アドレス指示ブロック
４００１，４００２  加算器
４００３，４００４  マルチプレクサ（ｍｕｘ）
４００５  レジスタファイル
４００７〜４０１１  加算器
４０１５  マルチプレクサ（ｍｕｘ）
【図１】
2007267384.tif 000009
【図２】
2007267384.tif 000010
【図３】
2007267384.tif 000011
【図４】
2007267384.tif 000012
【図５】
2007267384.tif 000013
【図６】
2007267384.tif 000014
【図７】
2007267384.tif 000015
【図８】
2007267384.tif 000016
【図９】
2007267384.tif 000017
【図１０】
2007267384.tif 000018
【図１１】
2007267384.tif 000019
【図１２】
2007267384.tif 000020
【図１３】
2007267384.tif 000021
【図１４】
2007267384.tif 000022
【図１５】
2007267384.tif 000023
【図１６】
2007267384.tif 000024
【図１７】
2007267384.tif 000025
【図１８】
2007267384.tif 000026
【図１９】
2007267384.tif 000027
【図２０】
2007267384.tif 000028
【図２１】
2007267384.tif 000029
【図２２】
2007267384.tif 000030
【図２３】
2007267384.tif 000031
【図２４】
2007267384.tif 000032
【図２５】
2007267384.tif 000033
【図２６】
2007267384.tif 000034
【図２７】
2007267384.tif 000035
【図２８】
2007267384.tif 000036
【図２９】
2007267384.tif 000037
【図３０】
2007267384.tif 000038
【図３１】
2007267384.tif 000039
【図３２】
2007267384.tif 000040
【図３３】
2007267384.tif 000041
【図３４】
2007267384.tif 000042
【図３５】
2007267384.tif 000043
【図３６】
2007267384.tif 000044
【図３７】
2007267384.tif 000045
【図３８】
2007267384.tif 000046
【図３９】
2007267384.tif 000047
【図４０】
2007267384.tif 000048
【図４１】
2007267384.tif 000049
【図４２】
2007267384.tif 000050
【図４３】
2007267384.tif 000051
【図４４】
2007267384.tif 000052
【図４５】
2007267384.tif 000053
【図４６】
2007267384.tif 000054
【図４７】
2007267384.tif 000055
【図４８】
2007267384.tif 000056
【図４９】
2007267384.tif 000057
【図５０】
2007267384.tif 000058
【図５１】
2007267384.tif 000059
【図５２】
2007267384.tif 000060
【図５３】
2007267384.tif 000061
【図５４】
2007267384.tif 000062
【図５５】
2007267384.tif 000063
【図５６】
2007267384.tif 000064
【図５７】
2007267384.tif 000065
【図５８】
2007267384.tif 000066
【図５９】
2007267384.tif 000067
【図６０】
2007267384.tif 000068
【図６１】
2007267384.tif 000069
【図６２】
2007267384.tif 000070
【図６３】
2007267384.tif 000071
【図６４】
2007267384.tif 000072
【図６５】
2007267384.tif 000073
【図６６】
2007267384.tif 000074
【手続補正書】
【提出日】平成19年4月25日(2007.4.25)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ウェーブレット変換の結果、生成された係数を圧縮する圧縮装置であって、
前記係数を最高重要度データと低重要度データとに分割する手段と、
前記最高重要度データを直ちに係数順に符号化するためコンテクストモデルへ送出する手段と、
前記低重要度データ及び当該低重要度データ中の複数の指示ビットを格納するメモリと、
前記最高重要度データを符号化した後に、前記メモリに格納されている前記低重要度データを符号化するとともに、前記複数の指示ビットに基づいた順序付けを行う手段とを有することを特徴とする圧縮装置。
【請求項２】
ウェーブレット変換の結果、生成された係数を圧縮する圧縮方法であって、
前記係数を最高重要度データと低重要度データとに分割するステップと、
前記最高重要度データを直ちに係数順に符号化するためコンテクストモデルへ送くるステップと、
前記低重要度データ及び当該低重要度データ中の複数の指示ビットをメモリに格納するステップと、
前記最高重要度データを符号化した後に、前記メモリに格納されている前記低重要度データを符号化するとともに、前記複数の指示ビットに基づいた順序付けを行うステップとを有することを特徴とする圧縮方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ圧縮及び伸長システムの分野に係り、特に、圧縮／伸長システムにおけるロスレス及びロッシーのデータ符号化及び復号化に関する。
【背景技術】
【０００２】
データ圧縮は、大量のデータの蓄積及び伝送のために非常に有用なツールである。例えば、文書のファクシミリ伝送のような画像伝送に要する時間は、圧縮を利用して画像の再生に必要とされるビット数を減らすと飛躍的に短縮される。
【０００３】
従来より、多くの様々なデータ圧縮手法が存在している。圧縮手法は、おおまかに分類すると２つのカテゴリー、つまりロッシー符号化とロスレス符号化とに分けることができる。ロッシー符号化とは、情報の損失を生じ、したがって元のデータの完全な再現が保証されない符号化のことである。ロッシー符号化の目標とするところは、元のデータから変わったとしても、その変化が不快であったり目だったりしないようにすることである。ロスレス圧縮では、情報がすべて保存され、データは完全に復元可能な方法で圧縮される。
【０００４】
ロスレス圧縮では、入力シンボルもしくは輝度データが出力符号語に変換される。入力としては、画像データ、音声データ、１次元データ（例えば空間的または時間的に変化するデータ）、２次元データ（例えば２つの空間軸方向に変化する（または１つの空間次元と１つの時間次元で変化する）データ）、あるいは多次元／マルチスペクトルのデータがあろう。圧縮がうまくいけば、その符号語は、符号化前の入力シンボル（または輝度データ）のために必要とされたビット数より少ないビット数で表現される。ロスレス符号化法には、辞書符号化方式（例えば、Lempel-Ziv方式）、ランレングス符号化方式、計数符号化方式、エントロピー符号化方式がある。ロスレス画像圧縮では、圧縮は予測またはコンテクストと符号化に基づいている。ファクシミリ圧縮用ＪＢＩＧ標準(ISO/IEC
11544)と、ＤＰＣＭ（差分パルス符号変調−連続階調画像用のＪＰＥＧ標準のオプション）は画像用のロスレス圧縮の例である。ロッシー圧縮では、入力シンボルまたは輝度データは、量子化され、しかるのちに出力符号語へ変換される。量子化の目的とするところは、データの重要な特徴量を保存する一方で、重要でない特徴量を除去することである。ロッシー圧縮システムは、量子化に先立ち、エネルギー集中をするための変換を利用することが多い。ＪＰＥＧは画像データ用のロッシー符号化法の一例である。
【０００５】
画像信号処理における近年の開発は、効率的かつ高精度のデータ圧縮符号化方式の追求に関心を集中してきた。変換またはピラミッド信号処理の様々な方式が提案されており、その中に多重解像度ピラミッド処理方式とウェーブレット・ピラミッド処理方式とがある。これら２方式はサブバンド処理方式及び階層処理方式とも呼ばれる。画像データのウェーブレット・ピラミッド処理方式は、クァドレチャーミラーフィルタ（Quadrature  Mirror  filter;ＱＭＦ）を用いてオリジナル画像のサブバンド分割をする特殊な多重解像度ピラミッド処理方式である。なお、他の非ＱＭＦウェーブレット方式もある。ウェーブレット処理方式に関し、これ以上の情報を得るには、例えば非特許文献１、２を参照されたい。また、可逆変換に関する情報を得るには、非特許文献３を参照されたい。
【０００６】
【非特許文献１】Antonini，M.，et  al.，“Image  Coding  Using  Wavelet  Transform”，IEEE  Transactions  on  Image  Processing，Vol.1，No.2，April  1992
【非特許文献２】Shapiro，J.，“An  Embedded  Hierarchical  Image  Coder  Using  Zerotrees  of  Wavelet  Coefficients”，Proc．IEEE  Data  Compression  Conference，pgs．214-223，1993
【非特許文献３】Said，A．and  Pearlman，W.，“Reversible  Image  Compression  via  Multiresolution  Representation  and  Predictive  Coding”，Dept．of  Electrical，Computer  and  System  Engineering，Renssealaer  Polytechnic  Institute，Troy，NY  1993
【発明の開示】
【発明が解決しようとする課題】
【０００７】
圧縮は、しばしば非常に時間がかかり、また膨大なメモリを必要とする。より高速に、かつ／又は、可能なかぎり少ないメモリで、圧縮を行うのが望ましい。品質を保証できない、圧縮率が不十分である、あるいはデータレートが制御可能でないという理由で、圧縮が全く利用されなかった応用分野もある。しかし、伝送及び／又は記憶すべき情報量を減らすため圧縮の利用が望ましい。
【０００８】
デジタルコピア、プリンタ及び多機能機器は、フレーム記憶を備えると性能が非常に向上する。フレーム記憶が圧縮されれば、これら製品におけるフレーム記憶に必要とされるメモリが減り、したがってそのコストが削減される。しかし、多くのフレーム記憶はランダムアクセスメモリ（ＲＡＭ）で実現される。ＲＡＭは高速であるが一般に高価である。ハードディスクもメモリとして使用でき、一般に安い（一般にＲＡＭほど高価ではない）と考えられる。したがって、システムの製造者であれば、フレーム記憶などにＲＡＭにかえてハードディスクを用い、より安価なシステムを製造することが有利であると考えるであろう。
【０００９】
速度が重要なアプリケーションにとってハードディスクを使用することの一つの問題点は、ＲＡＭほど高速にハードディスクから情報を直接呼び出すことが困難であることである。また、多くのハードディスクは、情報をディスクに格納する時に、ディスクに格納可能な情報量を増加させるため圧縮を利用する。この圧縮の実行に要する時間も、速度が重要なアプリケーションでハードディスクの使用をためらわせる要因であろう。ハードディスクの使用、圧縮の利用に内在する速度の遅さが、速度の重要なアプリケーションにハードディスクを使用することを難しくしている。
【００１０】
よって、本発明は、高速なロッシー／ロスレス圧縮を可能にすることを主たる目的とする。本発明のもう一つの目的は、高価なＲＡＭに代えて安価なハードディスクを使用可能なシステムを提供することを目的とする。本発明の他の目的は、速度をハードディスクにマッチングさせ、かつ、圧縮を利用してハードディスクをプリントエンジンなどのシステムの他の部分の帯域幅にマッチングさせることができるようにすることである。また、本発明の別の目的は、圧縮及び伸長のための時間がＲＡＭ速度に比べそれほど遅くない場合にＲＡＭを使用できるようにすることである。本発明の他の目的は、以下の説明から明らかになろう。
【課題を解決するための手段】
【００１１】
請求項１の発明は、ウェーブレット変換の結果、生成された係数を圧縮する圧縮装置であって、前記係数を最高重要度データと低重要度データとに分割する手段と、前記最高重要度データを直ちに係数順に符号化するためコンテクストモデルへ送出する手段と、前記低重要度データ及び当該低重要度データ中の複数の指示ビットを格納するメモリと、前記最高重要度データを符号化した後に、前記メモリに格納されている前記低重要度データを符号化するとともに、前記複数の指示ビットに基づいた順序付けを行う手段とを有することを特徴とする。
【００１２】
請求項２の発明は、ウェーブレット変換の結果、生成された係数を圧縮する圧縮方法であって、前記係数を最高重要度データと低重要度データとに分割するステップと、前記最高重要度データを直ちに係数順に符号化するためコンテクストモデルへ送くるステップと、前記低重要度データ及び当該低重要度データ中の複数の指示ビットをメモリに格納するステップと、前記最高重要度データを符号化した後に、前記メモリに格納されている前記低重要度データを符号化するとともに、前記複数の指示ビットに基づいた順序付けを行うステップとを有することを特徴とする。
【発明の効果】
【００１３】
本発明によれば、高速なロッシー／ロスレス圧縮が可能になり、また、圧縮／伸長システムに安価なハードディスクを使用可能となり、また、速度をハードディスクにマッチングさせ、かつ、圧縮を利用してハードディスクをプリントエンジンなどのシステムの他の部分の帯域幅にマッチングさせることが可能になる等々の多くの効果を得られる。
【発明を実施するための最良の形態】
【００１４】
圧縮及び伸長のための方法及び装置について述べる。以下の説明において、遅延の種類、ビットレート、フィルタの種類等々の様々な具体例が示される。しかし、当業者には、そのような具体例によらずに本発明を実施し得ることが明白になろう。他方、本発明をいたずらに難解にしないため、周知の構造及びデバイスはブロック図の形式で表し、詳しくは示さない。
【００１５】
以下の詳細説明のかなりの部分は、コンピュータメモリ内のデータビットに対する演算のアルゴリズム及び記号表現によって与えられる。このようなアルゴリズム記述及び表現は、データ処理技術分野の当業者によって、その研究の内容を他の当業者に対し最も効率的に伝えるために用いられる手段である。あるアルゴリズムがあり、それが概して、希望する結果に至る自己矛盾のないステップ系列だと考えられるとしよう。これらのステップは、物理量の物理的処理を必要とするものである。必ずという訳ではないが、これらの物理量は記憶、転送、結合、比較、その他処理が可能な電気的または磁気的信号の形をとるのが普通である。これらの信号をビット、値、要素、記号、文字、用語、数値等で表わすのが、主に慣用上の理由から、時に都合がよいことが分かっている。
【００１６】
しかしながら、このような用語や同様の用語は、適切な物理量と関係付けられるべきであり、また、これら物理量につけた便宜上のラベルに過ぎないということに留意すべきである。以下の説明から明らかなように、特に断わらない限り、「処理」「演算」「計算」「判定」「表示」等々の用語を用いて論じることは、コンピュータシステムのレジスタ及びメモリの内部の物理的（電子的）な量として表現されたデータを処理して、コンピュータシステムのメモリまたはレジスタ、同様の情報記憶装置、情報伝送装置あるいは表示装置の内部の同様に物理量として表現された他のデータへ変換する、コンピュータシステムあるいは同様の電子演算装置の作用及びプロセスを指すものである。
【００１７】
本発明はまた、本明細書に述べる操作を実行するための装置にも関係する。この装置は、要求目的のために専用に作られてもよいし、あるいは、汎用コンピュータを内蔵プログラムにより選択的に駆動または再構成したものでもよい。そのようなプログラムは、それに限定されないが、コンピュータのシステムバスにそれぞれ接続されたフロッピーディスク、光ディスク、ＣＤ−ＲＯＭ、光磁気ディスク、リードオンリーメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気カード又は光カード、あるいは電子的命令の格納に適したその他の媒体など、コンピュータの読み出し可能な記憶媒体に格納してよい。本明細書に提示されるアルゴリズム及び表示は、本質的に、どのような特定のコンピュータ、その他装置とも関わりがない。様々な汎用マシンを本明細書に述べたところに従ったプログラムと一緒に利用してよいが、必要とされる方法のステップの実行のためのより特化した装置を作るほうが好都合であるかもしれない。これら多様なマシンに要求される構造は以下の説明より明らかになろう。さらに、いかなる特定のプログラミング言語とも関連付けることなく本発明を説明する。本明細書において述べるように、本発明を実現するために多様なプログラミング言語を使用し得ることが理解されよう。
【００１８】
下記用語が以下の説明に用いられる。これら各種用語にはすでに語義がある。しかし、規定された語義は、それら用語が当該分野において知られている範囲に限定して考えられるべきでない。これら語義は、本発明の理解を手助けするために規定されたものである。
【００１９】
ＡＢＳ符号化：
ビット生成のための単純なコード（例えばランコード）と使用符号語に基づく確率予測（例えばテーブルを用いる確率予測）を利用する並列エントロピー符号化法。一実施例にあっては、ＡＢＳ符号化は数個のコーダからのストリームのマルチプレキシング及びデマルチプレキシングのための方法も含む。
【００２０】
桁揃え（alignment）：
ある周波数帯域内の変換係数の、他の周波数帯域に対するシフト度合。
【００２１】
算術符号化：
有限精度演算によるShannon/Elias符号化、バイナリ・エントロピーコーダに限らない。
【００２２】
Ｂ符号化：
圧縮のために有限状態マシンを利用するバイナリ・エントロピーコーダ。Huffman符号化と違って、有限状態マシンの利用がバイナリ・シンボルをうまく処理し、ある範囲の入力確率に対して有効である。
【００２３】
バイナリ・エントロピーコーダ：
最高確率シンボル（ｍｐｓ）及び最低確率シンボル（ｌｐｓ）として表現されることの多いバイナリ(yes/no)デシジョンに基づいて動作するノイズレスのコーダ。
【００２４】
バイナリ方式：
画素のエッジ−フィル(edge-fill)Ｇｒａｙエンコーディングと特殊なコンテクストモデルを用いる符号化方式。
【００２５】
バイナリ方式コンテクストモデル：
２値及び階調数が少ない画像データのためのコンテクストモデル。
【００２６】
ビット・シグニフィカンス（bit-significance)：
符号（sign）絶対値表現に似た数表現で、ヘッド(head)ビットの後に符号(sign)ビットが続き、さらに、テール(tail)ビットがあれば、その後に続く。埋め込み(embedding)は、この数表現に対しビットプレーン順に符号化する。
【００２７】
子ベース(child-based)順：
２次元画像のスキャン順。ラスタ順に似ているが、２×２ブロック単位で動作する。ある「親」周波数帯域をラスタ順にスキャンすることを考える。各係数は４個の子を持っているであろう。これらの子は、左上のものから始めて右上、左下、右下と順序付けられ、その後に次の親と次の４つの子の組が続き、以下同様にラインの終わりまで続く。そして処理は次の２ラインに戻り、最終的に右下コーナーで終わる。どのラインもスキップされない。子ベース順は２×２ブロック順とも呼ばれる。
【００２８】
係数：
変換後の成分。
【００２９】
成分：
画像の構成要素。成分が画素を構成する。例えば、赤、緑、青の帯域は成分帯域である。個々の画素は赤、緑、青の成分から構成される。成分と成分帯域に、画像への空間写像を持つ任意の種類の情報を含めることができる。
【００３０】
コンテクストモデル：
符号化しようとするカレント・ビットに関し因果的に利用できる情報で、カレント・ビットに関する過去に学習した情報を提供してエントロピー符号化のための条件付確率予測を可能にする。２値画像において、ある画素のための１つの可能なコンテクストは、同じラインの先行２画素と前ラインの３画素である。
【００３１】
分割レベル：
ウェーブレット分割ピラミッド内の位置。解像度と直接関係がある。
【００３２】
効率変換：
係数への最高のエネルギー集中を達成すると同時に最小のビット数を用いてそれら係数を表現する変換。
【００３３】
埋め込みコンテクストモデル：
コンテクストビンと結果の重要度レベルへの分割を、重要な値が保存されれば効率的なロッシー圧縮が得られるように行うコンテクストモデル。
【００３４】
順序付けによる埋め込み：
明示的な重要度のラベリングはないが、最も重要なデータが初めの部分にくるように圧縮データが順序付けされる、埋め込みコンテクストモデルの特殊ケース。
【００３５】
埋め込み量子化：
コードストリームに包含される量子化。例えば、重要度レベルが最高のレベルから最低のレベルへと順に並べられているときには、コードストリームの単なる打ち切りによって量子化が行われる。タグ、マーカー、ポインタ、その他の信号によって同じ働きを得ることができる。復号化時には画像に対し多重量子化を行うことができるが、符号化時には単一の埋め込み量子化しか行うことができない。
【００３６】
エントロピーコーダ：
カレント・ビットを、確率予測に基づいて符号化又は復号化する装置。本明細書では、エントロピーコーダは多重コンテクストバイナリコーダとも呼ばれることがある。カレント・ビットのコンテクストは何らかの選ばれた配置の「近傍」ビットであり、カレント・ビット（１ビットまたは複数ビット）の最適表現のための確率予測を可能にする。一実施例では、エントロピーコーダはバイナリコーダ、並列ランレングスコーダ、又はHuffmanコーダである。
【００３７】
エントリー・ポイント：
既知の符号化状態で始まる符号化データ中のポイント。復号化器は、この点から、その前データを復号化することなく復号化を開始できる。これには、大抵の場合、コンテクストとバイナリ・エントロピーコーダを所期状態にリセットする必要がある。各符号化単位の符号化データはエントリーポイントから始まる。
【００３８】
固定長：データの特定ブロックを圧縮データの特定ブロックへ変換する方式。例えばＢＴＣ（ブロック符号化）と、ＶＱ（ベクトル量子化）のいくつかの方式。固定長コードは固定レート・固定サイズのアプリケーションに適するが、レート・歪み性能は可変レート方式に比べ劣ることが多い。
【００３９】
固定レート：
ある一定の画素レートを維持し、帯域幅の限定された通信路を持つアプリケーション又はシステム。一実施例においては、この目標を達成するため、全体的に平均した圧縮というより、局所的に平均した圧縮が達成される。例えば、ＭＰＥＧは固定レートを要求する。
【００４０】
固定サイズ：
限られたサイズのバッファを持つアプリケーション又はシステム。一実施例では、この目標を達成するため全体的に平均した圧縮がなされる。例えば、プリント・バッファ。（アプリケーションは、固定レートのことも、固定サイズのことも、その両方のこともある。）
周波数帯域：
各周波数帯域は、同じフィルタ処理系列によりもたらされる一群の係数を表す。
【００４１】
ヘッド・ビット：
ビット・シグニフィカンス表現において、ヘッドビットとは、最上位ビッから最初の非ゼロのビットまでの、該最初の非ゼロビットを含めた絶対値ビットである。
【００４２】
ハフマン(Huffman)コーダ：
一般に、各シンボルに対して整数個のビットを発生する固定長コーダ。
【００４３】
重要度レベル：
埋め込みデータの１つのビットプレーン全体に対応する、圧縮される前の符号化データの単位。重要度レベルは、異なった係数周波数帯域からの適切なビットプレーン全てを含む。
【００４４】
ＬＰＳ（最低確率シンボル）：
５０％未満の確率を持つバイナリデシジョンにおける事象(outcome)。
２つの事象が等確率の時にどちらがｍｐｓ又はｌｐｓに選ばれるかは符号化器と復号化器が同じ選定をするならば重要なことではない。
【００４５】
ロスレス／ノイズレス／可逆符号化：
原データの完全な復元が可能な方法によるデータ圧縮。
【００４６】
ロッシー符号化：
原データの完全な復元を保障しないデータ符号化。視覚的に不快であったり目立ったりしないように、原データから変化してもよい。多くの場合、固定レートが可能である。
【００４７】
ＭＰＳ（最高確率シンボル）：
５０％を超える確率を持つバイナリデシジョンにおける事象。
【００４８】
重複変換：
単一のソース標本点が同じ周波数の複数の係数に寄与する変換。その例に、多くのウェーブレット及び重複直交変換がある。
【００４９】
親係数：カレントの係数又は画素と同じ画像空間をカバーする、すぐ上の階層レベルの係数又は画素。例えば図１において、１ＳＤ係数の親は２ＳＤ係数であり、これは３ＳＤ係数の親である。
【００５０】
確率予測マシン／モジュール：
コンテクスト内での確率を追跡する、符号化システムの要素。
【００５１】
プログレッシブ画素深度：
フル解像度のデータのビットプレーンが浅いほうから深いほうへ順序付けられたコードストリーム。
【００５２】
プログレッシブ・ピラミッド：
解像度が下がる毎に各次元が２分の１（面積では４分の１）になる解像度成分の系列。
【００５３】
Ｑコーダ：
乗算が加算によって置き換えられ、確率が離散値に限定され、確率予測値がビット出力時に更新されるバイナリ算術コーダ。
【００５４】
ラスター順：
２次元画像のスキャン順。左上コーナーからスタートして左から右へ移動し、それから次ラインの左端に戻り、最終的に右下コーナーで終了する。どのラインもスキップされない。
【００５５】
可逆変換：
一実施例では、圧縮結果を原データに復元可能な、整数演算により実現される効率変換。
【００５６】
テールビット（又はテール）：
ビット・シグニフィカンス表現で、テール(tail)ビットとは最上位の非ゼロのビットより下位の絶対値ビットである。
【００５７】
タイル（tile）データセグメント：
一つの符号化単位を完全に記述するコードストリームの部分。
【００５８】
ＴＳ変換：
２・６（Ｔｗｏ−Ｓｉｘ）変換。２タップ・ローパス分析フィルタと６タップ・ハイパス分析フィルタからなる特殊な可逆ウェーブレットフィルタ対。合成フィルタは、分析フィルタのクァドレチャーミラー(quadrature  mirror)フィルタである。
【００５９】
ＴＴ変換：
２・１０（Two-Ten）変換。２タップ・ローパス分析フィルタと１０タップ・ハイパス分析フィルタからなる特殊な可逆ウェーブレットフィルタ対。合成フィルタは分析フィルタのクァドレチャー・ミラー・フィルタである。
【００６０】
統合型（unified）ロスレス／ロッシー：
同じ圧縮システムが、ロスレス復元又はロッシー復元が可能なコードストリームを提供する。本発明の一実施例では、このコードストリームは復号化器に対する設定情報も指令もなくてよい。
【００６１】
ウェーブレット・フィルタ：
ウェーブレット変換に使われるハイパスとローパスの合成フィルタ及び分析フィルタ。
【００６２】
ウェーブレット変換：
「周波数」及び「時間（又は空間）」の両方の領域の拘束条件がある変換。一実施例では、ハイパスフィルタとローパスフィルタからなる変換である。結果として得られた係数は１／２に間引かれ（臨界フィルタ処理され）、それらフィルタがローパス係数にかけられる。
【００６３】
ウェーブレット木：
最高レベルのウェーブレット分割のＳＳ部内の単一の係数と関係付けられた係数と画素。係数の個数はレベル数の関数である。図１は、１つのウェーブレット木に含まれる係数を示す。ウェーブレット木のスパンは、分割レベル数に依存する。例えば、ウェーブレット木のスパンは、１レベル分割では４画素、２レベル分割では１６画素、等々である。図５９に、１つのウェーブレット木に集約される画素の個数を様々なレベル数の場合について示す。２次元の場合、各ウェーブレット木はＳＤ，ＤＤ，ＤＳと呼ばれる３つの部分木からなる。
【００６４】
＜概要＞
本発明は、符号化部及び復号化部を持つ圧縮／伸長システムを提供する。符号化部は入力データを符号化して圧縮データを生成する働きをし、他方、復号化部は既に符号化されたデータを復号化して元の入力データの再構成データを生成する働きをする。入力データとして、画像（静止画像あるいは動画像）、音声等々の様々な種類のデータがあり得る。一実施例では、データはデジタル信号データであるが、デジタル化したアナログデータ、テキストデータ形式、その他の形式も可能である。そのデータのソースは、例えば符号化部及び／又は復号化部のためのメモリまたは通信路である。
【００６５】
本発明において、符号化部及び／又は復号化部の構成要素は、ハードウエアによって実現されてもよいし、あるいはコンピュータシステム上で利用されるようなソフトウエアによって実現されてもよい。本発明はロスレス圧縮／伸長システムを提供する。本発明は、ロッシー圧縮／伸長を実行するようにも構成できる。
【００６６】
本発明のシステムは、可逆ウェーブレットによる高速のロッシー／ロスレス圧縮を用いるが、これについては後により詳しく説明する。このシステムは、例えばレーザープリンタのようなプリンタであるかもしれない。一実施例では、このプリンタは与えられたページの記憶に安価なハードディスクを用いることにより、必要とされる高価なランダムアクセスメモリ（ＲＡＭ）の量を大幅に削減する。そのハードディスク又は他の記憶装置の限定された帯域幅を、プリントエンジンに必要とされる、より大きな帯域幅に合わせるために圧縮が利用される。本発明の符号化技術はプリントエンジンの要求する高速、リアルタイム性を満たし、さらに本発明は、画像の特性及びハードディスクのバースト性に応じて、優れたロッシー圧縮又はロスレス圧縮のどちらも可能である。
【００６７】
以下の詳細な説明において、可逆ウェーブレットによる圧縮の概要、圧縮フレーム記憶のアプリケーション、カラーレーザープリンタ、プリンタ・チップの実例について述べる。プリンタのレンダリング・エンジンはハードディスクを記憶に利用する。ハードディスクはプリント・エンジンより低速であるので、レートを整合させるため圧縮が利用される。ディスプレイリスト(display  list)技法も、レンダリング中に必要とされるメモリを減らすために利用してよい。ディスプレイリスト・ベースのレンダリングエンジンは、圧縮システムが画像のバンドを独立に処理することを許容する。なお、プリンタシステムに関連して本発明を説明するが、本発明は圧縮及び／又は伸長サブシステムを含む他のシステムにも適用可能である。
【００６８】
また、埋め込み統合型ロスレス／ロッシー圧縮システムについても本明細書において述べる。システムの埋め込み特性は、品質をディスクの転送レートにより決定可能にする。圧縮が容易な画像（例えば、テキスト及び／又は線画からなる殆どの文書）の場合、ロスレス圧縮がなされる。圧縮しにくい画像（例えば、ノイズの多い自然画像及び／又は中間調のある文書）の場合、高品質のロッシー圧縮がなされる。
【００６９】
カラー画像のロスレス圧縮と高品質ロッシー圧縮の両方をサポートするシステムに関する説明については、米国特許出願第08/642,518号（1996年５月３日受理、“Compression  and  Decompression  with  Wavelet  Style  and  Binary  Style  Including  Quantization  by  Device-Dependent  Parser”）、及び、米国特許出願第08/436,662(1995年５月８日受理、“Method  and  Apparatus  for  Reversible  Color  Conversion”)を参照されたい。
【００７０】
＜可逆ウェーブレット＞
本発明は、可逆ウェーブレットによる圧縮を利用する。
【００７１】
＜ウェーブレット分割＞
本発明は、初めに、可逆ウェーブレットを利用して、（画像データとしての）画像または他のデータ信号の分割を行う。本発明において、可逆ウェーブレット変換は、整数係数を持つ信号のロスレス復元が可能な完全再構成システムを整数演算で実現する。効率逆変換は、行列式が１（又はほぼ１）の変換行列を使用する可逆変換である。
【００７２】
本発明は、可逆ウェーブレットを用いることにより、有限精度の演算でロスレス圧縮をすることが可能である。画像データに可逆ウェーブレット変換を適用することにより生成される結果は、係数の系列である。
【００７３】
本発明の可逆ウェーブレット変換は、１組のフィルタを用いて実現できる。一実施例では、それらのフィルタは、本明細書においてＴＳ変換もしくは２・６変換と呼ばれる変換を行うための２タップ・ローパスフィルタと６タップ・ハイパスフィルタである。他の一実施例では、それらのフィルタは、本明細書においてＴＴ変換もしくは２・１０変換と呼ばれる変換を行うための２タップ・ローパスフィルタと１０タップ・ハイパスフィルタである。これらフィルタは、加減算（とハードワイヤのビットシフト）だけで実現することができる。
【００７４】
ＴＴ変換には、ＴＳ変換に比べると、少なくとも１つの長所と、少なくとも１つの短所がある。長所は、ＴＴ変換がＴＳ変換よりも良好な圧縮が得られることである。ＴＴ変換の短所は、１０タップのフィルタが長い分、高いハードウェアコストを要することである。
【００７５】
＜２次元ウェーブレット分割＞
本発明のローパスフィルタ及びハイパスフィルタを用いて、多重解像度分割が行なわれる。分割レベル数は可変であり任意数でよいが、現在のところ分割レベル数は２レベルから８レベルまでである。最大レベル数は、ｌｏｇ2（入力の長さ又は幅の最大値）である。
【００７６】
画像のような２次元データに対し変換を行う最も普通のやり方は、１次元フィルタを別々に適用する方法、つまり、ラインに沿って適用し、次に列に沿って適用するという方法である。第１レベルの分割により４つの異なった帯域の係数が得られ、これらは本明細書ではＳＳ，ＤＳ，ＳＤ，ＤＤと呼ばれる。これら文字は、ロー（Ｌ）パスフィルタとハイ（Ｈ）パスフィルタにそれぞれ対応する前述のスムーズ(Ｓ)フィルタとディテール(Ｄ)フィルタを指す。したがって、ＳＳ帯域はライン方向及び列方向の両方のスムーズフィルタより得られた係数からなっている。
【００７７】
ウェーブレット分割の各周波数部分帯域はさらに分割することができる。最も普通のやりかたはＳＳ部分帯域だけをさらに分割する方法であり、各分割レベルのＳＳ周波数部分帯域が生成された時にそれをさらに分割することになろう。このような多重分割はピラミッド分割と呼ばれる。記号ＳＳ，ＳＤ，ＤＳ，ＤＤと分割レベル番号によって各分割を表示する。
【００７８】
なお、本発明のＴＳ変換、ＴＴ変換のいずれかを用いても、ピラミッド分割によって係数のサイズは増加しない。
【００７９】
可逆ウェーブレット変換が再帰的に画像に適用される場合、第１レベルの分割は最も細かいディテールもしくは解像度に対し作用する。第１分割レベルで、画像は４つの部分画像（すなわち部分帯域）に分解される。各部分帯域は、１つの空間周波数帯域を表わしている。第１レベルの部分帯域は１ＳＳ，１ＳＤ，１ＤＳ，１ＤＤと表される。原画像を分割するプロセスに水平と垂直の両次元について１／２サブサンプリングが含まれるので、第１レベルの部分帯域１ＳＳ，１ＳＤ，１ＤＳ，１ＤＤはそれぞれ、入力が持っていた画像の画素（または係数）の１／４の個数の係数を持つ。
【００８０】
部分帯域１ＳＳは、水平方向の低い周波数の情報と垂直方向の低い周波数の情報を同時に含んでいる。一般に、画像エネルギーの大部分は、この部分帯域に集中している。部分帯域１ＳＤは、水平方向の低い周波数の情報と垂直方向の高い周波数の情報（例えば水平方向エッジの情報）を含んでいる。部分帯域１ＤＳは、水平方向の高い周波数の情報と垂直方向の低い周波数の情報（例えば垂直方向エッジの情報）を含んでいる。部分帯域１ＤＤは、水平方向の高い周波数の情報と垂直方向の高い周波数の情報（例えばテクスチャ又は斜めエッジの情報）を含んでいる。
【００８１】
この後に続く下位の第２、第３、第４分割レベルはそれぞれ、前レベルの低周波数ＳＳ部分帯域を分割することによって作られる。第１レベルの部分帯域１ＳＳが分割されて、やや精細な第２レベルの部分帯域２ＳＳ，２ＳＤ，２ＤＳ，２ＤＤが作られる。同様に、部分帯域２ＳＳが分割されて、精細度の粗い第３レベルの部分帯域３ＳＳ，３ＳＤ，３ＤＳ，３ＤＤが生成される。また、部分帯域３ＳＳが分割されることにより、精細度がより粗い第４レベルの部分帯域４ＳＳ，４ＳＤ，４ＤＳ，４ＤＤが作られる。１／２サブサンプリングにより、第２レベルの各部分帯域は原画像の１６分の１の大きさである。このレベルの各標本（つまり画素）は、原画像中の同一位置のやや細いディテールを表す。同様に、第３レベルの各部分帯域は、原画像の６４分の１の大きさである。このレベルでの各画素は、原画像中の同一位置のかなり粗いディテールを表す。また、第４レベルの各部分帯域は原画像の２５６分の１の大きさである。
【００８２】
分割された画像はサブサンプリングのために原画像より大きさが小さいので、原画像の格納に使用されたメモリを、分割された部分帯域の全部の格納のために使用できる。つまり、３レベル分割の場合、原画像と分割部分帯域１ＳＳ，２ＳＳは捨てられてしまい、保存されない。
【００８３】
４つの部分帯域分割レベルについて述べたが、個々のシステムの要求に応じて、それ以上のレベルを生成することも可能である。また、ＤＣＴのような他の変換又は一次元配置の部分帯域を用いて、異なった親子関係を定義してもよい。
【００８４】
なお、本発明のウェーブレットフィルタによれば、ピラミッド分割は係数サイズを増加させない。
他の実施例においては、ＳＳのほかに他の部分帯域も分割されるかもしれない。
【００８５】
＜ウェーブレットの木構造＞
ピラミッド分割のウェーブレット係数には自然で有用な木構造がある。部分帯域分割の結果は、最終の分割レベルに対応したただ一つのＳＳ周波数部分帯域である。これに対し、レベル数と同数のＳＤ，ＤＳ，ＤＤ帯域がある。この木構造により、ある周波数帯域内の係数の親は、それより低い解像度の同じ周波数帯域内の係数であり、かつ同じ空間位置関係にあることが明らかになる。
【００８６】
本発明においては、各木は、ＳＳ係数と、３つの部分木すなわちＤＳ，ＳＤ，ＤＤの部分木からなる。本発明の処理は、普通、これら３つの部分木に対して行われる。各木のルートは、純粋に平滑な係数である。画像のような２次元信号の場合、３つの部分木があり、それぞれの部分木は４つの子を持つ。この木階層構造は２次元信号に限定されない。例えば、１次元信号の場合、各部分木は１つの子を持つ。これ以上の高い次元は、１次元の場合及び２次元の場合から導き出される。
【００８７】
多重解像度分割のプロセスは、フィルタ系列を使って行うことができる。１次元の典型的フィルタを使って実現される２次元２レベル変換の例については、米国特許出願第08/498,695号（1995年６月30日受理、“Method  and  Apparatus  For  Compression  Using  Reversible  Wavelet  Transforms  and  an  Embedded  Codestream”）及び米国特許出願第08/498,036号（1995年６月30日受理、“Reversible  Wavelet  Transform  and  Embedded  Codestream  Manipulation”）を参照されたい。
【００８８】
＜順ウェーブレット変換の実行＞
本発明では、２回の1-D演算によって、すなわち、まず水平方向の1-D演算を行い、次に垂直方向の1-D演算を行うことによって、ウェーブレット変換が実施される。一実施例においては、あるハードウェアで水平方向の演算を実行し、別のハードウェアで垂直方向の演算を実行する。
【００８９】
レベル数で反復回数が決まる。一実施例では、水平方向と垂直方向の両方についてＴＴ変換を使って、４レベル分割が実行される。別の実施例では、ＴＴ変換に代えＴＳ変換を使って、４レベル分割が実行される。
【００９０】
本発明の変換は、演算効率が非常に優れている。一実施例において、本発明は、必要とされるオンチップ及びオフチップのメモリの容量と帯域幅を減らすように、変換で行われる計算を順序付けする。
【００９１】
＜変換のための計算順序とデータフロー＞
前述のように本発明においては、変換の計算のための基本単位はウェーブレット木である。４レベル変換の場合を考えると、各ウェーブレット木は１６×１６の画素ブロックである。１６×１６ブロックの画素（ＣＭＹＫ画像の場合は４成分全部）が本発明の変換部に入力され、係数生成のための可能な計算が全て実行される。（逆変換も同様であり、１６×１６の係数ブロックが入力され、可能な全ての計算が実行される）
本発明は重複変換を用いるため、先行の隣接木からの情報が記憶されて計算に利用される。カレントのウェーブレット木と先行隣接情報との間の境界は、本明細書ではシーム(seam)と呼ばれる。本発明の変換を実行するためにシームを越えて保存される情報については、後に詳述する。
【００９２】
＜ウェーブレット木の順序付け＞
特定のアプリケーション（例えば印刷）の場合、本発明の符号化単位は幅が大きく長さが小さいため、変換を計算するためのウェーブレット木の順序付けが重要である。一実施例では、各符号化単位は４０９６×２５６画素からなる。
【００９３】
以下の説明では、符号化単位はそれぞれ４０９６×２５６画素からなる。しかしながら、それ以外のサイズの符号化単位にも以下に述べる順序付けを適用可能であることに留意されたい。図２はラスタ順と同様の順序を示す。この順序を、本明細書では長シーム変換順と呼ぶ。図２において、太線はシームを越えて保存されるデータ量を示し、また、どの位のメモリ量が変換の計算に必要とされるかを示している。このデータは、水平方向変換の場合には１つのウェーブレット木に比例するが、垂直方向の変換の場合には画像の幅（本例では４０９６）に比例する。このデータのためのメモリ量では、外部メモリを使用する必要があるかもしれない。しかし、ラスタ順に近いため、逆変換期間に、ウェーブレット木の１つの水平行が画素へ変換されると直ちにデータを変換部から（例えば、プリンタのアプリケーションではプリンタへ）出力することができる。
【００９４】
図３は別の順序を示すもので、この順序を本明細書では短シーム順と呼ぶ。シームのためのメモリ量は、水平方向の変換の場合には符号化単位の高さ（本例では２５６）に比例し、垂直方向の変換の場合には１つのウェーブレット木に比例する。この順序によれば必要なメモリ量が大幅に減少し、オンチップ記憶が可能になる。
【００９５】
図４は、別の短シーム順を示す。メモリ量が２つのウェーブレット木に比例するという負担があるが、ラスタ順に処理される連続した画素の個数が増加する。この順序又はそれに類似した順序によって、シーム(seam)メモリのコストをほとんど増加させることなく、バンドバッファの高速ページモードＲＡＭ又はＥＤＯ(extended  data  out)ＲＡＭをより効率的に使用できる。この効率向上が得られるのは、殆どのメモリが隣接したメモリロケーションのアクセスのために最適化されているからである。したがって、シーム順により隣接メモリアクセスの使用が増加することで、メモリ使用効率の向上がもたらされる。
【００９６】
＜１つのウェーブレット木を得るための計算＞
以下の式はＴＳ変換とＴＴ変換の両方を定義する。入力x(n)に対するローパスフィルタの出力であるスムーズ（smooth）信号s(n)と、ハイパスフィルタの出力であるディテール（detail）信号d(n)は次式のように計算される。
【００９７】
【数１】
2007267384.tif 000075
【００９８】
逆変換は次式で示される。
【００９９】
【数２】
2007267384.tif 000076
【０１００】
ただし、p(n)は次式により計算される。
【０１０１】
【数３】
2007267384.tif 000077
【０１０２】
ＴＳ変換とＴＴ変換はt(n)の定義が異なる。
【０１０３】
ＴＳ変換の場合は次のとおりである。
【０１０４】
【数４】
2007267384.tif 000078
【０１０５】
ＴＴ変換の場合は次のとおりである。
【０１０６】
【数５】
2007267384.tif 000079
【０１０７】
なお、以下の説明において、
【０１０８】
【数６】
2007267384.tif 000080
【０１０９】
は切り捨てて丸めること、つまり打ち切りを意味し、床関数と呼ばれることがある。
【０１１０】
＜ＴＳ変換＞
６タップ・フィルタと２タップ・フィルタを偶数位置に使用する結果、３つの情報を記憶しなければならない。６タップ・フィルタは２ディレーを必要とする。２タップ・フィルタは、その結果を６タップ・フィルタの結果に対し中心に置くことができるようにするために１ディレーを必要とする。具体的には、２つのs(・)値と、１つのｄ(・)値又はｄ(・)計算の部分結果を記憶する必要がある。これらの値のメモリは、フィルタ処理がシームを跨いでも跨がなくても、同じである。
【０１１１】
図５から図１２は、本発明のウェーブレット木に対し４レベル変換のためのＴＳ変換フィルタを適用する度に得られる結果を示すものである。これらの図において、ローパスフィルタの出力はスムーズ（smooth）の代わりに“s”と表示されており、ハイパスフィルタの出力はデイテール（detail）の代わりに“d”と表示されている。“B”は“d”の計算に用いられる中間値、すなわちx(2n)-x(2n+1)値を意味する。“B”値は順変換時に用いられ、逆変換の場合には、どの計算にも用いられない“d”値がその場所に格納される。記号“sd”は、ある係数が、水平方向のローパスフィルタをかけてから垂直方向のハイパスフィルタをかけた結果であることを示す。“ds”，“dd”，“ss”，“dB”，“sB”の意味も同様である。太線の四角は２５６個の入力画素に対応する。網掛けした“s”，“ds”，“ss”値は、前のウェーブレット木を使って計算され、カレントのウェーブレット木で用いるために記憶される。
【０１１２】
順変換の場合、レベル２，レベル３及びレベル４の変換の入力は前レベルで得られた“ss”係数である。“sd”，“ds”，“dd”係数は完成しているから、計算された時に出力可能である。逆変換は全ての計算を逆順に、すなわち、レベルを最初に第４レベル、次に第３レベル、第２レベル、最後に第１レベルの順に、方向を初めに垂直方向、次に水平方向の順にして行う。変換のパス内では、順変換と逆変換のデータフローは同一であり、計算が異なるだけである。
【０１１３】
＜ＴＳ変換のハードウェア＞
図１３は、１次元フィルタを実現するための順／逆フィルタユニットの一実施例のブロック図である。メモリと計算ユニットだけが示されており、ハードワイアド・シフトは示されていない。図１３において、フィルタユニット４０００は順変換及び逆変換の両方を処理する。他の実施例は順変換と逆変換のために別々のユニットを使用する。順変換の場合、サイズ“n”の入力が用いられ、“s”出力と“d”出力が生成される。逆変換の場合、“s”入力と“d”入力が使われ、別の出力が
生成される。
【０１１４】
加算器４００１は、ｎビットの入力を受け取り、それら入力を加算して出力x(2n+2)+x(2n+3)を出すように接続される。加算器４００２は一方のｎビット入力を他方のｎビット入力から減算し、x(2n+2)-x(2n+3)の値を出力する。加算器４００１，４００２の出力はマルチプレクサ（ｍｕｘ）４００３，４００４の一方の入力にそれぞれ接続される。ｍｕｘ４００３，４００４の他方の入力は、ｓ入力とｄ入力を受け取るようにそれぞれ接続されている。一実施例では、ｓ入力はｎビットであり、ｄ入力はｎビットより大きい。
【０１１５】
ｍｕｘ４００３，４００４の出力は、フィルタが順モードか逆モードかを指示する順／逆制御信号によって制御される。順モード、逆モードのいずれにおいても、ｍｕｘ４００３の出力はs(n+1)である。他方、ｍｕｘ４００４の出力は、順モードではp(n+1)であり、逆モードではd(n+1)である。ｍｕｘ４００３，４００４の出力は、ｍｕｘ４００６から出力されるs(n)のフィードバックとともにレジスタファイル４００５の入力と接続される。レジスタファイル４００５は１つのウェーブレットの長さ分の各成分のためのエントリーを持つ。データは通常、レジスタファイル４００５を通過する。空間位置に基づき、レジスタファイル４００５への入力は遅延されて出力される。アドレス入力がレジスタファイル４００５の出力を制御する。一実施例では、レジスタファイル４００５は、１バンクにつき１つのポートを持つ２つのメモリバンクからなり、２つのメモリバンクを交互にピンポン式にアクセスして使用される。
ｍｕｘ４００３の出力はフィルタユニットのｓ出力でもある。
【０１１６】
レジスタファイル４００５の出力は、シームバッファ入力４０２０の外部バッファデータとともにｍｕｘ４００６の入力に接続される。その出力４００６Ａは、ｍｕｘ４００３の出力が２回遅延されたs(n-1)である。出力４００６Ｂは、s(n+1)を１回遅延されたs(n)である。出力４００６Ｃは、順変換のときはp(n)であり、逆変換のときはd(n)である。ｍｕｘ４００６はまた、外部にバッファされるシーム(seam)データをシームバッファ出力４０２１に出力するように制御される。出力４００６Ｃは、加算器４００８，４００９の一方の入力に接続される。加算器４００８，４００９の他方の入力はｍｕｘ４０１５の出力である。ｍｕｘ４０１５は境界条件を処理する。境界上では、ｍｕｘ４０１５は、その入力の一方に布線された０を出力する。実施例によっては、布線の０は別の値を使うように変更されるかもしれない。非境界の条件では、加算器４００７により一方の入力s(n+1)から他方の入力s(n-1)を減算することによって出力されるt(n)をｍｕｘ４０１５は出力する。
【０１１７】
加算器４００８は、ｍｕｘ４００６の出力４００６Ｃとｍｕｘ４０１５の出力を加算し、フィルタユニットのｄ出力を発生する。
加算器４００９は、ｍｕｘ４０１５の出力からｍｕｘ４００６の出力４００６Ｃを減算する。加算器４００９の出力はｍｕｘ４００６の出力４００６Ｂのs(n)と加算器４０１０によって加算され、フィルタユニットのｎビット出力が生成される。加算器４００９の出力はまた、加算器４０１１によってｍｕｘ４００６の出力４００６Ｂであるs(n)から減算され、加算器４０１１はフィルタユニットの他方のｎビット出力を逆向きに出力する。
【０１１８】
１つのウェーブレット木より長いシームの場合には、シームデータは、レジスタファイル４００５ではなく、オンチップのスタティックＲＡＭ（ＳＲＡＭ）又は外部メモリに格納されるかもしれない。ｍｕｘ４００６は、このような付加的なシームメモリに対するアクセスを提供する。
【０１１９】
フィルタユニット４０００のハードウェアコストの大部分は、レジスタファイル４００５によるものである。全体の必要メモリ量はフィルタユニットの個数によって決まる。一実施例では、３つの値（s,s,d又はss,ss,sd)を記憶するために合計６０ロケーションが必要とされる。それより多数のフィルタユニットが使用される時には、それぞれのフィルタユニットのための必要メモリは、それより少ない。したがって、多数のフィルタユニットを使用するハードウェアコストは低い。
【０１２０】
高速の逆変換は、復号化の終了と印刷のようなデータ出力動作の開始との間の遅れ時間の短縮を可能にする。これは、伸長のために必要な作業域メモリを減少させ、より大きな符号化単位を可能にする。高速の順変換は、より大きな帯域幅を使用可能な時にフィルタがデータのバーストを処理できるようにし、したがって、ルックアヘッドによってコンテクストモデルがデータを素早く処理できる時には、変換がより多くのデータをコンテクストモデルに供給することを可能にする。符号化期間に順変換がコンテクストモデルに追従できないと、符号化中のディスクの帯域幅が無駄になり、印刷の開始時間を遅らせる。また、多数のフィルタを備えることにより、制御及びデータフローを単純化できる。
【０１２１】
図１４は本発明による第１レベル順変換の一実施例のブロック図である。図１４において、図１３で説明したような２つのフィルタユニット４０１，４０２は、変換の第１レベルを実行する。フィルタユニット４０１はレベル１の水平変換を行い、フィルタユニット４０２はレベル１の垂直変換を行う。一実施例では、第１レベル変換は入力の２×２ブロックを処理する。４つのレジスタ４０３〜４０６はフィルタユニット４０１の出力を遅延させるためのディレーユニットとして働く。これは子ベース順と呼ばれる。レジスタ４０３はフィルタユニット４０１のｓ出力を受け取り、レジスタ４０４，４０５はｄ出力を受け取る。レジスタ４０４の出力はレジスタ４０６の入力に接続される。レジスタ４０３，４０６の出力はｍｕｘ４０７の入力に接続され、フィルタユニット４０１のｓ出力とレジスタ４０５の出力はｍｕｘ４０８の入力に接続される。２つのｍｕｘ４０７，４０８は、フィルタユニット４０１から出力された係数を遅延したものからフィルタユニット４０２の入力を選択する。
【０１２２】
フィルタユニット４０１は、２つの垂直方向に隣接した入力対を連続的に処理して４つの係数を生成し、これら係数は各成分毎にレジスタ４０３〜４０６によって適切に遅延されてフィルタユニット４０２に入力することができる。４つの結果のうちの３つは直ちに出力することができるが、“ss”出力はさらに処理される。
【０１２３】
第１レベル順変換は２×２配置の４画素のグループを処理する。説明のため、第１行に画素ａ，ｂがあり、第２行に画素ｃ，ｄがあるとする。図１４の第１レベル変換の動作は次のとおりである。最初のサイクルで、フィルタユニット４０１によって水平変換が画素ａ，ｂに施される。フィルタユニット４０１はＳab，Ｄabを生成し、Ｓabはレジスタ４０３に格納され、Ｄabはレジスタ４０４，４０５に格納される。次のサイクルで、画素ｃ，ｄがフィルタユニット４０１によって水平処理が行われ。このフィルタユニット４０１を適用した結果、ＳcdとＤcdが生成され、Ｓcdはレジスタ４０３に、Ｄcdはレジスタ４０４，４０５に格納される。このサイクルで、レジスタ４０３からのＳabとレジスタ４０５からのＳcdをフィルタユニット４０２が処理して変換の垂直パスを実行し、ＳＳとＳＤを生成する。また、この第２サイクル期間中に、値Ｄabはレジスタ４０４からレジスタ４０６へ移動する。次のサイクルで、レジスタ４０６からの値Ｄabとレジスタ４０５からの値Ｄcdがフィルタユニット４０２により処理され、フィルタユニット４０２は出力ＤＳ，ＤＤを生成する。同じサイクル中に、フィルタユニット４０１は次の２×２ブロックのａ，ｂ画素を処理する。
【０１２４】
図１５は、本発明による順変換の一実施例のブロック図である。図１５において、レベル１変換部５０２はレベル１変換を実行する。一実施例では、レベル１変換部５０２は図１４のレベル１変換部からなる。フィルタユニット５０５は変換のレベル２，３，４を処理する。メモリ５０３は“ss”係数を、変換を実行するために必要なだけの係数が得られるまで記憶する。記憶する必要がある係数の個数を図６０に示す。（各ロケーションは各成分の１つの係数を格納する）
順序ユニット５０４は、適切な入力をフィルタユニット５０５にマルチプレクスする。入力バッファ５０１と出力バッファ５０６は、この変換部に要求される転送順序とバンドバッファ又はコンテクストモデルに要求される順序との間の整合をとるために必要であろう。
【０１２５】
逆変換の場合、データフローが逆にされ、レベル４逆変換が行われたのちにレベル３、レベル２、レベル１の変換が順に行われる。レベル２変換の出力は第１レベル変換ハードウェアであるレベルレベル１変換部５０２へ入力される。また、垂直フィルタ処理が水平フィルタ処理の前に行われる。水平フィルタ処理と垂直フィルタ処理は一方がシーム用の付加的メモリに対するアクセスを必要とする以外は同じであるから、少量のマルチプレキシングによってデータフローを逆にすることが可能である。逆変換の前に、２バイト係数を、２つの信号用ビットを持つ埋め込み形式から普通の２の補数の数値へ変換する必要がある。
図１４及び図１５に示した要素は、ＴＴ変換の場合にも同様に使用できる。
【０１２６】
＜変換タイミング＞
図１５の順変換部の変換タイミングは、個々のフィルタユニットのタイミングがベースになる。第１のフィルタユニットすなわちフィルタユニット４０１は水平方向レベル１変換を計算し、第２のフィルタユニットすなわちフィルタユニット４０２は垂直方向レベル１変換を計算する。第３のフィルタユニットすなわちフィルタユニット５０５はレベル２〜４の変換を計算し、又は遊休状態である。
【０１２７】
一実施例では、第３のフィルタユニット（５０５）は、遊休状態でなければ、偶数クロックサイクル期間中に水平変換を計算し、奇数クロックサイクル期間中に垂直変換を計算する。逆変換のためのタイミングも同様である（ただし逆になる）。
【０１２８】
以下に述べる例では、ウェーブレット木内の２×２ブロックは、ラスタ順の転置順に処理される。なお、ウェーブレット木内の２×２ブロックがラスタ順に処理されるならば、高速ページモードＤＲＡＭ／ＥＤＯ(extended  data  out)ＤＲＡＭをサポートするために必要とされる入／出力（Ｉ／Ｏ）バッファリングがもっと少なくなるかもしれない。
【０１２９】
図１６は、係数が出力される時のタイミング図である。以下のタイミングは画素毎のタイミングである。１画素あたり４つの成分がある。
【０１３０】
時刻０から開始  do：
for
(x+0;x<16/2;y++)
for(y=0;y<16;y++)
(x,y)にレベル１水平フィルタを適用
時刻１から開始  do:
for(x=0;y<16/2;y++)/
for(y=0;y<16/2;y++)
for(xx=-1;xx<1;xx++)  /*  0=smmoth,-1=previous  detail  */
(2*x+xx,y)にレベル１垂直フィルタを適用
for(x=0;x<8/2;x++)
時刻18+x*32から開始、偶数時刻にdo:
for(y=0;y<8;y++)
(x,y)にレベル２水平フィルタを適用
for(x=0;x<8/2;x++)
時刻21+x*32から開始、奇数時刻にdo:
for(y=0;y<8/2;y++)
for(xx=-1;xx<1;xx++)  /*  0=smooth,-1=previous  detail  */
(2*x+xx,y)にレベル２垂直フィルタを適用
for(x=0;x<4/2;x++)
時刻66+x*64から開始、偶数時刻にdo:
for(y=0;y<4;y++)
(x,y)にレベル３水平フィルタを適用
for(x=0;x<4/2;x++)
時刻69+x*64から開始、奇数時刻にdo:
for(y=0;y<4/2;y++)
for(xx=-1;xx<1;xx++)  /*  0=smooth,-1=previous  detail*/
(2*x+xx,y)にレベル３垂直フィルタを適用
時刻138に
(0,0)にレベル４水平フィルタを適用
時刻140に
(0,1)にレベル４水平フィルタを適用
時刻141に
(0,0)にレベル４垂直フィルタを適用  /*  smooth  */
時刻143に
(-1,0)にレベル４垂直フィルタを適用  /*  previous  detail  */
【０１３１】
＜ＴＴ変換＞
図１７から図２４はＴＴ変換の各１次元フィルタ処理の結果（出力）を示す。太線の長方形は、現在処理されている入力画素に対応する１つのウェーブレット木内の係数を示し、網掛けしたものは記憶されている前ウェーブレット木からの係数を示す。“B”と記された値は記憶される中間結果である（また、隣接標本間の差分である）。ＴＴ変換はＴＳ変換と似ているが、もっと多くのメモリを必要とする。
【０１３２】
図２５は、１０タップの順／逆フィルタユニットのブロック図である。なお、ハードワイアド・シフト(hardwired  shfts)と丸めオフセット(rounding  offsets)は煩雑さを避けるため示されていない。図２５中のｍｕｘ８０６を変換境界でのミラー処理のためにも使用できることに注意されたい。ミラー処理を１回行うために、重複ユニットの“d”入力のゼロイング(zeroing)とs(n+2)入力のマルチプレキシングも行う必要がある。
【０１３３】
図２５において、加算器８０１，８０２は、フィルタユニットの順パス期間中に２ｎビット入力を受け取るように接続される。加算器８０１は２ｎビット入力を加算して値を出力し、この値はｍｕｘ８０３の一方の入力に与えられる。加算器８０２は一方の入力を他方の入力から減算し、ｍｕｘ８０４の一方の入力への出力を発生する。ｍｕｘ８０３，８０４はまた、フィルタユニットの逆モード動作のためにｓ，ｄ入力をれぞれ受け取るように接続される。ｍｕｘ８０３の出力はｎビット入力で、これはs(n+2)であり、ｍｕｘ８０４の出力はn+1ビット入力で、これは順パスのp(n+2)、逆パスのd(n+2)である。
【０１３４】
ｍｕｘ８０３，８０４の出力はメモリ８０５の入力に接続される。メモリ８０５の入力には、ｍｕｘ８０６の出力８０６Ａ，８０６Ｄ〜８０６Ｆも接続されるる。メモリ８０５は、その入力を空間配置に基づいて遅延させて出力に出す。一実施例では、メモリ８０５はレジスタファイル、又は、２つのバンクを有しかつ１バンクあたり１つのポートを持ちピンポン式に動作させられるＳＲＡＭから構成される。メモリ８０５の入力には、ｍｕｘ８０６へ送出される出力を制御するためにアドレスが入力される。一実施例では、このアドレスは１成分あたり１６又は２８ロケーションを格納する。
【０１３５】
メモリ８０５の出力は、シームバッファ入力８０２より受け取る外部バッファデータとともにｍｕｘ８０６の入力に接続される。ｍｕｘ８０６の出力８０６Ａは、s(n+1)、すなわちｍｕｘ８０３の出力のs(n+2)を１回遅延（シングルディレー）させたものである。ｍｕｘ８０６の出力８０６Ｂは、s(n)すなわちｍｕｘ８０３の出力を２回遅延（ダブルディレー）させたものである。ｍｕｘ８０６の出力８０６Ｃは、順パスではp(n)すなわちｍｕｘ８０６の出力を２回遅延させたものであり、逆パスではd(n)すなわちｍｕｘ８０４の出力を２回遅延させたものである。ｍｕｘ８０６の出力８０６Ｅは、s(n-1)すなわちｍｕｘ８０３の出力を３回遅延させたものである。最後に、出力８０６Ｆは、順パスではp(n+1)、すなわちｍｕｘ８０４の出力を１回遅延させたものであり、逆パスではd(n+1)すなわちｍｕｘ８０４の出力を１回遅延させたものである。
【０１３６】
重複ユニット８０７は、ｍｕｘ８０３の出力並びにｍｕｘ８０６の出力８０６Ａ，８０６Ｄ，８０６Ｅを受け取るように接続される。重複ユニット８０７は、その入力に応答してt(n)を発生する。重複ユニットの一実施例を図２６に示す。
【０１３７】
重複ユニット８０７の出力t(n)は加算器８０８，８０９に接続される。加算器８０８はt(n)をｍｕｘ８０６の出力８０６Ｃと加算し、フィルタユニットのＤ出力を生成する。加算器８０９は、ｍｕｘ８０６の出力８０６Ｃをt(n)から減算する。加算器８０９の出力は加算器８１０，８１１の各入力に接続される。加算器８１０は、加算器８０９の出力とｍｕｘ８０６の出力８０６Ｂを加算し、逆フィルタユニットとして動作時のフィルタユニットのｎビット出力の１つを発生する。加算器８１１は、加算器８０９の出力をｍｕｘ８０６の出力８０６Ｂから減算し、逆フィルタとして動作時のフィルタユニットの他方の出力を生成する。
【０１３８】
図２６は、図２５の順／逆フィルタのための重複ユニットの一実施例のブロック図である。図２６において、この重複ユニットは加算器９０１〜９０６、乗算器９０７〜９０９、除算器９０１からなる。乗算器及び除算器はハードワイアド・シフトであってもよい。
【０１３９】
図２６の重複ユニットは、前述のＴＴ変換のためのt(n)を計算する。図２６において、加算器９０１はs(n+2)入力を受け取り、それをs(n-2)入力から減算するように接続され、加算器９０３の一方の入力に接続される出力を発生する。加算器９０２は、s(n-1)を受け取り、それをs(n+1)から減算するように接続される。加算器９０２の出力は乗算器９０７，９０８の入力に接続される。乗算器９０７は、その入力を２倍する。一実施例においては、この乗算は、入力のビットを１ビット左シフトすることによりなされる。乗算器９０７の出力は加算器９０３の他方の入力に接続される。
【０１４０】
乗算器９０８は、加算器９０２の出力を１６倍する。一実施例では、この乗算は、加算器９０２から出力されるビットを４ビット左シフトすることによりなされる。乗算器９０８の出力は、加算器９０５の一方の入力に接続される。加算器９０３の出力は、加算器９０４の一方の入力と乗算器９０９の入力に接続される。
【０１４１】
乗算器９０９は加算器９０３の出力を２倍する。一実施例では、この乗算は、加算器９０３より出力されるビットを１ビット左シフトすることによりなされる。乗算器９０９の出力は加算器９０４の他方の入力に接続される。加算器９０４の出力は加算器９０６の入力に接続され、ハードワイヤド入力である３２と加算される。加算器９０６の出力は除算器９１０の入力に接続される。除算器９１０は、入力を６４で除算する。一実施例では、この除算は、入力のビットを６ビット右シフトすることによりなされる。除算器９１０の出力はt(n)出力となる。なお、図２６は、各出力にカレント値を示している。
【０１４２】
可逆ＴＳ変換、可逆Ｔ変換の両方において、Ｓ変換と同様に、ローパスフィルタを、入力信号x(n)のレンジが出力信号s(n)のレンジと同じになるように作ることができる。すなわち、スムーズ(smooth)出力は増大しない。入力信号が８ビット深さのときは、スムーズ出力もｂビットである。例えば、信号が８ビット画像のときには、ローパスフィルタの出力も８ビットである。このことは、スムーズ出力が例えば連続的にローパスフィルタをかけることにより更に圧縮されるピラミッドシステムにとって重要な特性である。従来のシステムにおいては、出力信号のレンジが入力信号のレンジより大きいため、連続的にフィルタをかけることが困難である。また、変換の整数演算に系統誤差がないので、ロッシーシステムの全ての誤差を量子化によって制御可能である。さらに、ローパスフィルタは、２つのタップしか持たないため、非重複フィルタになる。この特性は、ハードウェア化のために重要である。
【０１４３】
＜埋め込み順序づけ＞
本発明では、ウェーブレット分割の結果生成された係数はエントロピー符号化される。本発明では、係数は最初に埋め込み順序付けを施されるが、この埋め込み順序付けにおいては、視覚的に重要な順に係数が順序付けられ、より一般的には、何等かの誤差距離（例えば、歪み距離）に関連して係数が順序付けられる。誤差距離または歪み距離には、ピーク誤差と平均２乗誤差（ＭＳＥ）が含まれる。また、順序付けは、ビット・シグニフィカンス（bit-significance）空間配置より、データベース照会のための妥当性を優先させるように、また方向別に（垂直、水平、斜め等）、行ってもよい。
【０１４４】
データの順序付けは、コードストリームの埋め込み量子化を生じさせるために行われる。本発明においては、２つの順序付け方法が用いられる。すなわち、その一つは係数を順序付けするためのものであり、もう一つは係数中の２進値を順序付けするためのものである。本発明の順序付けはビットストリームを生成し、このビットストリームはその後にバイナリ・エントロピーコーダにより符号化される。
【０１４５】
＜ビット・シグニフィカンス表現＞
原成分が符号無しの時でも、大抵の変換係数は符号付き数値である（少なくとも１つのディテール(detail)フィルタから出力される係数はどれも符号付きである）。一実施例では、係数内の２進値に用いられる埋め込み順序はビットプレーン順である。係数は、符号化される前に、ビット・シグニフィカンス表現で表される。ビット・シグニフィカンス表現は、最上位ビット（ＭＳＢ）ではなくて、符号ビットが最初の非ゼロの絶対値ビットと一緒にエンコードされる符号・絶対値表現である。すなわち、符号ビットは、絶対値ビット全体の前に来るのではなく、最初の非ゼロの絶対値ビットの次に来る。また、符号ビットは、最上位の非ゼロ絶対値ビットと同じビットプレーン内にあるとみなされる。
【０１４６】
ビット・シグニフィカンス形式は数値を３組のビット、すなわちヘッドビット、テール(tail)ビット及び符号ビットによって表現する。ヘッドビットとは、ＭＳＢから最初の非ゼロ絶対値ビットまでの全てのゼロビット（最初の非ゼロ絶対値ビットを含む）である。最初の非ゼロ絶対値ビットが現れるビットプレーンで、係数の重要度が定まる。テールビットは、最初の非ゼロ絶対値ビットの後からＬＳＢまでの絶対値ビットからなる。符号ビットはただ単に符号(sign)を表わすもので、例えば０は正符号を、１は負符号を表す。ＭＳＢが非ゼロビットの、±２のｎ乗のような数値は、ヘッドビットを１ビットしか持たない。ゼロの係数は、テールビットも符号ビットも持たない。図６１は−７から８までの４ビット係数の取り得る全ての値を示す。
【０１４７】
図６１において、各段に表されるビット・シグニフィカンス表現は１ビット又は２ビットを含む。２ビットの場合、その最初のビットは最初の１のビットであり、その後に符号ビットが来る。
【０１４８】
画素の輝度に関して起こるような、値が非負整数の場合、採用し得る順序はビットプレーン順（例えば、最上位ビットプレーンから最下位ビットプレーンへの順序）である。２の補数による負整数も許容される実施例では、符号ビットの埋め込み順序は、整数の絶対値の最初の非ゼロビットと同じである。したがって、１つの非ゼロビットが符号化されるまで、符号ビットは考慮されない。例えば、符号・絶対値表記法によれば、１６ビット数−７は
１００００００００００００１１１
である。ビットプレーン・ベースでは、初めの１２デシジョン(decision)は“非有意”すなわちゼロとなる。最初の１のビットは１３番目のデシジョンに見つかる。次に符号ビット（“負”）が符号化される。符号ビットが符号化された後、テールビットが処理される。１４番目と１５番目のデシジョンは共に“１”である。
【０１４９】
係数は最上位のビットプレーンから最下位のビットプレーンへと符号化されるので、データのビットプレーン数が正確にわからなければならない。本発明においては、データから計算される、又は画像の深さ及びフィルタ係数から導き出される係数値の絶対値の上境界を見つけることによって、ビットプレーン数が決定される。例えば、その上境界が１４９のときには、有意な８ビットつまり８つのビットプレーンがある。ソフトウエアの速度では、ビットプレーン符号化を利用できないかもしれない。別の実施例では、ビットプレーンが符号化されるのは、係数が２進数として意味をなす時だけである。
【０１５０】
＜係数桁揃え（alignment）＞
本発明は、ビットプレーン符号化の前に、係数を相互に桁揃えする。こうするのは、ＦＦＴやＤＣＴと同様、異なった周波数部分帯域内の係数は異なった周波数を表すからである。本発明は、係数を桁揃えすることにより量子化を制御する。軽く量子化される係数ほど早いビットプレーン側へ桁揃えされる（例えば左へシフトされる）。よって、ストリームが打ち切られる場合、これらの係数は、それを定義するビットが、より重く量子化された係数に比べ多くなる。
【０１５１】
一実施例では、係数はＳＮＲ又はＭＳＥからみて最高のレート・歪み性能が得られるように桁揃えされる。ＭＳＥのような統計誤差距離から見てほぼ最適の桁揃えを含め、可能な多くの桁揃えがある。あるいは、桁揃えは係数データの物理視覚的（physchovisual)量子化を可能にするかもしれない。桁揃えは画像品質に（換言すればレート・歪み曲線に）相当な影響を及ぼすが、ロスレスシステムの最終的な圧縮率には殆ど影響を与えない。特殊な量子化である注目領域忠実度符号化には、他の桁揃え、すなわち解像度プログレッシブ桁揃えが合うかもしれない。
【０１５２】
桁揃えは、圧縮データのヘッダ中で指示されてもよいし、個別のアプリケーション用に固定されてもよい（すなわちシステムが１つの桁揃えしか持たない）。様々なサイズの係数に関する桁揃えは、符号化器及び復号化器の両方に分かっているので、エントロピーコーダの効率に全く影響を与えない。
【０１５３】
ｂビット／画素の画像の２レベルのＴＳ変換及びＴＴ変換分割における各種係数のビット深さが図２８に示されている。図２９は、本発明において係数桁揃えに用いられる周波数帯域に対する乗数の一例である。係数の桁揃えのために、1-ＤＤ係数のサイズが基準として用いられ、このサイズに対するシフトが与えられる。ｎシフトは２のｎ乗倍することである。
【０１５４】
一実施例では、最大の係数の絶対値に対して係数をシフトすることにより、画像中の全ての係数の桁揃えを生成する。そして、桁揃え後の係数は、重要度レベルと呼ばれるビットプレーン単位で、最上位の重要度レベルより最下位の重要度レベルへと処理される。符号は、各係数の最後のヘッドビットと一緒に符号化される。符号ビットは最後のヘッドビットの重要度レベルにある。重要なことは、桁揃えがエントロピーコーダへビットが送られる順序を制御するに過ぎないことである。割増０ビットのパッディング、シフト、格納、符号化が実際に行われるわけではない。
【０１５５】
図６２に係数桁揃えのための桁揃え数の一例を示す。
様々なサイズの係数に関する桁揃えは、符号化器と復号化器の両方に分かっているのでエントロピーコーダの効率にはまったく影響を与えない。
同じデータセットの符号化単位が異なった桁揃えを持つ場合があることに注意されたい。
【０１５６】
＜コードストリームの順序付け及びコンテクストモデル＞
図２７は、コードストリームの順序付けと、符号化単位内部の順序付けを示す。図２７において、ヘッダ１００１の後に、符号化単位１００２が上の帯域より下の帯域へと順に続く。（単一の画像タイプ用にデザインされたアプリケーションでは、ヘッダ１００１はオプションである。）
各符号化単位は、最高重要度のデータ１００３、低重要度データ１００４、最低重要度のデータ１００５からなる。
【０１５７】
コンテクストモデルは、データが符号化される順序とデータの特定ビット用の条件付けの両方を決定する。順序付けについてまず考える。データの最高レベルの順序付けは前述した。データは、変換順にロスレス符号化される「最高重要度のデータ」（ＭＩＣと呼ぶこともある）と、埋め込み統合型ロスレス／ロッシー方式で符号化される「低重要度のデータ」（ＬＩＣと呼ぶこともある）とに分けられる。
【０１５８】
各ビットプレーン内で係数が処理される順序は、低い解像度より高い解像度へ向かう順（低い周波数より高い周波数へ向かう順）である。各ビットプレーン内の係数部分帯域の順序は、高いレベル（低解像度、低周波数）より低いレベル（高解像度、高周波数）への順である。各周波数部分帯域の内部において、符号化はある決まった順序でなされる。一実施例では、その順序はラスター順、２×２ブロック順、Ｓ字状(serpentine)順、Ｐｅａｎｏスキャン順、等々である。
【０１５９】
図２７のコードストリームを用いる４レベル分割の場合、その順序は次のとおりである。
4-SS,4-DS,4-SD,4-DD,3-DS,3-SD,3-DD,2-DS,2-SD,2-DD,1-DS,1-SD,1-DD
【０１６０】
本発明に利用される水平コンテクストモデルの一実施例を以下に説明する。このモデルは、空間的、スペクトル的な係数の従属性に基づいて符号化単位内のビットを利用する。近傍係数及び親係数に関して得られる２進値を、コンテクストを生成するために利用できる。しかし、コンテクストはデコーダビリティと因果関係があり、また、多少は効率的適応と因果関係がある。
【０１６１】
本発明は、バイナリ・エントロピーコーダのために、係数により生成された埋め込みビット・シグニフィカンス順のビットストリームをモデル化するためのコンテクストモデルを提供する。
【０１６２】
図５６は、符号化単位の各係数の近傍係数を示す。図５６において、近傍係数は分かりやすい地理的表記法で表されている（例えば、Ｎ＝北、ＮＥ＝北東、等々）。図５６のＰのような、ある係数とカレント・ビットプレーンが与えられると、コンテクストモデルは、そのビットプレーンより前の符号化単位全ての任意の情報を利用できる。このコンテクストモデルの場合、注目係数の親係数も利用される。
【０１６３】
ヘッドビットは、最も圧縮できるデータである。したがって、圧縮率を上げるため、大量のコンテクストもしくは条件付けが使われる。近傍係数又は親係数の値を注目係数の注目ビットのコンテクストを決定するために利用するのではなく、その情報は図３０に関連して説明する２つの指示ビットにまとめられる。この情報は、メモリに格納されてもよいし、近傍係数又は親係数から動的に計算されてもよい。
【０１６４】
＜メモリからディスクへの埋め込み＞
本発明のための埋め込みスキームの一実施例は、データの符号化の開始時にはバンドバッファメモリ全体がデータで塞がっているので、作業域メモリとして利用できる余分なスペースがバンドバッファメモリ内にないという事実をベースにしている。本発明においては、埋め込まれるデータはメモリに格納され、また重要度が低いデータである。それより重要度の高いデータは直接符号化される。重要度が最低のデータはいくつかの最下位ビットからなる。
【０１６５】
一実施例において、各係数の一部が後に符号化するためメモリに再書き込みされるときには、的確な符号化を保証するために、符号ビットが分かっていることは勿論、ヘッドビットとテールビットも分からなければならない。一実施例では、ヘッド、テール及び符号ビットの情報を指示するために２ビット又はそれ以上（例えば、３ビット、４ビット、５ビット等々）の指示ビットが用いられる。
【０１６６】
一実施例では、８ビットのメモリロケーションが使用される場合、２ビットの指示ビットでヘッド、テール及び符号ビットの情報を指示する。２ビットの指示ビットを使用すれば、最低重要度の６重要度レベルを２指示ビットと一緒にメモリに再書き込みすることができる。１つの指示ビットで、６重要度レベルの最上位ビットがヘッドビットであるかテールビットであるかを指示する。第１の指示ビットがヘッドビットであることを指示するときには、第２の指示ビットはその係数の符号である。他方、第１の指示ビットがメモリに再書き込みされたデータの最上位ビットがテールビットであることを指示するときには、第２の指示ビットは自由な指示ビットであり追加的なテール情報、例えば最高重要度のテールビットが最初のテールビットであるか、もっと後のテールビットであるかを指示することができる。
【０１６７】
図３０は、最高重要度のデータ１３０１（ＭＩＣと呼ばれる）と低重要度のデータ１３０２（ＬＩＣと呼ばれる）に分割された係数を示す。一実施例では、ＭＩＣは各係数の上位６ビットからなり、ＬＩＣは下位６ビットからなる。最高重要度データ１３０１はコンテクストモデルへ送られ、直ちに係数順に符号化される。このデータについては、外部メモリにバッファリングする必要はない。低重要度データ１３０２はメモリ（例えばＲＡＭ）に書き込まれ、その後、重要度順に符号化され埋め込まれる。また、データ中の２ビットの指示ビットがメモリに書き込まれる。指示ビット１３０３は、メモリに書き込まれたデータの最上位ビットがヘッドビットであるか否かを示す。指示ビット１３０４は、係数の符号を与えるか、そのデータに最初のテールビットが含まれているか否かを示す。なお、指示ビットは、低重要度データ１３０２と連結した形で記憶してもよいし、データ１３０２を記憶しているメモリと関連した別のメモリ又はメモリロケーションに、係数の各部分に関連した指示ビットを識別できように格納してもよい。
【０１６８】
図６３中の例で２ビットの指示ビットの使い方を示す。図６３の欄は図３０のデータ形式と一致するように配列されている。符号ビットは“S”で示され、テールビットは“T”で表され、何でも構わないビットは“X”で表され、テールオン（tail-on）ビットの値は“h”又は“t”で表されている。図６３において、指示ビットは、ｈ＝０，ｔ＝１である。この取り決めを、他の実施例において、そのまま用いてよい。一実施例では、図６３の０の符号ビットは正符号を示し、１の符号ビットは負符号を示す。その逆の割り当てを用いてもよい。なお、符号ビットは常に最初の“on”ビットと一緒に保存されるので、同時に符号化して埋め込むことができる。
図６３において、“T”は係数の対応ビットを指し、０又は１である。
【０１６９】
一実施例では、復号化期間中に、最高重要度のデータは、それが復号化される時にメモリに書き込まれ、同時に、低重要度データを記憶するためにメモリを初期化するため、適当な２つの指示ビットがメモリに書き込まれる。（係数の桁揃えによっては最高重要度データの一部が次のバイトにも格納されることがある）この初期化によって、低重要度データを１度に１ビットプレーンずつ復号化するのに、１係数あたり１バイト（実施例によっては、１バイト未満）を読み出して書き込むだけでよい。係数が読み出されて逆変換に入力される時に、その係数は普通の数値形式（例えば２の補数形式）に変換される。
【０１７０】
“最高重要度データ”と“低重要度データ”のほかに、符号化時に捨てられる又は量子化されるデータもあるかもしれない。係数は、量子化スケールファクタ（２のQ-1乗）で割られる。（係数の量子化はＪＰＥＧ規格に述べられている）
発明においては、除算はビットプレーンの切り捨てによって行われるので、量子化は２のベキ乗である。例えば、Ｑ＝１は１による除算を意味するから、係数は変化しないが、Ｑ＝２は２による除算を意味するから、１つのビットプレーンが切り捨てられるということである。これらの除算は、シフト例えば、Ｑ＝２のときは１ビット位置分のシフト）によって行ってもよい。図３１と図３２は、様々な部分帯域について、量子化と係数桁揃えの両方を考慮した最高重要度データと低重要度データの形式を示す。
【０１７１】
図３１は、データが切り捨てられないロスレスのケースを示す。ＪＰＥＧの規約にならい、これを量子化Ａ＝１と呼ぶ。というのは、現実の係数が１で除算される（損失なし）であるからである。最高重要度データは網が掛けられていない。低重要度データは網掛けされている。
【０１７２】
図３２は、１ビットプレーン分のデータが切り捨てられたケースを示す。１つのビットプレーンを切り捨てることは２で割ることと等価であるので、Ｑ＝２である。捨てられたビットプレーンは黒で表されている。
【０１７３】
図３１と図３２に示されているもののほかに、最高重要度データにはＳＳ係数も含まれることに注意されたい。係数ビットは８ビットデータとして示されているが、可逆色空間を使用するときには８ビットのデータが必要となり、色差係数のサイズが１ビットだけ増加する。
【０１７４】
本発明において、符号ビットのコンテクストモデルは、最後のヘッドビットの次の符号の符号化を含む。Ｎ係数が正であるか負であるか、符号がまだ符号化されていないか否かによって、符号に関するコンテクストは３つ存在する。あるいは、符号について１つのコンテクストだけを用いてもよい、すなわち符号を常に５０％として符号化してもよい。
【０１７５】
＜ウェーブレット係数の符号化順序＞
ウェーブレット係数の符号化順序の一例を次の擬似コードにまとめる：
最高重要度データを符号化
最初のデータのある低重要度ビットプレーンの位置を符号化
for各低重要度データビットプレーン  do
１つの低重要度データビットプレーンを符号化
【０１７６】
最高重要度データが符号化される時に、０のヘッドビットだけでない低重要度データの最初のビットプレーンを、各係数について求める。こうすることで、符号化器及び復号化器が低重要度データのビットプレーン全体についてルックアヘッド(look-ahead)をすることが可能になる。このことは、全情報がＫ係数にありＣＭＹ係数が全て０の白黒データ単位の符号化の場合に有用である。ビットプレーンを個別的に符号化しないことは、特にR2(7)が使用可能な最長のランレングスコードである場合に、圧縮率を向上させる。（“R2”コードについては、米国特許第5,381,145号及び同5,583,500号を参照されたい）
しかし、４つの並列符号化コア(core)が同時に成分を処理するときには、処理速度は符号化すべき最多のビットプレーンを持つ成分によって決まる。他の成分に割り当てられたコアは、符号化されないビットプレーンの期間中、遊休状態である。
【０１７７】
前記擬似コードの処理の一実施例を説明するフローチャートが図３３に示されている。図３３において、コンテクストモデルはまず最高重要度部分（ＭＩＣ）を符号化する（処理ブロック１４０１）。ＭＩＣの符号化後、処理ロジックは低重要度部分（ＬＩＣ）の最初のデータを持つビットプレーンの位置を符号化する（処理ブロック１４０２）。これは符号化単位全体に対するものである。ＬＩＣに６個のビットプレーンがあるときには、そのビットプレーンのどれもデータを含まないか、１個、又は２個、３個、４個、５個あるいは６個のビットプレーンがデータを含む。次に処理ロジックは、カレントＬＩＣビットプレーン変数に、この最初のデータを持つＬＩＣビットプレーンを設定する（処理ブロック１４０３）。
【０１７８】
データのあるＬＩＣビットプレーンが全て符号化されたか判定する（処理ブロック１４０４）。その全部が符号化済みならば処理は終了するが、そうでなければ１つのＬＩＣビットプレーンを符号化し（処理ブロック１４０５）、カレントＬＩＣビットプレーン変数に、次のＬＩＣビットプレーンを設定する（処理ブロック１４０６）。そして、処理は処理ブロック１４０４にループバックする。
【０１７９】
＜最高重要度データの符号化順序＞
最高重要度データの符号化順序の一実施例は次の通りである：
for  各木  do
SS係数を符号化
MICルックアヘッドを実行（又は木ルックアヘッドを実行）
for  各非SS係数
for  データのある各ビット（プレーン）do
ヘッドビット又はテールビットを符号化
if  係数は０でない
符号ビットを符号化
【０１８０】
最高重要度データは、１ウェーブレット木が一度に処理される。繰り返しになるが、最高重要度データは埋め込まれない。ＭＩＣルックアヘッドにより、ウェーブレット木内のＳＳでない全係数についてヘッドビットがオールゼロでないビットプレーンを決定する。一実施例では、個別に符号化すべき最初のビットプレーンを識別するのに４ビット数値で十分である。図３４に示す他の実施例においては、１つのビットが、第２分割のＳＳ以外の全ての係数１５０１（網掛け領域）が０であることを示すために用いられ、もう１つのビットが、第１分割のＳＳ以外の全ての係数１５０３が０であることを示すために用いられる。これら２ビットが、最初のビットプレーンの識別のために用いられる４ビットに加えて用いられる。
【０１８１】
他の実施例においては、ＳＳ係数が符号化され、次に木全体について非ゼロのヘッドビットを持つ最初のビットプレーンが符号化される、木ルックアヘッドが用いられるかもしれない。
【０１８２】
ＳＳ係数と最初のビットプレーンの符号化のために条件付けが利用されるときにコンテクスト再来遅延を補償するため、ＳＳ係数のビット（可逆色空間を使用するなら９ビット）の実際の符号化／復号化とルックアヘッド値を交替させてよい。条件付けが利用されないときには、交替は必要とされない。
【０１８３】
前述のように、本発明のコンテクストモデルはルックアヘッドを利用する。このルックアヘッドの一例が、最高重要度データすなわち最高重要度部分（ＭＩＣ）に対し用いられてよい。一実施例では、図３４に示すように、各木のために６ビット、すなわち、最大ビットプレーンのために４ビット、レベル０オールゼロのビットプレーンのために１ビット、レベル１オールゼロのビットプレーンのために１ビット、が用いられる。最大ビットプレーンがゼロのときには、余分な２ビットが冗長であるが大したことではない。別の方法では、”（孤立した）ゼロ／非ゼロ”を判定するため適応的符号化判定が用いられる。非ゼロ係数については、以下によりさらに記述される：
・係数の値と符号を決定するためのＭ項演算（合計：２サイクル／係数）
・“±１／非±１”を判定するため適応的符号化判定が用いられる。
絶対値が１のときに符号を求め、絶対値が１を超えるときに符号と値を求めるために、もう１サイクル使用される。（合計：３サイクル／係数）
・同様に、“±１／非±１”、“±２,3／非±２,3”等々を合計４サイクル／係数で行うことができる。
・以下の手順：
if  MICビットプレーン全部は０でない  then
デシジョン“-1,0,1”又は“その他”を適応符号化
if  “-1,0,1”  then
“0”又は“-1,+1”を適応符号化
if  “-1,+1”  then
符号ビットを記述
else
“-3,-2,2,3”又は“その他”を適応符号化
if  “-3,-2,2,3”  then
“-2,2”又は“-3,3”を１ビットで記述
符号ビットを記述
else
木に対し決定された最大ビット数で値を記述
符号ビットを記述
【０１８４】
なお、１ビット又は複数ビットの”記述”は、適応符号化でも、５０％確率での符号化でも、単なる符号化データストリームへのコピーでもよい。
【０１８５】
全部又は大部分のビットプレーンを個別に符号化すべきときには、変換のいくつかのレベルに桁揃えのため利用されないビットプレーンがあり、この利用されないビットプレーンは符号化されない。ヘッドビット及びテールビットについてのビット−コンテクスト遅延(bit  to  context  delay)の処理については多くの選択肢がある。一つの方法は、３つの係数、DD,SD及び,DSを交互に処理する方法である。非０係数の符号ビットは係数の最後に符号化できる。これは、最高重要度データは全部が常にロスレスであり、最初の”オン”ビットのすぐ後に続く必要はないからである。
【０１８６】
最高重要度部分（ＭＩＣ）を符号化するための擬似コードを説明するフローチャートの一例が図３５に示されている。図３５において、処理ロジックが最初の木をカレント木とすることから処理が始まる（処理ブロック１６０１）。次に、処理ロジックはＳＳ係数を符号化する（処理ブロック１６０２）。ＳＳ係数の符号化後、処理ロジックは当該木のＭＩＣ中のデータを持つ最初のビットプレーンの位置を符号化する（処理ブロック１６０３）、すなわちＭＩＣルックアヘッドを行う。
【０１８７】
次に、処理ロジックは、木全部のＭＩＣがゼロであるか判定する（処理ブロック１６０４）。木全部のＭＩＣがゼロならば処理ロジックは処理ブロック１６１４に進むが、そうでなければ、処理ブロック１６０５に移行し、処理ロジックは当該木の最初の非ＳＳ係数をカレント係数にする。
【０１８８】
カレント係数を木の最初の非ＳＳ係数に設定した後、処理ロジックは、データを持つ最初のビットプレーンをカレントビットプレーンにする（処理ブロック１６０６）。次に処理ロジックは、カレントビットプレーンのカレント係数の１つのビットを符号化する（処理ブロック１６０７）。その後、処理ロジックは、その全てのビットプレーンが符号化されたか判定する（処理ブロック１６０８）。ビットプレーン全部の符号化が済んでいないときには、処理ブロックは次のビットプレーンをカレントビットプレーンとし（処理ブロック１６０９）、処理ブロック１６０７へ進む。全部のビットプレーンが符号化されてしまったときには、処理ロジックはカレント係数がゼロであるか判定する（処理ブロック１６１０）。カレント係数がゼロでなければ、処理ロジックは符号ビットを符号化し（処理ブロック１６１１）、処理ブロック１６１３へ進む。カレント係数がゼロならば、処理ロジックは処理ブロック１６１３へ進む。
【０１８９】
処理ブロック１６１３で、処理ロジックは木内の全係数の符号化が済んだか判定する。木の全係数の符号化が済んでいなければ、処理ロジックは木内の次の係数をカレント係数とし（処理ブロック１６１２）、処理ブロック１６０６へ進む。木内の全係数が符号化されてしまったときには、処理ロジックは全ての木の符号化が済んだか判定する（処理ブロック１６１４）。全ての木が符号化されたときには処理が終了するが、そうでなければ処理ブロック１６１５に進み、処理ロジックは次の木をカレント木とし、処理ブロック１６０２に移行する。
【０１９０】
図３６は、最高重要度データの符号化パス期間に利用されるフォーマッティング・ユニット及びコンテクストモデルの一実施例のブロック図である。図３６において、バレルシフタ１７０１は、最高重要度データが最小ディスク帯域を超えないようにしてロスレス圧縮を保証するため、係数の絶対値と符号化時に用いられた量子化レベルを受け取るように接続される。このように、量子化レベルでバレルシフタ１７０１を制御する。一実施例では、バレルシフタ１７０１は、絶対値ビットを０，１，２又は３ビットだけシフトして１，２，４又は８の量子化をサポートする。他の実施例では、これより低い又は高い量子化数がサポートされる、例えば２量子化をサポートするだけである。
【０１９１】
バレルシフタ１７０１の出力は、下位の６ビットプレーンすなわち低重要度データと、残りの高位ビットプレーンすなわち最高重要度データとからなる。他の実施例では、これら２出力を生じさせるために単純な分離メカニズムが用いられる。
【０１９２】
バレルシフタ１７０１の両出力は先頭ビットプレーンユニット１７０２に入力され、データを含んでいるビットプレーンが判別される。先頭ビットプレーンユニット１７０２は、低重要度データ処理時に用いられる全ての符号化単位について、最初の”オン”ビットを持つビットプレーンを見つけるために利用される。（図２７参照）。もう一つの先頭ビットプレーンユニット１７０６も、バレルシフタ１７０１から出力される最高重要度データを受け取るよう接続されている。先頭ビットプレーンユニット１７０６は、高重要度データ処理時に各木に対し利用される。先頭ビットプレーンユニットの一実施例を、図３７を参照して後述する。
【０１９３】
バレルシフタ１７０１は比較ユニット１７０３，１７０４にも接続される。これら比較ユニット１７０３，１７０４は最高重要度データに対し２つの比較を行い、低重要度データのための２ビットの指示情報を発生する。比較ユニット１７０３は、最高重要度データが０であるか判定することにより、テールビットが既に出現したか（すなわち、符号化がもうテール内であるか）指示する。比較ユニット１７０３の出力がテールオンビットである。比較ユニット１７０４は、最高重要度データが１であるか否か判定する。最高重要度データが１であると、図６３から、出力は０である。比較ユニット１７０４の出力は、マルチプレクサ（ＭＵＸ）１７０５の一方の入力に接続される。ｍｕｘ１７０５の他方の入力は符号ビットを受け取るように接続されている。ｍｕｘ１７０５のセレクト入力は比較ユニット１７０３の出力によって制御され、比較ユニット１７０３の出力がテールビットであると指示するときにきｍｕｘ１７０５の出力は“先頭テール”ビット１３０４である。しかし、比較ユニット１７０３の出力がヘッドビットであると指示するときには、ｍｕｘ１７０５は符号を出力するように制御される。
【０１９４】
一実施例では、比較ユニット１７０３，１７０４は単純なビット比較器により構成される。
【０１９５】
メモリ１７０７が、符号ビット、バレルシフタ１７０１より出力される最高重要度データ、及び先頭ビットプレーンユニット１７０６の出力を受け取るように接続される。メモリ１７０７は、親と近傍の情報を条件付けに利用できるよう係数を遅延させるために利用される。メモリ１７０７の構成は後述する。
【０１９６】
コンテクストモデル（ＣＭ）１７１０〜１７１２は符号、ヘッド、テール、その他のビットのための条件付けを与える。これら各コンテクストモデルについては後述する。
【０１９７】
図３７は、先頭ビットプレーンユニットの一実施例を示す。図３７において、先頭ビットプレーンユニット１８００は、係数とレジスタ１８０２の出力からのフィードバックを受け取るように接続されたＯＲゲート１８０１を有する。ＯＲゲート１８０１の出力はレジスタ１８０２の入力に接続される。レジスタ１８０２は、木スタート／符号化単位リセット指示によって制御される。レジスタ１８０２の出力はプライオリティエンコーダ１８０３に接続される。プライオリティエンコーダ１８０３の出力は、先頭ビットプレーンユニット１８００の出力である。
【０１９８】
初めに、レジスタ１８０２がクリアされる。レジスタ１８０２の各ビットは、ＯＲゲート１８０１によって入力係数の各ビットと論理和がとられる。係数の０の各ビットについては、レジスタ１８０２の値は現在の値のままであり、それがプライオリティエンコーダ１８０３へ出力される。係数の１の各ビット（例えば先頭の１）については、ＯＲゲート１８０１のレジスタ１８０２への出力は１であり、これがプライオリティエンコーダ１８０３へ入力される。そして、プライオリティエンコーダ１８０３は先頭の１を見つけるが、これが係数の１を持つ最初のビットプレーンである。
【０１９９】
＜低重要度データの処理順序＞
最低重要度データの各ビットプレーンは以下のように処理される：
for  各木  do
for  各係数  do
if  ルックアヘッド区間の始まり
ルックアヘッドを実行
if  ルックアヘッドはアクティブでない
ヘッドビット又はテールビットを符号化
if  先頭の“オン”ビット
符号ビットを符号化
【０２００】
ＬＩＣビットプレーンの符号化プロセスの一実施例を図３８のフローチャートに示す。ＬＩＣビットプレーン符号化プロセスは、処理ロジックが最初の木をカレント木にすることから始まる（処理ブロック１９０１）。次に、処理ロジックは、カレント木の最初の非ＳＳ係数をカレント係数とする（処理ブロック１９０２）。カレント木の最初の非ＳＳ係数をカレント係数とした後、処理ブロックは符号化がルックアヘッド区間の開始点に対するものか判定する（処理ブロック１９０３）。符号化プロセスがルックアヘッド区間の開始点にあるきには、処理ロジックはルックアヘッドを行う（処理ブロック１９０４）、そして処理ブロック１９０５に進む。符号化プロセスがルックアヘッド区間の開始点にないときには、処理ロジックは直ちに処理ブロック１９０５に移行し、ルックアヘッドがアクティブであるか判定する。
【０２０１】
ルックアヘッドがアクティブならば、処理ロジックは処理ブロック１９０９へ進み、カレント木の全係数が符号化されたか判定する。カレント木の全係数が符号化されたときには処理ブロック１９１３から処理が継続するが、そうでないときには、処理ロジックはルックアヘッド区間の後のカレント木の次の係数をカレント係数とし（処理ブロック１９１０）、処理ブロック１９０３へ進む。
【０２０２】
ルックアヘッドがアクティブでないときには、処理ロジックはヘッドビット又はテールビットを符号化し（処理ブロック１９０６）、次に最初の非ゼロビットが受け取られたか判定する（処理ブロック１９０７）。最初の非ゼロビットが受け取られていないならば、処理ロジックは処理ブロック１９１１へ進む。最初の非ゼロビットが受け取られているならば、処理ブロック１９０８に進み、処理ロジックは符号ビットを符号化し、そして処理は処理ブロック１９１１へ進む。
【０２０３】
処理ブロック１９１１で、処理ロジックはカレント木の全係数が符号化されたか判定する。カレント木の全係数が符号化済みでなければ、処理ロジックはカレント木の次の係数をカレント係数とし（処理ブロック１９１２）、処理ブロック１９０３へ移行する。カレント木の全係数が符号化されたならば処理ブロック１９１３に進み、処理ロジックは全ての木が符号化されたか判定する。全ての木が符号化済みでなければ、処理ロジックは次の木をカレント木とし（処理ブロック１９１４）、処理ブロック１９０２から処理を継続する。全木が符号化済みならば、処理は終了する。
【０２０４】
１つのウェーブレット木を一度に処理することは重要ではないが、変換はデータをその順に読み書きさせるため、それが都合がよいであろう。ウェーブレット木毎にデータが処理されるときには、ビット−コンテクスト遅延を、ＤＤ，ＳＤ，ＤＳ係数間の交替（部分木間の交替）によって調整できる。別の方法として、一度に１つの部分帯域を符号化してもよい。どのような順序を選んだとしても、異なった部分帯域の桁揃えに用いられないヘッド／テールビットは、符号化されることがないから、無駄なサイクルを必要としない。
【０２０５】
図３９は、低重要度データのためのルックアヘッド及びコンテクストモデルの一実施例のブロック図である。一実施例では、最高重要度データ及び低重要度データは、符号、ヘッド及びテールビットのための条件付けを与える同じコンテクストモデル（ＣＭ）を利用する。
【０２０６】
図３９において、コンテクストモデル２００１〜２００３は入力データを受け取るように接続される。符号コンテクストモデル２００１はテールオンビット、符号／先頭テールビット指示及びデータを受け取るように接続される。ヘッドビットコンテクストモデル２００２は、テールオンビット及びデータを受け取るように接続される。テールビットコンテクストモデル２００３は、テールオンビット、符号／先頭テールビット指示及びデータを受け取るように接続される。各コンテクストモデル２００１〜２００３は、そのに入力に応じて１つのコンテクストを生成する。
【０２０７】
コンテクストモデル２００１〜２００３によって生成されるコンテクストは、ｍｕｘ２００４の入力に接続される。ｍｕｘ２００４は、前ビット及びビットシグニフィカンス表現そのものによって制御される。ヘッドビットコンテクストモデル２００２は、データ入力に１のビットが来るまで利用される。符号コンテクストモデル２００１は、最後のビットがヘッドの最初の１のビットであった時に利用される。その後、テールビットコンテクストモデル２００３が利用される。
【０２０８】
ｍｕｘ２００４の出力は、“＝ヘッド？”ユニット２００５及び先入れ／先出し（ＦＩＦＯ）バッファ２００６に接続される。“＝ヘッド？”ユニット２００５は、現在のコンテクストが近傍及び親の０のヘッドビットがあるヘッドビットコンテクストであるか調べる。コンテクストが全てヘッドにあるときには、“＝ヘッド？”ユニット２００５から出る信号でＦＩＦＯバッファ２００６をクリアする。
【０２０９】
コンテクストと結果は、ルックアヘッド区間中、ＦＩＦＯ２００６又は他のメモリにバッファされる。ルックアヘッド区間の終わりで、必要ならば、ルックアヘッド・デシジョン及び／又は個々のデシジョンが符号化される。一度に１ウェーブレット木ずつ係数が処理される場合には、ルックアヘッド用のＦＩＦＯは、単一のＦＩＦＯを全ての部分帯域のために用いてもよいし、部分帯域毎に１つずつ、複数のＦＩＦＯを用いてもよい。
【０２１０】
なお、マルチプレキシングを減らしたいのであれば、最高重要度データもルックアヘッドを利用してもよい。しかし、各木毎にルックアヘッドと先頭ビットプレーンの両方を利用するのは、やや冗長である。
【０２１１】
ある成分に割り当てられたコアが符号ビットを符号化するときには、同じビットプレーンの符号ビットを符号化しない、他成分に割り当てられたコアは遊休状態となる。したがって、各コアが別のビットプレーンの符号ビットを符号化するときには、最高４クロックサイクルを符号ビットに対して使用してよい。一実施例では、１係数につき、最高６ビットのヘッド又はテールビットがある。
【０２１２】
タイミングに関し考えられる１つの問題点は、最高重要度部分が十分に圧縮されることにより、そのデータの一部分の復号化期間にディスクが遊休状態になることである。バンドバッフアに十分なメモリ帯域があるならば、最高重要度データの処理を高速化するためルックアヘッドを利用してもよい。その場合、低重要度データがヘッドの始まりとなることがある。また、ディスクが、最高持続レートより高いバースト転送レートを有しても大丈夫であろう。ハードディスクは、かなりのバッファを持っているのが普通で、このバッファに先読みすることで遊休時間が排除されるであろう。
【０２１３】
＜コンテクストモデルの一部の条件付け＞
コンテクストモデルで利用される条件付けは、ハードウェアコストと圧縮率との兼ね合いで決まる。したがって、以下の部分では、条件付けのための多くの選択肢を提示し設計者の検討に供する。
【０２１４】
＜ＳＳ係数のためのコンテクストモデル＞
コンテクストモデルの一実施例においては、ＳＳ係数は符号化されない。ＳＳ係数は原データの高々２５６分の１であるので、それらを符号化する利益は殆どない。もしＳＳ係数を符号化したいなら、Ｇｒａｙエンコーディング、同一係数中の前ビットによる条件付け、及び／又は前係数中の対応ビットによる条件付けによって処理してよかろう。
【０２１５】
＜先頭ビットプレーンのためのコンテクストモデル＞
各ウェーブレット木の最高重要度データについての先頭ビットプレーン情報の４ビットは、ＳＳ係数と同様な方法で処理できる。これは原データのサイズを５２１分の１しか増加させない。一実施例では、それらは、原データに比べサイズが小さいため符号化されなくともよく、また、Ｇｒａｙエンコーディングと何らかの条件付けをしてもよい。
同様に、図３４に従って６ビットが用いられるときには、それら６ビットをＳＳ係数と同様に処理してよい。
【０２１６】
＜ヘッドビットのためのコンテクストモデル＞
図４０は、ヘッドビットのための条件付けを提供するコンテクストモデルの一実施例のブロック図である。図４０において、コンテクストモデル２１００は、ビットプレーンコンテクストモデルに見られるものと同様のシフトレジスタを含む。重要な相違点は、カレントビットプレーンの先行係数を利用せず、条件付けがテールオン情報をベースにしており、全ての先行ビットプレーンとカレントビットプレーン中の既に符号化された情報を利用することである。また、符号化されたビットプレーン又はビットプレーン群と、重要度レベル及び部分帯域バケッティングにより生成された符号化部分帯域又は部分帯域群のレートを識別するため数ビットを利用することである。
【０２１７】
図４０において、コンテクストモデル２１００は２つの入力、すなわちカレント重要度レベル２１１０とメモリからの係数２１１１を有する。カレント重要度レベル２１１０はテールオン情報／ビットジェネレータブロック２１０１と重要度レベル・部分帯域バケッティング(bucketing)ブロック２１０２の入力に接続される。メモリからの係数２１１１はブロック２１０１とレジスタ２１０３〜２１０６に接続される。
【０２１８】
ブロック２１０１は、係数を受け取って１のビットの有無を判定する。一実施例では、ブロック２１０１は１のビットの場所も特定する。ブロック２１０１の出力は、テールオン情報に基づいた１ビット又は２ビットである。一実施例では、テール情報は、最初の非０絶対値ビットが観測されているか否か（先頭の“オンビット”が観測されたか否か）を表し、また、観測されているならば、何ビットプレーン前かを表す。図６４はテール情報ビットの説明である。
【０２１９】
この２ビットのテール情報から、そのテール情報がゼロか否かを示す１ビットの“テール・オン”値が合成される。一実施例では、テール情報とテール・オンビットは係数が符号化された直後に更新される。別の実施例では、その更新は、並列的コンテクスト生成を可能にするため、もっと後に行われる。
【０２２０】
さらに、この２ビットは、符号化される重要度レベルを示すために利用される。最初の２ビットプレーンは値０を、第２の２ビットプレーンは値１を、第３の２ビットプレーンは値２を、残りのビットプレーンは値３を使用する。さらに、すべてゼロの、ヘッドビットのランレングス・エンコーディングがある。
【０２２１】
ヘッドビットのためのコンテクストの１０ビットは、親とＷ（西）係数それぞれからの２ビット情報、Ｎ（北），Ｅ（東），ＳＷ（南西），Ｓ（南）の各係数からの１ビット情報、２ビットの重要性レベル情報からなる。
【０２２２】
一実施例では、一部又は全ての周波数帯域についてテール情報が用いられない。こうすることにより、周波数帯域を、その親を前もって復号化することなく復号化できるようになる。
【０２２３】
別の実施例では、各周波数帯域のビットプレーンの重要度レベルへの割り当てに、一つの桁揃えを用いる。親のテール・オン情報の決定に、もう一つの桁揃えを利用するが、これは実際に符号化されたものより少ない親ビットプレーンを利用する。これは、ある周波数帯域のいくつかのビットプレーンを、同じ重要度レベルの親の対応ビットプレーンを復号化せずに復号化できるようにする（図５７参照）。例えば、ＭＳＥ桁揃えに基づいた親のテール・オン情報によらず、ピラミッド桁揃えにより画像を符号化できる（図５８参照）。これにより、復号化器は、ピラミッド桁揃えで復号化して、ＭＳＥ桁揃えを模擬し又はピラミッド桁揃えとＭＳＥ桁揃えの間の任意の桁揃えを模擬することができる。
【０２２４】
図４０において、ブロック２１０１の出力はレジスタ２１０３〜２１０６の入力に接続される。レジスタ２１０３〜２１０６は近傍データを蓄積する。例えば、上／左シフトレジスタ２１０３は、カレント係数の直上のビットを、そのラインの間中保持する。カレント・シフトレジスタ２１０４はカレントラインの係数のビットを保持し、下／右シフトレジスタ２１０５はシフトレジスタの直下ラインからのラインを保持する。最後に、親レジスタ２１０６は親データを保持する。こられシフトレジスタの出力がコンテクストを構成する。
【０２２５】
重要度レベル・部分帯域バケッティング(bucketing)ブロック２１０２の出力もコンテクストとして利用される。複数の部分帯域及び異なったレベルを同じコンテクストで符号化しようとする時にコンテクストの一部となるような場合である。そのような場合、ブロック２１０２の出力は、レジスタ２１０３〜２１０６の出力と組み合わされてコンテクストを構成する。そのような場合でなければ、コンテクストはレジスタ２１０３〜２１０６の出力だけから構成される。
また、コンテクストモデル２１００から１つのビットが出力される。
【０２２６】
カレントビットプレーンのデータを使用するためのビット−コンテクスト遅延を考慮して、ＤＤ，ＳＤ，ＤＳ係数間の交替により符号化を行ってもよい（部分木間の交替）。
【０２２７】
なお、条件付けに必要となる係数を格納するためにメモリが必要となる（図３６参照）。全ての近傍係数及び親により条件付けするコンテクストモデルの一実施例のためのメモリ使用方法を図４１に示す。短シーム変換順を想定している。（外部メモリを使用して長シーム変換順をサポートすることもできる。それには、メモリ量と帯域幅の両方の追加が必要となろう。）
高レベルの親による条件付けは非常にコストがかかる。ある木のレベル４のＤＤ係数は、当該木のレベル１のＤＤ係数の殆どより１６木だけ後になるまで計算されない。また、後で符号化される係数全体（図４１の影が付けられていない係数）を記憶することは、後に条件付けで利用するためのテールオン情報（図４１の影が付けられたもの）だけを記憶する場合にくらべて非常にコストがかかる。同じ木にある“西”情報と当該“西”木のからのデータなしに生成される親のみに基づいて条件付けをすれば、必要となるメモリ量が大幅に減少するであろう。親又は西の情報が得られない場合には、北又は東から得られる情報をコピーするのが有効である。
【０２２８】
＜符号ビットのコンテクストモデル＞
符号ビットのための条件付けを与えるコンテクストモデルは単純である。上の画素の符号が分かっているときには、それが条件付けのために利用される。上の画素の符号が分かっていないときには、そのビットは符号化されない。（(R2(0))が利用される。あるいは、全符号ビットについて不符号化(R2(0))を使用できる）。
【０２２９】
図４２は、符号ビットのためのコンテクストモデルの一実施例のブロック図である。図４２において、ｍｕｘ２３０１は、北の符号ビット２３０３と０のビット２３０４を受け取り、北のテールオンビット２３０２により制御されることにより、北のテールオンビット２３０２が１のときに北の符号ビット２３０３を出力し、そうでないときに０を出力する。このように、北の画素は、その南の画素に対するコンテクストを提供するための北テールオンビット２３０２と北符号ビット２３０３を供給する。
【０２３０】
＜テールビットのコンテクストモデル＞
テールビットに対しては条件付けは利用されない。一実施例では、固定した確率状態が用いられ、確率更新は用いられない。図６５は、テールビットに用いられるコードの３つの選択肢を表す。R2(1)とR2(0)を用いる２番目の選択肢が良い選択である。
【０２３１】
一実施例では、Ｍ≒６０％，Ｌ≒４０％なる確率に好適な黄金比コードは次のとおりである：
入力        符号語
ＭＭＭ      ００
ＭＭＬ      １１０
ＭＬ        ０１
ＬＭ        １０
ＳＳ        １１１
【０２３２】
＜コンテクストビン(bin)の要約＞
システムで利用可能なコンテクストビンの最小個数は次のとおりである。ＳＳ，各木の先頭ビットプレーン、符号及びテールビットはすべて符号化されない（R2(0)コードが使われる）。ＰＥＭ状態や最高確率シンボル（ＭＰＳ）ビットを記憶する必要はないが、R2(0)コードを選択するためのロジックがなければならない。したがって、これをどのように考えるかによるが、ハードウェアコストは０又は１コンテクストビンである。ヘッドビットに対しては適応符号化が用いられるべきである。低重要度データは、１ビットプレーンが一度に符号化されるから、ビットプレーンによる条件付けは重要でない。最高重要度データについては、各ウェーブレット木の先頭ビットプレーンは、ビットプレーン数を十分に減少させるであろうから、それらビットプレーンによる条件付けは重要でない。部分帯域による条件付けの有効性は、どのようなものかあまり明確でないが、これもこの最小のコンテクスト例では無視できる。３つの近傍係数と１つの親係数のテールビットを合計４ビット（１６コンテクストビン）のために使用してよい。１つの追加のコンテクストビンをルックアヘッドのために使用してよい。（メモリサイズが依然として２のベキ乗となるように、２つのコンテクストビンを一緒にマッピングしてルックアヘッド用の空きを作るのが、より好都合であるかもしれない。）
【０２３３】
４つのコアを用い（コンテクストを４回複写する必要がある）、また１コアあたり２つのコンテクストメモリバンクを用いる場合、”符号化されない”コンテクストをどのように考えるか、また２つのヘッドコンテクストビンが一緒にマッピングされるか否かによって、使用すべきコンテクストの最小個数は１２８と１４４の間となろう。
【０２３４】
十分な条件付けのあるシステムは以下のとおりである：
・ＳＳ（９ビット）と先頭ビットプレーン（４ビット）のために、１ビットあたり４コンテクストビン、合計５２コンテクストビンを使用する。（これらコンテクストビンはバンクに分割されてもよい、複写される必要はない。）
・テールビットは符号化されず、R2(0)とR2(1)の両方が使用される。これをどう考えるかによるが、そのコストは０，１又は２コンテクストビンである。
・２つの適応的コンテクストと１つの”無コード”コンテクストが符号ビットのために用いられる。
・ヘッドビットは近傍係数／親係数のために８ビット、部分帯域／ビットプレーン情報のために２ビット（１０２４コンテクストビン）を使用し得る。
・１つのコンテクストがルックアヘッドのために使用される。
【０２３５】
コンテクストモデルの他の例が、入力係数を符号／絶対値形式に変換する符号／絶対値ユニットの一例とともに、米国特許出願第08/498,695号（1995年６月30日受理、“Method  and  Apparatus  For  Compression  Using  Reversible  Wavelet  Transforms  and  an  Embedded  Codestream”）、米国特許出願第08/498,036号(1995年６月30日受理、“Reversible  Wavelet  Transform  and  Embedded  Codestream  Manipulation”)、米国特許出願第08/642,518号（1996年５月３日受理、“Compression  and  Decompression  with  Wavelet  Style  amd  Binary  StyleIncluding  Quantization  by  Device-Dependent  Parser”）、及び、米国特許出願第08/643,268号（1996年５月３日受理、“Compression/Deconpression  Using  Reversible  Embedded  Wavelets”)、に記載されている。
【０２３６】
このコンテクストモデルはデータのエントロピー符号化のためのコンテクストを提供する。一実施例では、本発明によって行われる全てのエントロピー符号化は、バイナリ・エントロピーコーダによって実行される。単一のコーダを使用して単一の出力コードストリームを生成してもよい。あるいは、多数の（現実の又は仮想の）コーダを使用して多数の（現実の又は仮想の）データストリームを生成してもよい。
【０２３７】
＜ＬＩＣのためのＭ項符号化＞
図４３は、ＬＩＣに対するＭ項符号化の利用を表している。Ｍ項符号化を圧縮符号化のために利用すると、ルックアヘッドとして作用する（図示の如く）。初めに、次の８係数の状態が調べられる。ヘッドに何かあると、ヘッドビットに対しエントロピー符号化が行われ、８係数の全ヘッドビットが符号化されるまで、全ヘッドビットが毎サイクル１ビットずつエントロピー符号化される。図４３において、１のヘッドビットは第１サイクル及び第３サイクルで符号化されるが、０のヘッドビットは第２サイクル及び第４サイクルで符号化される。全ヘッドビットがエントロピー符号化されると、符号ビットとテールビットが同一サイクルで符号化される。例えば、図４３において、１のヘッドビットの次にくる符号ビット及びテールビットは全て第５サイクルで符号化される。このようにして、全体のサイクル数が減少する。
【０２３８】
＜本発明の印刷システムへの応用＞
図４４は、プリンタのフロントエンドの一実施例のブロック図である。図４４において、レンダラー(renderer)２５０１はページ記述言語又はディスプレイリストの形式のデータを受け取る。レンダラー２５０１は、ラスター画像処理によって構成されてもよい。各ロケーション（例えばスポット）毎に、レンダラー２５０１は、その色（アプリケーションによるが、例えば、白黒、８ビットＲＧＢ値、８ビットＣＭＹＫ値）を決定する。レンダラー２５０１の出力は、バンドにフォーマットされた画素の集合であり、バンドバッファ（メモリ）２５０３に格納される。
【０２３９】
他の実施例では、Adobe  Postscript（登録商標）やMicrosoft  Windows（登録商標）ＧＤＩのようなページ記述言語（ＰＤＬ）によるデータはディスプレイリストへ変換される。このディスプレイリストは画素のバンドを生成するために用いられる。この実施例では、画素は連続階調値を表すと仮定され、プリントエンジンに必要とされる何らかの中間調処理もしくはディザ処理が、伸長後に行われることになろう。
【０２４０】
本発明においては、バンドバッファ２５０３として使用されるメモリは、圧縮用作業域としても使用される（必要メモリを増加させない）。この二重利用については詳しく後述する。
【０２４１】
圧縮器２５０４は各画素バンドを圧縮する。圧縮器２５０４に対する入力が中間調処理もしくはディザ処理された画素であるときにも圧縮器２５０４は動作するが、ウェーブレット処理による場合、圧縮率は良くないであろう。中間調処理もしくはディザ処理された画素に対してはバイナリコンテクストモデルを利用できる。圧縮器２５０４は圧縮データをディスク２５０５に書き込む。ディスク２５０５はハードディスクかもしれない。別の実施例では、ディスク２５０５はランダムアクセスメモリ（ＲＡＭ）、フラッシュメモリ、光ディスク、磁気テープ、任意の種類の記憶手段、任意種類の通信チャネルかもしれない。
【０２４２】
図４５は、プリンタのバックエンドの一実施例のブロック図である。図４５において、プリンタのバックエンド２５００はディスク２５０５に接続された伸長器２６０２、バンドバッファ（メモリ）２６０３、プリントエンジン２６０４からなる。伸長器２６０２は、ハードディスク２５０５から圧縮データを読み込んで伸長する。伸長されたデータは画素形式でバンドバッファ（メモリ）２６０３に格納される。バンドバッファ２６０３は、圧縮器２５０４のための作業域として働くバンドバッファ２５０３と同じメモリでもよい。プリントエンジン２６０４に対し画素をリアルタイムに送ることができるようにするため、伸長器２６０２はバンドバッファ２６０３をデータが十分に満たされた状態に保つ。
【０２４３】
図４６は、オプショナルな画質改善を含む別の実施例である。図４６において、伸長器２６０２より出力される画素は画質改善ブロック２７０５を介してバンドバッファ２６０３に入力するが、他の情報すなわち未だ画素になっていない情報（部分的な係数）はバンドバッファ２６０３へ直接送られる。画質改善ブロック２７０５は、補間処理、平滑化処理、誤差拡散処理、中間調処理及び／又はディザ処理などの機能を果たす。
【０２４４】
伸長器２６０２とバンドバッファ２６０３の間に必要となる帯域幅のため、伸長器２６０２はまず、変換係数をバンドバッファ２６０３に書き込み、バンドバッファ２６０３をアクセスして特定の係数を取り込み、逆変換を行ってからバンドバッファ２６０３に再び書き込む。なお、バンドバッファ２６０３は、作業域としては小さいかもしれない。例えば、１ページの画像が６４Ｍバイトでバンドバッファ２６０３が１６Ｍバイトでも、小さな作業域メモリだと考えられるであろう。
【０２４５】
例えば、３２ビット／画素（８ビットの４成分ＣＭＹＫ）、４００ｄｐｉのＡ４画像で、８ページ／分の場合に必要とされる、バンドバッファ２６０３からプリントエンジン２６０４へのデータレートは、約８Ｍバイト／秒である。代表的なハードディスクの転送速度はおおよそ２Ｍバイト／秒（例えば１．７〜３．５Ｍバイト／秒）である。したがって、ディスク２５０５の帯域幅をプリンタの帯域幅に整合させるためには、約４：１の圧縮率が要求される。一実施例によれば、図４４の圧縮器２５０４及び図４５又は図４６の伸長器２６０２が、単一の集積回路チップに収容される。
【０２４６】
図４７は、プリンタの圧縮／伸長機能を内蔵した集積回路（ＩＣ）チップの一実施例のブロック図である。図４７において、画素データインターフェース２８０１はバンドバッファ（不図示）と接続される。画素データインターフェース２８０１は、バンドバッファに対する読み書きのためのアドレスを生成する。可逆色空間変換を行うため、オプショナルの可逆色空間変換器２８０２が含まれるかもしれない。係数データインターフェース２８０４は、読み書きのためのアドレスを生成し、また２バイト係数を正しくアセンブルする。係数データインターフェース２８０４は、画素データインターフェース２８０１と一緒に、外部メモリにある必要のあるラインバッファリング又は係数バッファリングを制御する。係数データインターフェース２８０４と、可逆色空間変換の利用については後により詳しく説明する。
【０２４７】
なお、双方向の矢印は、データがいずれの向きにも流れ得ることを意味している。例えば、データを圧縮する時には、ＩＣチップの様々なコンポーネントを通じてデータは左から右へ流れる。他方、データ伸長時には、データはおおむね右から左へ向かって流れる。
【０２４８】
データの符号化時には、画素データインターフェース２８０１から、又は可逆色空間変換器２８０２から（それが含まれているとき）、画素をウェーブレット変換ブロック２８０３が受け取ってウェーブレット変換を施す。一実施例において、ウェーブレット変換ブロック２８０３により実行される変換は重複ウェーブレット変換である。これはロスレス及びロッシーの画像圧縮のためのエネルギー集中をする。ロッシー圧縮の場合、ＪＰＥＧの悩みであるブロック境界歪みが回避される。フィルタ係数は、適切に桁揃えされた時には、スカラー量子化で良好なロッシー圧縮結果が得られるように正規化される。一実施例では、ウェーブレット変換ブロック２８０３は、２・６変換を行う。他の実施例では、ウェーブレット変換ブロック２８０３は２・１０変換を行う。ウェーブレット変換ブロック２８０３は他の公知の変換を行ってもよい。ウェーブレット変換ブロック２８０３の様々な具体例について後に詳述する。
【０２４９】
ウェーブレット変換ブロック２８０３から出力された係数は、後で符号化するため、係数データインターフェース２８０４を介してメモリ（例えばバンドバッファ）へ再び書き込まれることがある。一実施例では、メモリに再書き込みされるデータは低重要度データであり、その詳細は後述する。このようなデータは、その後にＩＣチップに読み込まれ符号化される。
【０２５０】
ウェーブレット変換ブロック２８０３より出力された係数、又は係数データインターフェース２８０４を介して受け取られた係数は、コンテクストモデル２８０５に供給される。コンテクストモデル２８０５は、符号化器／復号化器２８０６によるデータの符号化（又は復号化）のためのコンテクストを提供する。一実施例では、コンテクストモデル２８０５はデータを直接的に符号化へ渡すことができる。このように、コンテクストモデル２８０５は最高重要度コンテクストモデルとして動作する。各種のコンテクストモデルの実現構成は前述した。
【０２５１】
一実施例では、符号化器／復号化器２８０６は高速並列コーダからなる。高速並列コーダは、数ビットを並列に処理する。一実施例では、高速並列コーダはＶＬＳＩハードウェアで実現され、あるいは圧縮性能を犠牲にすることなくマルチプロセッサ・コンピュータで実現される。本発明において利用し得る高速並列コーダの一例が、1995年１月10日発行の米国特許第5,381,145号“Method  and  Apparatus  for  Parallel  Decoding  and  Encoding  of  Data”に述べられている。
【０２５２】
他の実施例では、バイナリ・エントロピーコーダはＱコーダ、ＱＭコーダ、有限状態マシンコーダ等からなる。ＱＭコーダは周知の効率バイナリエントロピーコーダである。有限状態マシン（ＦＳＭ）コーダは確率及び事象(outcome)から圧縮ビットストリームへの単純な変換を提供する。一実施例では、有限状態マシンコーダは、テーブルルックアップにより、符号化器及び復号化器の両方として実現される。多様な確率予測法を、このような有限状態マシンコーダで利用できる。一実施例では、本発明の有限状態マシンコーダは、1993年12月21日発行の米国特許第5,272,478号“Method  and  Apparatus  for  Entropy  Coding”に記載されているＢコーダからなる。
【０２５３】
符号化器／復号化器２８０６の出力は、ディスク又は他の記憶媒体あるいは他の通信路とのインターフェースを提供する符号化データインターフェース２８０７に接続される。
【０２５４】
符号化データインターフェース２８０７は、ディスクとの間で符号化データを送受する。一実施例では、ＳＣＳＩインターフェースコントローラがチップに含まれているならば、それはこの点に実装されるであろう。他の実施例では、符号化データインターフェース２８０７は外部のＳＣＳＩコントローラと通信する。ＳＣＳＩ以外の記憶又は通信が利用されてもよい。
【０２５５】
伸長期間に、符号化データインターフェース２８０７を介し、ディスク（又は他のメモリ装置もしくは通信路）より符号化データが符号化器／復号化器２８０６に受信され、そこでコンテクストモデル２８０５より与えられるコンテクストを使って伸長される。伸長により得られた係数はウェーブレット変換ブロック２８０３によって逆変換される。（なお、一実施例ではウェーブレット変換ブロック２８０３が順変換と逆変換の両方を遂行するが、他の実施例では順変換と逆変換は別々のブロックにより行われる。）
ウェーブレット変換ブロック２８０３の出力は画素からなり、これはオプショナルな色空間変換を施され、画素データインターフェース２８０１を介してバンドバッファへ出力される。
【０２５６】
印刷期間におけるシステムの基本タイミングが図４８に示されている。図４８において、各符号化単位の符号化データがディスクから読み出される。可能な限り多くのデータが読み出され、短時間遅れて、係数が復号化される。復号化が終わると、逆ウェーブレット変換が計算される。この変換の終了後、画素をプリントエンジンへ送ることができる。なお、図４８中の影付けは、特定の符号化単位に対し様々なアクションが何時生じるかを明らかにする。
【０２５７】
＜メモリからディスクへの係数埋め込み＞
図２７は、本発明における符号化データの構成を示す。図２７において、最高重要度データ１００３は変換された直後に係数順に符号化される（埋め込まれない）。したがって、このデータはバッファされる必要がない。一実施例では、最高重要度データ１００３は、常にディスクから読み出すことができるように、その量が制限される。
【０２５８】
ある量の低重要度データ１００４がバッファされ、埋め込まれ、そしてディスクに重要度の順に書き込まれる。バッファし、埋め込みし、書き込むことができるデータ量は、転送時間によって決まる。すなわち、システムは、ディスクからの転送時間が終了するまでデータを読み込む。ディスクの転送レートによって、どれだけのデータが保存されるかが決まる。これらのレートは分かっており、また個々の転送の物理特性に依存している。
【０２５９】
圧縮しにくい画像の場合、符号化期間に捨てられるデータもある。このデータは最低重要度データ１００５として示されている。最良のディスク転送レートの場合でも最低重要度データを読み出させる可能性が全くないのであれば、そのデータをディスクに格納する理由がない。多くの、おそらく殆どの画像では、データが捨てられることはないであろう。
【０２６０】
符号化データの順序付けと、それを達成する方法については、既に詳しく説明した。
【０２６１】
以下、圧縮時及び伸長時のバンドバッファの管理について述べ、続いて符号化データの埋め込みスキームについて説明する。変換、コンテクストモデル及び符号化器／復号化器の並列化のハードウェアによる実現例についても説明する。
【０２６２】
＜画素及び係数のインターフェース＞
図４９は、画素データの編成方法の一例を示す。図４９において、ページ３０００はバンド３００１〜３００４に分割される。一実施例では、ページ３０００はページ記述言語又はディスプレイリストによる１ページの記述からなり、各バンドの画素を生成するために使用される。一実施例では、バンド３００１〜３００４のそれぞれは、ディスプレイリスト技法によって、別々にラスタライズされる。各バンド３００１〜３００４はさらに符号化単位（例えば３００１Ａ〜３００１Ｄ）に分割される。
【０２６３】
１バンドにつき多数の符号化単位を用いる利点は、伸長期間にバンドバッファの部分部分を循環的に（ピンポンバッファと同様に）作業域として使用できることである。換言すれば、ある部分の画素を伸長しバンドバッファに格納し、プリンタへ送ると同時に、バンドバッファの別の部分を係数を復号化している間格納するための作業域として使用しつつ、その係数に対応した画素を記憶するためにバンドバッフアのもう１つの部分を使用することができる。
【０２６４】
図５０は、ページ３１００のバンドバッファ３１０１を示す。バンドバッファ３１０１は符号化単位３１０１Ａ〜３１０１Ｄからなる。符号化単位３１０１Ａ，３１０１Ｂは、伸長器が係数を格納するための作業域として働く。符号化単位３１０１Ｃはプリンタへ送る画素を記憶し、一方、符号化単位３１０１Ｄは伸長器が次の画素を格納するための作業域として働く。
【０２６５】
ページ３１００全体が印刷される時に、バンドバッファ３１０１の部分部分を循環的に使用できる。例えば、次の符号化単位として、符号化単位３１０１Ｄの画素がプリンタへ出力される画素である。そうなった時に、符号化単位３１０１Ｂ，３１０１Ｃは伸長器が係数を記憶するための作業域として使用される。またその時に、符号化単位３１０１Ａは伸長器が次にプリンタへ出力する画素を記憶するための作業域として使用される。
【０２６６】
本発明においては、係数は画素より大きい。したがって、２倍のメモリが作業域メモリに割り当てられる。別の実施例では、バンドは多くの又はより少ない符号化単位に分割される。例えば、一実施例では、バンドはそれぞれ８個の符号化単位に分割される。
【０２６７】
＜メモリ帯域幅＞
画素データインターフェースと係数データインターフェースは協力してバンドバッファメモリを効率的に管理する。高速ページモードＤＲＡＭ、ＥＤＯ（extended  data  out)ＤＲＡＭ、その他の連続アクセスに適したメモリが使用されるときには、これらインターフェースは連続したアドレスのデータを十分な長さのバーストとして転送し、メモリの可能帯域幅を有効に利用する。連続したアドレスに対するバーストアクセスをサポートするために、いくつかの小バッファが必要とされるかもしれない。
【０２６８】
図５１は、並列メモリアクセス要求を説明する復号化タイミング図である。図５１において、復号化に必要とされる帯域幅は以下のとおりである。一実施例において、２ＭＨｚ画素クロック、８ＭＨｚ成分クロック、３２ＭＨｚ復号化器クロックが用いられ、また、プリントエンジンが１バイト／成分クロックを要求し、変換器が１係数につき２バイトを読み込み、１成分につき１バイトを書き込むことを思い出されたい。変換が符号化単位時間の半分で実行されるとすれば、変換は６バイト／成分クロックを必要とする。変換速度は、計算時間ではなくメモリ帯域幅によって制限される。２４バイト／成分クロックの帯域幅を利用できるならば、符号化単位時間の８分の１の時間内で変換を計算できるであろう。外部メモリがシームのために使用されるときには、変換は余分な帯域幅を必要とするかもしれない。一実施例では、符号化データの最高重要度部分については、係数を復号化するのに１成分クロックあたり２バイトの書き込みを必要とする。符号化データの低重要度部分の各ビットプレーンについては、復号化するのに１成分クロックにつき１バイトの読み出しと書き込みを必要とする。なお、これは実施例によってはもっと小さいかもしれない。両方の動作が符号化単位時間の半分を使うならば、４バイト／成分クロックの帯域幅と２４バイト／成分クロックの帯域幅がそれぞれ必要となろう。コンテクストシーム情報のために外部メモリが使用されるならば、余分な帯域幅が必要となるかもしれない。
【０２６９】
一実施例では、最高のバーストモード転送速度は、４メモリアクセス／成分クロック（１アクセス／復号化器クロック）である。したがって、３２ビットのデータバスを用いれば、最高転送速度は１６バイト／成分クロックよりやや小さい。６４ビットのデータバスを用いれば、最高転送速度は３２バイト／成分クロックよりやや小さい。
【０２７０】
＜ＬＩＣメモリの必要帯域幅の削減＞
ＬＩＣの各係数の各ビットは、復号化中に外部メモリの１回の読み出しと１回の書き込みを必要とする。（符号化には１回の読み出ししか必要としない。）これらのメモリアクセスが必要とされるメモリ帯域幅の大半の原因である。一実施例では、各ＬＩＣ係数を８ビット単位で記憶する代わりに、可能な時に８ビット未満を使って係数を記憶することにより必要な帯域幅を減らす。
【０２７１】
図６６は、各ビットプレーンの復号化のためＬＩＣ係数を記憶するのに必要なメモリ量を表している。図６６において、ＭＩＣの処理時に１係数につき１ビット（テールオンビット）が書き込まれる。ビットプレーン５のために書き込まれるものがビットプレーン４のために再び読み出される：テールオンビットと、ビット５が何であったかと、ビット５が１であったときの符号ビットを含む２〜３ビットである。割合は、各ビットプレーンについて、何パーセントの係数が関係しているかを示す。これは、図３１を見ればもっと明瞭になろう。図３１において、ＤＤ１からＤＳ４，ＳＤ４までの部分帯域からの全係数がビットプレーン５にデータを持つので（網掛けされているように）、ビットプレーン５は全ての部分帯域からの係数を持つ。ビットプレーン０はＤＤ１部分帯域からの係数しか持たない。図６６に示されるように、ビットプレーン４とビットプレーン５は共に全部分帯域からの係数を有するので、その割合は１００％であるが、ビットプレーン０は２５％の係数しか持たない（ＤＤ１部分帯域に）。復号化が進むにつれ、いくつかのビットプレーンはビットプレーン０に達する前に完了する。
【０２７２】
図６６において、復号化の開始時はビットプレーンの復号化は全く行われていないため、全ての係数の１ビット（１係数につき１ビット）だけ読み出されヘッド又はテールであるか調べられる。復号化が進むにしたがい１係数あたりのビット数が増加する。
【０２７３】
図５２は、読み出されたデータより大きなデータの書き込みを処理するため循環アドレッシングを利用する方法を説明するものである。このようなことが起きるのは、処理の結果、初めに読み出されたビットより多い、書き込むべきビットが発生するからである。図５２において、プロセスは１係数あたり１ビット（メモリスペースの８分の１である）を書き込むことから始まる。続いて、１係数あたり１ビットが読み出され、同時に１係数あたり２〜３ビットが書き込まれる。次に、１係数あたり２〜３ビットが読み出され、同時に１係数あたり３〜４ビットが書き込まれる。これがデータ全部が処理されるまで続く。
【０２７４】
ハードウェア構成を簡略化するためのいくつかの選択肢がある。常に最小数のビットを使用するのではなく、ことによれば１，２，３，４，６又は８ビットだけが使用されるかもしれない。これは、サイズによっては１ビットが無駄なるかもしれない。ＬＩＣにおいて符号ビットが符号化されないか分かっていないときでも、符号ビットのためのスペースは常に使用できるだろう。
【０２７５】
メモリ帯域幅を一層減少させるであろう選択肢は、テールオンビットを必要でないときには記憶しないことかもしれない。例えば、ビットプレーン０を書き込む時には、ヘッドビットかテールビットの６ビットがある。これらビットのどれかが非０ならば、テールオンは真のはずであり、テールオン値を記憶する必要はなく、符号ビットを第７ビットとして記憶させることができる。
【０２７６】
最高重要度部分（ＭＩＣ）のためのメモリ帯域幅も可変長記憶方法によって減らしてもよい。いつも１係数あたり８ビットを使用する代わりに、最小数のビットを使用するだけでも節減をもたらすだろう。０係数の代わりに６ビットのルックアヘッド値（図３４に示すような）を記憶すれば、メモリが一層効率的に使用されることになろう。
【０２７７】
＜可逆色空間＞
本発明は、２つの色空間の間の変換を完全に可逆的でかつ整数演算で実行可能とする可逆色空間変換を随意に実行できるようにする。すなわち、変換された色空間データを逆変換することにより、順変換過程で丸めや打ち切りが行われようと既存のデータを全て得ることができる。可逆色空間変換は、本願出願人に譲渡された米国特許出願第08/436,662号（1995年５月８日受理、“Method  and  Apparatus  for  Reversible  Color  Conversion”)に記載されている。
【０２７８】
色空間変換は、ロスレスの結果を提供する能力を損なわずに反対(opponent)色空間の利点を活かす。ロスレスの場合、反対色空間は相関を弱め圧縮を向上させる。ロッシーの場合、反対色空間は輝度情報を色差情報より軽く量子化させ視覚的品質の向上をもたらす。本発明の変換に可逆色空間が使用されると、輝度及び色差係数の埋め込みはロッシー圧縮としてはサブサンプリングよりも優れており、しかもロスレス圧縮が可能である。
【０２７９】
可逆色空間が使用されるときには、８ビット輝度成分の最上位ビットと９ビット色差成分が同じ桁揃えとなるように係数を桁揃えするのが望ましい。ロッシー圧縮のためには、この桁揃えは色差データを輝度データの２倍に量子化せしめ、また輝度のロスレス圧縮と色差のロッシー（ただし非常に高品質の）圧縮を可能にする。これらの結果は共にHuffman視覚系の特性を利用する。
【０２８０】
＜他の画素操作＞
プリンタは、殆ど又は全体が非連続階調の文書をしばしば処理する。例えば、黒と白だけ（０と２５５の値だけ）からなるテキスト画像が普通であろう。一実施例では、バンドのヒストグラムが作られる。例えば、０，２５５黒／白だけの画像（Ｋ成分）を０，１画像に再写像することができる。同様のコンパクション(compaction)をスポットカラー画像に対して施すことができる。なお、コンパクションが使われるときには、圧縮はロスレスでなければならない。しかし、コンパクションが行われる時には、達成されるロスレス圧縮は実質的に改善される。
【０２８１】
また、本明細書に述べた重複ウェーブレット変換を使う代わりに、ロスレス、ビットプレーン・ベースの、ＪＢＩＧのようなコンテクストモデルによって、２値画像とスポットカラー画像を処理することもできる。
【０２８２】
他の実施例では、システムがバイナリモードを持つように設計されるかもしれない。図５４は、ＪＢＩＧ方式コンテクストモデルテンプレートと類似したバイナリコンテクストモデルの一実施例を示す。図５４において、シフトレジスタ３５０１〜３５０３はＪＢＩＧ標準にしたがう複数のビットを提供する。シフトレジスタ３５０１，３５０２は、ラインバッファ３５００より２つ上のラインと１つ上のラインを受け取る。この“上”ラインは、図５６に示されるような、テンプレートの北西（ＮＷ）位置、北（Ｎ）位置及び北東（ＮＥ）位置の画素に対応するビットを提供する。シフトレジスタ３５０１，３５０２の出力は直接的にコンテクストモデル（メモリ）３５０５に与えられる。シフトレジスタ３５０３の出力は、ＪＢＩＧ標準の適応的テンプレートを実現できるオプショナルなｍｕｘ３５０４へ与えられる。コンテクストメモリ（モデル）３５０５は確率予測マシン３５０６に接続され、確率予測マシン３５０６はビットジェネレータ３５０７へ接続される。コンテクストメモリ（モデル）３５０５、確率予測マシン３５０６、ビットジェネレータ３５０７は相互に従来周知の方法で動作する。
【０２８３】
ｍｕｘ３５０４の出力は、シフトレジスタ３５０１，３５０２の出力及びビットジェネレータ３５０７からのフィードバックと共に、コンテクストメモリ３５０５のアドレッシングに使われるコンテクストビンアドレスを形成する。一実施例では、コンテクストメモリ３５０５は、一実施例では、コンテクストメモリ３５０５に、各確率状態を記述するための６ビットからなるコンテクストモデルが１，０２４個入っている。これは１，０２４×６ビットのコンテクストメモリを必要とする。
【０２８４】
ビットジェネレータ３５０７は、カレント・ラインから復号化されたビットを、コンテクストアドレスの一部として提供するので、コンテクストメモリに対するアクセス時間を含んだ大きな“ビット−コンテクスト”遅延がある。
【０２８５】
図５５は、シフトレジスタ３５０１，３５０２の出力及びマルチプレクサ３５０４の出力を受け取る同一アドレス指示ブロック３６０１と協力し、確率予測マシンをアクセスするために、カレント・ラインからの復号化ビットを使用する他の実施例を示す。ＰＥＭ３５０６は、前ビットを受け取り、それを利用して、使用されたコンテクスト対の中から適切な１つのコンテクストを選択する。選択されたコンテクストは更新され、両コンテクストはメモリに再書き込みされる。同一アドレス指示ブロック３６０１は、既に読み出されてデータが確率予測マシン内にあるアドレスを検出する。同一アドレス指示ブロック３８０１は、メモリ内の失効した情報に代えてＰＥＭ内に既にあるデータ（更新されたデータかもしれない）を使用するための信号も発生する。
【０２８６】
一実施例では、復号化器は各確率状態を記述する６ビットからなる１０２４個のコンテクストビンを含む。これは５１２×１２ビットのコンテクストメモリを必要とする。シフトレジスタ３５０１，３５０２の出力は、マルチプレクサ３５０４の出力と共に、前ビットだけが利用されない部分コンテクストビンアドレスを与える。これにより、コンテクストメモリ３５０５から１対のコンテクストビンが選択される。コンテクストビンの２ビット以上を部分コンテクストから排除できる。各メモリロケーションに２のｎ乗個の確率状態が入る。ここでｎは排除されたビットの個数である。
【０２８７】
“ビット−コンテクスト”遅延が減少することに注意されたい。前ビットが復号化される前にコンテクストメモリアクセスが生じてもよい。前ビットが復号化される前に、対をなす両状態に対するＰＥＭ状態の処理が並列的に開始してもよい。高速動作を達成できる。
【０２８８】
＜符号化器レート制御＞
符号化器のレート制御を行うには、データを量子化する能力があるだけでなく、量子化に関する決定ができるようにレートを測定することも必要である。レートが圧縮が良好でないこと（すなわち所望のレベルでないこと）を示すときには、量子化を増大させてよい。他方、レートが圧縮が高すぎることを示すときには、量子化を減少させてよい。レート制御決定は符号化器と復号化器とで全く同じように行われねばならない。
【０２８９】
符号化器と復号化器が同じ決定をするよう保証する一方法は、シグナリング(signaling)を使うことである。符号化器は所定のインターバルでレートを測定し、次インターバルで利用するため量子化Ｑをメモリに記憶する。復号化器は単純に各インターバルのための量子化をメモリから取り出す。これには余分なメモリが必要である。例えば、（Ｑの+2,+1,0,-1の変化の表示又は1,2,3,4のＱの記憶のための）２５６ロケーション×２ビットのオンチップＳＲＡＭは、４０９６ライン画像に対し１６ライン毎に量子化Ｑを変化させるのに足りるであろう。
【０２９０】
レート測定には様々な選択肢がある。図５３は、符号化器と復号化器のペアを示す。図５３に示す符号化器／復号化器ペアは、コンテクストモデル（ＣＭ）、確率予測モデル／マシン（ＰＥＭ）、及びビットジェネレータ（ＢＧ）、並びにランカウント(run  count)並べ換えユニット、インターリーブド(interleaved)ワード並べ換えユニット及びシフタからなる。説明については、本願出願人に譲渡された、また引用により本明細書に組み込まれる米国特許第5,381,145号及び同第5,583,500号を参照されたい。
【０２９１】
復号化器がレートを同じ場所で測定できないとしても、レート測定値は明確でなければならない。例えば、レート測定値は、圧縮コードストリームの一部として復号化器に与えられる。
【０２９２】
小さい方のサークル(図５３中の位置２）として示した、もう一つのレート測定の選択肢は、符号化器においてインターリーブド・ワードの始まりをカウントすることである。これは、他の実施例では、ビット生成ステージ(図５３中の位置４）の後で行われる。符号化器と復号化器は同時に符号語に取りかかるため、レートの暗黙的なシグナリングを用いてもよい。このカウントを、レジスタと符号語長を加算する加算器からなる平均符号語長を測定する計算ハードウェアによって行ってもよい。このカウントと平均ビット数測定を行うためのハードウェアは当該技術分野では周知であり、図５３にブロック３４０１として示されている。このブロックを、システム中の別の場所（例えば、符号化器及び復号化器の両方の位置１，２，３，４）で同様の測定をするために用いてもよいことは明らかであろう。
【０２９３】
他の選択肢は、ビットジェネレータの後及びインターリーブド・ワード並べ換えユニットの前(図５３の位置３）で完全な符号語のサイズをカウントする方法や、ディスクに実際に書き込まれたデータ量を測定する方法（図５３の位置１）であろう。
【０２９４】
レート測定は暗黙的でもよい。すなわち、符号化器と復号化器の両方で同じレート測定計算を行う。例えば、符号化器と復号化器が、新しい符号語が始まる度に符号語の平均サイズを累積してもよい。これは図５３の位置４に示されている。（実際のサイズを使うことはできない。符号化器は符号語の終わりまでサイズが分からないからである。）
コアに使用されるＲコードのサイズがR2(0)からR2(7)まで変わるときには、平均符号語サイズは１ビットから４．５ビットまで変化する。確率予測がうまくいけば、平均を使うことは非常に正確であろう。そうでなくとも、最小符号語長と最大符号語長の差は平均に対し一般的にそれほど大きくないので、予測値は依然として有効である。Rz(k)符号語の平均サイズはk/2+1ビットである。
【０２９５】
目標とするところは、ほぼ全ての場合に、最高重要度データが十分に圧縮され、かつ無量子化(Q=1)が必要とならないことであろう。“病理学の”画像だけは量子化（Ｑ＞１）を必要とする。しかし、量子化機能を含むことにより、病理学の画像に対しシステムが動かなくならないよう保証することができる。
【０２９６】
符号化器レート制御のもう一つの利益は、最大帯域幅に達した時に低重要度データの符号化を止めることができることである。これは符号化スピードを増加させ、データ出力のためのトータル時間を減少させる（例えばトータル印刷時間を減らす）。
【０２９７】
量子化変化の結果（Ｑの値）を記憶することが重要である。例えば、量子化が変化する場合、一群の係数中の最大係数の決定は首尾一貫していなければならない。また、（ビットプレーンが捨てられる場合に）量子化係数を再構成するのに、最良の結果を得るためには捨てられたビットプレーン数を考慮する必要がある。
【０２９８】
＜高速の並列符号化とコンテクストモデル＞
本発明のエントロピー符号化部は２つの部分からなる。一つは並列動作する高速符号化コアで、確率予測とビット生成をする。もう一つはコンテクストモデルで、符号化に使うコンテクストを提供する。
【０２９９】
所要速度を達成するために必要なコアの個数はアプリケーション次第である。
【０３００】
エントロピー符号化システムの他の部分は、本発明の係数のためのコンテクストモデルである。コンテクストモデルを構築するにあたって、とり得るトレードオフが数多くある。本発明は、一実施例において、本発明の高速並列コーダの使用をサポートするための並列化を可能にするコンテクストモデルを低いハードウェアコストで提供する。このコンテクストモデルの実施例は前述した。
【０３０１】
ウェーブレット係数のためのコンテクストモデルについてだけ説明したが、本発明はウェーブレット係数だけをサポートするコンテクストモデルに限定されるものではない。例えば、２値画像又はスポットカラー画像のためにビットプレーン符号化モードが必要ならば、米国特許出願第08/642,518号(1996年５月３日受理、“Compression  and  Decompression  with  Wavelet  Style  and  Binary  Style  Including  Quantization  by  Device-Dependent  Parser”)、及び、米国特許出願第08/643,268号(1996年５月３日、“Compression/Decompression  Using  Reversible  Embedded  Wavelets”に述べられているような、補助のコンテクストモデルを利用してよい。
【０３０２】
＜並列化＞
一実施例では、係数のビット数が８ビットから１２ビットまで（可逆色空間が使われるときには１３ビットまで）の場合に、１係数あたり８ビットを符号化／復号化するために４つの高速符号化コアが使用される。一実施例では、１つのコアに４成分のそれぞれが割り当てられ、並列化とデータフローを単純化する。各係数は、（ルックアヘッドのためのデシジョン等を含む）ビットの符号化／復号化のために最大１６サイクルまで使うことができる。
【０３０３】
本発明は、一部のコアがそのルックアヘッドの成功により遊休状態であったり別のコアが先頭の“オン”ビットの後の符号ビットを処理中であっても、各成分用コアを同期した状態に維持する。コンテクストモデルを動作させるためのトータル時間は、データによって変動し、特にルックアヘッドの有効性によって大きく変動し、また、それほどではないが先頭の“オン”ビットの位置によっても変動する。
【０３０４】
以上の説明を読めば当業者には本発明の多くの変形及び修正が明白となるであろうから、説明のために図示、説明された特定の実施例は限定することを意図したものでは決してないものと理解されるべきである。
【図面の簡単な説明】
【０３０５】
【図１】コンテクスト従属関係を示す図である。
【図２】ラスタ順と同様の順序を示す図である。
【図３】短シーム順の一例を示す図である。
【図４】短シーム順の他の例を示す図である。
【図５】ＴＳ変換のレベル１水平処理結果を示す図である。
【図６】ＴＳ変換のレベル１垂直処理結果を示す図である。
【図７】ＴＳ変換のレベル２水平処理結果を示す図である。
【図８】ＴＳ変換のレベル２垂直処理結果を示す図である。
【図９】ＴＳ変換のレベル３水平処理結果を示す図である。
【図１０】ＴＳ変換のレベル３垂直処理結果を示す図である。
【図１１】ＴＳ変換のレベル４水平処理結果を示す図である。
【図１２】ＴＳ変換のレベル４垂直処理結果を示す図である。
【図１３】順／逆フィルタの一例のブロック図である図である。
【図１４】本発明による第１レベル順変換の一例のブロック図である。
【図１５】本発明による完全な順変換の一例を示すブロック図である。
【図１６】係数出力時のタイミング図である。
【図１７】ＴＴ変換のレベル１水平処理結果を示す図である。
【図１８】ＴＴ変換のレベル１垂直処理結果を示す図である。
【図１９】ＴＴ変換のレベル２水平処理結果を示す図である。
【図２０】ＴＴ変換のレベル２垂直処理結果を示す図である。
【図２１】ＴＴ変換のレベル３水平処理結果を示す図である。
【図２２】ＴＴ変換のレベル３垂直処理結果を示す図である。
【図２３】ＴＴ変換のレベル４水平処理結果を示す図である。
【図２４】ＴＴ変換のレベル４垂直処理結果を示す図である。
【図２５】１０タップの順／逆フィルタユニットのブロック図である。
【図２６】図２５に示す順／逆フィルタにおける重複ユニットの一例のブロック図である。
【図２７】コードストリームの順序付け及び符号化単位内の順序付けを示す図である。
【図２８】ｂビット／画素の入力画像を２レベルＴＳ変換及びＴＴ変換で分解した場合の各種係数のビット深さを示す図である。
【図２９】本発明において係数桁揃えに用いられる周波数帯域に対する乗数の一例を示す図である。
【図３０】最高重要度データと低重要度データとに分割した係数を示す図である。
【図３１】データが捨てられることのないロスレスのケースを示す図である。
【図３２】データの１ビットプレーンが捨てられたケースを示す図である。
【図３３】圧縮／伸長システムの動作の一例を示すフローチャートである。
【図３４】一つの木に対し６ビットが用いられる例を示す図である。
【図３５】最高重要度部分の符号化を示すフローチャートである。
【図３６】最高重要度データの符号化パスに用いられるフォーマッティングユニット及びコンテクストモデルの一例のブロック図である。
【図３７】先頭ビットプレーンユニットの一例を示すブロック図である。
【図３８】ＬＩＣビットプレーンの符号化プロセスの一例を示すフローチャートである。
【図３９】低重要度データのためのルックアヘッド・モデル及びコンテクストモデルの一例を示すブロック図である。
【図４０】ヘッドビットのためのコンテクストモデルの一例を示すブロック図である。
【図４１】全ての隣り合うもの及び親による条件付けがあるコンテクストモデルの一例のためのメモリ使用方法を示す図である。
【図４２】符号ビットのためのコンテクストモデルの一例を示すブロック図である。
【図４３】ＬＩＣに対する並列符号化の一例を示す図である。
【図４４】プリンタのフロントエンドの一例を示すブロック図である。
【図４５】プリンタのバックエンドの一例を示すブロック図である。
【図４６】プリンタのバックエンドの他の例を示すブロック図である。
【図４７】プリンタの圧縮／伸長機能を含む集積回路チップの一例を示すブロック図である。
【図４８】印刷時の基本タイミングを示す図である。
【図４９】画素データの編成方法の一例を示す図である。
【図５０】バンドバッファを示す図である。
【図５１】同時メモリアクセス要求を明らかにする復号化タイミング図である。
【図５２】読み出されたデータより大きなデータの書き込みを処理するための循環アドレッシングの利用法を示す図である。
【図５３】符号化器と復号化器のペアを示すブロック図である。
【図５４】バイナリコンテクストモデルの一例を示すブロック図である。
【図５５】バイナリコンテクストモデルの他の例を示すフロック図である。
【図５６】符号化単位の各係数の近傍係数を示す図である。
【図５７】ＭＳＥ桁揃えに基づいたピラミッド桁揃えを示す図である。
【図５８】ウェーブレット係数のＭＳＥ桁揃えを示す図である。
【図５９】様々なレベル数の場合のウェーブレット木のスパンを示す表図である。
【図６０】記憶する必要のある”ｓｓ”係数の個数を示す表図である。
【図６１】４ビット係数のビットシグニフィカンス表現を示す表図である。
【図６２】係数桁揃えのための桁揃え数を示す表図である。
【図６３】最高重要度データ及び低重要度データの指示ビットを説明する表図である。
【図６４】テール情報の定義を示す表図である。
【図６５】テールビットに用いられる確率状態を示す表図である。
【図６６】各ビットプレーンの復号化のためのＬＩＣ係数の記憶に要するメモリ量を示す表図である。
【符号の説明】
【０３０６】
４０１，４０２  フィルタユニット
４０３〜４０６  レジスタ
４０７，４０８  マルチプレクサ（ｍｕｘ）
５０１  入力バッファ
５０２  レベル１変換部
５０３  ”ｓｓ”遅延メモリ
５０４  レベル２〜４順序ユニット
５０５  フィルタユニット
５０６  出力バッファ
８０１，８０２  加算器
８０３，８０４  マルチプレクサ（ｍｕｘ）
８０５  メモリ
８０６  マルチプレクサ（ｍｕｘ）
８０７  重複ユニット
８０７〜８１１  加算器
９０１〜９０６  加算器
９０７〜９０９  乗算器
９１０  除算器
１００１  ヘッダ
１００２  符号化単位
１００３  最高重要度データ
１００４  低重要度データ
１００５  最低重要度データ
１３０１  最高重要度データ
１３０２  低重要度データ
１３０３，１３０４  指示ビット
１７０１  バレルシフタ
１７０２，１７０６  先頭ビットプレーンユニット
１７０３，１７０４  比較ユニット
１７０５  マルチプレクサ（ｍｕｘ）
１７０７  メモリ
１７１０  符号コンテクストモデル
１７１１  ヘッドコンテクストモデル
１７１２  テールコンテクストモデル
１８０１  ＯＲゲート
１８０２  レジスタ
１８０３  プライオリティエンコーダ
２００１  符号コンテクストモデル
２００２  ヘッドコンテクストモデル
２００３  テールコンテクストモデル
２００４  マルチプレクサ（ｍｕｘ）
２００５  ”＝ヘッド？”ユニット
２００６  ＦＩＦＯバッファ
２１０１  テールオン情報／ビットジェネレータブロック
２１０２  重要度レベル・部分帯域バケッティングブロック
２１０３  上／左シフトレジスタ
２１０４  カレントシフトレジスタ
２１０５  下／右シフトレジスタ
２１０６  親レジスタ
２３０１  マルチプレクサ（ｍｕｘ）
２５０１  レンダラー
２５０３  バンドバッファ
２５０４  圧縮器
２５０５  ディスク
２６０２  伸長器
２６０３  バンドバッファ
２６０４  プリントエンジン
２７０５  画質改善ブロック
２８０１  画素データインターフェース
２８０２  可逆色空間変換器
２８０３  ウェーブレット変換ブロック
２８０４  係数データインターフェース
２８０５  コンテクストモデル
２８０６  符号化器／復号化器
２８０７  符号化データインターフェース
３５００  ラインバッファ
３５０１〜３５０３  シフトレジスタ
３５０４  マルチプレクサ（ｍｕｘ）
３５０５  コンテクストメモリ
３５０６  確率予測マシン（ＰＥＭ）
３５０７  ビットジェネレータ
３６０１  同一アドレス指示ブロック
４００１，４００２  加算器
４００３，４００４  マルチプレクサ（ｍｕｘ）
４００５  レジスタファイル
４００７〜４０１１  加算器
４０１５  マルチプレクサ（ｍｕｘ）