步态能量图的实现(一)

       目前为止,网上做步态能量图实现几乎没有,只有一两个,而且他们的方法应该来说还是有点复杂,现在实现一个更简单的方法,采用的数据库是USF的步态数据库,数据库中每张图片的大小是一致的,不过格式是.pbm,矢量位图。

       什么是步态能量图?  

       给出经过预处理的二值步态轮廓图像Bt(x,y)表示在t时刻的一个序列图像,灰度图GEI的定义如下:

     

       其中是一系列步态轮廓序列的个数,t是当前时刻的序列图,x和y是图像坐标。

 

#include "stdafx.h"
#include 
#include 
#include 
#include 

using namespace std;
using namespace cv;

int main(int argc,char* argv[])
{
    char filename[100];
	int count = 0;
	
	IplImage *gei_1 = cvLoadImage("Bi00064.pbm");//载入一张图片以确定图片大小

	IplImage *gei_2 = cvCreateImage(cvSize(cvRound(gei_1->width),cvRound(gei_1->height)),gei_1->depth,3);//步态能量图

	cvZero(gei_1);
	cvZero(gei_2);

	for(int i=64;i<94;i++)//选取其中30张作为一个周期进行试验
	{
		sprintf(filename,"Bi000%d.pbm",i); //Bi000是图片共同的开头
		gei_1 = cvLoadImage(filename);
		count++;//计数

	    for(int i=0; iwidth*3;i++)
	    {
		    for(int j=0; jheight;j++)
		    {
		        CV_IMAGE_ELEM(gei_2,uchar,j,i)=(255-CV_IMAGE_ELEM(gei_1,uchar,j,i)+CV_IMAGE_ELEM(gei_2,uchar,j,i)*(count-1))/(count);  
		    }
	    }
    
	}
	cvNamedWindow("windowname",CV_WINDOW_AUTOSIZE);
	cvShowImage("windowname",gei_2);
	cvWaitKey(0);
}

 

现在只是一个周期的简单实现,实际情况还需要对一个周期做出判断,并且行人步态会比较多样化。


下一章将讲解如何获取步态的一个周期。

 

----------------------------------------------------------------------------------------------------------

P.S 组织了一个计算机视觉的开发者交流微信群,目标是汇集计算机视觉和图像处理的开发者分享开发经验,共同探讨技术,有兴趣入群的可以加我微信(WeChat: LaurenLuoYun),请注明“姓名-公司/学校-技术方向”,谢谢。


 

你可能感兴趣的:(【机器视觉】)