【问题标题】:Efficiently finding the slope of a line有效地找到一条线的斜率
【发布时间】:2018-11-29 00:39:18
【问题描述】:

我有一系列(x,y) 数据点:可能是视频中某个对象的位置,或者是用户手指在触摸屏上的位置。我需要确定这个对象/触摸/等是否在近似直线上移动,以及哪个方向(角度、坡度或任何其他表示有效)。

我的第一个想法是根据t(样本的索引)对x 进行线性回归,并根据ty 进行另一个线性回归,以获得斜率,然后使用相关系数以确定数据的线性程度。但这需要在嵌入式硬件上连续运行,而且这些计算相当昂贵。

鉴于t 轴几乎无关紧要,我有什么捷径可以走吗?例如,根据xy 进行线性回归会更有效,但它会遇到垂直线和接近垂直线的问题。

【问题讨论】:

    标签: algorithm pattern-matching linear-regression gesture


    【解决方案1】:

    对于廉价测试,我的第一个想法是计算每对连续点之间的线段的角度(相对于 X 轴),如果它们的差异超过允许的误差,则称其为非​​直线.

    这将使平缓的曲线通过测试,因此最好将新斜率与旧斜率的低通滤波版本进行比较。

    【讨论】:

    • 好主意!泰!
    • 或者也许取所有对的平均角度,然后将每个角度与该平均值进行比较?效率低于您的建议,但仍优于多重回归和 Pearson 计算
    • 平均数可以奏效。如果你保持一个运行的总数和计数,它并不昂贵。数字低通滤波器的一个优点是您可以对其进行调整,以或多或少地赋予早期点的权重 - 您可以调整“必须与我们开始的方向相同”与“必须局部笔直”。
    【解决方案2】:

    求起点和终点之间的直线方程。现在计算从每个点到这条线的垂直距离。如果每个的垂直距离在公差值内,则可以将其视为直线。

    【讨论】:

      猜你喜欢
      • 2013-02-13
      • 2018-12-13
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      • 2020-05-05
      • 1970-01-01
      • 2014-08-26
      相关资源
      最近更新 更多