3

半径 R の球 S に含まれるすべてのポイントをクエリするプログラムがあります。ポイントは、実際には 3D 規則的なグリッドの頂点に配置された 3D ポイントですが、この詳細は質問に関連しているとは思いません。ルックアップ ボリューム (球体) の中心は、3D ペースのどこにでも配置できます。

ポイントはいくつかのデータを保持します(実数など)。私の質問は、3D フィルター (たとえばガウス フィルターなど) を使用して、球に含まれるポイントによって保持されるデータを補間/フィルター処理する方法です。私の理解では、次のようなことをする必要があるということです(疑似コード):

interp_data = 0; 
for (each point contained in the lookup sphere S of radius R)
      // compute square distance from point location to sphere centre
      dist2 = distance2(sphere_center, curr_point_loc);
      // compute gaussian weight
      w = exp(-100 * dist2);
      sumWeight += w;
      interp_data += curr_point_data * w;
 interp_data /= sumWeight;

それが正しいか。同様の手法を使用したコードを見たことがあります。exp 関数の値 100 は、標準正規偏差と呼ばれるものに何らかの形で関連していることを理解しています。値 100 は、私が見たソース コードでハード コードされていましたが、これは何らかの形で球の半径に関連していると思いますか? ガウス フィルターの重みは、dist2 = R^2 のときに 0 になるはずです。

誰かがこれに光を当てることができれば、それは素晴らしいことです.

また、実際に 3D データをフィルタリングする最良の方法はありますか? より良い/より高速で信頼性の高い方法はありますか?

どうもありがとうございました。

4

1 に答える 1

9

おそらく効率的ではありませんが、あなたの提案はほとんど合理的です。(また、なぜ距離だけでなく距離の二乗なのですか?)

次のことを行うことで、3D ガウスをより効率的に実行できます。

1) 1D ガウス カーネルを使用して、カーネルを 3 つの 1 次元パスに分離します。これはガウスぼかしウィキペディアのページで説明されています

2)ボックスブラーを連続して数回実行することでガウス カーネルを近似できます。これは、合計面積テーブルを使用して実装できます。

3)高速フーリエ変換を使用して、代わりに周波数空間で画像にカーネルを掛けることで畳み込みを行うこともできます。

于 2013-05-18T02:56:20.920 に答える