GEI步态能量图生成
步态能量图生成主要有两步,主要为:
在原始轮廓图上对人的轮廓进行裁剪,在下面制作步态能量图图片叠加以什么为中心位置也是一个问题。一般有两种方式,一种是中心位置为人体宽的一半。另一种是以头顶为中心位置。如:下图为原始图像与裁剪后的图像
为人体宽一般为中心位置
以头顶为中心位置
对裁剪后图像合成,一个步态周期的图像合成一个步态能量图,步态周期如何判断,网上有一些方法,这里直接是手动指定的。如下图为一个步态周期
以身宽一般为中心合成的步态能量图为:
以头顶为中心合成步态能量图为:
可以看出以头顶为中心效果比较好
代码如下裁剪轮廓,存放到与原文件夹相同格式的文件目录中,在通过裁剪的图生成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步态能量图生成相关推荐
- m基于CNN卷积网络和GEI步态能量图的步态识别算法MATLAB仿真,测试样本采用现实拍摄的场景进行测试,带GUI界面
目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 目前关于步态识别算法研究主要有两种:基于模型的方法和非基于模型的方法.基于模型的步态识别方法优点在于 ...
- m基于AlexNet神经网络和GEI步态能量图的步态识别算法MATLAB仿真
目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 AlexNet是2012年ImageNet竞赛冠军获得者Hinton和他的学生Alex Krizhe ...
- m基于CNN卷积神经网络和GEI步态能量图的步态识别算法MATLAB仿真
目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 步态识别是一种新兴的生物特征识别技术,旨在通过人们走路的姿态进行身份识别,与其他的生物识别技术相比, ...
- 步态能量图 matlab,【计算机视觉】步态能量图GEI
GEI简介 步态能量图(Gait Engery Image, GEI)是步态检测中最非常常用的特征,提取方法简单,也能很好的表现步态的速度,形态等特征.其定义如下: 其中, 表示在第q个步态序列中,时 ...
- 【计算机视觉】步态能量图GEI
GEI简介 步态能量图(Gait Engery Image, GEI)是步态检测中最非常常用的特征,提取方法简单,也能很好的表现步态的速度,形态等特征.其定义如下: 其中,表示在第q个步态序列中,时刻 ...
- 基于步态能量图和CNN卷积神经网络的人体步态识别matlab仿真
目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 步态能量图(Gait Engery Image, GEI)是步态检测中最非常常用的特征,提取方法简单 ...
- 基于python的步态分析_Python 实现步态能量图
步态识别领域有相当多的研究是基于 "类能量图".一个步态周期内的所有轮廓按照某种规则累计构成的模板统称为 "类能量图".能量图法不易受到轮廓噪声的干扰,有效地融 ...
- Python 实现步态能量图
步态识别领域有相当多的研究是基于 "类能量图".一个步态周期内的所有轮廓按照某种规则累计构成的模板统称为 "类能量图".能量图法不易受到轮廓噪声的干扰,有效地融 ...
- 步态能量图的实现(一)
目前为止,网上做步态能量图实现几乎没有,只有一两个,而且他们的方法应该来说还是有点复杂,现在实现一个更简单的方法,采用的数据库是USF的步态数据库,数据库中每张图片的大小是一致的,不过格式是.pbm, ...
最新文章
- 用Access作为后台数据库支撑,书写一个C#写入记录的案例
- 产品经理能力模型 答网友问
- MyBatisPlus中使用 @TableField完成字段自动填充
- 【MFC】CFrameWnd类详解
- MFC/VC++中怎样设置位图按钮并且位图不会覆盖文字——–位图按钮
- UTF-8和GBK有啥区别?
- 计算机二级考试Access教程
- 关于JS获取select值的两种实现方法
- P1616 疯狂的采药(python3实现)--80分
- php正则匹配js中变量_PHP正则表达式核心技术完全详解 第12节 [附加知识] 断言匹配...
- FPGA双沿发送之Verilog HDL实现
- python常见的数据结构
- 西北大学计算机学院王郭玲,西北大学关于表彰2010-2011学年度学生先进集体
- windows系统更换鼠标指针
- 【保险分享】出门旅游是否需要够买旅行险?
- AxureRP实战(二)Banner轮播图交互(基础篇)
- 《惢客创业日记》2021.06.28-30(周一)防骗的终极解决方案
- TCP TIME_WAIT解决方案
- 通过PLSQL查看所连接的ORACLE的版本
- 【CS231n 课程笔记】第八讲-----常见的深度学习框架,以及GPU和CPU介绍。
热门文章
- AnLink支持多种安卓手机的多屏协同类软件
- backtrack5安装edup ep-n1566无线网卡的rt3070驱动
- Sping的AOP理解
- 2021.10.10
- 【办公-WORD】Word限制文档部分可编辑(可编辑的限制文档)
- 基于intel soc+fpga智能驾驶舱和高级驾驶辅助系统软件设计(三)
- 2020年4月3日 上午3:39AppStore审核被拒(苹果登录缺失被拒)
- 万字长文 | 全(小区局域)网最强 TCP/IP 拥塞控制总结
- ESP32简单实现MQ-2烟雾浓度传感器(MicroPython+Thonny)
- 在线相册 ,图片上传, 基于 Spring boot vuejs element ui mysql 的项目