2016-05-03 106 views
0

我有欲一維高斯濾波器應用到使用SciPy的的gaussian_filter1d而不改變邊緣值的數組:SciPy的1D平滑保留邊緣

>>> from scipy.ndimage.filters import gaussian_filter1d 
>>> arr = [1.,2.,3.,4.,100.,5.,6.,7.,8.,9.,10.] 

但是這無法保存邊緣值1和10:

>>> gaussian_filter1d(arr, 5, mode="nearest") 
>>> array([ 8.26708045, 9.54770677, 10.72077793, 11.70511557, 
      12.43900171, 12.89021341, 13.06040738, 12.98285813, 
      12.71434815, 12.32350223, 11.87856682]) 

回答

0

此方法似乎不必要複雜,然而,這平滑梯度而非值本身:

# Convolve with sobel filter 
grad = convolve(arr, [1,-1,0], mode="nearest")[:-1] 
# Smooth gradient 
smooth_grad = smooth_grad = gaussian_filter1d(grad, 5) 
# Integrate 
smoothed = [arr[0] + sum(smooth_grad[:x]) for x in range(len(arr))] 

生產時間:

[1.0, 3.6, 6.0, 9.6, 10.7, 11.3, 11.5,11.2,10.7,10.0]