【问题标题】:Scipy ndimage median_filter originScipy ndimage median_filter 原点
【发布时间】:2016-02-08 04:20:40
【问题描述】:

我有一个二进制数组,比如a = np.random.binomial(n=1, p=1/2, size=(9, 9))。我使用3 x 3 内核对其执行中值过滤,例如b = nd.median_filter(a, 3)。我希望这应该基于像素及其八个邻居执行中值滤波。但是,我不确定内核的位置。 documentation 说,

origin : 标量,可选。

The origin parameter controls the placement of the filter. Default 0.0.

如果默认值为零,它应该将当前像素和3 x 3 网格移到右侧和底部,不是吗?默认不应该是footprint 的中心吗?在我们的3 x 3 示例中,哪个对应于(1, 1) 而不是(0, 0)

谢谢。

【问题讨论】:

    标签: python numpy scipy median ndimage


    【解决方案1】:

    origin 说它只接受一个标量,但对我来说它也接受类似数组的输入,scipy.ndimage.filters.convolve 函数也是如此。传递 0 确实是足迹的中心。 Origin 的值是相对于中心的。对于 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.]]
    

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 2015-05-10
      • 2015-11-11
      • 2015-03-14
      • 1970-01-01
      • 2017-02-18
      • 1970-01-01
      • 2014-09-17
      • 2019-11-07
      相关资源
      最近更新 更多