「JPEG 2000」の版間の差分

削除された内容 追加された内容
→‎対応ソフトウェア: ビューワにHoneyviewを追加。
22行目:
ウェーブレット変換は、従来の変換で使われていた全体に一様な定常波と異なり、波が部分的に存在する基底を使って変換する。さらに波のセットとしても高周波成分に比較的多くの波を割り当てることによって、ゆったりとした変化だけでなく急激な変化にも柔軟に対応が出来る。そのためJPEGではエッジなどの急峻な変化の周囲で発生していたもやもやしたノイズ(モスキートノイズ)を防ぐことができる。DWTでは、完全に周波数領域に変換するのではなく、空間領域の位置関係もある程度保ちながら変換を行うため、色や明るさが位置によって徐々に変化するようなグラデーションにも強い。また、JPEGでは8×8固定であった周波数領域への変換を行う単位(この単位をJPEGではブロック、JPEG 2000ではタイルと呼ぶ)のサイズをJPEG 2000では大きくできる(例えば256×256)ため、JPEGにおいてブロックの境界で生じていた段差([[ブロックノイズ]])が目立たない。特にブロックサイズ(タイルサイズ)を画面全体とした場合にはブロックノイズが全く生じない。これらの技術により、単に機械的な画質の指標であるPSNR (Peak Signal to Noise Ratio) の数値が大きく向上しているだけでなく、その数値以上に見た目の画質(主観評価画質)が改善している。また、DCTは有限の演算精度においては非可逆変換であるのに対し、DWTは[[リフティング構成]]をとることによって、有限精度においても可逆な変換を行うことが可能である。JPEG 2000ではリフティング構成されたDWTを採用しているため、非可逆符号化と可逆符号化を同一の符号化方式で実現可能となっている。
 
周波数領域に変換後のデータはJPEGと同様、[[量子化]]してから[[エントロピー符号化]]を行う。このエントロピー符号化の方式は、EBCOT (Embedded Block Coding with Optimized Truncation) と呼ばれる。EBCOTでは、DWT変換係数上に定義された矩形領域であるコードブロック単位で符号化が行われる。各コードブロックは[[ビットプレーン]]に分解され、係数ビットモデリング処理によって、高々3つの符号化パス(サブビットプレーン)に分類される。それぞれのサブビットプレーンに属する係数ビットは、[[2値画像]]圧縮方式の[[JBIG2]] (Joint Bilevel Image Group) でも利用されているMQ-Coderと呼ばれる[[算術符号]]化器を用いて圧縮される。MQ-coderはマルチコンテクストの算術符号化器であり、注目係数の周囲状態に合わせて効率良くデータ圧縮が可能である。JPEGで用いた[[ハフマン符号]]に比べ、算術符号は圧縮効率が高い一方、その実行には一般に乗算器を必要とするため演算量が増加することが知られている。MQ-coderではこの乗算を加減算で近似することによって、この問題を回避している。EBCOTでは、MQ-coderによって圧縮された各符号化パスを単位としてビット切捨て (Bit truncation) を行う。この操作は、各々の符号化パスを切り捨てた場合に増加する復号画像の歪みを予め計測しておき、与えられた圧縮率で最も高画質になるように切り捨てるパスを[[ラグランジュの未定乗数法]]などの最適化手法を用いることで実現される。
 
なお、中程度の圧縮率ではJPEGにおいてもJPEG 2000とそれほど遜色ない画質で圧縮できるが、高圧縮のときには画質の差は顕著になる。実際、JPEGでは100分の1未満に圧縮した場合には、有り得ない色や模様になるなど酷い劣化が生じるが、JPEG 2000では確かに画質は劣化しているものの自然である。また、JPEG 2000では可逆圧縮にも対応しているので、低圧縮の場合においては全く画像を劣化させることなく圧縮が可能である。