我有一個程序,我正在查詢包含在半徑爲R的球體S中的所有點。這些點是實際上在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數據的最佳方式?有更好/更快/更可靠的方法嗎?
非常感謝您的幫助。
你應該說如果它是布爾值,RGB和它是哪種數據。這取決於速度是一個問題,你有多少點。超過1億,它會很慢。讀取和寫入數據,使用自己的數組創建自己的內存塊,以存儲有關每個點的信息,其速度提高了幾千倍,並且比堆棧或使用系統內存的效率高出許多倍。 –