0

这是一个关于 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 邻域中的中值?

任何指针都会有所帮助。

谢谢你。-广告

4

1 回答 1

2

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

当在偶数长度的向量中找到中值时,通常取两个中值的平均值,

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

这似乎就是你的情况。不是将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
于 2011-02-22T13:08:22.410 回答