步态能量图生成主要有两步,主要为:

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

    为人体宽一般为中心位置

    以头顶为中心位置

  2. 对裁剪后图像合成,一个步态周期的图像合成一个步态能量图,步态周期如何判断,网上有一些方法,这里直接是手动指定的。如下图为一个步态周期

    以身宽一般为中心合成的步态能量图为:

    以头顶为中心合成步态能量图为:

    可以看出以头顶为中心效果比较好

代码如下裁剪轮廓,存放到与原文件夹相同格式的文件目录中,在通过裁剪的图生成GEI
以CISIA-B数据集为例,原文件目录格式为

生成的剪切图

生成的一张步态能量图

这里以一个整个步态序列作为周期

import os
from PIL import Image
import numpy as np
import matplotlib.pyplot as pltdef cut_image(path,cut_path,size):'''剪切图片:param path: 输入图片路径:param cut_path: 剪切图片后的输出路径:param size: 要剪切的图片大小:return:'''for (root,dirs,files) in os.walk(path):temp = root.replace(path,cut_path)if not os.path.exists(temp):os.makedirs(temp)for file in files:image,flag = cut(Image.open(os.path.join(root,file)))if not flag: Image.fromarray(image).convert('L').resize((size,size)).save(os.path.join(temp,file))passdef cut(image):'''通过找到人的最小最大高度与宽度把人的轮廓分割出来,、因为原始轮廓图为二值图,因此头顶为将二值图像列相加后,形成一列后第一个像素值不为0的索引。同理脚底为形成一列后最后一个像素值不为0的索引。人的宽度也同理。:param image: 需要裁剪的图片 N*M的矩阵:return: temp:裁剪后的图片 size*size的矩阵。flag:是否是符合要求的图片'''image = np.array(image)# 找到人的最小最大高度与宽度height_min = (image.sum(axis=1)!=0).argmax()height_max = ((image.sum(axis=1)!=0).cumsum()).argmax()width_min = (image.sum(axis=0)!=0).argmax()width_max = ((image.sum(axis=0)!=0).cumsum()).argmax()head_top = image[height_min,:].argmax()# 设置切割后图片的大小,为size*size,因为人的高一般都会大于宽size=height_max-height_mintemp = np.zeros((size,size))# 将width_max-width_min(宽)乘height_max-height_min(高,szie)的人的轮廓图,放在size*size的图片中央# l = (width_max-width_min)//2# r = width_max-width_min-l# 以头为中心,将将width_max-width_min(宽)乘height_max-height_min(高,szie)的人的轮廓图,放在size*size的图片中央l1 = head_top-width_minr1 = width_max-head_top# 若宽大于高,或头的左侧或右侧身子比要生成图片的一般要大。则此图片为不符合要求的图片flag = Falseif size<=width_max-width_min or size//2<r1 or size//2<l1:flag = Truereturn temp,flag# centroid = np.array([(width_max+width_min)/2,(height_max+height_min)/2],dtype='int')temp[:,(size//2-l1):(size//2+r1)] = image[height_min:height_max,width_min:width_max ]return temp,flagdef GEI(cut_path,data_path,size):'''生成步态能量图:param cut_path: 剪切后的图片路径:param data_path: 生成图片的路径:param size: 生成能量图大小:return:'''for (root,dirs,files) in os.walk(cut_path):temp = root.replace(cut_path,data_path)if not os.path.exists(temp):os.makedirs(temp)GEI = np.zeros([size,size])if len(files)!=0:for file in files:GEI += Image.open(os.path.join(root,file)).convert('L')GEI /= len(files)Image.fromarray(GEI).convert('L').resize((size,size)).save(os.path.join(temp,'1.png'))passif __name__=='__main_':cut_image("C:\\Users\\China\\Desktop\\GaitDatas","C:\\Users\\China\\Desktop\\CutImage",126)GEI("C:\\Users\\China\\Desktop\\CutImage","C:\\Users\\China\\Desktop\\GEIData",126)

转载于:https://www.cnblogs.com/lolybj/p/10914957.html

GEI步态能量图生成相关推荐

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

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

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

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

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

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

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

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

  5. 【计算机视觉】步态能量图GEI

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

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

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

  7. 基于python的步态分析_Python 实现步态能量图

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

  8. Python 实现步态能量图

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

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

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

最新文章

  1. 用Access作为后台数据库支撑,书写一个C#写入记录的案例
  2. 产品经理能力模型 答网友问
  3. MyBatisPlus中使用 @TableField完成字段自动填充
  4. 【MFC】CFrameWnd类详解
  5. MFC/VC++中怎样设置位图按钮并且位图不会覆盖文字——–位图按钮
  6. UTF-8和GBK有啥区别?
  7. 计算机二级考试Access教程
  8. 关于JS获取select值的两种实现方法
  9. P1616 疯狂的采药(python3实现)--80分
  10. php正则匹配js中变量_PHP正则表达式核心技术完全详解 第12节 [附加知识] 断言匹配...
  11. FPGA双沿发送之Verilog HDL实现
  12. python常见的数据结构
  13. 西北大学计算机学院王郭玲,西北大学关于表彰2010-2011学年度学生先进集体
  14. windows系统更换鼠标指针
  15. 【保险分享】出门旅游是否需要够买旅行险?
  16. AxureRP实战(二)Banner轮播图交互(基础篇)
  17. 《惢客创业日记》2021.06.28-30(周一)防骗的终极解决方案
  18. TCP TIME_WAIT解决方案
  19. 通过PLSQL查看所连接的ORACLE的版本
  20. 【CS231n 课程笔记】第八讲-----常见的深度学习框架,以及GPU和CPU介绍。

热门文章

  1. AnLink支持多种安卓手机的多屏协同类软件
  2. backtrack5安装edup ep-n1566无线网卡的rt3070驱动
  3. Sping的AOP理解
  4. 2021.10.10
  5. 【办公-WORD】Word限制文档部分可编辑(可编辑的限制文档)
  6. 基于intel soc+fpga智能驾驶舱和高级驾驶辅助系统软件设计(三)
  7. 2020年4月3日 上午3:39AppStore审核被拒(苹果登录缺失被拒)
  8. 万字长文 | 全(小区局域)网最强 TCP/IP 拥塞控制总结
  9. ESP32简单实现MQ-2烟雾浓度传感器(MicroPython+Thonny)
  10. 在线相册 ,图片上传, 基于 Spring boot vuejs element ui mysql 的项目