赞
踩
matlab2013b
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,可以实现姿态识别的效果
- clc;
- clear;
- warning off;
- addpath 'func\'
-
- load Step1.mat
- load Step5.mat
-
-
-
- %将趋于中的小空隙填满
- SE2 = strel('ball',3,3);
- I133 = (imdilate(double(255*I13),SE2,'same')); %dilate
- [r,c] = size(I133);
- I14 = zeros(r,c);
- for i = 1:r
- for j = 1:c
- if I133(i,j) > 100
- I14(i,j) = 1;
- end
- end
- end
-
-
- ff = uint8(255*I14);
- [rows,cols] = size(ff);
- [Ls,n] = bwlabel(ff);
- X1 = [];
- X2 = [];
- Y1 = [];
- Y2 = [];
- flag = 0;
-
- for i=1:n
- [r,c] = find(Ls==i);
- a1(i) = max(r);
- a2(i) = min(r);
- b1(i) = max(c);
- b2(i) = min(c);
- w(i) = b1(i)-b2(i);
- h(i) = a1(i)-a2(i);
- X1 = a2(i);
- X2 = a1(i);
- Y1 = b2(i);
- Y2 = b1(i);
- end
-
- I1s = I1;
- [r,c,k] = size(I1);
- I1s = I1;
- for i = 1:r
- for j = 1:c
- if I14(i,j) == 0
- I1s(i,j,:) = 0;
- end
- end
- end
-
- Images = I1s(X1:X2,Y1:Y2,:);
-
-
-
-
-
- figure;
- subplot(131);
- imshow(I1,[]);
- title('原始图');
- subplot(132);
- imshow(I14,[]);
- title('人体提取图');
- subplot(133);
- imshow(Images,[]);
- title('人体提取图');
-
-
- I = Images;
- %HOG特征提取
- FX_Number = 9; %9个方向
- FilterSize = 0; %高斯低通滤波器大小
- FilterDelta = 0; %标准偏差
- Angles = 180;%角度
- CellSize = 8; %分割大小8X8
- move_pixel = 8; %移动像素
-
- if size(I,3) == 3
- I_gray = rgb2gray(I);
- else
- I_gray = I;
- end
- I_gray = imresize(I_gray,[270,150]);
-
- %梯度和梯度角度计算
- [GradientX,GradientY,Gr] = func_Gradient(I_gray,FilterSize,FilterDelta);
- %角度计算
- A = func_HOG_Angle(GradientX,GradientY,Angles);
- %计算统计向量
- [height,width] = size(I_gray);
- Hog_Dat = func_Gradient_TJ(Gr,A,Angles,FX_Number,width,height,CellSize,move_pixel);
- Hog_Dat = Hog_Dat(:);
-
- save test_feature.mat Hog_Dat
测试样本如下:
[1]侯香. 基于RGB-D的人体姿态识别方法研究[D]. 燕山大学.A09-41
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。