【问题标题】:Scipy 1D smooth preserving edgesScipy 1D 平滑保留边缘
【发布时间】:2026-01-25 03:45:02
【问题描述】:

我有一个数组,我想在不改变边缘值的情况下应用一维高斯滤波器来使用 Scipy 的 gaussian_filter1d:

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

【问题讨论】:

    标签: python scipy signal-processing


    【解决方案1】:

    这种方法看起来不必要地复杂,但是这会平滑渐变而不是值本身:

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

    【讨论】: