目录

1.算法仿真效果

2.MATLAB核心程序

3.算法涉及理论知识概要

4.完整MATLAB


1.算法仿真效果

matlab2013b仿真结果如下:

2.MATLAB核心程序

.........................................................................
%%
%读取视频数据
%获得视频,从视频中提取每帧对应的jpg图像,这样方便后面的处理,如果视频序列默认是连续图像,那么这段语句就可以不用
%支持视频格式avi格式
if Start(1) == 1disp('read the avi...');[Obj,frameNum_Original]     = get_AVI(FileName_AVI);%将视频保存为jpg形式,方便对比处理[pixel_original,pixel_gray] = vedio_op(Obj,frameNum_Original);[RR,CC,KK]  = size(pixel_gray);for i = 1:min(frameNum_Original,Process_frames)pixel_gray2(:,:,i)       = imresize(pixel_gray(:,:,i),[RR/2,CC/2]);pixel_original2(:,:,:,i) = imresize(pixel_original(:,:,:,i),[RR/2,CC/2]);end   %保存数据save Save_Temp\Start1\Start01.mat pixel_gray2     frameNum_Original RR CCsave Save_Temp\Start1\Start02.mat pixel_original2 frameNum_Original RR CCclear Obj pixel_original pixel_gray pixel_original2 pixel_gray2 frameNum_Originaldisp('read the avi over...');pause(8);close all;
end....................................................................figure;for tt = 1:min(frameNum_Original,Process_frames)ttsubplot(221)imshow(image_sequence2(:,:,:,tt));title('原始图像');subplot(222)imshow(uint8(background_Update2));title('背景图像更新');subplot(223)imshow(Images02(:,:,tt));title('运动目标检测');subplot(224)imshow(Images22(:,:,tt));title('运动目标提取');pause(0.2);endclear image_sequence2 background_Update2 Images02 Images22 pixel_original2 frameNum_Original2 RR CC disp('Get the Background over...');pause(8);close all;
end    %%
%姿态读取
if Start(3) == 1disp('Start read AMC and ASF file...');load Save_Temp\Start2\Start01.mat;skel                         = acclaimReadSkel(FileName_ASF);[channels, skel]             = acclaimLoadChannels(FileName_AMC,skel);[handle,channels,skelStruct] = skelPlayData(skel,channels); if  SHOW_BJ_SKLer == 1for j = 1:size(channels,1)pause(0.005)skelModify(handle,channels(j,:),skelStruct);endend%假设人体姿态空间为X,对于特定的运动选取一段人体运动数据作为训练数据   %矩阵XX0 = channels';whole_times = size(X0,2);MM          = size(X0,1); %计算每个姿态的时间均值for j = 1:MMc(j) = mean(X0(:,j));end%获得人体数据for j = 1:whole_timesX(:,j) = X0(:,j) - c';end   %对矩阵X作奇异值分解,得到主方向[U,S,V] = svd(X);%姿态向量投影到子空间for j = 1:whole_timesXs(:,j) = U(:,1:mmer)'*X(:,j);%UT*(x-c)endfigure;plot3(Xs(1,:),Xs(2,:),Xs(3,:),'bo');title('三维流形空间中的表示');grid on;xlabel('X');ylabel('Y');   zlabel('Z');%视频帧数量和节点帧数量一致化Rate = round(whole_times/frameNum_Original2);skel                         = acclaimReadSkel(FileName_ASF);[channels, skel]             = acclaimLoadChannels(FileName_AMC,skel);[handle,channels,skelStruct] = skelPlayData(skel,channels);    save Save_Temp\Start3\Start01.mat skel handle channels skelStruct whole_times MM c X0 X U S V Xs Rateclear skel handle channels skelStruct whole_times MM c X0 X U S V Xs Ratedisp('Read AMC and ASF file over...'); pause(8);close all;
end%%
%基于模拟退火的粒子群优化算法(此处将会未来做改进版本)
if Start(4) == 1disp('SAPSO...');load Save_Temp\Start2\Start01.mat load Save_Temp\Start3\Start01.mat%计算最大值和最小值for i = 1:whole_timesXmin(i) = min(Xs(:,i));Xmax(i) = max(Xs(:,i));Vmin(i) = alphaer*Xmin(i);Vmax(i) = alphaer*Xmax(i);       end%K均值聚类Data               = Xs;[row,col]          = size(Data);Center             = Data(:,1:Cluster_Numer);%进行初始的迭代[KindData,KindNum] = func_Kmeans_Cluster(Center,Data);NewCenter          = func_NewCenter(KindData,KindNum,row);while (sum(sum(NewCenter ~= Center))) & StepCenter             = NewCenter;[KindData,KindNum] = func_Kmeans_Cluster(Center,Data);NewCenter          = func_NewCenter(KindData,KindNum,row);Step               = Step-1;end  for i = 1:Cluster_Numerfor j = 1:length(Data)if KindData(1,j,i) ~= 0 | KindData(2,j,i) ~= 0if i == 1plot3(KindData(1,j,i),KindData(2,j,i),KindData(3,j,i),'ro');hold on      endif i == 2plot3(KindData(1,j,i),KindData(2,j,i),KindData(3,j,i),'bo');hold on      end        if i == 3plot3(KindData(1,j,i),KindData(2,j,i),KindData(3,j,i),'go');hold on      end     if i == 4plot3(KindData(1,j,i),KindData(2,j,i),KindData(3,j,i),'ko');hold on      end           if i == 5plot3(KindData(1,j,i),KindData(2,j,i),KindData(3,j,i),'mo');hold on      end         endendend
................................................................................%画最佳适应度值figure(4);plot(V_score2,'b');xlabel('迭代次数');xlabel('适应度值');grid on%计算训练误差%显示误差load Save_Temp\Start2\Start01.mat load Save_Temp\Start3\Start01.mat%计算其误差Lss = min(length(PP),length(X_rate));for i = 1:MMErr(i) = (abs(sum((PP(i,1:Lss)) - X_rate(i,1:Lss))))/length(X_rate(i,1:Lss));endfigure(5);subplot(211);bar(Err1);xlabel('Frame No.');ylabel('Mean Error');grid on; subplot(212);plot(Err1,'r-o');xlabel('Frame No.');ylabel('Mean Error');grid on; figure(6);subplot(211);bar(Err2);xlabel('Frame No.');ylabel('Mean Error');grid on; subplot(212);plot(Err2,'r-o');xlabel('Frame No.');ylabel('Mean Error');grid on; %显示最后的姿态轨迹结果和标志结果的对比load Save_Temp\Start4\W.matfigure(7);plot(w);grid on;    figure(8);skel                         = acclaimReadSkel(FileName_ASF);[channels, skel]             = acclaimLoadChannels(FileName_AMC,skel);[handle,channels,skelStruct] = skelPlayData(skel,channels); %标准数据for j = 1:Lsspause(0.05)skelModify(handle,channels(Rate*j,:),skelStruct);end%预测数据for j = 1:Lsspause(0.05)skelModify(handle,PP(:,j),skelStruct);end   %显示姿态估计的最终效果:原始图像,标准姿态,估计姿态,叠加效果disp('cal the error over...'); pause(1);
end
09_032_m

