1

我有一个表,其中一列中有帧号,另一列中有相应的颜色时刻。我发现他们使用openCV。一些帧的值非常高,而其余帧的值非常低。如何提取具有非常高峰值的帧?

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

阴谋

我得到了这个结果。

情节1

现在我应该如何进行?

4

1 回答 1

1

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

  1. 初始假设或先验知识可以是a)您的分布中可以有“n”个峰b)您的峰被最小窗口“w”隔开,即没有两个峰比“w”更近。
  2. 我可以告诉你窗口的实现。从一个数据点开始。将其位置标记为当前索引,并检查其长度为'w'的左右邻域是否存在大于当前索引值的值。
  3. 如果是,请进入正题。将该点设为当前索引并重复 2。
  4. 如果不是,那么它是您的局部最大值。将您当前的索引移动 '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));
于 2013-03-10T12:50:41.283 回答