Findpeaks в 3D (Surf) сюжете в Matlab - PullRequest
0 голосов
/ 30 апреля 2018

Мне нужно найти несколько (~ 5) пиков на 3D-графике для серфинга; попробовал imregionalmax, но он дает мне слишком много максимумов, и я не могу найти способ его контролировать.

Я предполагаю, что фактические пики, которые мне нужно найти, находятся в моем массиве z, который (x по y), но findpeaks работает только для векторного массива. Есть ли альтернатива? Я прочитал кое-что о функции squeeze, но не совсем уверен, как ее использовать.

Ссылка представляет собой пример графика, а точки данных - примеры пиков, которые мне нужно знать.

enter image description here

Если бы кто-нибудь мог пролить свет на это, было бы здорово, спасибо!

MCVE, который я использовал для imregionalmax, равен

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 голосов
/ 30 апреля 2018

Я не знаком с детерминированными методами для достижения этой цели, но если вы не найдете быстрого решения, вы можете использовать метаэвристика для определения локальных максимумов поверхности.

Существует широкий спектр алгоритмов, в том числе:

  • Генетические алгоритмы
  • Оптимизация роя частиц (PSO)
  • Алгоритм пчел
  • ...

Я думаю, что в MATLAB недавно была реализована PSO, посмотрите: https://es.mathworks.com/help/gads/particleswarm.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...