しらとりのブログ

社会人ひよこプログラマのtil

Lossless JPEGとは

DICOM通信で多用されるJPEG Lossless, Nonhierarchical, First- Order Prediction Processes 14 Selection Value 1 について規格書を一通り眺めたので簡単にまとめます。

医用画像用のJPEG

JPEGなのでISO/IEC 10918-1にコーデックに関することがまとめられていますが、中でもLossless JPEGはほぼ医療関係の画像でしか利用されていません。特にTransferSyntax:1.2.840.10008.1.2.4.70(JPEG Lossless, Nonhierarchical, First- Order Prediction Processes 14 Selection Value 1)はロスレスJPEGのデフォルトになっているので結構な頻度で対応を迫られます。

Lossless JEPG とは

DICOMでのLossless JPEGのデフォルト実装(TransferSyntax:1.2.840.10008.1.2.4.70)は下記のような特徴を持っています。

・Nonhierarchical

非階層的であること。
JPEGは仕様上1ファイルに複数のフレーム(1枚の画像を表すデータ)を含むことができます。これは符号化の際に複数の解像度でフレームを作成し、デコーダ側で最適な解像度の画像を取り出すための使用です。まるっと複数枚含まれているわけではなく、フレーム毎の差分をとったり工夫されているようです。 これが非階層であるので、Nonhierarchicalとは1フレームの画像ということになります。

・First- Order Prediction Processes 14 Selection Value 1

これは一次予測、プロセスナンバー14という規格書の一節を指しています。 規格書の付録Jの表、J.1-Coding processes for hierarchical modeのProcess 14Lossless, arithmetic, 2 through 16 bitsにしたがってエンコードするように定められています。 「for hierarchical mode」と書いてありますが、そのあとに階層モードと非階層モードのフレーム構造は同じと書いてあるので、ややこしいですがフレーム単位ではこの処理が適用されます。

また、Selection Valueは付録Hの表Predictors for lossless codingを指しています。エントロピー符号化前に予測符号化を使うLossless JPEGでその予測器を定義しており、このうち1~3は一次予測のため名前に反映されています。 Selection Value 1は対象のピクセルの左隣を予測値として使用します。

つまり、Lossless JPEGは予測符号化でピクセルごとの情報量を平均化してからエントロピー符号化を行い情報の圧縮を行います。大体の場合このコーデックはDICOMライブラリに含まれていますが、逆にそれ以外で実装を見つけるのは難しいのでライブラリの選定基準になりそうです。