線形代数 · 第30回 · 動画1 · インタラクティブ教材

写真はベクトルだ:JPEG が画素の格子を捨てる理由

I重要な公式

公式 名称 説明
画像=c1v1+c2v2+⋯+cNvN\text{画像} = c_1\mathbf{v}_1 + c_2\mathbf{v}_2 + \dots + c_N\mathbf{v}_N 基底による展開 どんな画像も、基底ベクトルに重みを付けた和で表せる
ci=vi⊤xc_i = \mathbf{v}_i^\top \mathbf{x} 係数(正規直交基底の場合) 画像 x\mathbf{x} の基底ベクトル vi\mathbf{v}_i への射影
x∈RH⋅W\mathbf{x} \in \mathbb{R}^{H \cdot W} ベクトルとしての画像 H×WH \times W のグレースケール画像を 1 本の列に並べ直したもの
x^=∑i∈Scivi\hat{\mathbf{x}} = \sum_{i \in S} c_i \mathbf{v}_i 非可逆な再構成 大きい係数 SS だけを残し、残りは捨てる

II可視化1 — 画像はベクトル

グレースケールの格子を 1 行ずつほどいて並べると、絵は 1 つの点、つまり R16\mathbb{R}^{16} のベクトルになります。

💡 同じ考え方は大きな画像にもそのまま通用します。512×512512 \times 512 の写真は R262,144\mathbb{R}^{262{,}144} の 1 点です。

III可視化2 — 基底ベクトルは絵であってもよい

基底ベクトルはどれも、それ自体が 8×88 \times 8 の画像です。1 点だけの突起もあれば、一様な面も、速い振動もあります。

💡 JPEG の基底は、周波数がだんだん高くなるコサイン波です(離散コサイン変換)。最近のコーデックはウェーブレットを使います。基底の選び方がすべてを決めるのです。

IV可視化3 — 係数を捨てて圧縮する

64 個の周波数の係数のうち、大きいものをいくつか残すだけで、再構成した画像はほとんど変わりません。

💡 これがうまくいくのは、実際の画像がほとんどなめらかだからです。低周波の基底ベクトルには大きく射影され、高周波の基底ベクトルにはほとんど射影されません。

V確認クイズ

問1

解像度 512×512512 \times 512 のグレースケール写真があります。これを 1 本のベクトルとみなすと、どの空間に属するでしょうか。

✅ 正解です! 画素 1 つが座標 1 つを受け持ちます。

❌ 惜しい! 次元は幅や高さだけではなく、画素の総数に等しくなります。

解答を見る

解答:

画像をベクトルにするには、すべての画素値を 1 本の長い列に積み上げます。512×512512 \times 512 のグレースケール画像なら、画素値は 512×512=262,144512 \times 512 = 262{,}144 個あるので、この画像は R262,144\mathbb{R}^{262{,}144} の 1 点です。

(カラー画像なら、各画素に R、G、B の 3 チャンネルがあるので、この 3 倍になります。)

問2

完全に一様な暗い灰色の黒板を撮影しました。2 つの基底を比べます。

  • 画素の基底 {e1,…,eN}\{\mathbf{e}_1, \dots, \mathbf{e}_N\}
  • 全成分が 1 のベクトル 1=(1,1,…,1)\mathbf{1} = (1,1,\dots,1) を含む構造をもった基底

この画像の記述が短くなる(ゼロでない係数が少なくなる)のは、どちらの基底でしょうか。

✅ 正解です! 一様な画像は全成分が 1 のベクトルのスカラー倍なので、ほとんどすべての係数がゼロになります。

❌ 惜しい! すべての係数が等しいことと、ほとんどの係数がゼロであることは違います。ほしいのは一様さではなく、記述の短さです。

解答を見る

解答:

画素の基底では、どの係数も灰色の値 gg です。等しくてゼロでない数が 262,144 個並ぶので、短い記述にはなりません。

全成分が 1 のベクトル 1\mathbf{1} を含む構造をもった基底では、一様な画像は単に 黒板=g⋅1+0⋅v2+0⋅v3+…\text{黒板} = g \cdot \mathbf{1} + 0 \cdot \mathbf{v}_2 + 0 \cdot \mathbf{v}_3 + \dots となります。ほとんどすべての係数がゼロです。画像全体が、たった 1 つの数 gg でとらえられます。

ベクトルも情報も同じで、記述がずっと短くなっただけです。

問3

正しいか誤りか:JPEG は非可逆圧縮を行うとき、ファイルを小さくするために情報をでたらめに取り除いている。

✅ 正解です! 非可逆圧縮は、高周波の係数を狙って正確に、決まったやり方で捨てる処理です。でたらめに壊しているのではありません。

❌ 惜しい! 基底変換による圧縮の要点は、捨てる対象が狙いを定めて選ばれていることです。

解答を見る

解答:誤り。

JPEG は情報をでたらめに捨てているのではありません。(離散コサイン変換を使って)基底を取り替え、画像を低周波から高周波までの成分の和として表します。そのうえで、高周波の基底ベクトルにかかる係数を大胆に量子化するか、ゼロにしてしまいます。

これはでたらめではなく、筋の通った処理です。

  • 実際の写真はほとんどがなめらかなので、高周波の係数はもともと小さい。
  • 人間の視覚は、大きなスケールの構造に比べて、高周波の細部にはずっと鈍感である。

つまり JPEG は、私たちの目がほとんど気づかない部分を選んで捨てているのです。だからこそ、10 分の 1 に圧縮した写真でも十分きれいに見えます。

問4

最近の動画コーデックは、フレームを 1 枚ずつ符号化するのではなく、続いているフレームどうしの差を符号化します。この戦略と JPEG に共通しているのは何でしょうか。

✅ 正解です! これが核心です。圧縮とは座標を選ぶことなのです。

❌ 惜しい! JPEG は非可逆で、DCT は時間ではなく空間についての変換です。2 つに共通する一般的な原理を探しましょう。

解答を見る

解答:

共通する原理は、ほとんどの数がゼロになるまで座標を取り替えることです。

  • JPEG は空間の基底を取り替えます(画素 → コサイン波)。なめらかな画像は、新しい基底ではほとんどの係数がゼロになります。
  • 動画コーデックは時間の基底を取り替えます(現在のフレーム → 現在のフレームから予測したフレームを引いたもの)。続いているフレームどうしは強く相関しているので、差の画像はほとんど真っ黒です。ほぼゼロのベクトルなので、保存するのにほとんど手間がかかりません。

軸が違うだけで、考え方は同じです。正しい基底を選べば、難しい問題が当たり前の問題に変わるのです。

正解数:0 / 4