【问题标题】:Reducing a graph's datapoints while maintaining its main features减少图的数据点,同时保持其主要特征
【发布时间】:2021-02-20 12:58:52
【问题描述】:

我有大量数据,需要在图表上反复显示。

图表的宽度为 1400 像素。数据包含超过 30,000 个数据点。 因此,我想将数据点减少到大约 1400 个左右,同时仍保持图形的主要特征(最大值、最小值等)。

如果您查看 LabVIEW 和 MATLAB 等程序,它们能够通过压缩数据来显示包含大量数据点的图形,而不会丢失图形的主要功能。 我无法使用简单的抽取、平均或移动平均,因为这不会保持图表的特征。

有谁知道这些程序正在使用任何算法,或者会给我预期的结果吗? 我也对性能算法感兴趣。

【问题讨论】:

  • 我猜他们会进行某种形式的重采样。例如,如果您将图形的宽度减半(但高度保持不变),那么您将使用等于奈奎斯特速率一半的截止频率进行低通滤波器,然后以 2 倍抽取。在 MATLAB 中,您可以使用 @ 987654321@ 这样做。理想情况下,您应该应用 2D 过滤器来调整 2D 大小,但这在计算上可能会很慢。在这种情况下,您可能需要进行硬抽取,然后进行适当的重新采样。
  • 我怀疑双线性插值等典型的快速图像调整技术不适合,因为这仅考虑了计算每个输出像素的 2x2 邻域。 (因此您会从图表中丢失很多细节)。

标签: algorithm matlab graph compression labview


【解决方案1】:

LabVIEW使用max-min decimation algorithm

从参考资料中可以看出,一系列数据点被压缩为最大值和最小值,然后将两个点绘制在相同的 x 轴值上,并填充两个点之间的垂直像素。

如果您无法控制绘图的每个像素的渲染方式,那么您可以尝试实现类似的方法,例如取八个点,找到最大值和最小值,然后将它们传递给绘图函数/工具(考虑到它们在系列中出现的顺序)- 给你一个四倍的抽取因子。

【讨论】:

    【解决方案2】:

    我已经将 LabVIEW 中的Ramer–Douglas–Peucker algorithm 用于一个有多个图表不断更新的项目,效果很好!

    此算法没有目标点数作为输出,但您可以调整超参数以满足您所需的输出大小。

    我没有我的实现与你分享,但算法非常简单,可以很容易地用 LabVIEW 或其他语言实现。在 LabVIEW 中,您可以将其放在 xControl 的定义中,以便从代码中抽象出来并多次使用它。

    【讨论】:

      猜你喜欢
      • 2016-05-17
      • 1970-01-01
      • 2017-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      相关资源
      最近更新 更多