手势识别中,基于手运动的位置信息,识别手势运动轨迹,由于相机采集的频率问题,导致数据点太多,HMM中显状态数量太多,使用Douglas-Peucker来减少轨迹中的运动点。
Douglas-Peucker的原理如下图所示:
自然语言表达方式如下:
1.首先以端点A,a连接作为一条直线,如果曲线Aa只包含两个端点 A a, 则此曲线去点循环结束。循环剩下所有的点,计算点与直线的垂直距离,确定与直线距离最大的点及距离ε,
2.if ε小于预定的值,那么A到a之间的所有点都被删除,使用Aa线段来代替此段曲线,此曲线段循环结束。否则曲线被分成两段Ac, ca
3.继续进行步骤1,直到满足退出循环去点条件。
最后可以看到曲线中的点的数量变少。
基于Python实现的代码粘结在下面:
import math
import re
import matplotlib.pyplot as plt
#use the dp algorithm to simplify the line.
def DPeucker(dataOrigin):
data = list()
#to make sure that the datatype is list type instead of numpy list
print(type(dataOrigin))
if(type(dataOrigin) == type([])):
print(