【问题标题】:Detect the two highest Peaks from Histogram从直方图中检测两个最高峰
【发布时间】:2012-05-05 09:35:44
【问题描述】:

我试图了解如何从直方图中检测两个峰值。可以有多个,但我需要选择最高的两个。基本上我需要做的是,虽然我会让这些峰值向左或向右移动,但我需要抓住它们。它们的分布可能会有所不同,并且它们的 PEAK 值可能会发生变化,因此我必须在 Matlab 中找到一种方法来获取这两个峰值。

到目前为止,我所做的是创建一个 5 值窗口。该窗口由直方图中的值填充并执行扫描。每次我向前移动 5 步到下一个值并将前一个窗口值与当前值进行比较。以较大者为准。

有更好的方法吗?

【问题讨论】:

  • 我认为你不能在这个问题中将信号处理与编程分开。如果有人提出基于统计的答案,那会是什么?信号处理还是编程?

标签: image-processing matlab histogram


【解决方案1】:

将数据从 hist(或 histc)函数返回到变量 (y = hist(x,bin);) 并使用 PEAKFINDER FileExchange 提交来查找局部最大值。

我还使用了 Eli Billauer 的 PEAKDET 函数。效果很好。您可以在这里查看我的answer 代码示例。

【讨论】:

  • 我建议在运行峰值查找器之前执行内核密度估计。文件交换页面上的示例图显示了几个误报。另外,为什么其他问题首先迁移到 dsp ? o_O
  • @Bringbackspy:是的,您可以使用ksdensity 函数代替hist。至于问题迁移到dsp,我不知道。当我正在研究答案时,一些版主的决定感动了它。
  • 哇,太好了!谢谢看起来很有希望,所以我要偷看一下:)
【解决方案2】:

最简单的方法是首先使用高斯核对数据进行平滑处理,以消除高频变化。

然后使用函数localmax 求局部最大值。

【讨论】:

  • +1 如果你知道你的直方图“天生”是双峰的,那么我会对其进行平滑处理,直到它只有两个最大值。
  • @slayton,直方图已经通过了平滑阶段。
  • @Wajih,好的,但是如果您只想隔离峰值,则可以对其进行更多平滑以滤除高频变化。这些变化使峰值检测变得困难,因为您有很多局部最大值。如果您将它们过滤掉,那是因为非常琐碎。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多