3.算法涉及理论知识概要

介绍了运动人体的剪影提取,在视频序列中,由于受到复杂背景、遮挡、光照变化等因素的影响,通常的背景分离算法无法有效的对运动人体进行提取,本文介绍了一种基于高斯混合模型和帧差法相结合的运动目标提取算法,从而获得了精度较高的运动人体剪影。

由于人体姿态运动数据通常是高维矩阵数据,在处理之前一般需要进行降维度处理,首先通过传统的PCA降维算法进行处理。然后分析了PCA算法的缺陷和不足,并在PCA算法的基础上提出了一种基于概率信息的改进PCA算法。在PCA的基础上,加入一个噪声变量,用来调整后面N-M个高维度的数据的精度。 通过最大似然估计进行估计这个噪声模型,然后叠加到PCA模型的高维数据上。

对降维后的数据进行粒子群的姿态估计,这里首先使用PSO粒子群优化算法进行优化,然后使用模拟退火算法进行优化,最后通过对比分析,提出了一种基于基因突变的变权值模拟退火粒子群优化算法,通过该算法,可以大大改进最后的收敛效果,使得最后的收敛值趋于稳定收敛,收敛值达到更小的误差水平,并且不存在粒子突变的情况。

最后,对CMU数据库中的不同运动姿态进行仿真,实验结果仿真可知本文方法不仅具有良好的计算效率,同时具有良好的收敛性和全局搜索能力,能准确估计和跟踪单目视频中的人体姿态。


