具体实施方式
参照图1,本发明的具体实现步骤如下:
步骤一,获取整个人体运动识别的训练视频集X和测试视频集T。
(1.1)将Weizmann数据库中的运动视频按照8:1的比例构建训练视频集X和测试视频集T;其中,Weizmann数据库的下载地址为http://www.wisdom.weizmann.ac.il/~vision/SpaceTimeActions.html,图2给出了数据库中部分视频的序列图像;
(1.2)将训练视频集X和测试视频集T中的每段视频转换为连续的单幅序列图像。
步骤二,利用帧差法对训练视频集X中的单幅序列图像进行背景减除,并将背景减除后的彩色图像变为二值图像。
所述的将背景减除后的彩色图像变为二值图像,具体步骤为:
(2.1)定义FG(x,y)={R,G,B}表示当前视频图像中像素点(x,y)的RGB数值,定义BG(x,y)={Rl,Gl,Bl}表示Weizmann数据库相应背景图片中对应背景像素点的RGB数值,其中,R表示当前视频图像中像素点(x,y)的红色分量数值,G表示当前视频图像中像素点(x,y)的绿色分量数值,B表示当前视频图像中像素点(x,y)的蓝色分量数值,Rl表示相应背景图片中对应背景像素点的红色分量数值,Gl表示相应背景图片中对应背景像素点的绿色分量数值,Bl表示相应背景图片中对应背景像素点的蓝色分量数值;
(2.2)分别计算红色分量R的差值c1(x,y)=|R-Rl|,绿色分量G的差值c2(x,y)=|G-Gl|,蓝色分量B的差值c3(x,y)=|B-Bl|;
(2.3)将当前视频图像中像素点(x,y)的三个颜色分量差值c1(x,y),c2(x,y),c3(x,y)与设定的阈值t相比较,若三个颜色分量差值都小于或等于阈值t,则将像素点(x,y)设为背景像素点,否则将像素点(x,y)设为前景像素点,其中,阈值t根据具体序列图像设定;
(2.4)将步骤(2.3)中判定为背景像素点的像素值都设为1,将判定为前景像素点的像素值都设为0,将得到的所有背景像素点和前景像素点联合起来构成二值图像;
(2.5)使用形态学中膨胀腐蚀的方法,对步骤(2.4)得到的二值图像中人体像素缺失的部分进行膨胀,对人体像素的多余部分进行腐蚀,获得理想的前景二值图像。
步骤三,在上述二值图像中选取人体双手平举双脚并拢垂直站立的图片,记录图片中人体5个部位的坐标,头部坐标(xhead,yhead),左手坐标(xarml,yarml),右手坐标(xarmr,yarmr),左脚坐标(xlegl,ylegl),右脚坐标(xlegr,ylegr),具体步骤为:
(3.1)在所有二值图像中选取人体双手平举双脚并拢垂直站立的图片,在此图片中构造以最左下角的像素点为坐标中心的直角坐标系o1,提取图像中人体的星型模型,并记录星型模型的5个顶点在直角坐标系o1中的位置,其中,星型模型的5个顶点为人体轮廓上的像素点和人体重心点之间距离最大的5个像素点,分别记为:(x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5);
(3.2)在上述二值图像中构造以人体重心点为坐标中心的直角坐标系o2,进行平移直角坐标系变换,并将步骤(3.1)中星型模型的5个顶点在直角坐标系o1中的坐标转换到直角坐标系o2中,得到这5个顶点在坐标系o2中的对应坐标,分别为(x1',y1'),(x'2,y'2),(x'3,y'3),(x'4,y'4),(x'5,y'5);
(3.3)计算星型模型的5个顶点在直角坐标系o2中的坐标(x1',y1'),(x'2,y'2),(x'3,y'3),(x'4,y'4),(x'5,y'5)到直角坐标系o2的坐标中心点的距离,依次记为d1,d2,d3,d4,d5;
(3.4)利用上述距离d1,d2,d3,d4,d5中的最大值D,计算星型模型5个顶点的极径:ri=di/D,
其中i=1,2......5,D=max{d1,d2,d3,d4,d5};
(3.5)利用上述坐标(x'1,y'1),(x'2,y'2),(x'3,y'3),(x'4,y'4),(x'5,y'5),计算星型模型5个顶点的极角:θi=arctan(x'i/y'i),其中i=1,2......5;
(3.6)根据人体结构特征找出5个坐标点(x'1,y'1),(x'2,y'2),(x'3,y'3),(x'4,y'4),(x'5,y'5)分别对应的人体部位并记录其坐标;
(3.6a)将步骤(3.4)中得到的5个坐标点的极径ri,i=1,2....5,从大到小排序,找出最大两个极径对应的坐标点(x1',y1'),(x'2,y'2),根据人体脚到人体重心的距离最大,且左脚和右脚分布于人体重心两侧的比例结构判定脚坐标,若x1'>0,则判定(x1',y1')为左脚坐标,反之,(x'2,y'2)为右脚坐标,将左脚坐标记为(xlegl,ylegl),右脚坐标记为(xlegr,ylegr);
(3.6b)在剩余3个点顶点(x'3,y'3),(x'4,y'4),(x'5,y'5)中,根据人体头部是偏离人体重心角度最小的部位,用对应极角的绝对值最大的结构判定头部坐标,比较3个顶点对应极角θ3,θ4,θ5的绝对值的大小,若θ3绝对值最大,则(x'3,y'3)为头部坐标,将头部坐标记为(xhead,yhead);
(3.6c)在其余两个顶点(x'4,y'4),(x'5,y'5)中,若x'4>0,则判定(x'4,y'4)为左手坐标,反之,(x'5,y'5)为右手坐标,将左手坐标记为(xarml,yarml),右手坐标记为(xarmr,yarmr)。
步骤四,提取步骤二所有二值图像中人体的5个部位在以人体重心为坐标中心的直角坐标系中的坐标,分别记为左脚坐标(xlegl,ylegl),右脚坐标(xlegr,ylegr),头部坐标(xhead,yhead),左手坐标(xarml,yarml),右手坐标(xarmr,yarmr)。
(4.1)构造步骤二中二值图像最左下角的像素点为坐标中心的直角坐标系o1,提取图像中人体的星型模型,并记录星型模型的5个顶点在直角坐标系o1中的位置,其中,星型模型的5个顶点为人体轮廓上的像素点和人体重心点之间距离最大的5个像素点,分别记为:(x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5):
(4.1a)对二值图像进行光栅扫描,当某像素的像素值从1变为0时,将此像素记为p0,且作为人体边界像素点的起始点,并存储它的坐标(x,y);
(4.1b)从像素(x,y-1)开始逆时针方向在像素(x,y)的8-领域内寻找像素值为0的像素点,当第一次出现像素值为0的像素点时,将此像素点记为pk,k=1,并存储它的坐标;
(4.1c)从像素pk-1开始逆时针方向在像素pk的8-领域内寻找像素值为0的像素,把最新发现的像素值为0的像素记为pk+1,并存储它的坐标;
(4.1d)重复步骤(3.1c),当pk=p0且pk+1=p1时,扫描结束,记录所有边缘像素点的位置(xi,yi);
(4.1e)利用人体边界像素点坐标,计算运动人体边界像素点所围成区域的重心坐标(xc,yc),计算公式为:
其中Nb为构成人体边缘的所有像素的个数,(xi,yi)为人体边界像素点坐标;
(4.1f)计算每一个边缘像素点坐标(xi,yi)到人体重心点坐标(xc,yc)的距离di,将di变为离散函数d(i);
(4.1g)使用低通滤波器对离散函数d(i)进行去噪;
(4.1h)利用差分法求得离散函数d(i)的局部极大值,若局部极大值的个数大于5个,则改变低通滤波器的截止频率直至求得的局部极大值个数为5,将这5个局部极大值点作为星型模型的5个顶点,并记录这5个顶点在图像直角坐标系o1中的坐标,分别记为,(x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5),其中,直角坐标系o1的中心坐标为二值图像最左下角的像素点坐标。
(4.2)在上述二值图像中构造以人体重心点为坐标中心的直角坐标系o2,进行平移直角坐标系变换,并将步骤(4.1)中星型模型的5个顶点在直角坐标系o1中的坐标转换到直角坐标系o2中,得到这5个顶点在坐标系o2中的对应坐标,分别为(x1',y1'),(x'2,y'2),(x'3,y'3),(x'4,y'4),(x'5,y'5);
(4.3)计算星型模型的5个顶点在直角坐标系o2中的坐标(x1',y1'),(x'2,y'2),(x'3,y'3),(x'4,y'4),(x'5,y'5)到直角坐标系o2的坐标中心点的距离,依次记为d1,d2,d3,d4,d5;
(4.4)利用上述距离d1,d2,d3,d4,d5中的最大值D,计算星型模型5个顶点的极径:ri=di/D,
其中i=1,2......5,D=max{d1,d2,d3,d4,d5};
(4.5)利用上述坐标(x'1,y'1),(x'2,y'2),(x'3,y'3),(x'4,y'4),(x'5,y'5),计算星型模型5个顶点的极角:θi=arctan(x'i/y'i),其中i=1,2......5;
(4.6)根据人体结构特征找出上述5个坐标点(x'1,y'1),(x'2,y'2),(x'3,y'3),(x'4,y'4),(x'5,y'5)分别对应的人体部位:
(4.6a)将步骤(4.4)中五个坐标点的极径ri,i=1,2....5,从大到小排序,找出其中最大两个极径对应的坐标点(x1',y1'),(x'2,y'2),根据人体脚到人体重心的距离最大,且左脚和右脚分布于人体重心两侧的比例结构判定脚坐标,若x1'>0,则判定(x1',y1')为左脚坐标,反之,判定(x'2,y'2)为右脚坐标;
(4.6b)在剩余3个点顶点(x'3,y'3),(x'4,y'4),(x'5,y'5)中,根据人体头部是偏离人体重心角度最小的部位,用对应极角的绝对值最大的结构判定头部坐标,比较3个顶点对应极角θ3,θ4,θ5的绝对值的大小,若θ3绝对值最大,则(x'3,y'3)为头部坐标;
(4.6c)在其余两个顶点(x'4,y'4),(x'5,y'5)中,若x'4>0,则判定(x'4,y'4)为左手坐标,反之,判定(x'5,y'5)为右手坐标;
步骤五,将步骤四得到的5个人体部位坐标(x'1,y'1),(x'2,y'2),(x'3,y'3),(x'4,y'4),(x'5,y'5)分别进行平移直角坐标系变换,得到新坐标系下的坐标值。
(5.1)用步骤三中得到的头部坐标(xhead,yhead)为坐标中心构造直角坐标系ohead,用左手坐标(xarml,yarml)为坐标中心构造直角坐标系oarml,用右手坐标(xarmr,yarmr)为坐标中心构造直角坐标系oarmr,用左脚坐标(xlegl,ylegl)为坐标中心构造直角坐标系olegl,用右脚坐标(xlegr,ylegr)为坐标中心构造直角坐标系olegr;
(5.2)将步骤四中得到左脚坐标(x
1',y
1')转换到直角坐标系o
legl中得到新的左脚坐标
将右脚坐标(x'
2,y'
2)转换到直角坐标系o
legr中得到新的右脚坐标
将头部坐标(x'
3,y'
3)转换到直角坐标系o
head中得到新的头部坐标
将左手坐标(x'
4,y'
4)转换到直角坐标系o
arml中得到新的左手坐标
将右手坐标(x'
5,y'
5)转换到直角坐标系o
armr中得到新的右手坐标
步骤六,分别计算步骤五中得到的5个人体部位坐标
到直角坐标系o
legl,o
legr,o
head,o
arml,o
armr的坐标中心的距离,依次记为
步骤七,利用上述距离
中的最大值D
*,计算5个人体部位坐标
的极径:
其中i=1,2......5,
步骤八,计算步骤五中得到的5个人体部位坐标
的极角:
其中i=1,2......5;
步骤九,按照上述步骤四到步骤八将一个运动视频中的所有序列图片都做如上处理,得到一个视频中所有图片中人的5个部位的极径r*和极角θ*;
步骤十,计算一个运动视频的2D统计直方图特征N。
(10.1)将极径r*的取值范围等分为5个连续的子区间,将极角θ*的取值范围等分为10个连续的子区间;再将极径r*的5个子区间和极角θ*的10子区间分别两两组合,构成50个联合子区间;
(10.2)分别统计步骤九得到的一个视频的所有图片中人的5个部位的极径r*和极角θ*的值落在这50个联合子区间中的次数,得到5个部位的位置特征向量,分别记为n1,n2,n3,n4,n5,并将这5个部位的位置特征向量级联,得到一个运动视频的2D统计直方图特征N={n1,n2,n3,n4,n5};
步骤十一,利用图像矩计算一个运动视频中每幅图像中人体的帧速率,每幅图像的帧速率级联,得到一个运动视频的运动特征V。
(11.1)对步骤二得到的二值图像按如下公式计算每幅图像中人体质心点坐标
即:
其中,I(X,Y)表示像素点(X,Y)的像素值;
(11.2)计算第k幅图像的瞬时位移:
其中,
表示第k+1幅图像中人体质心的横坐标,
表示第k幅图像中人体质心的横坐标,
表示第k+1幅图像中人体质心的纵坐标,
表示第k幅图像中人体质心的纵坐标;
(11.3)计算第k幅图像中人体的帧速率vk=s'k*f,其中,f表示视频帧率,在Weizmann数据库中为已知;
(11.4)按照上述步骤(11.1)到(11.3)计算一个运动视频的所有序列图片中人体的帧速率,记为v1,v2,....vn,其中n为一个运动视频包含的序列图片的个数;
(11.5)将步骤(11.4)中得到的所有序列图片中人体的帧速率级联,得到一个运动视频的运动特征V={v1,v2,...vn}。
步骤十二,将步骤十得到的2D统计直方图特征N和步骤十一得到的运动特征V进行级联,得到一个运动视频的最终特征B={N,V}。
步骤十三,按照上述步骤四到步骤十二提取训练视频集X和测试视频集T中的所有运动视频的最终特征,获得训练视频特征集X*和测试视频特征集T*。
步骤十四,利用SVM算法对训练视频特征集X*进行训练学习得到分类器,并输入测试视频特征集T*进行分类,得到运动识别的结果,即各类运动的分类准确率和总的分类准确率。
(14.1)利用SVM算法对训练视频特征集X*进行训练学习,得到分类器H;
(14.2)将测试视频特征集T
*输入到已经训练好的分类器H中,得到各类运动的预测标签L
*,预测标签L
*包括各类运动的预测标签集合,分别为
j=1,2....k,各类运动的预测标签集合中预测标签个数分别为n
j,j=1,2....k,其中,k为总的运动类别数;
(14.3)判断第j类运动预测标签集
中的所有预测标签和真实标签集l
j中对应的真实标签是否相同,统计相同的标签的个数,记为
其中,l
j为Weizmann数据库已包括的真实标签集;
(14.4)利用如下公式计算第j类运动的分类准确率,即:
(14.5)按照步骤(14.3)~(14.4)计算k类所有运动的分类准确率,分别记为σj,j=1,2......k;根据各类运动的分类准确率σj画出分类混淆矩阵,分类混淆矩阵包括各类运动的分类结果;
(14.6)利用如下公式计算总的分类准确率,即:
各类运动的分类准确率σj和总的运动分类准确率σ*即为运动识别的最终结果。
本发明的效果可通过以下实验结果与分析进一步的说明:
1.实验条件:
实验所需的样本集来源于Weizmann数据库,包括bend,jack,jump,pjump,side,wave1,wave2,run,walk,skip十类运动视频,整个人体运动识别的训练视频有80个,测试视频有10个,其中训练视频中各类运动视频都为8个,测试视频中各类运动视频都为1个,视频大小均为180×144像素。
硬件平台为:Intel Core2Duo CPU E65502.33GHZ、2GB RAM。软件平台为MATLAB R2009a。
2.对比实验
本发明使用的对比实验方法是J.C.Niebles和李菲菲博士在文章“J.C.Niebles and L.Fei-Fei,“A hierarchical model of shape and appearance for human actionclassification,”IEEE Conference on Computer Vision and Pattern Recognition,2007.”中提出的基于形状和表观模型的人体运动识别方法。用这种方法首先提取训练样本基于形状的特征,然后训练一个判别性分类器,最后通过计算测试样本特征和分类器中模型的相似性来实现分类。
3.实验内容与实验结果分析
使用本发明的方法对Weizmann数据库进行人体运动识别仿真,图2给出了该数据库中部分视频的序列图像,图3给出了该数据库中部分序列图像进行背景减除后的二值图像。
仿真过程如下:
1)对Weizmann数据库在上述实验条件中进行训练视频和测试视频的划分;
2)对训练视频集X和测试视频集T进行特征提取,得到训练视频特征集X*和测试视频特征集T*;
3)利用SVM算法对训练视频特征集X*训练,之后将测试视频特征集T*输入分类器得到各类运动的预测标签L*;
4)根据测试视频特征集T*的预测标签L*和Weizmann数据库包括真实标签L,得出总的分类准确率为87.4%,并画出混淆矩阵,如图4所示。
从图4的混淆矩阵可以看出,大部分运动都能得到有效的识别,尤其是jack运动,jump运动和walk运动的识别率都达到了100%,run运动的识别率也达到了90%;
本发明进行人体运动识别的总准确率87.4%,高于对比实验中李菲菲博士的72.8%。
综上,本发明提出的人体运动识别方法有效可行,且提出的特征提取方法能准确的利用人体部位的位置统计特征表征人体运动姿态,同时利用人体运动特征很好的区分侧影轮廓相似度较高的行为,从而降低了特征提取的计算复杂度,同时提高了识别的准确率。