首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >median_filter起源

median_filter起源
EN

Stack Overflow用户
提问于 2016-02-08 04:20:40
回答 1查看 4.6K关注 0票数 4

我有一个二进制数组,比如说,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)

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-08 06:40:23

origin说它只接受标量,但对我来说,它也接受类似数组的输入,就像scipy.ndimage.filters.convolve函数的情况一样。传递0确实是内存占用的中心。原产地的价值相对于中心。对于3x3占用空间,您可以指定值-1.0到1.0。这里有一些例子。注意,在原点未指定的示例中,筛选器按预期居中。

代码语言:javascript
复制
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)

输出:

输入阵列:

代码语言:javascript
复制
[[ 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.]]

集中产出:

代码语言:javascript
复制
[[ 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.]]

转到正确的产出:

代码语言:javascript
复制
[[ 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.]]

移至左输出:

代码语言:javascript
复制
[[ 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.]]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35262294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档