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

JEq*_*hua 17 python filtering image-processing scipy

我无法准确理解反射模式如何处理我的数组.我有这个非常简单的数组:

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)
Run Code Online (Sandbox Code Playgroud)

[[1. 1. 1. 1. 1.] [2. 2. 2. 2. 2.] [4. 4. 4. 4. 4.] [5. 5. 5. 5. 5.]]

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

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

print(filtered)
Run Code Online (Sandbox Code Playgroud)

[[1.33333333 1.33333333 1.33333333 1.33333333 1.33333333] [2.33333333 2.33333333 2.33333333 2.33333333 2.33333333] [3.66666667 3.66666667 3.66666667 3.66666667 3.66666667] [4.66666667 4.66666667 4.66666667 4.66666667 4.66666667]]

如果我尝试手动复制练习,我可以得到这个结果.原始矩阵为绿色,窗口为橙色,结果为黄色.白色是"反映"的观察结果.

在此输入图像描述

结果是:

在此输入图像描述

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

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

print(filtered)
Run Code Online (Sandbox Code Playgroud)

[[1.5 1.5 1.5 1.5 1.5] [2. 2. 2. 2. 2.] [3. 3. 3. 3. 3.] [4. 4. 4. 4. 4.]]

手工完成:

在此输入图像描述

我得到:

在此输入图像描述

如果窗口大小均匀,窗口如何处理?但无论如何,如果我尝试复制大小为5的窗口的结果,模式反映我也不能.即使我认为这种行为类似于3号的行为.

War*_*ser 45

假设一个轴上的数据是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
Run Code Online (Sandbox Code Playgroud)

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

  • 我在这里找到该文档:http://docs.scipy.org/doc/scipy/reference/tutorial/ndimage.html (2认同)