我有一个二进制数组,例如a = np.random.binomial(n=1, p=1/2, size=(9, 9))
。我使用3 x 3
内核对其执行中值过滤,例如b = nd.median_filter(a, 3)
。我希望这应该基于像素及其八个邻居执行中值滤波。但是,我不确定内核的位置。该文件说,
origin:标量,可选。
The origin parameter controls the placement of the filter. Default 0.0.
如果默认值为零,则应该将当前像素和3 x 3
网格置于右侧和底部,不是吗?默认值不应该位于的中心footprint
吗?在我们的3 x 3
示例中,哪一个(1, 1)
与相对应(0, 0)
?
谢谢。
origin说它只接受一个标量,但对我来说,它也接受类似数组的输入,对于scipy.ndimage.filters.convolve函数也是如此。传递0确实是足迹的中心。原点的值是相对于中心的。对于3x3的封装,您可以指定-1.0到1.0的值。这里有些例子。请注意,在示例中未指定origin的情况下,过滤器居中对齐。
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.]]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句