0

ガウスぼかしのさまざまな説明をたくさん読んで、本当に混乱しています。

ガウスぼかしの仕組みが大体わかりました。 http://en.wikipedia.org/wiki/Gaussian_blur

値が非常に小さくなるため、マスクの最大サイズとして 3*sigma を選択することを理解しました。

しかし、私の3つの質問は次のとおりです。

  1. シグマのみでガウス マスクを作成するにはどうすればよいですか?

  2. 私がそれを正しく理解していれば、マスクは重みを与えてくれます。次に、マスクを左上のピクセルに配置します。マスク内のピクセルの値ごとに重みを乗算します。次に、マスクを次のピクセルに移動します。これをすべてのピクセルに対して行います。これは正しいです?

  3. また、1D マスクの方が高速であることもわかっています。そこで、x のマスクと y のマスクを作成します。私のマスクがこのように見えるとしましょう。(3x3)

1 2 1

2 4 2

1 2 1

私の x と y マスクはどのように見えますか?

4

1 に答える 1

2

1-ガウスマスクを作成するための解決策は、NbyN行列を設定しN=3*sigma(より粗い解決策が必要な場合はそれ以下)、各エントリ(i,j)に。を入力することexp(-((i-N/2)^2 + (j-N/2)^2)/(2*sigma^2))です。コメントで述べたように、取るN=3*sigmaということは、ガウス関数を「十分に小さい」しきい値で切り捨てることを意味します。

2-はい-あなたは正しく理解しました。細かい点は、重みの合計で正規化する必要があることです(つまり、言ったことの結果を行列のすべての要素の合計で除算します)。もう1つのオプションは、すでに正規化された行列を作成できるため、最後にこの正規化を実行する必要がないことです(正規化されたガウス式はになりますexp(-((i-N/2)^2 + (j-N/2)^2)/(2*sigma^2))/(2*pi*sigma)

3-あなたの特定のケースでは、1Dバージョンは[1 2 1](つまり、あなたxyマスクの両方)です。これは、乗算で与えた行列を取得できるためですtranspose([1 2 1]) * [1 2 1]。一般に、これらの1Dガウス式は、上記の式と同様の1Dガウス式を使用して直接作成できます:(exp(-((i-N/2)^2)/(2*sigma^2)) または正規化されたバージョンexp(-((i-N/2)^2)/(2*sigma^2)) / (sigma*sqrt(2*pi))

于 2012-12-12T01:22:00.980 に答える