首页 > 解决方案 > 实时平滑 2D 点(分散)(在线平滑)

问题描述

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

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

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

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

标签: pythonopencvcomputer-visionobject-detection

解决方案


最简单的方法是使用移动平均线。您可以非常有效地计算最后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}')

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


推荐阅读