Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 在Matlab中用噪声数据找到近似的局部最大值

matlab常见问题解答介绍了一种用于查找局部最大值的单线方法:

index = find( diff( sign( diff([0; x(:); 0]) ) ) < 0 ); 但是我相信这仅在数据或多或少平滑的情况下才有效。假设您的数据以较小的间隔上下跳跃,但仍然具有一些近似的局部最大值。您将如何找到这些要点?您可以将向量划分为n个片段,并找到不在每个边缘上的最大值,但应该有一个更优雅,更快速的解决方案。

一站式解决方案也将很棒。

编辑:我正在处理嘈杂的生物图像,试图将其分成不同的部分。


回答:
根据您的需求,过滤嘈杂的数据通常会很有帮助。看一下MEDFILT1 ,或将CONVFSPECIAL一起使用。在后一种方法中,您可能要对CONV使用'same'参数,并使用FSPECIAL创建的'gaussian'过滤器。

过滤完成后,将其送入最大值查找器。

编辑: 运行时复杂度

假设输入向量的长度为X,过滤器内核的长度为K。

中值过滤器可以通过运行插入排序来工作,因此它应该为O(X K + K log K)。我没有看过源代码,其他实现也是可行的,但基本上应该是O(X K)。

当K较小时,conv使用简单的O(X * K)算法。当X和K几乎相同时,使用快速傅立叶变换会更快。该实现为O(X log X + K log K)。 Matlab非常聪明,可以根据输入大小自动选择合适的算法。



更多&回答...
poster 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 23:49


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.