画像処理 初級
フィルタリングと変換
初級の概要
初級では、画像処理の中核となるフィルタリング技術を学ぶ。空間フィルタリングによる平滑化・鮮鋭化、エッジ検出、そして Fourier 変換による周波数領域での処理を習得する。
学習目標
- 畳み込み演算の原理を理解する
- 各種フィルタ(平均化、Gaussian、Sobel など)を使いこなす
- エッジ検出の原理と実装を理解する
- Fourier 変換と周波数領域での処理を学ぶ
- ノイズの種類と適切な除去方法を理解する
図解:畳み込み演算
目次
図解:エッジ検出
図解:Fourier 変換
主要な定理・公式
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 の基本操作