基于LVQBPSVM神经网络算法人脸朝向识别Word文档格式.docx

上传人:b****4 文档编号:14142988 上传时间:2022-10-19 格式:DOCX 页数:23 大小:634KB
下载 相关 举报
基于LVQBPSVM神经网络算法人脸朝向识别Word文档格式.docx_第1页
第1页 / 共23页
基于LVQBPSVM神经网络算法人脸朝向识别Word文档格式.docx_第2页
第2页 / 共23页
基于LVQBPSVM神经网络算法人脸朝向识别Word文档格式.docx_第3页
第3页 / 共23页
基于LVQBPSVM神经网络算法人脸朝向识别Word文档格式.docx_第4页
第4页 / 共23页
基于LVQBPSVM神经网络算法人脸朝向识别Word文档格式.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

基于LVQBPSVM神经网络算法人脸朝向识别Word文档格式.docx

《基于LVQBPSVM神经网络算法人脸朝向识别Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于LVQBPSVM神经网络算法人脸朝向识别Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。

基于LVQBPSVM神经网络算法人脸朝向识别Word文档格式.docx

1.2.2设计思路

通过观察不难发现,当人脸面朝不同方向时,眼睛在图像中的位置差别较大。

因此,可以考虑将图片中描述眼睛位置的特征信息提取出来作为LVQ神经网络的输入,5个朝向分别用1,2,3,4,5表示,作为LVQ神经网络的输出。

通过对训练集的图像进行训练,得到具有预测功能的网络,便可以对任意给出的人脸图像进行朝向判断和识别。

1.2.3设计步骤

根据上述设计思路,设计步骤主要包括以下几个部分,如图1-2所示。

图1-2设计步骤流程图

1.人脸特征向量提取

如设计思路中所述,当人脸朝向不同时,眼睛在图像中的位置会有明显的差别。

因此,只需要将描述人眼位置信息的特征向量提取出来即可。

方法是将整幅图像划分成6行8列,人眼的位置信息可以用第2行的8个子矩阵来描述(注意:

针对不同大小的图像,划分的网格需稍作修改),边缘检测后8个子矩阵中的值为“1”的像素点个数与人脸朝向有直接关系,只要分别统计出第2行的8个子矩阵中的值为“1”的像素点个数即可。

2.训练集/测试集产生

为了保证训练集数据的随机性,随机选取图像库中的30幅人脸图像提取出的特征向量作为训练集数据,剩余的20幅人脸图像提取出来的特征向量作为测试集数据。

3.LVQ网络创建

LVQ神经网络的优点是不需要将输入向量进行归一化、正交化,利用MATLAB自带的神经网络工具箱函数newlvq()可以构建一个Lvo神经网络,关于该函数的用法及说明在第26章中已作详细说明,此处不再赘述。

4.LVQ网络训练

网络创建完毕后,便可以将训练集输入向量送入到网络中,利用Lv01或LVQ2算法对网络的权值进行调整,直到满足训练要求迭代终止。

5.人脸识别测试

网络训练收敛后,便可以对测试集数据进行预测,即对测试集的图像进行人脸朝向识别。

对于任意给出的图像,只需要将其特征向量提取出来,便可对其进行识别。

1.3MATLAB实现

利用MATLAB神经网络工具箱提供的函数可以方便地在MATLAB环境下实现上述设计步骤。

1.3.1清空环境变量

程序运行之前,清除工作空间(workspace)中的变量及命令窗口(commandwindow)中的命令。

具体程序为:

%%清空环境变量

clearall

clc

1.3.2人脸特征向量提取

如设计步骤中所述,人脸特征向量提取的任务是将图像中描述人眼位置的信息提取出来,即统计出划分网格第2行的8个子矩阵中的值为“1”的像素点个数。

具体实现程序如下:

%%人脸特征向量提取

%人数

M=10;

%人脸朝向类别数

N=5:

%特征向量提取

pixel_value=feature_extraction(M,N);

其中,feature_extraction为人脸特征向量提取子函数,feature_extraction.m的程序代码为:

functionpixel_value=feature—extraction(m,n)

pixel_value=zeros(50,8);

sample_number=0;

fori=1:

m

forj=l:

n

str=strcat(’Images’,num2str(i),'

_'

num2str(j),’.bmp’);

img=imread(str);

[rowscols]=size(img);

img_edge=edge(img,‘Sobel’);

subrows=floor(rows/6);

subLcols=floor(cols/8);

sample_number=sample_number+1;

