JPEG 2000
概要
SP、MR、CUの各符号化パスに属する係数ビットは、そのコンテクストCXの値と共に2値算術符号化器であるMQ-coderへと送られ、算術符号化される。MQ-coderは、各コンテクストごとに独立した確率遷移テーブルを持つ。この確率遷移テーブルのエントリ数は46である。
MQ-coderは、係数ビットの正負を表す符号ビットと、値ビットから計算されるディシジョンビットDと、CXを入力として、出力ビットを計算する。符号ビットが入力されるのは、初めて有意となる係数ビットが符号化されるときに限られる。MQ-coder内には5つのレジスタが存在し、そのうちの出力ビットを蓄えているレジスタ上でバイト境界に達すると、バイトストリームとして1バイトが新たに出力される。この際、デコーダにとって重要なマーカとなるFF90h〜の値がバイトストリーム内に出現するのを回避するため、直前のバイト出力がFFhであった場合には、レジスタ内における次のバイト境界の先頭1ビットをスキップし、データを書き込まないようにする処理が追加される。これはビットスタッフィングと呼ばれる。
終端処理
コードブロック内の全ての係数ビットを符号化した後でも、通常、MQ-coder内のレジスタにはバイト境界に満たない符号語が残っているため、終端処理によって全ての係数ビットをデコードするのに必要な長さの符号語を出力する。
レート歪み最適化(Rate-Distortion Optimization)
EBCOTでは、MQ符号化後のバイトストリームに対して、符号化パスを最小単位として符号切り捨てを行うことで圧縮後のレート歪最適化(PCRD-opt)を行うことが可能である。レート制御については、エンコーダにおける処理であるため規定された技術はないが、一般的に以下の処理によって実現されることが多い。
コードブロック n {\displaystyle n} 内の切り捨て点として、符号化パス z n {\displaystyle z_{n}} を考える。 z n {\displaystyle z_{n}} までのデータ量を L n z n {\displaystyle L_{n}^{z_{n}}} 、そのパスでバイトストリームを切り捨てることで増加する歪みの推定量を D ( L n z n ) {\displaystyle D(L_{n}^{z_{n}})} とおく。所望のビットレートを L m a x {\displaystyle L_{max}} として、 ∑ L i z i ≤ L m a x {\displaystyle \sum {L_{i}^{z_{i}}}\leq L_{max}} の条件のもと、 ∑ D ( L i z i ) {\displaystyle \sum D(L_{i}^{z_{i}})} を最小化する z i {\displaystyle z_{i}} を各コードブロックごとに決定する。