2016-05-03 7 views
0

Ich habe ein Array, das I ohne Änderung der Kantenwerte einen 1d Gaußfilter zur Verwendung Scipy des gaussian_filter1d anwenden möchten:Scipy 1D glatte Konservieren Kanten

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

Jedoch versagt diese Kantenwerte 1 und 10 zu erhalten:

>>> 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]) 

Antwort

0

Dieses Verfahren unnötig kompliziert zu sein scheint, glättet jedoch dies die Steigung nicht die Werte selbst:

# 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))] 

Herstellung:

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