【发布时间】:2014-08-21 21:31:47
【问题描述】:
我正在使用 matlab 来模拟我编写的一些 c 代码,以便我可以复制结果并将其绘制在 matlab 中。
在 c 中,我使用链接 here 的开源滑动中值滤波器。
我目前在matlab中使用medfilt1进行模拟,但是有两个问题。
很慢!在matlab中有一个类似的过滤器是理想的,但我不想花时间写一个。如果不存在,我希望至少能够完成#2。
-
medfilt1 不回绕。
x = 1:5; medfilt1(x,3) % = 1 2 3 4 4
它计算第一个值,如
median([0 1 2]) % = 1
这是因为当您靠近边缘时 medfilt1 使用零填充。我想要一种方法来改变它,以便像计算第一个值一样
median([5 1 2]) % = 2
medfiltcirc(x,3) % = 2 2 3 4 4
更新:为了好玩,我在 matlab 中编写了一个滑动过滤器,结果证明它比使用带有 padarray 的 medfilt1 慢 4 倍。使用ordfilt2(padarray(x,[N/2 0],'circular'),N/2,ones(N,1)) 被证明比medfilt1 还要快。我相信进一步提高速度的唯一方法是编写一个 mex 文件。
【问题讨论】: