这是关于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答案 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