2016-05-03 105 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]