forsubblock_i=1:

8

forii=sub_rows+1:

2*sub_rows

forjj=(subblock_i-1)*sub_cols+1:

subblock—i*sub_cols

pixel_value(sample_number,subblock_i)=一.

pixel_value(sample_number,subblock_i)+img_edge(ii,jj)#

end

说明:

①人脸图像库的图片放在文件名为Images的文件夹中,图片的命名规则为“1-J.bmp”,其中,i表示人的编号,j表示人脸朝向的编号,这里,i-l,2,…,10;

j=l,2,…,5。

②函数strcat()的作用是将字符串进行水平连接,具体用法可以查看Help帮助文档。

③函数imread()用于将图片转换成对应的矩阵。

④edge()是边缘提取函数,其参数“Sobel”是边缘提取算子。

1.3.3训练集/测试集产生

图像库中所有图片的特征向量提取出来以后,随机将其分成两组,分别作为训练集和测试集。

其中,训练集包含30个不同人脸朝向的图片的特征向量,测试集为剩余的20个不同人脸朝向的图片的特征向量。

具体程序如下:

%%训练集/测试集产生

%产生图像序号的随机序列

rand-label=randperIn(M*N);

%人脸朝向标号

direction_label=repmat(l:

N,1,M);

%训练集

train—label=rand_label(1:

30);

P_train=pixel_value(train_label,:

)’;

Tc_train=direction_label(train_label);

T_train=ind2vec(Tc_train);

%测试集

f:

test—label=rand.label(31:

end);

P_test=pixel_value(test_label,:

Tc_test=direction_label(test_label);

(D函数randperm(n)用于产生一个从整数1到行的随机排列。

②函数repmat()用于矩阵复制。

③函数ind2vec()。

1.3.4创建LVQ网络

利用newlvq()函数可以方便地创建一个LVQ神经网络。

这里,隐含层神经元个数设量20。

由于训练集数据是随机产生的,所以参数PC的设置需要事先计算得出,具体的程序为:

%%创建LVQ网络

fori=1:

5

rate{i)=length(find(Tc_train==i))/30;

net=newlvq(minraax(P_train),20,ce112mat(rate》;

%设置训练参数

net.trainParam.epochs=100;

net.trainParam.goal=0.O01;

net.trainParam.lr=O.l;

1.3.5训练LVQ网络

网络创建及相关参数设置完成后,利用MATLAB自带的网络训练函数train()可以力地对网络进行训练学习,具体程序为:

%%训练网络

net=train(net,P_train,T_train);

1.3.6人脸识别测试

利用sim()函数将测试集输人数据送人训练好的神经网络,便可以得到测试集的输出仿

真数据,即测试集图像的人脸朝向识别结果。

详细程序如下:

Tsim=sim(net,Ptest);

Tcsim=vec2ind(T_sim);

result-.=rTctestiTesiml

result第1行为测试集图像的标准人脸朝向类别,第2行为测试集图像的预测人脸朝向类别。

1.3.7结果显示

本案例将识别的结果以更加直观的形式呈现给读者,具体程序如下:

%%结果显示

%训练集人脸标号

strain_label=sort(train_label);

htrain_label=ceil(strain_label/N);

%训练集人脸朝向标号

dtrain_label=strain_label-floor(strain_label/N)*N;

dtrain_label(dtrain_label==0)=N;

%显示训练集图像序号

disp('

训练集图像为;

'

);

fori=1:

30

str_train=[num2str(htrain_label(i))'

...

num2str(dtrain_label(i))'

'

];

fprintf('

%s'

str_train)

ifmod(i,5)==0

\n'

);

%测试集人脸标号

stest_label=sort(test_label);

htest_label=ceil(stest_label/N);

%测试集人脸朝向标号

dtest_label=stest_label-floor(stest_label/N)*N;

dtest_label(dtest_label==0)=N;

%显示测试集图像序号

测试集图像:

20

str_test=[num2str(htest_label(i))'

num2str(dtest_label(i))'

str_test)

%显示识别出错图像

error=Tc_sim-Tc_test;

location={'

左方'

左前方'

前方'

右前方'

右方'

};

length(error)

iferror(i)~=0

%识别出错图像人脸标号

herror_label=ceil(test_label(i)/N);

%识别出错图像人脸朝向标号

derror_label=test_label(i)-floor(test_label(i)/N)*N;

derror_label(derror_label==0)=N;

%图像原始朝向

standard=location{Tc_test(i)};

%图像识别结果朝向

identify

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1