2013-03-10 40 views
1

我有一个表格,其中一列的帧编号和另一列的相应颜色刻度。我发现他们使用openCV。 一些框架具有非常高的价值和非常低的休息。我怎样才能提取非常高的峰值帧?仅提取分布中的峰值

这是分布图,我试图使用高斯平滑,然后在下面的图上进行阈值处理。

Plot

我得到这个结果。

Plot1

现在我应该怎么处理?

回答

1

基本上你正在寻找一个峰值查找器... MATLAB有一个峰值查找功能来寻找峰值... 我没有在OpenCV中找到任何现成的API for this,所以我实现了MATLAB的峰值查找器...算法去这种方式...

  1. 初始假设或先验知识可以一),你可以有“否”的分布峰值b)您的峰值是由最小窗口“W”,即不分离两个峰值比'w'更接近。
  2. 我可以电话给你窗口的实现。从数据点开始。将其位置标记为当前索引并检查其左侧和右侧长度“w”是否存在大于当前索引值的值。
  3. 如果是移动到这一点。使目前的指数和重复2.
  4. 如果没有那么它的本地最大值。将ur当前索引移动'w'长度并重复2直到达到数据集结束。

尝试实现这一点,并检查MATLAB帮助的峰峰值。如果没有运气,我可以发布代码..

编辑编辑后看到你编辑的图形看起来图形有明确的最大峰值,因此你可以做的是跟踪图形的dy/dx的符号。最大峰值是dy/dx的符号从正向负变化的点...在代码语言中

vector<double> array_of_max_peak; 
if (sign(x(n+1) - x(n))) > 0 
    array_of_max_peak.push(x(n)); 
+0

几乎所有的峰值查找器都是这种算法的衍生物。 – 2013-03-10 18:36:29

+0

@rotating_image我尝试了一些峰值发现的其他方法。首先,我做了平滑,然后进行阈值处理。我在上面的问题中添加了一个图表。 – 2013-03-28 06:07:55