JPEG 2000

コードストリーム構造

JPEG 2000のコードストリーム構造の例を以下の図に示す．図内の用語のうち，タイルパート，レイヤ，DWTレベル，コンポーネント，プリシンクト，パケットヘッダ，サブバンドについては後述する．
基本的には，SOC(Start of Codestream)マーカから始まるバイナリデータであり，その終端はEOC(End of Codestream）である．
SOCマーカの直後からメインヘッダが格納されており，各種符号化パラメータに関する情報がここに記録されている．メインヘッダの直後より，タイルパートが格納される．各タイルパートはタイルパートヘッダから始まる．タイルパートヘッダの直後より，そのタイルパートに含まれる圧縮データが格納される．
この圧縮データは，プログレッション順序に基づいて格納される．プログレッション順序とは，レイヤ（ある画質あるいはビットレートに対応する圧縮データの集合），DWTレベル（DWTの分解レベルに対応する圧縮データの集合），コンポーネント（色コンポーネント成分に対応する圧縮データの集合），プリシンクト（DWT係数内の部分空間に対応する圧縮データの集合）の4つの要素のうち，優先的にデコードする要素の階層構造を意味する．コードストリームが取り得るプログレッション順序については後述する．

符号化手順

下図は，JPEG 2000 Part 1の符号化手順のブロック図である．なお，本符号化手順は参考例であり，規格化されたものではないことに注意されたい．以下では，Part 1エンコーダにおける各ブロックの処理内容について述べる．以後，ここでは非可逆符号化をロッシーモード，可逆符号化をロスレスモードと呼ぶ．

タイル分割（オプション）

入力画像はタイルと呼ばれる任意サイズの矩形領域に分割可能である．タイル分割は，エンコーダで利用できるメモリに制限がある場合などに有用である．各タイルは完全に独立して符号化されるため，分割数やビットレートによってJPEGで見られるようなブロックノイズが現れる場合もある．タイルの符号化結果であるバイトストリームは，上述のようなエンコーダの制約に応じて複数の部分集合（タイルパート）に分割することも可能である．

DCレベルシフト（オプション）

入力画像が符号なしデータの場合，後述するDWT後の画像の直流成分が0中心になることを期待して，そのダイナミックレンジの1/2を入力画像から差し引く．
入力画像を，入力画像のビット深度を，DCレベルシフト後の画像をとおくと，
と表すことができる．

色空間変換（オプション）

入力画像がRGB色空間で定義されている場合，各色コンポーネント間の冗長性を排除するために，輝度-色差色空間(YUV)への変換を行う．用いる色空間変換はICT(Irreversible Color Transform)とRCT(Reversible Color Transform)の2種類が規定されている．ロッシーモードではICTを，ロスレスモードではRCTを用いる．以下では最初に，ICT，続いてRCTについて述べる．入力画像の各色コンポーネントをととする．ICTおよびRCTは以下の式で表すことができる．以下の式において，変換後の輝度コンポーネントはまたは，色差コンポーネントはまたはである．

DWT

JPEG 2000では，2分割フィルタバンクに基づく分離型2次元DWTが採用されている．分離型2次元DWTは，1次元に対する処理を，水平・垂直方向に施すことによって2次元の変換係数を得る手法である．Part 1では，ロッシーモード用とロスレスモード用の2つのDWTが定義されている．それぞれのDWTは，リフティングと呼ばれる構成法を取ることによって実現される．リフティング構成を取る理由は，数学的に可逆な変換が，変換係数の精度を有限（例えば整数）にしたとしても実現できることにある．下図は，3レベルの2次元DWTの実行例である．水平方向・垂直方向の各次元で，ローパスおよびハイパスフィルタがかけられるため，1レベルのDWTによって，4つのサブバンド(LL:水平垂直ローパス，HL:水平ハイパス，垂直ハイパス，LH:水平ローパス，垂直ハイパス，HH:水平垂直ハイパス）が生成される．各レベルでは，LLサブバンドを次々に分解していくオクターブ分割が実行される．Part 1で許されるDWTレベル数は0〜32と規定されている．
各々のDWTレベルにおいて，下図に示すようにプリシンクトと呼ばれる矩形領域が定義される．
プリシンクトのサイズは2のべき乗の整数でなければならず，最大でのサイズを取ることができる．同一番号のプリシンクトは画像の部分領域を構成するDWT係数と考えることができ，後述するパケットおよびプログレッション順序の構成要素となる．

量子化

Part 1では，スカラー量子化のみがサポートされている．Part 2ではTCQ(Trellis Coded Quantization)と呼ばれる量子化方法も使用可能である．
サブバンドのDWT変換係数を，ステップサイズをとおくと，スカラー量子化後の変換係数は次式で表される．
ロスレスモードでは，量子化による情報の損失は許されないため，で固定である．ロッシーモードにおけるステップサイズは，各DWTレベル，各サブバンドごとに異なる値を指定できる．

ROI(Region of Interest)（オプション）

画像中の特定の領域を興味領域(ROI)として，他の領域（背景領域）と比べて符号化の優先度を高めるための処理である．興味領域内のDWT係数をMAXSHIFTと呼ばれる方法でシフトアップすることで，符号化の優先度を高めることができる．サブバンドのDWT係数のダイナミックレンジを(bit)とすると，MAXSHIFT法によるシフト量は次式で表される．
MAXSHIFT法によるROI機能では，優先度の調節は不可能であるものの，デコーダに際してROIの形状に関する情報が不要という特長がある．

コードブロック分割

下図に示すように，EBCOTでは，各サブバンドは，コードブロックと呼ばれる矩形領域に分割される．コードブロックはEBCOTにおける最小符号化単位であり，各コードブロックはそれぞれ独立に符号化可能である．
コードブロックのサイズは，水平・垂直方向それぞれのサイズが4以上128以下，面積が4096以下の条件を満たす2のべき乗の整数から自由に選ぶことができる．一般に64x64や，32x32のサイズが用いられることが多い．メインヘッダに記録されるコードブロックのサイズは一つであるが，実際のコードブロックサイズは画像サイズやDWTレベル数，プリシンクトサイズなどの様々なパラメータによって決定され，かならずしも全てのコードブロックで同一とはならない．コードブロック内の量子化されたDWT係数は，符号絶対値表現（符号付数値表現）で表される2進数として表現され，以後の処理はビットプレーンごとに進められる．
上図は，EBCOTにおけるビットプレーンの概念を示している．なお，図中のは，各コードブロックごとに計測されたゼロビットプレーン数である．ゼロビットプレーンとは，符号ビットを除く振幅係数において，プレーン内の係数ビットがすべて0であるプレーンが最上位ビットから連続する数である．このゼロビットプレーンに対する処理はスキップされ，その数のみが後述するパケットヘッダに記録される．

ビットモデリング

各コードブロックは，ビットプレーンに分割される．各ビットプレーンは，最上位ビットに位置するプレーンから順に最下位ビットプレーン至るまで処理される．各ビットプレーン内のDWT係数ビットは，周辺係数ビットの状態に応じて，最大3つの符号化パスに分割される．各符号化パスは，Significance Propagation(SP)，Magnitude Refinement(MR), Cleanup(CU)と呼ばれる．各係数ビットは，必ずこれらの符号化パスのいずれかに一度だけ属する．
各ビットプレーンのスキャンパターンを下図に示す．スキャンの際には係数ビットからなるstripeという単位が存在し，各stripe内は上から下へと順にスキャンされる．
最上位ビットプレーンをスキャンする際には，上位のビットプレーンに関する情報が得られないため，必ずCleanupパスとして処理される．最上位のすぐ次のビットプレーンからは，SP->MR->CUの順に属する符号化パスが決定される．
符号化パスの決定には，現在の係数ビットと，その周辺8近傍の係数ビットの状態が用いられる．係数ビットは"1"か"0"の値をとるが，それぞれ"有意"および"非有意"状態とみなされる．
SPパスは自身が非有意かつ周辺にすでに有意となった係数ビット存在する係数ビットが属する．このとき，現在の係数ビットは非有意から有意の状態へと更新される．
MRパスは，上位ビットプレーンですでに有意となっている係数ビットが属する．
CUパスは，SPパスにもMRパスにも属さない係数ビットが属する．
なお，それぞれの符号化パスは，さらにその周辺係数ビットの有意状態の情報に，コンテクスト(CX)と呼ばれるラベルが付けられる．規格で規定されたコンテクストの数は19である．

概要

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)を行うことが可能である．レート制御については，エンコーダにおける処理であるため規定された技術はないが，一般的に以下の処理によって実現されることが多い．
コードブロック内の切り捨て点として，符号化パスを考える．までのデータ量を，そのパスでバイトストリームを切り捨てることで増加する歪みの推定量をとおく．所望のビットレートをとして，の条件のもと，を最小化するを各コードブロックごとに決定する．この一連の手順はラグランジュの未定乗数法を用いることで実現できる．

レイヤ(Layer)生成

また，上述のレート制御処理は，コードストリームのプログレッション順序の構成要素の一つであるレイヤを形成するためにも用いられる．レイヤとは，SNR(Signal-to-Noise Ratio，SNR)スケーラビリティを実現するための概念である．
レイヤを用いたSNRスケーラビリティとは．最上位レイヤから最下位レイヤにデコード処理が進むにしたがって，段階的にデコード画像の画質が向上する（SNRが向上する）機能を意味する．レート制御処理によって，各コードブロックの符号化パスがどの程度画質に寄与するかが予め予測できるため，この情報を用いてレイヤを生成する．具体的には，各コードブロックにおいて，どのレイヤに符号化パスがいくつ属するかをレート制御によって得られる情報をもとに決定する．このレイヤごとのパス数は，パケットヘッダ生成アルゴリズムによってパケットヘッダに記録される．

動向

デジタルシネマ，公文書や芸術作品のアーカイブ，医療用画像の圧縮，業務用途の画像配信システム，監視カメラ，PDFファイル内の画像フォーマットなどでは既に広く使われている．高い圧縮効率や豊富な機能を備えていることから，発表当初はコンシューマ向け分野でも急激に普及することが期待されたが，JPEGと比較すると計算負荷が高くバッテリー消費が激しいことや，またスループットを稼げず連写速度の向上が難しいことから，デジタルカメラ用途での採用は進んでいない．
Part 15(High Throuput JPEG 2000)では，EBCOTの弱点であった計算負荷の高さとそれに起因する低スループットおよびバッテリー消費量の問題を解決するべく，新しいブロック符号化アルゴリズムが標準化された．若干の圧縮効率の低下と引き換えに，10倍以上のスループット向上が達成されている．また，決して並列化向きのアルゴリズムではなかったEBCOTとは異なり，GPUなどによる並列化を強く意識したアルゴリズムとなっており，並列化によるスループットのさらなる向上が期待できる．