画像処理 初級

フィルタリングと変換

初級の概要

初級では、画像処理の中核となるフィルタリング技術を学ぶ。空間フィルタリングによる平滑化・鮮鋭化、エッジ検出、そして Fourier 変換による周波数領域での処理を習得する。

学習目標

  • 畳み込み演算の原理を理解する
  • 各種フィルタ(平均化、Gaussian、Sobel など)を使いこなす
  • エッジ検出の原理と実装を理解する
  • Fourier 変換と周波数領域での処理を学ぶ
  • ノイズの種類と適切な除去方法を理解する

図解:畳み込み演算

入力画像 50 60 55 52 100 58 48 54 51 カーネル (3×3) 1/9 1/9 1/9 1/9 1/9 1/9 1/9 1/9 1/9 平均化フィルタ 出力 59 Σ (画素値 × カーネル値) = (50+60+55+52+100+58+48+54+51) / 9 = 528 / 9 ≈ 59 カーネルを画像上でスライドさせながら各位置で計算する
図 1: 畳み込み演算 — カーネルを画像上で滑らせ、各位置で画素値とカーネル値の積の総和を出力する。

目次

1. 空間フィルタリング入門

畳み込みの基礎。

  • 畳み込み演算とは
  • カーネル(フィルタ)の概念
  • 境界処理の方法
  • OpenCV での実装

2. 平滑化フィルタ

ノイズ低減とぼかし。

  • 平均化フィルタ
  • Gaussian フィルタ
  • メディアンフィルタ
  • バイラテラルフィルタ

3. 鮮鋭化フィルタ

エッジの強調。

  • Laplacian フィルタ
  • アンシャープマスク
  • 高域強調フィルタ
  • 鮮鋭化の応用

4. エッジ検出

輪郭の抽出。

  • Sobel フィルタ
  • Prewitt フィルタ
  • Canny エッジ検出
  • エッジ検出の応用

5. Fourier 変換

周波数領域の処理。

  • 2次元 DFT の原理
  • 周波数スペクトル
  • 低域/高域フィルタ
  • バンドパスフィルタ

6. ノイズ除去

画質改善の技術。

  • ノイズの種類(ガウス、S&P)
  • 空間フィルタによる除去
  • 周波数フィルタによる除去
  • 非局所平均法 (NLM)

図解:エッジ検出

原画像 矩形オブジェクト Sobel X (横方向) 縦のエッジを検出 Sobel Y (縦方向) 横のエッジを検出 合成 |∇I| Sobel X: [-1,0,1; -2,0,2; -1,0,1] Sobel Y: [-1,-2,-1; 0,0,0; 1,2,1]
図 2: Sobel フィルタによるエッジ検出 — 横方向・縦方向の微分を合成し、勾配の大きさ $|\nabla I|$ から輪郭を得る。

図解:Fourier 変換

空間領域 周期的パターン 2D FFT 周波数領域 周波数成分 フィルタ H(u,v) 逆FFT ℱ⁻¹ 出力 フィルタ後の画像(ぼけ)
図 3: 2次元 Fourier 変換による周波数領域フィルタリング — 空間領域の画像を周波数領域へ変換し、フィルタ $H(u,v)$ を掛けてから逆変換する。

主要な定理・公式

2次元畳み込み

出力画像 $g(x,y)$ は、入力画像 $f(x,y)$ とカーネル $h(x,y)$ の畳み込みで得られる:

$$g(x,y) = \displaystyle\sum_{i=-k}^{k} \displaystyle\sum_{j=-k}^{k} f(x-i, y-j) \cdot h(i,j)$$

実装では多くの場合、カーネルを反転しない相互相関 $\sum_{i,j} f(x+i, y+j)\, h(i,j)$ を「畳み込み」と呼ぶ。対称なカーネル(平均化・Gaussian など)では両者は一致するが、非対称なカーネル(Sobel など)では結果が異なる。実際、OpenCV の filter2D をはじめ多くの画像処理ライブラリは、数学的な畳み込みではなく相互相関を計算している(詳しくは畳み込みと相関の違い)。

Sobel オペレータ

勾配の大きさ: $|\nabla I| = \sqrt{G_x^2 + G_y^2}$、勾配の方向: $\theta = \arctan(G_y / G_x)$

畳み込み定理

空間領域での畳み込みは、周波数領域での乗算に対応する: $\mathcal{F}\{f * g\} = \mathcal{F}\{f\} \cdot \mathcal{F}\{g\}$

副読本(読み物)

フィルタと変換の「なぜ」を、図と数式で一歩ずつ深掘りする読み物。

畳み込みと相関の違い

畳み込みと相関の唯一の違い(カーネルの反転)と、その帰結を理解する。

境界処理(パディング)の方法

端でカーネルがはみ出す問題と、代表的な4つのパディング方式を理解する。

積分画像とボックスフィルタ

積分画像が任意矩形の和を一定時間で計算できる理由を理解する。

画像勾配と微分フィルタ

エッジが1次微分のピーク・2次微分のゼロ交差に対応することを理解する。

DoG と LoG(ガウシアンの微分)

LoGとDoGが「平滑化+2次微分」であり、ブロブ検出に使えることを理解する。

ガボールフィルタ

ガボールが「ガウシアン窓×正弦波」で、向きと周波数に選択的だと理解する。

2次元FFTスペクトルの読み方

2D FFTのスペクトル画像で、中心・外側・向きが何を意味するかを読めるようになる。

標本化定理とエイリアシング

ナイキスト条件と、それを破ったときの折り返し(エイリアシング)を理解する。

ノイズのモデルと統計

代表的なノイズの統計的性質と、それぞれに適したフィルタの対応を理解する。

リンギングとギブズ現象

リンギングがギブズ現象に由来すること、なだらかな窓で抑えられることを理解する。

前提知識

  • 入門レベルの内容(画素、色空間、ヒストグラム)
  • 基礎的な線形代数(行列演算)
  • Python / OpenCV の基本操作

よくある質問

初級の画像処理では何を学ぶか

畳み込みによる空間フィルタリングを軸に、平滑化(平均化・Gaussian・メディアン・バイラテラル)、鮮鋭化(Laplacian・アンシャープマスク)、エッジ検出(Sobel・Prewitt・Canny)、Fourier 変換による周波数領域処理、そしてノイズ除去を扱う。

空間フィルタリングと周波数領域フィルタリングはどう違うのか

空間フィルタリングは画素の近傍に畳み込みカーネルを直接適用する。周波数領域フィルタリングは Fourier 変換で周波数成分に分け、低域・高域フィルタを掛けてから逆変換する。畳み込み定理 $\mathcal{F}\{f * g\} = \mathcal{F}\{f\} \cdot \mathcal{F}\{g\}$ により、空間領域の畳み込みは周波数領域の乗算に対応し、両者は等価である。

エッジ検出は何を計算しているのか

画像の輝度勾配を計算している。Sobel フィルタは横方向と縦方向の微分 $G_x, G_y$ を求め、勾配の大きさ $\sqrt{G_x^2 + G_y^2}$ が大きい場所を輪郭とみなす。Canny 法は平滑化・勾配計算・非極大抑制・ヒステリシス閾値処理を組み合わせ、細く連続したエッジを得る。