寻找峰值MATLAB

fft*_*tyy 3 matlab signal-processing image-processing

我有一个向量,其中包含图像的一行中的像素灰度级。vec=IM(:,65); 我展示了我想要检测的阵列部分。这些部分将是我的对象的像素。

如何检测这些对象像素?

vec 的情节: 在此处输入图片说明 向量在这里: vec

ray*_*ica 6

这可以通过findpeaks信号处理工具箱轻松解决。具体来说,对于您的数据,我不得不这样称呼它:

[pks, locs] = findpeaks(max(vec)-vec, 'minpeakdistance', 160, 'minpeakheight', 22);
Run Code Online (Sandbox Code Playgroud)

findpeaks只找到正峰值(局部最大值)。因此,我们需要做的是将其反转,以便所有局部最小值成为局部最大值。我通过取向量的最大值并用向量减去来做到这一点。因为有很多局部峰,该minpeakdistance字段允许您找到至少在每个峰之间相隔这么多的峰。我将其调整为 160。此外,最小峰高找到大于某个数字的峰值,我将其调整为 22。 pks找到实际峰值并locs为您提供信号中峰值的位置。我们需要使用locs来查找实际峰值数据,因为我们在信号的镜像反射版本上执行了此操作。因此,要获取实际峰值数据,请执行以下操作:

pks_final = vecs(loc);
Run Code Online (Sandbox Code Playgroud)

作为演示,让我们绘制此信号以及由 定位的峰值findpeaks

plot(1:numel(vec), vec, locs, vec(locs), 'r.');
Run Code Online (Sandbox Code Playgroud)

原始数据以蓝色绘制,而检测到的峰值以红色绘制。这就是我得到的:

在此处输入图片说明


祝你好运!