目前,运动捕获数据有多种格式,应用较为广泛的主要有BVH、ASF/AMC、FBK、C3D以及HTR等。其中ASF/AMC是最常用的数据格式。因此,这里,我们重点对ASF/AMC的数据格式进行介绍。

ASF/AMC,全称Acclaim Skeleton File/Acclaim Motion Data,其主要由两个文件组成:一个骨架文件和一个运动文件。ASF是骨架文件,AMC是运动文件,对于每一个特定的动作,都是由骨架来完成的,这些数据,可以从CMU数据库中获得。

下面对ASF骨架数据进行简单的介绍,其基本结构如下图所示:

:version”指示出骨架定义的版本;

:name”允许对骨架数据进行命名;

:units”定义了各种类型数据的单位和一些参数的默认值;

:documentation”存储的是一些起到说明作用的文档信息;

:root”部分定义了场景中一个特定的片段,它是骨架层次结构中的根节点,除了不包含方向和长度信息之外,和其他关节是一样的。其中”axis”定义了根对象的旋转顺序,”order”指出了应用于根节点的运动通道信息,并将以这样的顺序出现在AMC文件中。”Position”和”orientation”后面的信息给出了根节点的起始位置和方位,一般情况下都是0。

:bonedata”部分对于层次结构中的其他骨骼信息分别进行了描述,对每个骨骼的定义都是以”begin”,开始,以”end”结束的。在对各个骨骼的定义中,包含以下几个部分:”id”是一个唯一的数字,标识了当前骨骼的序号,这一项并不是必须的,因为每段骨骼都有自己的名称,而且这个名称在层次部分和AMC文件中都被用到。”name”定义了骨骼的名称,需要注意的是,每个骨骼必须有一个唯一的名称。”direction”指出了骨骼的方向,根据该信息,可以知道如何绘制该骨骼,并定义了从父骨骼到子骨骼的方向。方向信息和长度信息决定了一个骨骼相对于其父骨骼的偏移量。”length”定义了骨骼的长度信息。”axis”部分给出了骨骼的旋转轴。通过将旋转轴指定为一个独立的值,运动数据可以独立于绘制和层次信息,这对于那些需要解决万向节死锁问题的应用来说显得尤为重要。”dof”指定了运动通道的数量和这些通道在AMC文件中出现的顺序。如果某个骨骼不包含”dof”部分,那就认为该骨骼没有任何运动数据。”limits”部分给出了自由度中指定的通道的限制信息。对于每个通道而言,限制信息都是以一对数字的形式给出的,规定了该通道允许的最小值和最大值,在运动编辑等过程中,这部分数据用来限制旋转的范围。

:hierarchy“部分描述了各段骨骼之间的层次关系。

4.完整MATLAB

V

