画像圧縮アルゴリズムの深層 - DCT、ウェーブレット変換、予測符号化の仕組み
画像圧縮の基本原理 - 冗長性の除去と人間の視覚特性の活用
画像圧縮は、画像データに含まれる冗長性 (redundancy) を除去してファイルサイズを削減する技術です。無圧縮の画像は膨大なデータ量を持ちます。例えば 4,000 × 3,000 px の 24 ビットカラー画像は 4000 x 3000 x 3 = 36MB のデータ量になりますが、JPEG 圧縮により 2-5MB 程度に削減できます。
画像データに含まれる冗長性の種類:
- 空間的冗長性: 隣接するピクセルは似た色を持つことが多い (空の青、壁の白など)。この相関を利用して、差分のみを記録することでデータ量を削減します
- 統計的冗長性: 画像データの値の出現頻度には偏りがあります。頻出する値に短いビット列を、稀な値に長いビット列を割り当てるエントロピー符号化で削減します
- 視覚的冗長性 (心理視覚的冗長性): 人間の目は高周波成分 (細かいテクスチャ) や色差の微妙な変化に鈍感です。知覚できない情報を削除しても、見た目の品質はほとんど変わりません。これが非可逆圧縮の原理です
圧縮アルゴリズムの分類:
- 可逆圧縮 (Lossless): 元のデータを完全に復元可能。PNG (Deflate)、WebP Lossless、JPEG-LS など。圧縮率は 2:1-3:1 程度
- 非可逆圧縮 (Lossy): 知覚できない情報を削除して高い圧縮率を実現。JPEG (DCT)、WebP Lossy (VP8)、AVIF (AV1) など。圧縮率は 10:1-50:1 以上
現代の画像圧縮は、変換 (Transform) → 量子化 (Quantization) → エントロピー符号化 (Entropy Coding) の 3 段階パイプラインが基本構造です。各段階で異なる種類の冗長性を除去します。
DCT (離散コサイン変換) - JPEG 圧縮の核心技術
DCT (Discrete Cosine Transform) は JPEG 圧縮の中核をなす数学的変換です。画像を空間領域 (ピクセル値) から周波数領域 (周波数成分の強度) に変換し、人間の目に見えにくい高周波成分を効率的に削除可能にします。
JPEG の DCT 処理フロー:
- ブロック分割: 画像を 8x8 ピクセルのブロックに分割します。各ブロックは独立して処理されます。この 8x8 というサイズは、計算効率と圧縮効率のバランスから選ばれた値です
- DCT 変換: 各 8x8 ブロックに 2 次元 DCT を適用し、64 個の周波数係数に変換します。左上の係数 (DC 成分) はブロック全体の平均輝度を表し、右下に行くほど高周波 (細かい変化) を表します
- 量子化: 各周波数係数を量子化テーブルの値で割り、小数点以下を切り捨てます。高周波成分ほど大きな値で割るため、多くの高周波係数が 0 になります。この段階で情報が失われ (非可逆)、品質設定はこの量子化テーブルの値を制御します
- ジグザグスキャン: 量子化後の 64 個の係数を、低周波から高周波の順にジグザグパターンで 1 次元配列に並べ替えます。これにより、0 が連続する部分が配列の後半に集中します
- エントロピー符号化: ランレングス符号化 (連続する 0 の個数を記録) とハフマン符号化を組み合わせて、最終的なビットストリームを生成します
DCT の数学的定義 (2 次元):
F(u,v) = (1/4) * C(u) * C(v) * Σ Σ f(x,y) * cos((2x+1)uπ/16) * cos((2y+1)vπ/16)
ここで f(x,y) は元のピクセル値、F(u,v) は周波数係数、C(u) は正規化定数です。この変換は可逆であり、逆 DCT (IDCT) で元のピクセル値を復元できます (量子化前であれば完全に復元可能)。
ウェーブレット変換 - JPEG 2000 と次世代圧縮の基盤
ウェーブレット変換 (Wavelet Transform) は、DCT の限界を克服するために開発された変換手法です。JPEG 2000、HEIF の一部モード、医療画像 (DICOM) などで使用されています。DCT が固定サイズのブロック (8x8) で処理するのに対し、ウェーブレット変換は画像全体を多重解像度で分解します。
ウェーブレット変換の仕組み:
- 多重解像度分解: 画像を「近似成分 (低周波)」と「詳細成分 (高周波)」に分離します。水平方向と垂直方向にそれぞれフィルタリングを行い、LL (低周波-低周波)、LH (低周波-高周波)、HL (高周波-低周波)、HH (高周波-高周波) の 4 つのサブバンドに分解します
- 再帰的分解: LL サブバンド (近似成分) に対して同じ分解を再帰的に適用します。通常 3-5 レベルの分解を行い、画像の粗い構造から細かいディテールまでを階層的に表現します
- 量子化と符号化: 各サブバンドの係数を量子化し、EBCOT (Embedded Block Coding with Optimized Truncation) などの高度な符号化方式で圧縮します
ウェーブレット変換の DCT に対する優位性:
- ブロックノイズなし: 画像全体を一括で処理するため、JPEG 特有の 8x8 ブロック境界のノイズ (ブロッキングアーティファクト) が発生しません
- プログレッシブ表示: 低解像度から高解像度へ段階的にデータを送信でき、ネットワーク帯域に応じた品質調整が容易です
- ROI (Region of Interest) 符号化: 画像の特定領域だけを高品質に保ち、他の領域を低品質にする選択的圧縮が可能です
JPEG 2000 で使用される CDF 9/7 ウェーブレット (非可逆) と CDF 5/3 ウェーブレット (可逆) は、画像圧縮に最適化されたフィルタ係数を持ちます。
予測符号化とイントラ予測 - AV1/HEVC の高効率圧縮
予測符号化 (Predictive Coding) は、既に処理済みの隣接ピクセルから現在のピクセル値を予測し、予測値との差分 (残差) のみを符号化する手法です。予測が正確であるほど残差が小さくなり、高い圧縮率が得られます。AVIF (AV1) や HEIF (HEVC/H.265) で使用される最新の圧縮技術の核心です。
イントラ予測 (Intra Prediction) の仕組み:
- 方向予測モード: AV1 では 56 方向の予測モードを持ちます (HEVC は 35 方向)。水平、垂直、斜め 45 度、斜め 22.5 度など、様々な角度で隣接ブロックのピクセル値を現在のブロックに外挿します。エッジや線の方向に合った予測モードを選択することで、残差を最小化します
- DC 予測: 隣接ピクセルの平均値で現在のブロック全体を予測する最もシンプルなモード。均一な領域 (空、壁) で効果的です
- Paeth 予測 (PNG): 左、上、左上の 3 ピクセルから最も近い値を選択する予測方式。PNG の可逆圧縮で使用されます
- CfL (Chroma from Luma): AV1 独自の技術で、輝度 (Luma) チャンネルの情報から色差 (Chroma) チャンネルを予測します。色差成分は輝度と相関が高いため、この予測により色差の残差が大幅に削減されます
AV1 の圧縮効率が高い理由:
- 可変サイズのブロック分割 (4x4 から 128 × 128まで、再帰的に分割)
- 56 方向のイントラ予測モード
- 複数の変換タイプ (DCT、ADST、Identity) の適応的選択
- ループフィルタ (デブロッキング、CDEF、Loop Restoration) による品質向上
- シンボリック符号化 (ANS: Asymmetric Numeral Systems) による高効率エントロピー符号化
エントロピー符号化 - ハフマン符号と算術符号の原理
エントロピー符号化は、データの統計的冗長性を除去する最終段階の処理です。シンボル (値) の出現確率に基づいて可変長のビット列を割り当て、理論的な最小サイズ (シャノンエントロピー) に近づけます。
主要なエントロピー符号化方式:
- ハフマン符号化 (Huffman Coding): JPEG で使用される方式。各シンボルに出現確率に応じた可変長のプレフィックスコードを割り当てます。頻出するシンボルには短いコード (例: 2 ビット)、稀なシンボルには長いコード (例: 12 ビット) を割り当てます。実装が単純で高速ですが、1 シンボルあたり最低 1 ビットが必要なため、理論限界には達しません
- 算術符号化 (Arithmetic Coding): JPEG 2000、H.264 (CABAC) で使用。シンボル列全体を 0-1 の区間内の 1 つの数値として表現します。ハフマン符号化より 5-10% 高い圧縮率を実現しますが、計算コストが高くなります
- ANS (Asymmetric Numeral Systems): AV1、Zstandard で使用される最新の方式。算術符号化と同等の圧縮率を、ハフマン符号化に近い速度で実現します。エンコードとデコードが非対称 (LIFO 構造) であることが特徴です
- コンテキストモデリング: 周囲のシンボルの値に基づいて確率モデルを動的に更新する技術。CABAC (Context-Adaptive Binary Arithmetic Coding) は、隣接ブロックの情報を使って現在のシンボルの確率を予測し、符号化効率を向上させます
シャノンエントロピーの式: H = -Σ p(x) * log2(p(x))
この値が理論的な最小ビット数/シンボルを表します。例えば、2 つのシンボルが等確率 (50%/50%) で出現する場合、エントロピーは 1 ビット/シンボルです。一方が 99% で出現する場合、エントロピーは約 0.08 ビット/シンボルとなり、大幅な圧縮が可能です。
圧縮品質の評価指標 - PSNR, SSIM, VMAF の違いと使い方
画像圧縮の品質を客観的に評価するための指標は複数存在し、それぞれ異なる側面を測定します。適切な指標を選択することで、圧縮パラメータの最適化やフォーマット間の公平な比較が可能になります。
主要な品質評価指標:
- PSNR (Peak Signal-to-Noise Ratio): 最も古典的な指標で、元画像と圧縮画像のピクセル値の差 (MSE: 平均二乗誤差) から計算します。
PSNR = 10 * log10(MAX^2 / MSE)。単位は dB で、値が大きいほど品質が高い。一般に 30dB 以上で「許容可能」、40dB 以上で「高品質」とされます。計算が単純で高速ですが、人間の知覚と一致しない場合があります (構造的な歪みを検出できない) - SSIM (Structural Similarity Index): 人間の視覚システムを模倣し、輝度、コントラスト、構造の 3 つの要素で類似度を評価します。値は 0-1 で、1 が完全一致。0.95 以上で「知覚的に同等」とされます。PSNR より人間の知覚に近い評価が可能で、画像圧縮の品質比較で最も広く使われています
- VMAF (Video Multimethod Assessment Fusion): Netflix が開発した機械学習ベースの品質指標。複数の特徴量 (VIF、DLM、Motion) を組み合わせ、人間の主観評価 (MOS: Mean Opinion Score) との相関が最も高い指標です。値は 0-100 で、93 以上が「優秀」。動画の品質評価に特に強いですが、静止画にも適用可能です
- Butteraugli: Google が開発した知覚的品質指標。人間の視覚の空間周波数感度やマスキング効果をモデル化し、「人間が気づく最小の差異」を検出します。JPEG XL の品質制御に使用されています
実務での使い分け: 大量の画像を高速に比較する場合は SSIM、最も正確な知覚品質を評価する場合は VMAF、圧縮パラメータの自動チューニングには Butteraugli が適しています。複数の指標を組み合わせて総合的に判断することが推奨されます。