【问题标题】:Smoothing 2D points (scattered) in real-time (online smoothing)实时平滑 2D 点(分散)(在线平滑)
【发布时间】:2021-09-30 10:30:28
【问题描述】:

我必须处理使用手关键点作为指针(或非接触式鼠标)的任务。

这里的主要问题是(深度学习)手部关键点并不完美(有时在不同的光线、肤色下),因此选择的关键点是分散的,不像我们使用的真实鼠标那样平滑移动。

如何在线(实时)平滑它们。不是给定二维点数组的解决方案,然后我们在这个数组上进行平滑处理。这是新点一一进入的情况,我们必须立即纠正!避免用户遭受鼠标的散射。

我正在使用 opencv 和 python。请善待,因为我是计算机视觉的新手。 谢谢

【问题讨论】:

  • 您想随着时间的推移平滑它们吗?试试卡尔曼滤波器

标签: python opencv computer-vision object-detection


【解决方案1】:

最简单的方法是使用移动平均线。您可以非常高效地计算最后n 步的平均位置,并使用它来“平滑”轨迹:

n = 5  # the average "window size"
counter = 0  # count how many steps so far
avg = 0.  # the average
while True:
  # every time step
  val = get_keypoint_value_for_this_time_step()
  counter += 1
  coeff = 1. / min(counter, n)
  
  # update using moving average
  avg = coeff * val + (1. - coeff) * avg
  
  print(f'Current time step={val} smothed={avg}')

移动平均线的更多变体可以在here找到。

【讨论】:

    【解决方案2】:

    由于您想要类似物理的行为,您可以使用简单的物理模型。请注意,下面的所有数组都描述了当前动态状态的属性,因此具有相同的形状 (1, 2)。

    1. 定义力量 a: 吸引力 = (k - p) * 缩放器

    2. 速度 v:速度 = v + a

    3. 职位 p:当前位置 = p + v k:new dl key point = 无论你的 dl 输出什么

    你输出 p 给用户。请注意,如果您想要更自然的运动,您可以使用缩放器或向 v 添加额外的力(如 a)。 此外,要获得所有点,请将 p 连接到 ps 其中 ps.shape = (n, 2)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-10
      • 1970-01-01
      • 2014-08-17
      • 1970-01-01
      • 2020-11-20
      • 2020-06-16
      相关资源
      最近更新 更多