matlab - 重写 medfilt1 MATLAB 函数以支持 codegen
问题描述
我正在编写一个使用 medfilt1 函数的 MATLAB 脚本。下面是一个使用 100 阶的示例:
median_filter_results = medfilt1(my_data, 100);
尝试通过 codegen 导出 MATLAB 代码时,一条错误消息指出不支持 medfilt1。查看MATLAB 文档网站,我可以看出它不存在,而 medfilt2 存在。这使我认为该功能可能很容易重现。
阅读这篇文章时,作者发表了以下评论:
您可以使用 median() 函数。然后你只需要把它放在一个 for 循环中,这是非常微不足道的。
但是,我不完全确定我知道这意味着什么,因为中值函数返回一个数字而不是 medfilt1 函数的向量。维基百科走得更远,他们展示了一个滑动窗口,人们可以通过它使用中值函数。但是,我不太确定这就是 MATLAB 正在做的事情。
如何以代码生成安全的方式重写 medfilt1 函数(数据向量和 100 的顺序)?
解决方案
如果支持 2d 过滤器,您可以重新调整它的用途。
x=rand(100,1);
y1=medfilt1(x,11);
y2=medfilt2(x,[11,1]);
all(y1==y2)
否则,请阅读中值滤波器的作用。它将元素替换为它的中位数及其周围的邻居。邻域的大小是您的参数 n。
推荐阅读
- r - 反应值不适用于嵌套的 tabsetPanel
- c++ - C(++):用宏而不是它的调用替换函数声明
- flutter - 我在颤动中遇到一些错误
- php - ReflectionNamedType - 如何可靠地获取对应的 ReflectionClass?
- java - 如何停止以 gradlew html:superDev 开始的 libGDX 游戏
- python - 我需要将字典作为函数的参数,然后将其反转。困难的部分是我的字典有列表作为值
- c# - 确定是否使用 Roslyn 读取私有字段
- webview2 - Webview 2,如何检查网站的特定输入框
- django - 从我的用户的扩展模型中获取单个字符串属性
- python - 使用 openssl 加密文件的问题