2

各オブジェクトに と があるデータセットがありValueますPricePriceを使用してガウスぼかしを適用したいと思いますValue。私のデータにはぼかしに使用するコンポーネントが 1 つしかないため、1D ガウスぼかしを適用しようとしています。

私のコードはこれを行います:

totalPrice = 0;
totalValue = 0;
for each object.OtherObjectsWithinPriceRange()
    totalPrice += price;
    totalValue += Math.Exp(-value*value);

price = totalPrice/totalValue;

良い結果が得られましたが、オンラインで見た 1D ガウスぼかしアルゴリズムは偏差、シグマ、PI などを使用しているようです。それらは必要ですか、それとも 2D ガウスぼかし専用ですか? これらの 1D ブラー パスを垂直方向と水平方向に組み合わせて、2D を考慮したままにします。

また、結果を色で表示しますが、白い部分は 1 (白) を少し上回っています。これを正規化するにはどうすればよいですか?値を 1 に固定する必要がありますか? そのため、正しい式を使用しているかどうか疑問に思っています。

4

1 に答える 1

1

あなたのコードはある種のぼかしを適用しますが、間違いなくガウスではありません。ガウスぼかしは次のようになります

kindaSigma = 1;
priceBlurred = object.price;
for each object.OtherObjectsWithinPriceRange()
   priceBlurred += price*Math.Exp(-value*value/kindaSigma/kindaSigma);

アプリケーションでのこの「距離」が何を意味するにせよ、価格帯内の と他のオブジェクトとのvalue間の「距離」に比例すると仮定するだけです。object

あなたの質問に。

  1. 2D ガウス ブラーは、垂直方向と水平方向の 1D ガウス ブラーを交互に組み合わせたものと完全に同等です。これが、2D ガウスぼかしが実際に実装される方法です。

  2. ガウスの乗法係数として PI やシグマは必要ありません。これらは単に画像をスケーリングする効果があり、安全に無視できます。

  3. 指数の下のシグマ (標準偏差) は結果に大きな影響を与えますが、必要かどうかは私にはわかりません。アプリケーションによって異なります。もっとぼかしたい:kindaSigma上記のスニペットで大きく使用します。ぼかしを減らしたい: 小さい を使用しますkindaSigma。kindaSigma が小さすぎると、ぼやけにまったく気付かないでしょう。kindaSigma が大きすぎる場合、ガウスぼかしは効果的に移動平均フィルターに変換されます。それを使って、必要なものを選択してください。

  4. 正規化の質問を理解しているかどうかわかりません。画像処理では、各色成分 (R、G、B) を として格納するのが一般的unsigned charです。したがって、黒色は (0,0,0) で表され、白色は (255,255,255) で表されます。もちろん、別の表示形式を自由に選択して、白色を 1 とすることもできます。ただし、標準の 8 ビット表示を使用している視覚化パッケージの場合、値 1 はほぼ黒色を意味することに注意してください。そのため、表示する前に画像を操作して再正規化する必要があります。

于 2012-08-15T09:06:24.290 に答える