smi*_*hak 4 matlab signal-processing image-processing dft
在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;
Run Code Online (Sandbox Code Playgroud)
peaks是一个逻辑数组,只要有一个良好的峰值,就会有1.您可以使用它从信号中读取峰值高度signal(peaks),并使用找到坐标find(peaks).