用scipy实现矩形阶跃函数

2024-04-27 11:24:00 发布

您现在位置:Python中文网/ 问答频道 /正文

scipy中有矩形过滤器吗?我想复制@Mike T的解https://gis.stackexchange.com/questions/9431/what-raster-smoothing-generalization-tools-are-available/162852,但是我不想做高斯模糊,我想应用一个矩形滤波器(即基本上是一个阶跃函数)


Tags: httpscom过滤器scipytoolswhataremike
1条回答
网友
1楼 · 发布于 2024-04-27 11:24:00

您只需使用^{}并自己定义weights(过滤器)。还有一个专门的优化矩形滤波器函数:^{}

例如,要应用宽度3平均值过滤器(如果需要和过滤器,则乘以ndim*size):

>>> from scipy.ndimage import uniform_filter
>>> uniform_filter([1,4,2,56,2,3,6,1,3,1,3], size=3)
array([ 2,  2, 20, 19, 20,  3,  3,  3,  1,  2,  2])

这也可以应用于多维数组:

>>> uniform_filter(np.random.randint(0, 20, (10, 10)), size=3)  # 3x3 filter
array([[ 6,  7, 10,  9,  9,  7,  5,  7,  9, 12],
       [ 6,  7,  9,  9,  7,  6,  5,  5,  7,  9],
       [ 5,  8,  8,  9,  7,  6,  4,  4,  6,  8],
       [ 9, 10,  9, 10,  8,  6,  4,  4,  8, 11],
       [10, 12,  9, 10,  9, 10,  8,  8,  9, 10],
       [12, 12,  9, 10, 10, 10,  9,  9,  9,  9],
       [12, 11,  9,  8,  7,  8,  7,  8,  6,  5],
       [11, 10,  9,  9,  9,  9,  6,  8,  8,  9],
       [12,  9,  7,  7,  9,  8,  6,  6,  6,  8],
       [12,  9,  8,  9, 12, 10,  7,  5,  6,  9]])
>>> uniform_filter(np.random.randint(0, 20, (10, 10)), size=(5, 3))  # 5x3 filter
array([[ 7,  7,  8, 10, 11, 10, 11, 11, 12, 12],
       [ 7,  7,  7,  9, 10, 11, 11, 10,  9,  9],
       [ 7,  6,  6,  8,  8,  9,  9,  9,  8,  8],
       [ 6,  6,  6,  8,  8,  9,  8,  7,  7,  8],
       [ 8,  8,  7,  9,  8, 11,  8,  8,  6,  6],
       [ 7,  8,  7,  9,  8, 11,  7,  7,  5,  7],
       [ 9,  8,  8,  9,  9,  9,  7,  7,  7,  8],
       [ 8,  8,  8,  9, 10, 10,  8,  7,  6,  6],
       [ 9,  7,  6,  8,  9, 10,  8,  7,  6,  6],
       [ 9,  6,  6,  7, 10,  8,  8,  6,  6,  6]])

相关问题 更多 >