ガウスぼかし-標準偏差、半径、カーネルサイズ


18

GLSLにガウスぼかしフラグメントシェーダーを実装しました。私はそのすべての背後にある主要な概念を理解しています:畳み込み、線形性を使用したxとyの分離、半径を増やすための複数のパス...

まだいくつか質問があります:

  • シグマと半径の関係は何ですか?

    シグマは半径に相当することを読みましたが、シグマがピクセルでどのように表現されるかわかりません。または、「半径」は単なるピクセルの名前ではなく、シグマの名前ですか?

  • シグマを選択するにはどうすればよいですか?

    シグマを増やすために複数のパスを使用することを考慮して、所定のパスで必要なシグマを取得するために適切なシグマを選択するにはどうすればよいですか?結果のシグマがシグマの平方和の平方根に等しく、シグマが半径に等しい場合、希望する半径を取得する簡単な方法は何ですか?

  • カーネルの適切なサイズはどのくらいですか?また、シグマとどのように関連していますか?

    ほとんどの実装が5x5カーネルを使用するのを見てきました。これはおそらく、適切な品質の高速実装に適した選択肢ですが、別のカーネルサイズを選択する別の理由はありますか?シグマはカーネルサイズとどのように関連していますか?私のカーネルの外の係数が無視でき、正規化されるように、最良のシグマを見つける必要がありますか?

回答:


21

シグマと半径の関係は何ですか?シグマは半径に相当することを読みましたが、シグマがピクセルでどのように表現されるかわかりません。または、「半径」は単なるピクセルの名前ではなく、シグマの名前ですか?

ここには3つのことがあります。分散()、半径、およびピクセル数。これは2次元のガウス関数であるため、代わりに共分散行列\ boldsymbol {\ Sigma}について話すのが理にかなっています。ただし、これら3つの概念の関連性は弱いかもしれません。σ2Σ

まず、2次元ガウスは次の方程式で与えられます。

g(z)=1(2π)2|Σ|e12(zμ)TΣ1 (zμ)

ここで、含む列ベクトルであり、し、イメージの座標。したがって、、およびはおよび方向のガウス関数の平均をコード化した列ベクトルです。zxyz=[xy]μxyμ=[μxμy]

例:

ここで、共分散行列、およびを設定したとしましょう。また、ピクセル数を xます。さらに、このPDFを評価する「グリッド」は、と両方でからになります。これは、グリッド解像度がことを意味します。しかし、これは完全に任意です。これらの設定では、左側に確率密度関数の画像が表示されます。さて、「分散」(実際には共分散)を変更すると、Σ=[1001]μ=[00]1001001010xy10(10)100=0.2Σ=[9009]そして他のすべてを同じに保つと、右の画像が表示されます。

ここに画像の説明を入力してください

ピクセル数はどちらも xと同じですが、分散を変更しました。代わりに同じ実験を行い、代わりに xピクセルを使用するとしますが、それでもからまで実行しました。次に、グリッドの解像度はです。前と同じ共分散を使用すると、次のようになります。1001002020101010(10)20=1

ここに画像の説明を入力してください

これらは、これらの変数間の相互作用を理解する方法です。コードが必要な場合は、ここにも投稿できます。

シグマを選択するにはどうすればよいですか?

ガウスフィルターの分散/共分散行列の選択は、アプリケーションに大きく依存します。「正しい」答えはありません。これは、フィルターにどの帯域幅を選択するかを尋ねるようなものです。繰り返しますが、アプリケーションによって異なります。通常、画像のかなりの量の高周波成分をゼロにするようにガウスフィルターを選択します。適切な測定を行うためにできることの1つは、画像の2D DFTを計算し、その係数を2Dガウス画像に重ね合わせることです。これにより、どの係数が大幅にペナルティを受けているかがわかります。

たとえば、ガウス画像の共分散が非常に広く、画像の多くの高周波係数が含まれている場合、共分散要素を小さくする必要があります。


1
これらの画像は、シーケンシャルカラーマップを使用した方が良いでしょう。 ジェットは最悪です。
エンドリス

@endolith "Better"はアプリケーションによって異なります。視覚的なコントラストの識別が必要な場合は、ジェットを使用しません。(ホットが良い)。ただし、ここではメッセージはガウスのサイズ内に収まっているため、jetを使用しても問題はありません。リンクをありがとうございます。
タリンジヤエ

2
これはよく考えられ、本当によく見える答えです!たとえば、左上の画像をご覧ください。中心となる30x30(〜9%)のみがゼロでない100x100カーネルであるため、分散とカーネルサイズの組み合わせが無駄になることは明らかです。
アダムスミス

4

パラメーターsigmaは、連続した視点からガウスぼかしを定義するのに十分です。しかし実際には、画像と畳み込みカーネルは離散的です。連続ガウスカーネルの最適な離散近似を選択する方法は?

より大きな半径を使用すると、離散近似は連続ガウスカーネルにより近くなります。ただし、これには計算時間の追加という犠牲が伴います。

理想的には、シグマの値を選択し、対応する連続ガウスカーネルを忠実に表現できる半径を計算します。与えられた近似誤差に対して、シグマが大きいほど、半径は大きくなければなりません。

興味深いことに、これを正しく行うには非常に複雑になる可能性があります。ガウス行列を構築するとき、連続カーネルをサンプリングするための最良のソリューションですか、それともより良い近似がありますか?切り捨てを考慮して計算された離散カーネルを正規化する方法は?等

参考として、Mathematicaでは、GaussianMatrix関数は、例えば離散ベッセル近似を使用して、ガウス離散行列を計算するいくつかの方法を特徴としています。デフォルトでは、radius = 2 * sigmaです。つまり、sigma = 1の場合、マトリックスは5x5になります。


これはかなり古い質問です。しかし、半径2 * sigmaは9x9の行列になりませんか?
妄想ロジック14

シグマ= 1、半径= 2の@DelusionalLogicの場合、マトリックスのサイズは4になりますが、サイズが奇数なのでサイズ5x5が必要です。少なくともそれは私がそれを理解する方法です..
ミカ

半径が2の場合、近傍は中央のピクセルを左に2ピクセル、右に2ピクセルなど拡張します。これはMathematicaが使用する規則です。
マティアスオディシオ

2

パスカルの三角形の行はガウスに非常にうまく近似し、合計が2の累乗である整数値を持つという実際的な利点があることがわかります(これらの値を整数、固定小数点値、または浮動小数点数として正確に格納できます)。たとえば、次のようにPascalの三角形の7行目を使用して、7x7ガウスカーネルを作成するとします。

ここに画像の説明を入力してください

このフィルターは、整数値のままで、コーナーでの影響が最小であることに注意してください。中央値20/64を使用して、この場合の近似ガウスの64 /(20 * sqrt(2 * pi))= 1.276である対応する標準偏差sigmaを決定できます。ガウスグラフ化して、これが優れた適合であることを確認できます

したがって、ガウスカーネルの合理的な標準偏差を決定するための適切な出発点は、パスカルの三角形(別名二項係数)から得られます-上記の構成の使用に対応する(N + 1)x(N + 1)フィルターの場合

ここに画像の説明を入力してください

Wolfram AlphaのGaussianMatrix [3]は、r / 2 = 1.5を使用します。不思議なことに、GaussianMatrix [{3,1.276}]はないない鉱山と同じ2Dフィルタをもたらすとされていない Y間-3と3、xについて以下

ここに画像の説明を入力してください

なぜそうなのか分かりませんか?私の2Dフィルターはぴったりです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.