步态识别领域有相当多的研究是基于 “类能量图”。一个步态周期内的所有轮廓按照某种规则累计构成的模板统称为 “类能量图”。能量图法不易受到轮廓噪声的干扰,有效地融合空间的信息,但是特征维数较高。下表展示了 “类能量图” 的主要类型[1]。本博客用 Python 实现步态能量图。

1 思路

首先我们通过图像分割算法可以获得一个步态内人的二值轮廓图像,如下所示:

然后我们需要将人从图片中剪切出来,获得一副较小的图片,然后按照步态能量图中的计算公式将一个步态内的图像叠加在一起后除以图片数目。

2 实现

2.1 图像剪裁

代码:

def cut_img(img, T_H, T_W):

# 获得最高点和最低点

y = img.sum(axis=1)

y_top = (y != 0).argmax(axis=0)

y_btm = (y != 0).cumsum(axis=0).argmax(axis=0)

img = img[y_top:y_btm + 1, :]

# 如果高比宽要大,用高计算 resize 的比例

_r = img.shape[1] / img.shape[0]

_t_w = int(T_H * _r)

img = cv2.resize(img, (_t_w, T_H), interpolation=cv2.INTER_CUBIC)

# 获得人的对称轴

sum_point = img.sum()

sum_column = img.sum(axis=0).cumsum()

x_center = -1

for i in range(sum_column.size):

if sum_column[i] > sum_point / 2:

x_center = i

break

h_T_W = int(T_W / 2)

left = x_center - h_T_W

right = x_center + h_T_W

if left <= 0 or right >= img.shape[1]:

left += h_T_W

right += h_T_W

_ = np.zeros((img.shape[0], h_T_W))

img = np.concatenate([_, img, _], axis=1)

img = img[:, left:right]

return img.astype('uint8')

测试:

# 图片读取为二值格式

img = cv2.imread('H:/gait recognition/data/001-bg-01-090-044.png',-1)

img1 = cut_img(img, 128, 128)

cv2.imshow('image', img)

cv2.imshow('image1', img1)

cv2.waitKey(0)

cv2.destroyAllWindows()

结果显示:

2.2 能量图制作

分割后的一个步态周期内的图像:

代码:

def get_GEI(path):

# path 是文件夹对应的路径,一个文件夹下面放置一个步态周期内的已经剪裁好的图像

imgs = os.listdir()

path1 = os.getcwd()

imgs_list = [cv2.imread(path1 +'\\'+i)/255 for i in imgs]

GEI = imgs_list[0]

for i in imgs_list[1:]:

GEI += i

GEI = GEI/len(imgs_list)

return GEI

测试:

GEI = get_GEI(r'H:\gait recognition\data\gait')

cv2.imshow('image2', GEI)

cv2.waitKey(0)

cv2.destroyAllWindows()

结果显示:

注意:

一定要对图像做归一化处理,否则将显示下面的结果:

参考资料:

[1] 贲晛烨, 徐森, and 王科俊. "行人步态的特征表达及识别综述." 模式识别与人工智能 2012 年 01 (2012): 71-81.

基于python的步态分析_Python 实现步态能量图相关推荐

  1. m基于CNN卷积网络和GEI步态能量图的步态识别算法MATLAB仿真,测试样本采用现实拍摄的场景进行测试,带GUI界面

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 目前关于步态识别算法研究主要有两种:基于模型的方法和非基于模型的方法.基于模型的步态识别方法优点在于 ...

  2. m基于CNN卷积神经网络和GEI步态能量图的步态识别算法MATLAB仿真

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 步态识别是一种新兴的生物特征识别技术,旨在通过人们走路的姿态进行身份识别,与其他的生物识别技术相比, ...

  3. Python 实现步态能量图

    步态识别领域有相当多的研究是基于 "类能量图".一个步态周期内的所有轮廓按照某种规则累计构成的模板统称为 "类能量图".能量图法不易受到轮廓噪声的干扰,有效地融 ...

  4. 【步态识别】基于CNN、步态能量图+HOG特征提取的步态识别算法的MATLAB仿真

    卷积层的结构如下所示: 具体可以看如下的网址: 这个是传统的卷积神经网络.我们按这个进行设计.仿真结果如下: 他的识别率为88.89%. 然后我这里介绍下我们的改进思路,改进思路如下所示: 此外, 影 ...

  5. m基于AlexNet神经网络和GEI步态能量图的步态识别算法MATLAB仿真

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 AlexNet是2012年ImageNet竞赛冠军获得者Hinton和他的学生Alex Krizhe ...

  6. 基于步态能量图和CNN卷积神经网络的人体步态识别matlab仿真

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 步态能量图(Gait Engery Image, GEI)是步态检测中最非常常用的特征,提取方法简单 ...

  7. 步态能量图 matlab,【计算机视觉】步态能量图GEI

    GEI简介 步态能量图(Gait Engery Image, GEI)是步态检测中最非常常用的特征,提取方法简单,也能很好的表现步态的速度,形态等特征.其定义如下: 其中, 表示在第q个步态序列中,时 ...

  8. 步态能量图的实现(一)

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

  9. GEI步态能量图生成

    步态能量图生成主要有两步,主要为: 在原始轮廓图上对人的轮廓进行裁剪,在下面制作步态能量图图片叠加以什么为中心位置也是一个问题.一般有两种方式,一种是中心位置为人体宽的一半.另一种是以头顶为中心位置. ...

最新文章

  1. Python高级特性:切片、迭代、列表生成式、生成器与迭代器
  2. php-curl小记
  3. 【C++】复制构造函数
  4. 5u fb库 三菱plc_三菱FX5U PLC入门必备基础知识特点
  5. ASP.NET之纠错
  6. 【C语言】C语言实现面向对象编程之封装
  7. 15行代码AC——习题5-5 复合词(Compound Words, UVa 10391)——解题报告
  8. 基于元组,根据月份,计算天数.(Python)
  9. 【HDOJ】2266 How Many Equations Can You Find
  10. php mysql源码包,linux下Apache+PHP+mysql+phpMyAdmin源码包安装配置
  11. Matlab程序中调用其他程序
  12. php 开源企业网站,TayCMS 免费开源企业网站建站系统 For PHP v1.8
  13. pychram终止程序
  14. Ps 初学者教程「68」如何创建海报?
  15. 嗨,我亲爱的朋友们!心存感恩
  16. 百度网页快照删除服务恢复运营
  17. 《Visual Basic.Net 循序渐进》
  18. 小白学NLP学习笔记-入门
  19. 头条号自媒体运营:如何在今日头条涨500+粉丝?
  20. 基于张量的多元多阶马尔科夫多模态预测方法

热门文章

  1. 你需要启用steam社区界面功能以进行购买_Steam新版游戏库界面 9月17日正式公测...
  2. 5809: 傻瓜电梯(思维模拟)
  3. indexof java 用法_java中indexof的用法
  4. Paxos (computer science)
  5. VC编辑器输入字符会替换掉原来字符解决方法
  6. linux内核单步调试,linux内核调试之KDB(1)
  7. sinx/x的极限为什么是1_lim(x趋向0)sinx/x为什么等于1?
  8. 【Ubuntu】APT下载工具
  9. RVM 安装Ruby Linner
  10. 清新简约教育培训汇报总结PPT-朴尔PPT