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