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

如何检测这些对象像素?

vec 的情节:

向量在这里:
vec

最佳答案

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

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

作为演示,让我们绘制此信号以及 findpeaks 定位的峰值:
plot(1:numel(vec), vec, locs, vec(locs), 'r.');

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



祝你好运!

关于matlab - 寻找峰值MATLAB,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27432883/

10-12 16:05