周波数領域処理 — 画像を2次元の波に分解する

ぼかしもシャープ化も、正体は「波の成分の足し引き」。画像を2次元の正弦波(縞模様)の重ね合わせとみなすと、空間フィルタ(第5章)でやっていたことが別の顔で見えてきます。2D FFT でスペクトルを覗き、周波数の世界で直接フィルタを掛けてみましょう。

1. 画像は「縞模様」の重ね合わせ

音の波形が正弦波の和に分解できたように、画像も基本部品に分解できます。その部品が2次元正弦波 — つまり縞模様です。部品1つは空間周波数の組 (u, v) で決まります:

(u, v) をベクトルと見ると、その向きが縞の向き、長さ √(u²+v²) が縞の細かさになります。下のデモでスライダーを動かして確かめてください。

2次元の波 — (u, v) が縞の向きと細かさを決める
左=パターン cos(2π(ux+vy)/N)、右=周波数平面上の位置。点が中心(原点)から遠いほど縞が細かくなり、点の方向が縞の垂直方向を向きます。再生中は位相が進み、縞が流れます。「波を重ねる」をオンにすると、2つの波の和だけでもう複雑な模様になる — 画像はこれを何千個も重ねたものです。
POINT — 低周波と高周波の役割分担 低周波(中心付近)=ゆるやかな明暗、大まかな構図。高周波(外側)=エッジ・細部・テクスチャ、そしてノイズ。「ぼかす」とは高周波を捨てること、「シャープにする」とは高周波を持ち上げること — 周波数の言葉ではフィルタ処理がこの一言で説明できる。

2. 2次元フーリエ変換 — スペクトルを読む

画像 f(x, y) を全部の縞成分に分解するのが2次元離散フーリエ変換(2D DFT)です。1次元の DFT を「行方向に掛けてから列方向に掛ける」だけで計算でき、FFT を使えば高速です。

F(u, v) = Σx=0M−1 Σy=0N−1 f(x, y) e−j2π(ux/M + vy/N) |F(u,v)| が振幅スペクトル(その縞がどれだけ強く含まれるか)。表示では直流成分 F(0,0) を中心に移動(中心化)し、桁違いの差を潰すため log(1+|F|) にするのが定番
2D FFT スペクトル — 縞がスペクトルの「点」になる
32×32 で FFT(プリセット変更時のみ計算)
縞1種類 → 中心対称な輝点ペア(細かい縞ほど中心から遠い)。格子 → 縦横の点。円 → 同心リング状の広がり。合成画像のスペクトルは各成分のスペクトルの重ね合わせになっています。中心の輝点は直流成分(画像の平均の明るさ)。
POINT — スペクトルの読み方 3か条 ① 中心 = 直流(平均輝度)で、たいてい一番明るい。② 実数画像のスペクトルは原点対称:(u,v) と (−u,−v) の成分は必ずペア。③ 画像の縞・エッジの向きと直交する方向にスペクトルのエネルギーが伸びる(縦のエッジ → 横方向の広がり)。

3. 周波数フィルタリング — スペクトルに直接マスクを掛ける

スペクトルが手に入れば、フィルタ処理は簡単です。通したい周波数だけ残して逆FFTすればいい。中心から半径 D₀ の円の内側だけ通せばローパス(ぼかし)、外側だけ通せばハイパス(輪郭抽出)、ドーナツ状に通せばバンドパス(特定の細かさだけ抽出)になります。

周波数フィルタ実験 — マスクして逆FFT
64×64 の合成画像(円・四角・細かい縞・小さな点)で実験。ローパスの半径を下げると細部から消えてぼけ、輪郭の周りに波紋(リンギング)が現れます。ハイパスにするとエッジだけが残り、平坦部は消えて中間グレーに。半径 11 前後のバンドパスにすると右上の細かい縞だけを取り出せます。ハイパス/バンドパスの結果は 0 を中心にした符号つきなので、グレー=0 として表示しています。
注意 — 理想フィルタとリンギング 円の内外で 1/0 と急峻に切る「理想フィルタ」は、空間領域では sinc 関数(減衰しながら振動する波)との畳み込みに相当する。だからエッジの周りに波紋=リンギングが出る。デモで「ガウス型」に切り替えると、マスクの縁がなだらかになりリンギングが消えるのを確認できる。実用ではガウス型やバターワース型が使われる。

4. 畳み込み定理 — 空間フィルタとの橋

第5章のカーネル畳み込みと、この章の周波数マスク。実は同じことの2つの顔です。それを保証するのが畳み込み定理:

f(x, y) ∗ h(x, y)  ⟺  F(u, v) · H(u, v) 空間領域での畳み込み = 周波数領域での単純な掛け算。H(u,v) はカーネル h の 2D FFT(周波数応答)
一歩先へ — 振幅より位相、そして JPEG へ 今回表示したのは振幅スペクトルだけだが、F(u,v) は複素数で位相も持つ。実は2枚の画像の振幅と位相を入れ替えると、見た目は位相側の画像に近くなる — 構造の情報は主に位相が握っている。また「画像をブロックごとに周波数分解し、目立たない高周波を粗く量子化する」という発想がそのまま JPEG 圧縮(第12章の DCT)につながる。

5. まとめ