これは、長すぎず、複雑すぎない場合、MikeTの優れた答えに対するコメントかもしれません。私はそれをたくさん使って、彼の機能に基づいて、FFT Convolution Filtersという名前のQGISプラグインを作成しました(「実験」段階)。プラグインは、スムージングに加えて、元のラスタからスムージングされたラスタを差し引くことでエッジをシャープにすることもできます。
その過程でマイクの機能を少しアップグレードしました。
def __gaussian_blur1d(self, in_array, size):
#check validity
try:
if 0 in in_array.shape:
raise Exception("Null array can't be processed!")
except TypeError:
raise Exception("Null array can't be processed!")
# expand in_array to fit edge of kernel
padded_array = np.pad(in_array, size, 'symmetric').astype(float)
# build kernel
x, y = np.mgrid[-size:size + 1, -size:size + 1]
g = np.exp(-(x**2 / float(size) + y**2 / float(size)))
g = (g / g.sum()).astype(float)
# do the Gaussian blur
out_array = fftconvolve(padded_array, g, mode='valid')
return out_array.astype(in_array.dtype)
妥当性チェックは非常に自明ですが、重要なのはフロートにキャストすることです。この前に、関数は値の合計(g / g.sum()
)で除算するため、整数配列を黒(ゼロのみ)にしました。