This article provides insight about two-dimensional convolution and zero-padding respect to digital image processing.

前回の記事「DSPへの洞察を深める:畳み込みを学ぶ」では、信号処理分野における畳み込みとその重要な2つのアプリケーションについて述べました。 そこでは、信号は空間領域で一次元であると考えられていたと思われます。 しかし、畳み込みの処理は多次元信号に対しても行うことができます。

この記事では、画像処理の分野で広く使用されている2次元畳み込みの処理と結果について理解を深めていきます。 さもなければ、畳み込みが2つの相互に垂直な次元にまたがる2つの信号間で実行される場合(すなわち、信号が本質的に2次元である場合)、それは2D畳み込みと呼ばれることになる。 この概念は、多次元信号を含むように拡張することができ、それによって多次元畳み込みを行うことができる。

デジタル領域では、畳み込みは、一方が反転した2つの入力信号に対応する重複するサンプルの瞬時値を乗算して蓄積することによって実行される。 1次元の畳み込みの定義は、2次元の畳み込みにも適用されるが、後者の場合、入力の1つが2回反転される。

2次元畳み込みの例

図1に示すように、5×5サイズの画像行列xを3×3サイズのカーネルhで畳み込んだ結果の出力画像の画素値を計算してみることにする。

図1:入力行列(xは元画像、hはカーネルを表す)。 画像作成者:Sneha H.L.

これを達成するために、従うべきステップバイステップの手順を以下に概説します。

Step 1: Matrix inversion

このステップは、図2に示すように、たとえば行に沿ってカーネルを反転し、その列に沿って反転することを伴います。

図 2: 逆行列の図式的表現。 画像作成:Sneha H.L.

その結果、元のカーネルのすべての (i,j) 番目の要素は、新しい行列の (j,i) 番目の要素になる。

ステップ2:カーネルを画像上でスライドさせ、各瞬間でMAC操作を行う

反転カーネルを画像上で重ね、ピクセルごとに進める

各ケースについて、相互に重なるピクセルの積を求め、その合計を計算する。 その結果が、その特定位置の出力画素の値となる。 この例では、重ならないピクセルは値’0’であると仮定する。 これについては、次の「ゼロパディング」のセクションで詳しく説明します。

今回の例では、まずカーネルを列方向にスライドさせ、それから行に沿って進めていきます。

行ごとのピクセル

最初に、最初の行を完全にまたいで、それから2番目、・・・と進めてみましょう。

このプロセスの間、カーネルの右下のピクセルがイメージ マトリクスの左上の最初のピクセル値に該当すると、カーネルとイメージ ピクセルとの間に最初のオーバーラップが生じます。 図3aでは、これらの画素値はいずれも濃い赤色でハイライト表示されています。 したがって、出力画像の最初の画素値は25×1=25.

次に、同じ行に沿ってカーネルを1画素分前進させることにする。 この段階で、図3bに示すように、カーネルマトリックスの2つの値(0、1-濃い赤のフォントで表示)は画像の2つのピクセル(25と100-濃い赤のフォントで表示)に重なります。 したがって、結果として得られる出力画素値は25×0+100×1=100.

図3a、3b。 位置(1,1)と(1,2)の出力ピクセルに対して得られたコンボリューションの結果。 画像作成者:Sneha H.L.

図3c、3d: 位置(1,4)と(1,7)の出力ピクセルについて得られたコンボリューション結果。 Image created by Sneha H.L.

Advancing similarly, all the pixel values of the first row in the output image can be computed. 出力行列の4番目と7番目の出力ピクセルに対応する2つのそのような例は、それぞれ図3cと3dに示されています。

同じ行に沿ってカーネルをさらにスライドさせると、カーネル内のどのピクセルも画像内のピクセルと重なりません。

Move Down Vertical, Advance Horizontally

次のステップは、水平方向の移動を再開する前に、垂直方向に1ピクセルだけ下に移動することである。 図4aに示すように、最初の重なりが発生し、それに対してMAC演算を実行すると、25×0+50×1=50となります。 出力行列の6番目の画素値(=49×0+130×1+70×1+100×0=200)に対応するそのような場合の1つを、図4bに示す。 位置(2,1)と(2,6)の出力ピクセルについて得られたコンボリューションの結果。 画像作成:Sneha H.L.

このように、一段下に移動した後に水平走査するプロセスは、画像マトリックスの最後の行まで続けなければなりません。 位置(4,3)、(6,5)及び(8,6)における画素出力に関する3つのランダムな例が、図5a〜cに示されている。 (4,3)の出力画素について得られたコンボリューションの結果。 画像作成者:Sneha H.L.

図5b. (6,5)の出力画素に対して得られたコンボリューション結果。 スネハH.L.

図5cの作成した画像。 (8,6)の出力画素に対して得られたコンボリューション結果。 画像作成者:Sneha H.L.

ステップ

したがって、結果の出力行列は次のようになります:

図6. 私たちの例の結果出力行列。 Image created by Sneha H.L.

Zero Padding

The mathematical formulation of 2-D convolution is given by

$$ yleft=sum_{m=-}^infty h$

$$ yleft=sum_{m=-\infty}^infty hleft \cdot xleft + hleft \ + hleft $$

$ y\left= http \cdot xleft + http 画像とカーネルの重なり合う画素を係数とした9回の乗算が必要である。 しかし、最初の出力画素の値を計算する際には、1回の乗算しか行っていません(図3aは図7aとして複製)。 これはどういうことでしょうか? 2-D 畳み込みの方程式形式との矛盾を意味しているのでしょうか。

いいえ、そうではありません。 なぜなら、9つの積項の和で得られる結果は、他の8つの積項の集合効果がゼロに等しくなれば、1つの項の積と等しくなることがあるからです。 そのような方法として、他の8つの項の各積が自分自身を0と評価する場合がある。 この例のコンテキストでは、これは、数式計算の結果をグラフィック計算の結果と等しくするために、(画像とカーネルの間の)非重複ピクセルに対応するすべての積項がゼロになる必要があることを意味します。

数学の初歩知識から、乗算に関わる因子の少なくとも 1つがゼロであれば、結果の積もゼロであると分かっています。 この類推により、この例では、カーネル行列の重ならない各画素に対応するゼロ値の画像画素が必要であることを述べることができます。 これを図式化すると、図7bのようになる。 ここで注目すべき重要なことは、画像にゼロを追加しても、そのサイズ以外の意味では画像を変更しないということです。

図 7: 画像の最初のピクセルに示されるゼロパディング (私による描画)

この余分のゼロを追加するプロセスはゼロパディングとして知られており、カーネルのピクセルと重なる画像ピクセルがない場合にそれぞれ実行が必要となります。 この例では、ゼロパディングは、最初の2つの行と列に沿った画素と、最後の2つの行と列に沿った画素(これらの画素は図8で青いフォントで示されている)のそれぞれについて実行する必要がある。 一般に、入力画像の各側でゼロパディングされる行または列の数は、(カーネル内の行または列の数-1)によって与えられる。

図8

言及すべき重要なことの1つは、ゼロパディングが、畳込みによってもたらされる縁効果を扱う唯一の方法ではない、という事実である。 他のパディング技術には、複製パディング、周期的拡張、ミラーリングなどがある(Digital Image Processing Using Matlab 2E, Gonzalez, Tata McGraw-Hill Education, 2009)。

概要

この記事は、デジタル画像処理に関して2D畳み込みのグラフ方式とゼロパディングの概念を解説することが目的である。

コメントを残す

メールアドレスが公開されることはありません。