너무 길지 않고 너무 복잡하지 않은 경우 MikeT의 훌륭한 답변에 대한 의견이 될 수 있습니다 . 나는 그것을 많이 가지고 놀았고 그의 기능에 따라 FFT 컨볼 루션 필터 ( "실험 단계") 라는 QGIS 플러그인을 만들었습니다 . 스무딩 외에도 플러그인은 원래 래스터에서 스무딩 래스터를 빼서 가장자리를 선명하게 할 수 있습니다.
프로세스에서 Mike의 기능을 약간 업그레이드했습니다.
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()
)으로 나누기 때문에 정수 배열을 검은 색 (0 만)으로 만들었습니다 .