logo

コンボリューションの概念

コンボリューションは、導関数の計算、エッジの検出、ブラーの適用などの多くの目的で使用され、これらはすべて「コンボリューション カーネル」を使用して行われます。コンボリューション カーネルは非常に小さな行列であり、この行列では各セルに番号とアンカー ポイントがあります。

アンカーポイントは、画像に対するカーネルの位置を知るために使用されます。画像の左上隅から開始し、各ピクセル上を順番に移動します。カーネルは、画像上の各位置で数ピクセルをオーバーラップします。重なった各ピクセルは乗算されてから加算されます。そしてその合計が現在位置の値として設定されます。

コンボリューションの概念

畳み込みは、画像の各要素がそのローカルな隣接要素に追加され、カーネルによって重み付けされるプロセスです。これは数学的畳み込みの一種に関連しています。

Convolution では、行列は従来の行列の乗算を実行しませんが、* で示されます。

2 つの 3x3 行列があり、1 つはカーネル、もう 1 つは画像部分であると仮定します。畳み込みでは、カーネルの行と列が反転され、乗算されてから合計が実行されます。マトリックスの中心、つまり画像の [2,2] に存在する要素は、画像マトリックスの重み付けされた組み合わせとなり、重みはカーネルによって与えられます。同様に、行列の他のすべての要素に重みが付けられ、重みが計算されます。

以下は、畳み込みプロセスを説明する擬似コードです。

 For each image row in input image: For each pixel in image row: Set accumulator to zero For each kernel row in kernel: For each element in kernel row: If element position corresponding* to pixel position then Multiply element value corresponding*to pixelvalue Add result to accumulator Endif Set output image pixel to accumulator 

畳み込みは、複数の for ループを使用して計算できます。ただし、for ループを使用すると、多くの繰り返し計算が発生し、イメージとカーネルのサイズも増加します。離散フーリエ変換手法を使用すると、畳み込みの計算を迅速に行うことができます。この手法では、畳み込み演算全体が単純な乗算に変換されます。

畳み込みでは、カーネルが 2 次元であるため、カーネルがエッジまたはコーナーの近くにある場合に問題が発生します。

これらの問題を解決するには、次のことを行うことができます。

  1. 無視しても構いません
  2. 余分なピクセルがエッジ近くに作成される可能性があります。

追加のピクセルは次の方法で作成できます。

  1. エッジピクセルが重複しています。
  2. エッジを反射する
  3. ピクセルはもう一方の端からコピーできます。