关于matlab中值滤波器命令的问题

时间:2011-02-22 12:30:44

标签: matlab filter median

这是关于Matlab / Octave的问题。 我看到medfilt1(matlab中的1D Median过滤器命令)计算的一些结果,我很困惑。

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

请查看以下问题,并指出我是否遗漏了某些内容。

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

出= medfilt1(B,3);

我预计输出为[3 3 5 0 0],但显示输出为[4 3 5 0 3]

为什么?这有什么不对? FYI-Help表示它将边界处的数据填充0(零)。

2] medfilt2(matlab中的2D中值滤波器命令)如何工作。

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

对于m = 3,n = 3,所以它为每个放置在其中心的输入像素计算3x3矩阵MAT并做中位数(中位数(MAT))以计算m-by-n中的中值附近?

任何指针都会有所帮助。

谢谢你。 -AD

1 个答案:

答案 0 :(得分: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