在Matlab中查找3D(冲浪)图表中的Findpeaks

时间:2018-04-29 23:36:42

标签: matlab

我需要在3D冲浪图中找到几个(~5)峰值;尝试过imregionalmax,但它给了我太多的最大值,我无法找到控制它的方法。

我想我需要找到的实际峰值在我的z数组中(x by y),但findpeaks仅适用于矢量数组。还有其他选择吗?我已经阅读了有关函数挤压的内容 - 但并不完全确定如何使用它。

链接是图表的一个例子,数据点是我需要知道的峰值的例子。

enter image description here

如果有人能够对此有所了解,那就太棒了,谢谢!

我用于imregionalmax的MCVE是

Z = peaks;
y = linspace(1,100,49);
x = linspace(10,20,49);

[X, Y] = meshgrid(x,y);

figure
surf(X, Y, Z,'EdgeColor','none','FaceColor','interp');
maxZ = imregionalmax(Z);
plot3(X(maxZ),Y(maxZ),Z(maxZ),'r*','MarkerSize',12)

1 个答案:

答案 0 :(得分:0)

我不熟悉确定性方法来实现这一目标,但如果找不到任何快速解决方案,可以使用 metaheuristics 来确定曲面的局部最大值。

有多种算法,包括:

  • 遗传算法
  • 粒子群优化(PSO)
  • 蜜蜂算法
  • ...

我认为最近在MATLAB中实现了PSO,请查看:https://es.mathworks.com/help/gads/particleswarm.html