在MATLAB中找到2D冲动峰
-
27-09-2019 - |
题
在2D矩阵中查找脉冲峰(Dirac Delta)的最佳方法是什么?
更具体地说,我想找到给定图像的谐波频率,因此我需要在图像绝对值DFT中找到冲动峰。
我想到使用Findpeaks,但没有2D版本。我还看到了有关使用Imdilate和/或ImextendedMax找到普通峰的较早文章,但是这些峰在2D矩阵中找到了所有峰,而我只对脉冲峰感兴趣。我确定DSP的人有一个常见的食谱...
请帮忙,
谢谢
解决方案
您想做的是找到具有高对比度的峰值。因此,您需要一种识别本地最大值的方法,以及一种测量峰值和周围值之间的差异的方法。在此差异上的阈值将为您确定冲动峰值。
假设您的输入信号被调用 signal
%# dilate to find, for every pixel, the maximum of its neighbors
dilationMask = ones(3);
dilationMask(5) = 0;
dilSignal = imdilate(signal, dilationMask);
%# find all peaks
%# peaks = signal > dilSignal;
%# find large peaks peaks by thresholding, i.e. you accept a peak only
%# if it's more than 'threshold' higher than its neighbors
peaks = (signal - dilSignal) > threshold;
peaks
是一个逻辑上的阵列,在任何地方都有1个。您可以使用它来读取信号的峰值高度 signal(peaks)
, ,并使用 find(peaks)
.
不隶属于 StackOverflow