实时平滑二维点(分散)(在线平滑)

2024-06-06 04:41:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须使用手上的关键点作为指针(或非接触鼠标)

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

如何在线(实时)平滑它们。不是给定二维点阵列的解,然后我们在这个阵列上平滑。这是一个新的点一个接一个的情况,我们必须立即纠正它们!避免用户遭受鼠标的散射

我正在使用opencv和python。因为我是计算机视觉新手,所以请友善一点。 谢谢


Tags: 用户计算机情况视觉鼠标opencv关键点光线
2条回答

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

  1. 定义力 吸引力=(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)

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

相关问题 更多 >