m基于PCA-SA低纬紧致姿态空间学习算法的单目视频人体姿态提取matlab仿真相关推荐

  1. 【单目视频人体姿态】基于ASF骨架数据的单目视频人体姿态提取算法的matlab仿真

    1.软件版本 matlab2013b 2.算法仿真概述 基于混合高斯模型的背景提取 单高斯背景模型可以用来描述简单微变的场景,但是当场景多存在树叶,树枝的摇动,波澜的水面,飘舞的旗帜等状态的时候,呈现 ...

  2. 【今晚七点】:单目3D人体姿态估计的挑战和探索

    点击上方"LiveVideoStack"关注我们 单目3D人体姿态估计(aka. 3D HPE)在视频动作分析.计算机图形学(CG)等领域有广泛的应用场景,同时,由于无需复杂的人体 ...

  3. ICCV 2019 | 基于无标签单目视频序列的单帧三维人体姿态估计算法

    作者丨王璇 学校丨西安交通大学 研究方向丨人体姿态估计 我们都知道,要训练一个准确的三维人体姿态估计深度神经网络,需要大量有三维标签的数据,越多越好.而在现实生活中,我们很难得到很多有标签数据,而无标 ...

  4. 重磅直播|GDR-Net:基于几何信息指导的单目6D物体姿态估计算法(CVPR2021作者开讲啦)...

    大家好,本公众号现已开启线上视频公开课,主讲人通过B站直播间,对3D视觉领域相关知识点进行讲解,并在微信群内完成答疑. 本期由清华大学自动化系BBNC Lab王谷博士分享,分享的主题为<基于几何 ...

  5. OpenPose 升级,CMU提出首个单网络全人体姿态估计网络,速度大幅提高

    点击我爱计算机视觉标星,更快获取CVML新技术 昨天,曾经开源OpenPose的卡内基梅隆大学(CMU)公布了ICCV 2019 论文 Single-Network Whole-Body Pose E ...

  6. 【单目标优化求解】基于matlab增强型黑猩猩优化器算法求解单目标优化问题【含Matlab源码 2013期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[单目标优化求解]基于matlab增强型黑猩猩优化器算法求解单目标优化问题[含Matlab源码 2013期] 点击上面蓝色字体,直接付费下 ...

  7. 单目相机三维姿态解算

    单目相机三维姿态解算 Abstract:This passage mainly describes how to solve pose(Yaw,Pitch,Roll)with signal camer ...

  8. 【优化算法】基于matlab量子粒子群算法求解单目标优化问题【含Matlab源码 2203期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[优化算法]基于matlab量子粒子群算法求解单目标优化问题[含Matlab源码 2203期] 点击上面蓝色字体,直接付费下载,即可. 获 ...

  9. m基于GA遗传优化+SA模拟退火的混合改进算法的多产品多机器生产优化matlab仿真

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 这里,我们首先介绍一下改进算法的基本原理,按照前面说的,这里我们主要将GA和SA进行合并. 这里,我 ...

最新文章

  1. keras 与tensorflow绑定在一起用的,何以见得
  2. Matlab编程序设计数字滤波器
  3. c语言 判断链表之中是否有环,判断单链表中是否存在环(网上说的笔试题)
  4. 一个历史遗留问题,引发的linux内存管理的‘血案’
  5. HarmonyOS硬件创新合作伙伴,【HarmonyOS】HarmonyOS智能硬件开发学习指南 - HDC2020
  6. *【CodeForces - 859C 】Pie Rules (博弈dp,时光倒流)
  7. 各种语言的 Hello World
  8. centos mysql 5.5.57_Centos MySQL 5.7安装、升级教程
  9. 九项路考(1)----铁饼神功
  10. 美图回应与华为合作:华为没有使用美图的任何影像技术
  11. Dart入门—函数与运算符
  12. read time out解决方法_quot;read-on-writequot; in InnoDB
  13. python如何输出结果到txt_python 执行结果输出为txt
  14. coolfire文章之一
  15. 阿里云ECS服务器Linux-ubuntu18环境搭建
  16. 采蘑菇电脑c语言,英菲尼迪终于升级英菲尼迪Q50L,内行人告诉你怎么选还配备主动降噪、胎压显示!凯美瑞都比不上它! 早买早享受...
  17. javac.exe 、 java.exe、 javaw.exe 、 javaws.exe有什么区别?
  18. 【C语言打印红色玫瑰花】
  19. 转载:Java语言学习
  20. oracle大数据量删除方案

热门文章

  1. Elasticsearch -删除索引(index)
  2. linux下添加开机启动程序、脚本、服务
  3. 使用PyTorch训练与评估自己的Twins网络
  4. Frp内网端口映射教程
  5. WPS 2019 使用技巧(未完待续)
  6. 在虚拟机上安装ftp服务器,vm虚拟机ftp服务器配置(在虚拟机里搭建ftp)
  7. python隐藏画笔_Python14_绘图小海龟(turtle)
  8. 怎么把录音导入库乐队_将音频和 MIDI 文件导入到 iPad 版库乐队
  9. 频分复用、时分复用和码分复用
  10. 外汇监管机构哪个好?怎么选择?