Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB中寻找二维脉冲峰_Matlab_Image Processing_Signal Processing_Dft - Fatal编程技术网

在MATLAB中寻找二维脉冲峰

在MATLAB中寻找二维脉冲峰,matlab,image-processing,signal-processing,dft,Matlab,Image Processing,Signal Processing,Dft,在2d矩阵中寻找脉冲峰(dirac delta)的最佳方法是什么 更具体地说,我想找到给定图像的谐波频率,所以我需要找到图像绝对值DFT中的脉冲峰值 我想用FindPeak,但没有2d版本。我还看到了以前关于使用imdeflate和/或imextendedmax查找普通峰值的帖子,但是那些帖子找到了2d矩阵中的所有峰值,而我只对脉冲峰值感兴趣。我相信DSP的人对此有一个共同的食谱 请帮忙 谢谢算法非常简单;如果一个元素比它的两个相邻元素都大,那么它就是一个峰值。编写2D版本应该非常简单。您要做的

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

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

我想用FindPeak,但没有2d版本。我还看到了以前关于使用imdeflate和/或imextendedmax查找普通峰值的帖子,但是那些帖子找到了2d矩阵中的所有峰值,而我只对脉冲峰值感兴趣。我相信DSP的人对此有一个共同的食谱

请帮忙


谢谢

算法非常简单;如果一个元素比它的两个相邻元素都大,那么它就是一个峰值。编写2D版本应该非常简单。

您要做的是找到具有高对比度的峰值。因此,您需要一种识别局部最大值的方法,以及一种测量峰值和周围值之间差异的方法。对这种差异设定阈值将为您确定脉冲峰值

假设您的输入信号被称为
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。您可以使用它从带有
信号(峰值)
的信号中读取峰值高度,并使用
查找(峰值)
查找坐标包含用于二维快速局部峰值检测的Matlab源代码。它的工作原理类似于Mathworks图像处理工具箱中的
imregionalmax()
,但允许您指定局部邻域半径:较大半径->稀疏峰值


由于需要稀疏脉冲,
nonmaxsupp\u scanline()
函数可能适合您。

我正在寻找傅里叶变换绝对值在该频率(无穷大)处取狄拉克δ函数值的频率。显然,对于DFT,你不期望看到无穷大,而是一个主峰。问题是如何在2d中找到这些峰值,以及如何将它们与正常(较低,非脉冲)峰值区分开来。。。但我如何选择阈值呢?我认为这应该取决于输入信号。有没有一个好的方法/经验法则来选择它?它们是狄拉克峰,所以阈值是无限的:P。开玩笑的是,没有一个最佳的方法来选择阈值。如果有两个清晰的峰值,一个用于信号,一个用于噪声,您可以尝试在
signal dilSignal
上运行
graystresh
。您还可以将阈值设置为信号的3个稳健标准偏差(中值绝对偏差)。如果所有数据都非常一致,并且峰值的高度具有易于识别的含义,那么您甚至可以确定一个固定值。。。我会同意的。