畳み込み
読み: たたみこみ
カーネル (小行列) を画像上でスライドさせ、各位置で加重和を計算する画像処理の基本演算。ぼかし、エッジ検出、シャープ化の基盤。
畳み込み (Convolution) は、カーネルと呼ばれる小さな行列を画像上でスライドさせながら、各位置で周囲ピクセルとの加重和を計算する画像処理の基本演算である。ぼかし、シャープ化、エッジ検出、エンボスなど、ほぼすべての空間フィルタリングがこの演算に基づいている。
畳み込みの処理手順は以下のとおりである。
- カーネル (例: 3×3) を画像の左上から右下へ 1 ピクセルずつスライドさせる
- 各位置で、カーネルの各要素と対応するピクセル値を掛け合わせる
- すべての積の合計を出力ピクセルの値とする
- 画像全体に対してこの操作を繰り返す
代表的なカーネルとその効果を示す。
- 平均化フィルタ: 全要素が
1/9の 3×3 カーネル。単純なぼかし (ボックスブラー) を実現 - ガウシアンフィルタ: ガウス分布に基づく重み付け。自然なぼかしを生成し、ノイズ除去に最適
- Sobel フィルタ: 水平・垂直方向のエッジを検出。微分演算を近似する
- Laplacian フィルタ: 2 次微分でエッジを全方向に検出。ゼロ交差点がエッジ位置を示す
- アンシャープマスク: 元画像からぼかし画像を減算してシャープ化。印刷・写真の定番手法
計算量の観点では、N×N カーネルを M×M 画像に適用すると O(M²N²) の計算が必要になる。大きなカーネルでは周波数領域 (FFT) での乗算に変換することで高速化できる。また、ガウシアンカーネルのように分離可能なカーネルは、2 回の 1 次元畳み込みに分解して O(M²N) に削減可能である。
深層学習の CNN (Convolutional Neural Network) も同じ畳み込み演算を基盤としている。ただし CNN ではカーネルの値を学習によって自動決定する点が、手動設計のフィルタと異なる。