部分核心程序:D197

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                       步态特征提取 宽高比特征以及角度特征close all;
clear;
clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Trainingfilenum = 3; % 训练人数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for filnum = 1:Trainingfilenum        % 第一部分: 从不同文件夹导入图片
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% %%%% %%%% 第一步:    导入二值化步态图片,图片来自中科院CASIA数据库B库%                              导入图集为一个步态周期,且以步态跨度最大时为起始时刻figure('NumberTitle','off','Name','数据库图集');%%%% %%%% 从图集中读取所有图片fileDir = ['gaitpic\Trainingset\cl',num2str(filnum),'\']; % 文件夹路径(这里指的图片文件)filePattern = '*.png';       % 文件格式(图片格式)dis = dir([fileDir,filePattern]); % 利用dir函数,返回fileDir路径下、filePattern% 所有文件(文件名、文件路径、日期、字节等)infilenames = {dis.name};         % 得到文件名infilenums = length(infilenames); % 得到文件个数for i=1:infilenums % 循环读取文件filen = [fileDir infilenames{i}]; % '\gaitpic\Trainingset\cl-filnum\第i个文件'gpic = imread(filen);             %  imread('gaitpic\Trainingset\cl-filnum\第i个文件')GaitMessage(filnum).GaitPicture(:,:,i) = gpic;imshow(GaitMessage(filnum).GaitPicture(:,:,i));title(['No.1-',num2str(i)]);end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end        % 第一部分 导入图片
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for filnum = 1:Trainingfilenum        % 第二部分: 图像预处理
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% 1、形态学处理figure('NumberTitle','off','Name','图像预处理-形态学处理');% picnums获取第filnum个人的步态图片张数[height,width,picnums] = size( GaitMessage(filnum).GaitPicture); % 选取形态学处理的结构元素 close_se = strel('disk',4);  % 边长为4的圆盘结构元素open_se = strel('disk',4);   % 边长为4的圆盘结构元素%%%% 进行边长为4的八边形 先闭后开运算for i=1:picnums % 对该人的所有步态图像进行形态学处理clo = imclose( GaitMessage(filnum).GaitPicture(:,:,i) ,close_se);  % 闭运算操作ope = imopen(clo,open_se);                                          % 开运算操作GaitMessage(filnum).Morphology(:,:,i) = ope;                % 形态学处理后的图片  imshow( GaitMessage(filnum).Morphology(:,:,i) );title(['No.2-1-',num2str(i)]);end%%%% %%%% 2、人像轮廓提取(边缘检测) - 骨骼提取(细化函数) - 生成轮廓骨骼图像 figure('NumberTitle','off','Name','图像预处理-边缘检测');for i=1:picnumsGaitMessage(filnum).Edgepic(:,:,i) = edge( GaitMessage(filnum).Morphology(:,:,i),'sobel');  % sobel算子GaitMessage(filnum).Skeletonpic(:,:,i) = bwmorph( GaitMessage(filnum).Morphology(:,:,i),'thin',Inf); % 人体细化GaitMessage(filnum).EdgeandSkeleton(:,:,i) = GaitMessage(filnum).Edgepic(:,:,i) + GaitMessage(filnum).Skeletonpic(:,:,i); % 生成轮廓骨骼图% 保存下来,保存路径为:gaitpic/EdgeandSkeleton/all/filnum-es-i.pngimwrite( GaitMessage(filnum).EdgeandSkeleton(:,:,i) , strcat(['gaitpic/EdgeandSkeleton/all/',num2str(filnum),'es',num2str(i),'.png']));% 画图部分
%        imshow( GaitMessage(filnum).Edgepic(:,:,i) );title(['No.2-2-',num2str(i)]); % 显示轮廓图             ;
%        imshow( GaitMessage(filnum).Skeletonpic(:,:,i) );title(['No.2-2-',num2str(i)]); % 显示骨骼图    imshow( GaitMessage(filnum).EdgeandSkeleton(:,:,i) );title(['No.2-2-',num2str(i)]); % 显示轮廓骨骼图% 画图结束end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end        % 第二部分: 图像预处理
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for filnum = 1:Trainingfilenum        % 第三部分: 步态周期检测与提取
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% picnums获取第filnum个人的步态图片张数[height,width,picnums] = size( GaitMessage(filnum).GaitPicture); %%%% %%%% 获得每个轮廓的最小外接矩形 & 以其矩形的长宽作为人像高宽for i=1:picnums  imbiEdgepic = imbinarize( GaitMessage(filnum).Morphology(:,:,i) ); % 步态图二值化%%%% regionprops函数用于返回图片的属性,求各个轮廓的最小外接矩形GaitMessage(filnum).BoundBs(1,i) = regionprops(imbiEdgepic,'BoundingBox'); % 利用函数度量图像区域属性,这里度量最小外接矩形% 返回一个结构数据,其内是有关最小外接矩形的位置% 长、宽信息,调用格式:s.BoundingBox% s.BoundingBox = [x,y,w(△x),h(△y)]%%%% 求各个对应的宽高比rec_width = GaitMessage(filnum).BoundBs(i).BoundingBox(3); % 宽rec_heigh = GaitMessage(filnum).BoundBs(i).BoundingBox(4); % 高GaitFeatures(filnum).Aspectratio(1,i) =  rec_width / rec_heigh; % 宽高比特征end% 画图部分:figure('NumberTitle','off','Name','步态周期检测-宽高比');plot(GaitFeatures(filnum).Aspectratio); title(['No.3-',num2str(filnum),'步态集-人像宽高比变化曲线']);% 画出面积走势图% 画图结束%%%% %%%% 取连续三个局部最小值之间为一个周期(也可以取得连续三个局部最大值之间为一个周期)%%%% 利用寻找峰值函数找到局部极值[peas,locs] = findpeaks( -GaitFeatures(filnum).Aspectratio );% 由于想寻找局部极小值,而该函数是寻找局部极大值,所以对其取负peas = - peas; % 将值还原   % 由于本次未使用这个值,所以注释掉了;如果需要使用,则需要将注释去除,不然值是所需值的负数%%%% 取连续三个局部最小值之间为一个周期,第一个极小为起点,第三个极小为终点periodstart = 1;periodend = 3;GaitMessage(filnum).periodlocs = [locs(periodstart) locs(periodend)];%%%% 取宽高比周期GaitMessage(filnum).mPeriod = GaitFeatures(filnum).Aspectratio(GaitMessage(filnum).periodlocs(1):GaitMessage(filnum).periodlocs(2));% 画图部分:figure('NumberTitle','off','Name','步态周期检测-周期提取');plot(GaitMessage(filnum).mPeriod);title(['No.3-',num2str(filnum),'步态集-步态周期内人像宽高比变化曲线']);% 画出面积走势图% 画图结束%%%% 取周期内的步态图片GaitMessage(filnum).GaitPeriod = GaitMessage(filnum).EdgeandSkeleton(:,:,GaitMessage(filnum).periodlocs(1):GaitMessage(filnum).periodlocs(2));[height,width,picnums] = size( GaitMessage(filnum).GaitPeriod ); for i = 1:picnums%保存下来,保存路径为:gaitpic/EdgeandSkeleton/period/filnum-es-i.pngimwrite( GaitMessage(filnum).GaitPeriod(:,:,i) , strcat(['gaitpic/EdgeandSkeleton/period/',num2str(filnum),'es',num2str(i),'.png']));end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end        % 第三部分: 步态周期检测
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for filnum = 1:Trainingfilenum        % 第四部分: 角度特征提取
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% %%%% %%%% 第四步:    步态特征提取sectornums = 2; % 分区数,即将下半身分为两个分区,将人像以垂直轴(y轴)为分界线,左右分别为一个分区%%%% %%%% 整个过程角度特征距离特征       以质心为原点,对下半身采用2分区,提取各个分区信息以及轮廓像素信息,[GaitFeatures(filnum).nthsectorFeatures,Outlinepixelmessage,centroid] = test_Outlinepixel2Centroid_AngleDistance(GaitMessage(filnum).EdgeandSkeleton,sectornums);% 只获取一个步态周期内的角度特征for nths = 1:sectornumsGaitFeatures(filnum).nthsectorPeriodFeatures(nths).PeriodaverageAngle = GaitFeatures(filnum).nthsectorFeatures(nths).averageAngle(GaitMessage(filnum).periodlocs(1):GaitMessage(filnum).periodlocs(2));end%%%% 画图部分:画出该人步态角度特征figure('NumberTitle','off','Name','同一人整个过程-角度特征');for i = 1:sectornumsplot(GaitFeatures(filnum).nthsectorFeatures(i).averageAngle - 270);title(['No.4-',num2str(filnum),'-1','同一人的1/2分区-角度均值变化曲线']) % 画出角度走势图hold onend% 对应的周期角度特征曲线figure('NumberTitle','off','Name','同一人步态周期内-角度特征');for i = 1:sectornumsplot(GaitFeatures(filnum).nthsectorPeriodFeatures(i).PeriodaverageAngle - 270);title(['No.4-',num2str(filnum),'-2','同一人的1/2分区-周期角度均值变化曲线']) % 画出角度走势图hold onend%%%% 画图结束%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end        % 第四部分: 角度特征提取
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for filnum = 1:Trainingfilenum        % 画图部分-画出当前所有测试人员的角度特征曲线
%  注:这里给出最多画10人不同曲线的代码,由于曲线线条形状、颜色不同,采用switch语句来画
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% 画图部分: 画出当前所有测试人员的角度特征曲线switch filnumcase 1 figure('NumberTitle','off','Name','所有人整个过程-角度特征');title('不同行人左右分区角度特征比较');% 画出走势图for i = 1:sectornumsplot(GaitFeatures(1).nthsectorFeatures(i).averageAngle - 270,'b-o','MarkerFaceColor','b');hold onendcase 2 for i = 1:sectornumsplot(GaitFeatures(2).nthsectorFeatures(i).averageAngle - 270,'g-x','MarkerFaceColor','g');hold onendcase 3 for i = 1:sectornumsplot(GaitFeatures(3).nthsectorFeatures(i).averageAngle - 270,'r-*','MarkerFaceColor','r');hold onendcase 4 for i = 1:sectornumsplot(GaitFeatures(4).nthsectorFeatures(i).averageAngle - 270,'c-p','MarkerFaceColor','c');hold onendcase 5 for i = 1:sectornumstitle('不同行人左右分区角度特征比较');% 画出走势图plot(GaitFeatures(5).nthsectorFeatures(i).averageAngle - 270,'k-s','MarkerFaceColor','k');hold onendcase 6 figure('NumberTitle','off','Name','步态角度特征');title('不同行人左右分区角度特征比较');% 画出走势图for i = 1:sectornumsplot(GaitFeatures(6).nthsectorFeatures(i).averageAngle - 270,'b-o','MarkerFaceColor','b');hold onendcase 7 for i = 1:sectornumsplot(GaitFeatures(7).nthsectorFeatures(i).averageAngle - 270,'g-x','MarkerFaceColor','g');hold onendcase 8 for i = 1:sectornumsplot(GaitFeatures(8).nthsectorFeatures(i).averageAngle - 270,'r-*','MarkerFaceColor','r');hold onendcase 9 for i = 1:sectornumsplot(GaitFeatures(9).nthsectorFeatures(i).averageAngle - 270,'c-p','MarkerFaceColor','c');hold onendcase 10 for i = 1:sectornumstitle('不同行人左右分区角度特征比较');% 画出走势图plot(GaitFeatures(10).nthsectorFeatures(i).averageAngle - 270,'k-s','MarkerFaceColor','k');hold onendend
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end        % 画图部分结束-画出当前所有测试人员的角度特征曲线
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for filnum = 1:Trainingfilenum        % 画图部分-画出当前所有测试人员的角度特征曲线
%  注:这里给出最多画10人不同曲线的代码,由于曲线线条形状、颜色不同,采用switch语句来画
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    %%%% %%%% 对应的周期角度特征曲线switch filnumcase 1 figure('NumberTitle','off','Name','不同行人步态周期内角度特征');title('不同行人左右分区角度特征比较');% 画出走势图for i = 1:sectornumsplot(GaitFeatures(1).nthsectorPeriodFeatures(i).PeriodaverageAngle - 270,'b-o','MarkerFaceColor','b');hold onendcase 2 for i = 1:sectornumsplot(GaitFeatures(2).nthsectorPeriodFeatures(i).PeriodaverageAngle - 270,'g-x','MarkerFaceColor','g');hold onendcase 3 for i = 1:sectornumsplot(GaitFeatures(3).nthsectorPeriodFeatures(i).PeriodaverageAngle - 270,'r-*','MarkerFaceColor','r');hold onendcase 4 for i = 1:sectornumsplot(GaitFeatures(4).nthsectorPeriodFeatures(i).PeriodaverageAngle - 270,'c-p','MarkerFaceColor','c');hold onendcase 5 for i = 1:sectornumstitle('不同行人左右分区角度特征比较');% 画出走势图plot(GaitFeatures(5).nthsectorPeriodFeatures(i).PeriodaverageAngle - 270,'k-s','MarkerFaceColor','k');hold onendcase 6 figure('NumberTitle','off','Name','步态角度特征');title('不同行人左右分区角度特征比较');% 画出走势图for i = 1:sectornumsplot(GaitFeatures(6).nthsectorPeriodFeatures(i).PeriodaverageAngle - 270,'b-o','MarkerFaceColor','b');hold onendcase 7 for i = 1:sectornumsplot(GaitFeatures(7).nthsectorPeriodFeatures(i).PeriodaverageAngle - 270,'g-x','MarkerFaceColor','g');hold onendcase 8 for i = 1:sectornumsplot(GaitFeatures(8).nthsectorPeriodFeatures(i).PeriodaverageAngle - 270,'r-*','MarkerFaceColor','r');hold onendcase 9 for i = 1:sectornumsplot(GaitFeatures(9).nthsectorPeriodFeatures(i).PeriodaverageAngle - 270,'c-p','MarkerFaceColor','c');hold onendcase 10 for i = 1:sectornumstitle('不同行人左右分区角度特征比较');% 画出走势图plot(GaitFeatures(10).nthsectorPeriodFeatures(i).PeriodaverageAngle - 270,'k-s','MarkerFaceColor','k');hold onendend %%%% %%%% 画图结束
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end        % 画图部分结束-画出当前所有测试人员的角度特征曲线
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

基于CASIA-GaitDatasetB步态图像轮廓数据库的步态周期检测与步态角度特征MATLAB源码相关推荐

  1. 基于中科院-CASIA-GaitDatasetB步态图像轮廓数据库的步态周期检测与步态角度特征

    基于中科院-CASIA-GaitDatasetB步态图像轮廓数据库的步态周期检测与步态角度特征    由于最近研究的需要,开始将万恶的双手伸向了人体下肢步态(如步态周期检测.步态特征提取.步态相的划分 ...

  2. 基于确定性最大似然算法 DML 的 DoA 估计,用牛顿法实现(附 MATLAB 源码)

    本文首次在公众号[零妖阁]上发表,为了方便阅读和分享,我们将在其他平台进行自动同步.由于不同平台的排版格式可能存在差异,为了避免影响阅读体验,建议如有排版问题,可前往公众号查看原文.感谢您的阅读和支持 ...

  3. 【交通标志识别】基于matlab Hog+SVM路标检测与识别【含Matlab源码 1715期】

    一.SVM路标检测识别简介 1 路标识别 完整的路标识别系统包括:图像的获取与预处理,图像分割(路标定位),特征提取,模式分类(路标识别)等部分.其中模式分类是系统的关键技术.较常用的模式分类方法是神 ...

  4. 【微电网优化】基于粒子群算法求解热电联供型微电网经济运行优化问题含Matlab源码

    1 简介 面对全球环境污染和能源危机的双重压力,世界各国将焦点转向太阳能.风能等清洁可再生能源.微电网是组织和利用可再生能源发电的重要途径之一.本文以微电网的能量优化调度为研究对象,建立了微电网能量优 ...

  5. 【布局优化】基于Memetic算法求解集群无线传感器网络中节能覆盖控制优化问题含Matlab源码

    1 简介 Memetic 算法是一种结合遗传算法和局部搜索策略的新型智能算法.通过与局部优化策略的结合,局部调整进化后产生的新个体,强化了算法的局部搜索能力.Memetic 算法区别于遗传算法的关键是 ...

  6. 【图像隐写】DCT文本嵌入+提取【含GUI Matlab源码 1850期】

    ⛄一.DCT数字水印简介 1 前言 随着网络通信技术的发展,社会节奏的加快,网络通信技术的成熟,需求也开始发生改变,人们对便利的需求也越来越大,通过将媒体信息数字化,使得信息表达的精准和效率得到了明显 ...

  7. 【水果检测】基于计算机视觉实现柑橘质量检测及分级系统含Matlab源码

    ​1 简介 水果分级技术能够保证水果的质量,提高消费者的满意度,增强水果产业的竞争力和利润水平.农业现代化进程的加快使得农产品品质检测和分级技术显得更加重要.在我国,水果品质检测绝大部分仍停留在靠人工 ...

  8. 【路径规划】基于遗传算法求解三维装载下的汽车零部件循环取货路径规划问题含Matlab源码

    1 简介 在考虑汽车零部件包装箱长.宽.高等三维尺寸的约束下,以配送中心为原点,分派多辆同一规格的货车到n个供应商处取货,最后回到配送中心.本章所构建的三维装载约束下的汽车零部件循环取货路径优化模型要 ...

  9. 【路径规划】基于粒子群算法求解带时间窗的车辆路径规划问题VRPTW模型matlab源码

    1 模型简介 将粒子群算法(PSO)应用于带时间窗车辆路径优化问题(VRPTW),构造车辆路径问题的粒子表达方法,建立了此问题的粒子群算法,并与遗传算法作了比较.实验结果表明,粒子群算法可以快速,有效 ...

最新文章

  1. fcm算法c语言实现,基于特征权重的FCM算法研究及应用
  2. C语言程序设计之回调函数实现方法
  3. Scala函数简化写法
  4. 大学学习论坛 需求分析报告.菜鸟版.多喷.看看问题所在
  5. DataTable实现分组
  6. win7关闭系统索引服务器,win7系统如何关闭索引服务
  7. 厚积薄发!华为云7篇论文被AAAI收录,2021年AI行业技术风向标看这里!
  8. java数组实验心得体会_JAVA实验报告心得
  9. 如何通过局域网共享文件夹
  10. 全球与中国泄漏吸收枕头市场深度研究分析报告
  11. 嵌入式(文件)数据库与数据库服务器的区别
  12. Anaconda中pkgs文件夹详解
  13. 关于Android 4.4(华为)调用系统相机问题
  14. 我们为你精选了一份Jupyter/IPython笔记本集合-上篇
  15. npm更新和nodejs更新
  16. 线下停摆,线上狂欢,疫情下“云健身”火了!
  17. 【论文泛读】Modeling Intra and Inter-modality Incongruity for Multi-Modal Sarcasm Detection
  18. HTML基础总结笔记
  19. linux C 遍历目录及其子目录 opendir -> readdir -> closedir
  20. 网络的专家—防火墙!!转自 百度

热门文章

  1. iOS 应用开发基础翻译 改为 笔记和总结
  2. powerdesigner反向MySQL5.1数据库 生成ER图
  3. 如何解决:Android中 Error generating final archive: Debug Certificate expired on 10/09/18 16:30 的错误...
  4. UA PHYS515A 电磁理论III 静磁学问题3 静磁学问题的边界条件与标量势方法的应用
  5. UA STAT675 统计计算I 随机数生成1 随机数生成器的一般理论
  6. VC++设置软件断点和“XXX已停止工作“对话框
  7. ReactOS 架构
  8. FFT和Matlab中操作FFT
  9. Yii2.0 limit(1)与one()
  10. [转载]Yacc基础