【问题标题】:Questions about matlab median filter commands关于matlab中值滤波命令的问题
【发布时间】:2011-07-01 23:26:09
【问题描述】:

这是一个关于 Matlab/Octave 的问题。 我看到 medfilt1(matlab 中的 1D 中值滤波器命令)计算的一些结果,我对此感到困惑。

编辑:抱歉忘记提及:我正在使用 Octave for Windows 3.2.4。这是我看到这种行为的地方。

请查看下面的问题,如果我遗漏了什么,请指出。

1] 我有一个一维数据数组 b=[ 3 5 -8 6 0];

out=medfilt1(b,3);

我希望输出为 [3 3 5 0 0],但它显示输出为 [4 3 5 0 3]

怎么会?这里有什么问题? FYI-Help 说它将边界处的数据填充 0(零)。

2] medfilt2(matlab中的二维中值滤波命令)是如何工作的。

帮助说“每个输出像素包含输入图像中相应像素周围 m×n 邻域中的中值”。

对于 m=3,n=3,它是否为放置在其中心的每个输入像素计算一个 3x3 矩阵 MAT,并执行 median(median(MAT)) 以计算其在 m×n 中的中值小区?

任何指针都会有所帮助。

谢谢。 -AD

【问题讨论】:

  • 您使用什么 Matlab/Octave 版本?我无法使用 Matlab 7.11.0 (R2010b) 复制您的第一个问题。
  • 抱歉忘了说:我使用的是 Windows 3.2.4 的 Octave。这是我看到这种行为的地方。

标签: matlab filter median


【解决方案1】:

我无法使用 Matlab 7.11.0 复制您的错误,但从您问题中的信息来看,您的 medfilt1 版本似乎无法区分奇数或偶数 n。 p>

在偶数长度的向量中求中位数时,通常取两个中位数的平均值,

median([1 3 4 5]) = (3+4)/2 = 3.5

这似乎就是您的情况。 n 不是将 n 视为奇数,而是将值设置为 3,而是将 n 视为偶数,并且您的第一个输出值被计算为

median([0 3 5]) = (3+5)/2 = 4

等等.. 编辑:这似乎只发生在端点中,这表明用零填充在您的 Octave 代码中无法正常工作。

对于你的第二个问题,你几乎是对的,它在每个中心计算一个 3x3 矩阵,但它不做中位数(中位数(MAT)),而是中位数(MAT(:))。有区别!

A = [1     2     3
     14     5    33
     11     7    13];

median(median(A)) = 11
median(A(:)) = 7

【讨论】:

  • 谢谢。在您在回复中给出的示例中,当我们说 median(A(:)) 时它会做什么?
  • 至于 medfilt1() 中的问题,您似乎是正确的,尽管错误/不正确的中位数计算仅计算输入数组边界样本的中位数。不需要任何边界特殊填充条件的中间样本,看起来很好。
  • 它使矩阵变平,即,将其转换为长度为 9 的单个向量。如果执行 median(median(A)),则首先在行上取中值,然后在其余列上取中值。
  • @goldenmean:是的,你是对的,我只是编辑我的回复来对此发表评论。
  • 感谢中位数(A(:))的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
  • 2013-02-25
  • 2011-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多