计算机视觉Python,计算机视觉领域的python第三方库

  计算机视觉Python,计算机视觉领域的python第三方库

  比重当量指数简介步态能量图(GEI步态能量图像)是步态检测中最非常常用的特征,提取方法简单,也能很好的表现步态的速度,形态等特征。其定义如下:

  其中,表示在第q个步态序列中,时刻t的步态剪影图中坐标为(x,y)的像素值。

  步态周期的判断使用步态剪影的宽、高之比即可,这个值比较容易而且随步态状态呈现周期性变化。

  步态剪影单张步态剪影图需调节成宽为w,高为H的大小。调节时保持剪影的比例不变,即如果剪影本身w/hW/H,则将剪影放缩为W*(W*h/w )大小,并在宽*高竖直居中放置。得到重新标度的步态剪影的代码:

  //获取调整大小的步态图像如果(!walk _ img。empty()){ vector向量点轮廓;vectorVec4i层次结构;mat walk_img_tmpthreshold(walk _ img,walk _ img _ tmp,128,255,THRESH _ BINARY);findContours( walk_img_tmp,Contours,hierarchy,CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE,Point(0,0));矢量矢量点轮廓_多边形(轮廓。size());向量矩形边界(轮廓。size());int max rect height=0;int maxRectId=0;如果(轮廓。size()0){ for(int I=0;I轮廓。size();i ){//drawContours( walk_img,Contours,I,标量(255,255,255),2,8,层次结构,0,Point());//以指定的精度逼近多边形曲线approxPolyDP( Mat(contours[i]),contours_poly[i],3,true);//计算点集的右上边框bound rect[I]=bounding rect(Mat(contours _ poly[I]);if(boundRect[i].heightmaxrecheight){ maxrecheight=bound rect[I].身高;maxRectId=I;}}//rectangle( walk_img,boundRect[maxRectId].tl(),boundRect[maxRectId].br(),标量(255,255,255),2,8,0);double aspect _ ratio=(double)bound rect[maxRectId].height/boundRect[maxRectId].宽度;double base _ aspect _ ratio=(double)gei _ height/gei _ width;纵横比。push _ back(纵横比);if(aspect _ ratio=base _ aspect _ ratio){ Mat gait _ ROI=walk _ img(boundRect[maxRectId]);mat gait _ ROI _ tmp double resize _ scale=double(gei _ height)/gait _ ROI。行;resize(gait_roi,gait_roi_tmp,size(),resize_scale,resize _ scale);Mat gait _ img=Mat:zeros(gei _ height,gei_width,CV _ 8uc 1);for(int I=0;igei _ height I){ uchar * p _ tmp=gait _ ROI _ tmp。普图查尔(一);uchar * p=gait _ img。普图查尔(一);对于(int j=(gei _ width-gait _ ROI _ tmp。cols)/2,k=0;kgait _ roi _ tmp.colsk,j){ p[j]=p _ tmp[k];} } gait _ imgs。push _ back(gait _ img);} else { Mat gait _ ROI=walk _ img(boundRect[maxRectId]);mat gait _ ROI _ tmp double resize _ scale=double(gei _ width)/gait _ ROI。colsresize(gait_roi,gait_roi_tmp,size(),resize_scale,resize _ scale);Mat gait _ img=Mat:zeros(gei _ height,gei_width,CV _ 8uc 1);int I=(gei _ height-gait _ ROI _ tmp。rows)/2;for(int k=0;kgait _ roi _ tmp.rowsk,I){ uchar * p _ tmp=gait _ ROI _ tmp。ptruchar(k);uchar * p=gait _ img。普图查尔(一);for(int j=0;jgei _ width j){ p[j]=p _ tmp[j];} } gait _ imgs。push _ back(gait _ img);}}步态能量图比重当量指数

  得到比重当量指数即把上一步每个周期得到的所有图加权平均即可。

  if(aspect _ ratios。size()4)break;//获取步态特征:步态能量图像矢量max _ id for(int I=2;我观察比率。size()-2;I){ if((aspect _ ratios[I]aspect _ ratios[I-1])(aspect _ ratios[I]aspect _ ratios[I-2])(aspect _ ratios[I]aspect _ ratios[I 1])(aspect _ ratios[I]aspect _ ratios[I 2])max _ ids。push _ back(一);}//对于for(int cycle _ id=1;cycle _ idmax _ ids。size();cycle _ id){ int gait _ start _ id=max _ ids[cycle _ id-1];int gait _ end _ id=max _ ids[cycle _ id]-1;Mat gait _ energy _ img=Mat:zeros(gei _ height,gei_width,CV _ 32F);if(gait _ end _ id-gait _ start _ id=6 gait _ end _ id-gait _ start _ id30){ for(int g=gait _ start _ id;g=gait _ end _ IDG){ Mat gait=gait _ imgs[g];mat gait _ tmp gait . convertto(gait _ tmp,CV _ 32F);gait _ energy _ img=gait _ energy _ img gait _ tmp;# ifdef GAIT _ DEBUGchar tmp[50];itoa(g,tmp,10);imshow(tmp,gait);# endif }//等待键(10000);gait _ energy _ img=gait _ energy _ img/(float)(gait _ end _ id-gait _ start _ id 1);for(int r=0;rgait _ energy _ img . rowsr){ float * p=gait _ energy _ img。ptr浮动(r);for(int c=0;cgait _ energy _ img . colsc)feature _ outp[c]" ";} feature _ outendllabel _ output people _ id _ ITER walk _ condition _ ITER _ iterendl;cout 步态特征周期# cycle _ id-1 endl;# ifdef GAIT _ debug mat GAIT _ enery _ img _ show;步态_能量_ img。convertto(gait _ enery _ img _ show,CV _ 8uc 1);imshow(GEI ,gait _ enery _ img _ show);等待键(10000);#endif}}}

  在中国科学院自动化研究所数据集B数据集上得到每个角度比重当量指数图:

  (转载请注明作者和出处:http://博客。csdn。净/肖伟_cqu未经允许请勿用于商业用途)

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: