主权项 |
一种基于运动字串的运动标注方法,其特征在于包括如下步骤:1)对任意给定的三维人体运动数据集进行类别标注与训练样本集划分,对数据集中的全部运动序列中的每个姿态进行旋转、平移对齐处理,使其中心点固定为坐标原点,身体平面前方朝向统一;2)对数据集中全部运动序列包含的所有帧采用k‑means算法进行聚类,共K个聚类类别,聚类中心为C<sub>k</sub>,k=1,2,...,K,以每帧对应的聚类索引编号v∈V={1,2,...,K}作为该帧的标识字符,对于给定运动序列s={f<sub>1</sub>,f<sub>2</sub>,...,f<sub>n</sub>},其中f<sub>i</sub>为运动中的某一帧,n为运动序列总帧数,则该运动序列可由每帧对应的标识字符表示,称为运动字串:A={a<sub>1</sub>,a<sub>2</sub>,...,a<sub>n</sub>},a<sub>i</sub>∈V (1)3)对给定的两段运动序列,假设其对应的运动字串分别为A和B,对应长度分别为n<sub>A</sub>和n<sub>B</sub>,则其相似度匹配结果可按如下方法计算:首先,按照字典V对应的聚类索引顺序,计算生成一个大小为K×K的对称的权重矩阵W,其中每个元素w<sub>ij</sub>=||C<sub>i</sub>‑C<sub>j</sub>||<sub>2</sub>;随后,若n<sub>A</sub>>n<sub>B</sub>则交换A和B;接着,建立大小为(n<sub>A</sub>+1)×(n<sub>B</sub>+1)的动态规划矩阵D,其初值为:<img file="FDA0000818984600000011.GIF" wi="812" he="182" />最后,按照以下公式对D中其他元素进行计算:<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><msub><mi>D</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>=</mo><mi>min</mi><mo>(</mo><mrow><msub><mi>D</mi><mrow><mi>i</mi><mo>-</mo><mn>1</mn><mo>,</mo><mi>j</mi><mo>-</mo><mn>1</mn></mrow></msub><mo>,</mo><msub><mi>D</mi><mrow><mi>i</mi><mo>-</mo><mn>1</mn><mo>,</mo><mi>j</mi></mrow></msub><mo>,</mo><msub><mi>D</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi><mo>-</mo><mn>1</mn></mrow></msub></mrow><mo>)</mo><mo>+</mo><msub><mi>W</mi><mrow><msub><mi>a</mi><mi>i</mi></msub><mo>,</mo><msub><mi>b</mi><mi>j</mi></msub></mrow></msub><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>3</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000818984600000012.GIF" wi="1109" he="111" /></maths>矩阵D右下角元素<img file="FDA0000818984600000013.GIF" wi="143" he="69" />即为两段运动的相似度。4)对数据库中所有运动字串用自底向上的层级聚类方法进行聚类,采用迭代的方法,每次将最接近的两个聚类合并为一类,直到所有聚类中心之间的两两距离均大于阈值σ,具体的聚类算法描述如下:4.1初始化:对于运动数据库中的每段运动序列,其对应的运动字串为A<sub>i</sub>,i=1,2,...,N,每个字串构成单独的一类<img file="FDA0000818984600000014.GIF" wi="93" he="77" />其聚类中心<img file="FDA0000818984600000015.GIF" wi="70" he="78" />即为A<sub>i</sub>本身;4.2计算距离矩阵M,其中M<sub>i,j</sub>=stringMatch(A<sub>i</sub>,A<sub>j</sub>),这里的stringMatch方法即步骤2)中的相似度计算方法;4.3找到M中距离最小的两段运动字串<img file="FDA0000818984600000021.GIF" wi="84" he="70" />和<img file="FDA0000818984600000022.GIF" wi="95" he="71" />4.4如果M<sub>k1,k2</sub>>σ,则返回现有全部类及其聚类中心,算法终止;否则,合并这两个字串所对应的两类<img file="FDA0000818984600000023.GIF" wi="74" he="78" />和<img file="FDA0000818984600000024.GIF" wi="95" he="70" />生成新类别L′;4.5计算新类L′的中心点:对所有A<sub>i</sub>∈L′,计算D<sub>i</sub>=max(stringMatch(A<sub>i</sub>,A<sub>j</sub>)),<img file="FDA0000818984600000025.GIF" wi="203" he="76" />计算i′=argmin<sub>i</sub>D<sub>i</sub>,则中心T<sub>i</sub>=A<sub>i′</sub>;4.6依照步骤4.2更新距离矩阵M,同类字串的距离设为+∞;4.7重复步骤4.3至4.6,直到结束;4.8去掉只有一段运动字串的聚类,以消除部分误差;5)对于输入的运动序列,与步骤4)得到的所有聚类中心字串<img file="FDA0000818984600000026.GIF" wi="72" he="70" />进行比较,按相似度由小到大排序,利用加权投票的方法,以得票最多的类别作为输入运动序列的类别标注;6)利用滑动时间窗口策略,对在线输入的运动序列,以2秒为时间窗长度,0.5秒为时间窗间隔,即每0.5秒将前2秒内的运动序列按步骤1)至步骤5)所述方法获取类别标注,作为实时标注的结果。 |