我有一个来自学校的线性回归方程,它给出1到-1之间的值,表示一组数据点是否足够接近线性函数
和这里给出的等式
http://people.hofstra.edu/stefan_waner/realworld/calctopic1/regression.html
最合适的一条线。我想用这些来做基于3空间(x,y,z)中的点的简单手势检测 - 前进,后退,左,右,上,下。首先,我会看到它们是否落在3个维度中的2个线上,然后我会看到该线的斜率是接近零还是无穷大。
这对功能手势识别来说足够快吗?如果没有,有人可以提出替代算法吗?
答案 0 :(得分:1)
如果我已正确理解你的问题,那么(1)你在这里描述的计算可能足够快,(2)它实际上可能没有你想要的,以及(3)那些&#39 ;实际实现中的速度会慢到其他地方。
所以,我认为你提议这样做。 (1)在几个连续的时间内,在三维空间中识别......某事物(可能是用户的手)的位置。 (2)对于(比如说){x,y}和{x,z}中的每一个,查看每个点的那两个坐标,计算相关系数(这是你的公式所描述的)并查看它是否为#s;接近+ -1。 (3)如果两个相关系数都接近+ -1,那么这些点大致位于一条直线上;计算该线的梯度(使用类似于相关系数的公式)。 (4)如果渐变非常接近0或+ - 无穷大,那么你的线与一个轴大致平行,这是你试图识别的情况。
1:它足够快吗?您可能正以每秒50帧左右的速度进行采样,并且您的手势可能需要一秒钟才能执行。所以你将拥有大约50个职位的位置。因此,您需要的算术运算总数可能是几百(包括适度数量的平方根)。在最坏的情况下,您可能在慢速ARM处理器上的模拟浮点中执行此操作;在这种情况下,每个算术运算可能需要几百个周期,因此整个事件可能是100k个周期,对于在100MHz运行的非常慢的处理器,这将是大约一毫秒。您不会对执行此计算所花费的时间有任何问题。
2:这是正确的吗?目前尚不清楚它是否正确计算。例如,假设您的用户的手沿x轴快速地来回移动几次;这将给你一个积极的结果;那是你要的吗?假设用户尝试了你想要的手势但是以略微错误的角度移动;你可能得到负面结果。假设它们沿x轴精确移动一点,然后沿y轴移动一点;那么{x,y},{x,z}和{y,z}平面上的投影都将通过你的测试。这些都看起来像你可能不想要的结果。
3:真正的成本在哪里?这一切都假设您已经拥有(x,y,z)坐标。获得这些可能比处理它们更昂贵。例如,如果您有某种类型的基于摄像头的系统,那么每帧都会进行一些非常重要的图像处理。或者你可能正在整合来自加速度计的数据(顺便提一下,这可能会产生令人讨厌的不准确的位置结果);您可能正在进行一些过滤和其他计算以获取位置数据。我敢打赌,执行像这样的计算的成本将远远低于首先获得坐标的成本。