当前位置:   article > 正文

【姿态识别】基于HOG特征提取和GRNN广义回归神经网络的人体姿态识别matlab仿真_提取姿态特征

提取姿态特征

1.软件版本

matlab2013b

2.本算法理论知识

GRNN广义回归神经网络的理论基础是非线性核回归分析,非独立变量y相对于独立变量x的回归分析实际上是计算具有最大概率值的y。设随机变量x和y的联合概率密度函数为f (x ,y),已知x的观测值为X,则y相对于X的回归,即条件均值为:

 对于未知的概率密度函数f (x, y),可由x和y的观测样本经非参数估计得:

其中:和为随机变量x和y的样本观测值;为光滑因子;n为样本数目;p为随机变量x的维数。

    根据式子1和2可以得到:

 

        GRNN通常被用来进行函数逼近。它具有一个径向基隐含层和一个特殊的线性层。第一层和第二层的神经元数目都与输入的样本向量对的数目相等。GRNN结构如图1所示,整个网络包括四层神经元:输入层、模式层、求和层与输出层。


         输入层的神经元数目与学习样本中输入向量的维数m相等,每个神经元都是一个简单的分布单元,这些神经元直接将输入变量传递到隐含层中。

具体过程如下:

预处理:

第一步:由于采集到的深度图有的地方的深度值为零,首先用最邻近差值算法将为零的深度值用其周围的点代替;

第二步:用中值滤波算法对上一步骤获得的图像进行处理,去噪声;

头模型匹配:

第三步:首先对图像进行边缘检测,采用canny算法,对采集后的图像进行距离转换,然后用头模型(图片集中的头模型)进行头部匹配,最终定位人的位置;

提取人形:

第四步:由于人脚与地面处于同一深度,所以先用F响应滤波器对图像进行处理,提取人脚与地面的边缘;

第五步:采用区域增长算法,对定位的人进行提取,最终提取整个人形,;

特征提取:

第六步:用HOG方法对上一步获得的图像进行特征提取;

第七步:用深度差分算法对第五步获得的图像进行特征提取,特征函数为:

GRNN分类:

第八步:构造多分类GRNN,可以实现姿态识别的效果

3.部分源码

  1. clc;
  2. clear;
  3. warning off;
  4. addpath 'func\'
  5. load Step1.mat
  6. load Step5.mat
  7. %将趋于中的小空隙填满
  8. SE2 = strel('ball',3,3);
  9. I133 = (imdilate(double(255*I13),SE2,'same')); %dilate
  10. [r,c] = size(I133);
  11. I14 = zeros(r,c);
  12. for i = 1:r
  13. for j = 1:c
  14. if I133(i,j) > 100
  15. I14(i,j) = 1;
  16. end
  17. end
  18. end
  19. ff = uint8(255*I14);
  20. [rows,cols] = size(ff);
  21. [Ls,n] = bwlabel(ff);
  22. X1 = [];
  23. X2 = [];
  24. Y1 = [];
  25. Y2 = [];
  26. flag = 0;
  27. for i=1:n
  28. [r,c] = find(Ls==i);
  29. a1(i) = max(r);
  30. a2(i) = min(r);
  31. b1(i) = max(c);
  32. b2(i) = min(c);
  33. w(i) = b1(i)-b2(i);
  34. h(i) = a1(i)-a2(i);
  35. X1 = a2(i);
  36. X2 = a1(i);
  37. Y1 = b2(i);
  38. Y2 = b1(i);
  39. end
  40. I1s = I1;
  41. [r,c,k] = size(I1);
  42. I1s = I1;
  43. for i = 1:r
  44. for j = 1:c
  45. if I14(i,j) == 0
  46. I1s(i,j,:) = 0;
  47. end
  48. end
  49. end
  50. Images = I1s(X1:X2,Y1:Y2,:);
  51. figure;
  52. subplot(131);
  53. imshow(I1,[]);
  54. title('原始图');
  55. subplot(132);
  56. imshow(I14,[]);
  57. title('人体提取图');
  58. subplot(133);
  59. imshow(Images,[]);
  60. title('人体提取图');
  61. I = Images;
  62. %HOG特征提取
  63. FX_Number = 9; %9个方向
  64. FilterSize = 0; %高斯低通滤波器大小
  65. FilterDelta = 0; %标准偏差
  66. Angles = 180;%角度
  67. CellSize = 8; %分割大小8X8
  68. move_pixel = 8; %移动像素
  69. if size(I,3) == 3
  70. I_gray = rgb2gray(I);
  71. else
  72. I_gray = I;
  73. end
  74. I_gray = imresize(I_gray,[270,150]);
  75. %梯度和梯度角度计算
  76. [GradientX,GradientY,Gr] = func_Gradient(I_gray,FilterSize,FilterDelta);
  77. %角度计算
  78. A = func_HOG_Angle(GradientX,GradientY,Angles);
  79. %计算统计向量
  80. [height,width] = size(I_gray);
  81. Hog_Dat = func_Gradient_TJ(Gr,A,Angles,FX_Number,width,height,CellSize,move_pixel);
  82. Hog_Dat = Hog_Dat(:);
  83. save test_feature.mat Hog_Dat

4.仿真结论

测试样本如下:

 

 

 

 

 

 

 

5.参考文献

[1]侯香. 基于RGB-D的人体姿态识别方法研究[D]. 燕山大学.A09-41

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/303313
推荐阅读
相关标签
  

闽ICP备14008679号