在MATLAB中找到2d脉冲峰值

smi*_*hak 4 matlab signal-processing image-processing dft

在2d矩阵中找到脉冲峰(dirac delta)的最佳方法是什么.

更具体地说,我想找到给定图像的谐波频率,因此我需要在图像绝对值DFT中找到脉冲峰值.

我想过使用findpeaks,但没有2d版本.我还看到了有关使用imdilate和/或imextendedmax查找普通峰值的早期帖子,但是那些找到了2d矩阵中的所有峰值,而我只对脉冲峰值感兴趣.我相信DSP人有一个共同的配方...

请帮忙,

谢谢

Jon*_*nas 6

你想要做的是找到高对比度的峰.因此,您需要一种方法来识别局部最大值,以及一种测量峰值和周围值之间差异的方法.对这种差异进行阈值处理将为您确定脉冲峰值.

假设您的输入信号被调用 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;
Run Code Online (Sandbox Code Playgroud)

peaks是一个逻辑数组,只要有一个良好的峰值,就会有1.您可以使用它从信号中读取峰值高度signal(peaks),并使用找到坐标find(peaks).