fft*_*tyy 3 matlab signal-processing image-processing
我有一个向量,其中包含图像的一行中的像素灰度级。vec=IM(:,65);
我展示了我想要检测的阵列部分。这些部分将是我的对象的像素。
如何检测这些对象像素?
vec 的情节:
向量在这里:
vec
这可以通过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)
原始数据以蓝色绘制,而检测到的峰值以红色绘制。这就是我得到的:
祝你好运!