我有一个二进制数组,比如说,a = np.random.binomial(n=1, p=1/2, size=(9, 9))。我使用3 x 3内核对其执行中值过滤,比如b = nd.median_filter(a, 3)。我预计这将执行基于像素及其八个邻域的中值滤波。但是,我不确定内核的位置。文档说,
来源:标量,可选。 原点参数控制过滤器的位置。默认0.0。
如果默认值为零,则应该将当前像素和3 x 3网格置于右侧和底部,不是吗?默认值不应该是footprint的中心吗?在我们的3 x 3示例中,哪个对应于(1, 1)而不是(0, 0)?
谢谢。
发布于 2016-02-08 06:40:23
origin说它只接受标量,但对我来说,它也接受类似数组的输入,就像scipy.ndimage.filters.convolve函数的情况一样。传递0确实是内存占用的中心。原产地的价值相对于中心。对于3x3占用空间,您可以指定值-1.0到1.0。这里有一些例子。注意,在原点未指定的示例中,筛选器按预期居中。
import numpy as np
import scipy.ndimage
a= np.zeros((5, 5))
a[1:4, 1:4] = np.arange(3*3).reshape((3, 3))
default_out = scipy.ndimage.median_filter(a, size=(3, 3))
shift_pos_x = scipy.ndimage.median_filter(a, size=(3, 3), origin=(0, 1))
shift_neg_x = scipy.ndimage.median_filter(a, size=(3, 3), origin=(0, -1))
print(a)
print(default_out)
print(shift_pos_x)
print(shift_neg_x)输出:
输入阵列:
[[ 0. 0. 0. 0. 0.]
[ 0. 0. 1. 2. 0.]
[ 0. 3. 4. 5. 0.]
[ 0. 6. 7. 8. 0.]
[ 0. 0. 0. 0. 0.]]集中产出:
[[ 0. 0. 0. 0. 0.]
[ 0. 0. 1. 0. 0.]
[ 0. 1. 4. 2. 0.]
[ 0. 0. 4. 0. 0.]
[ 0. 0. 0. 0. 0.]]转到正确的产出:
[[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 1. 0.]
[ 0. 0. 1. 4. 2.]
[ 0. 0. 0. 4. 0.]
[ 0. 0. 0. 0. 0.]]移至左输出:
[[ 0. 0. 0. 0. 0.]
[ 0. 1. 0. 0. 0.]
[ 1. 4. 2. 0. 0.]
[ 0. 4. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]]https://stackoverflow.com/questions/35262294
复制相似问题