【问题标题】:The concept behind scipy.signal.medfilt2d in pythonpython中scipy.signal.medfilt2d背后的概念
【发布时间】:2011-05-22 22:57:07
【问题描述】:

我正在尝试了解 scipy.signal.medfilt2d 的工作原理。我看了scipy文档后,它的格式是:

scipy.signal.medfilt2d(input, kernel_size=3)

如果我有一个像这样的矩阵

1 2 3 7 2 4
3 4 2 2 6 7
1 7 3 1 2 6
3 2 3 4 3 1
2 6 7 8 2 5
3 4 2 2 1 8

由于内核大小默认设置为 3。如果我将 medfilt2d 应用于该矩阵,该矩阵会变成如下所示的吗? (我所做的是将 3 x 3 盒子内的每个元素,将它们全部相加并除以 9(平均))

2.8   2.8   2.8   4.1   4.1  4.1
2.8   2.8   2.8   4.1   4.1  4.1
2.8   2.8   2.8   4.1   4.1  4.1
3.5   3.5   3.5   3.7   3.7  3.7
3.5   3.5   3.5   3.7   3.7  3.7
3.5   3.5   3.5   3.7   3.7  3.7

所以请与我分享您的知识和见解?如果我错了,请告诉我,这样我就可以从这个错误中吸取教训。非常感谢

【问题讨论】:

    标签: python matrix numpy scipy


    【解决方案1】:

    正如Scipy documentation 中所解释的,medfilt2 是一个中值滤波器。引用文档,

    The sample median is the middle array value in a sorted list of neighborhood values
    

    因此,对于您的示例,1,1 位置的子矩阵

    1 2 3
    3 4 2
    1 7 3
    

    将被分类为

    1 1 2 2 3 3 3 4 7
    

    中间元素是3,所以这将是过滤器的输出。还有更多细节on Wikipedia

    【讨论】:

    • 所以你的意思是我的第二个矩阵的前四分之一应该用“3”而不是“2.8”填充?
    • 不,第二个矩阵中的每个元素都可以有不同的结果。对于元素0,0,输入子矩阵将是[[0,0,0],[0,1,2],[0,3,4]](在内部,子程序用0 填充您的矩阵以填充缺失的元素)。那么排序后的列表是[0,0,0,0,0,1,2,3,4],中间元素是0。对于元素0,1,子矩阵是[[0,0,0],[1,2,3],[3,4,2]] -> [0,0,0,1,2,2,3,3,4] -> 2 等等。
    • 哦,我完全明白你现在在说什么。我有一个问题:我需要一种可以提高图像分辨率并降低图像分辨率的方法吗?如果应用 medfilt2d 是为了降低分辨率,是否还有其他过滤器可以提高分辨率?非常感谢
    • 据我所知,中值滤波器用于去除噪声,而不是改变分辨率。您可能想研究重采样过滤器。
    猜你喜欢
    • 2012-02-24
    • 2012-10-24
    • 2012-09-25
    • 2012-04-17
    • 2014-05-29
    • 1970-01-01
    • 2021-11-24
    • 2016-11-29
    • 1970-01-01
    相关资源
    最近更新 更多