登录论坛

查看完整版本 : 在MATLAB中查找2d脉冲峰


poster
2019-12-10, 20:48
在二维矩阵中寻找脉冲峰值(狄拉克三角洲)的最佳方法是什么。

更具体地说,我想找到给定图像的谐波频率,因此需要在图像绝对值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, ie 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)查找坐标。



更多&回答... (https://stackoverflow.com/questions/4240931)