scipys ndimage过滤器的“反射”模式究竟是如何工作的?

2024-04-18 22:16:29 发布

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

我不明白反射模式是如何处理我的数组的。我有一个非常简单的数组:

import numpy as np
from scipy.ndimage.filters import uniform_filter
from scipy.ndimage.filters import median_filter

vector = np.array([[1.0,1.0,1.0,1.0,1.0],[2.0,2.0,2.0,2.0,2.0],[4.0,4.0,4.0,4.0,4.0],[5.0,5.0,5.0,5.0,5.0]])

print(vector)

[[1。一。一。一。1.] 〔2〕。2。2。2。2.] 〔4〕。四。四。四。4.] 〔5〕。5个。5个。5个。5.]]

应用窗口大小为3的均匀(平均)滤波器,得到以下结果:

filtered = uniform_filter(vector, 3, mode='reflect')

print(filtered)

[1.33333333 1.33333333 1.33333333 1.33333333 1.33333333 1.33333333] [2.33333333 2.33333333 2.33333333 2.33333333 2.33333333 2.33333333] [3.66666667 3.666667 3.66666667 3.66666667 3.66666667 3.66666 7] [4.66666667 4.666667 4.666667 4.66666667 4.66666667 4.66666 7]]

如果我试着用手重复这个练习,我就能得到这个结果。原始矩阵为绿色,窗口为橙色,结果为黄色。白色是“反射”观察。

enter image description here

结果是:

enter image description here

但当我尝试4或5的窗口大小时,我无法复制结果。

filtered = uniform_filter(vector, 4, mode='reflect')

print(filtered)

[1.5 1.5 1.5 1.5 1.5 1.5] 〔2〕。2。2。2。2。] 〔3〕。三。三。三。三。] 〔4〕。四。四。四。四。]]

手工操作:

enter image description here

我得到:

enter image description here

如果窗户大小均匀,怎么处理?但无论如何,如果我试图复制一个大小为5的窗口和模式反射的结果,我也不能。即使我认为这种行为类似于3号。


Tags: fromimportmodenp模式uniformscipy数组
1条回答
网友
1楼 · 发布于 2024-04-18 22:16:29

假设一个轴中的数据是1 2 3 4 5 6 7 8。下表显示了如何为每个模式扩展数据(假设cval=0):

    mode       |   Ext   |         Input          |   Ext
    -----------+---------+------------------------+---------
    'mirror'   | 4  3  2 | 1  2  3  4  5  6  7  8 | 7  6  5
    'reflect'  | 3  2  1 | 1  2  3  4  5  6  7  8 | 8  7  6
    'nearest'  | 1  1  1 | 1  2  3  4  5  6  7  8 | 8  8  8
    'constant' | 0  0  0 | 1  2  3  4  5  6  7  8 | 0  0  0
    'wrap'     | 6  7  8 | 1  2  3  4  5  6  7  8 | 1  2  3

对于均匀大小的窗口n,请考虑大小为n+1的窗口,然后不要包括下边缘和右边缘。(可以使用origin参数更改窗口的位置。)

相关问题 更多 >