基于BP神经网络的人脸朝向识别

2023-05-16

一、数字图像处理
1.1 问题假设

  • 所给的全部人脸图像都未出现损坏等问题;
  • 人脸的朝向仅分为5类:左、中左、中间、中右、右,其他朝向不予考虑;
  • 对于题目中所给的人脸图像,不考虑人脸的复杂表情问题;

1.2 基于边缘检测Sobel算子的人脸特征向量提取

人脸识别的第一步便是人脸特征的提取,即如何把人脸图像转换成数字特征值。目前人脸特征提取的方法有很多,如主元分析法、Fisher线性判别法、小波分析法等。通过特征向量提取,作为神经网络的输入。通过对人脸朝向图片分析,当人脸朝向不同时,眼睛在图像中的位置会有明显的差别。因此,只需要将人眼位置信息的特征向量提取出来即可。主要方法是先进行检测图像边界,再利用得到的边界信息进行特征提取。由于Sobel算子对灰度渐变的图像处理效果较好,不仅能够检测到边缘点,而且能进一步抑制噪声的影响。因此本采用Sobel算测提取人脸边界。

在MATLAB工具箱中可采用函数edge(img,‘Sobel’)进行边缘检测,接着将图像划分成6行8列,人眼的位置信息可以用第2行的8个子矩阵来描述,经过分析人脸朝向与8个子矩阵中的值为1的像素点个数有直接关系。只要分别统计出第2行的8个子矩阵中的值为“1”的像素点即可。采用Sobel算法提取边界如下图所示:
在这里插入图片描述
二、BP神经网络
2.1 BP神经网络模型

BP神经网络是一种多层前向网络,由输入层、输出层、隐含层(可以是一层或多层)构成,一种典型的三层BP神经网络模型如图3所示。反向传播算法的主要思想是把学习过程分为2个阶段:第1阶段(正向传播过程),输入信息从输入层开始逐层计算个单元的实际输出值,每一层神经元的状态只对下一层神经元的状态产生影响。第2阶段(反向传输过程),若在输出层未能够得到期望的输出值,则逐层递归计算实际输出与期望输出之间的差值,根据此误差修正前层权值使误差信号趋向最小。它通过连续不断地在相对于误差函数斜率下降的方向上计算网络权值和偏差变化而逐渐逼近目标。每次权值和误差的变化都与网络误差的影响成正比。

在这里插入图片描述
2.2 代码展示

%BP神经网络训练
clc;
images=[ ];
M_train=8;%表示人脸
N_train=5;%表示方向
sample=[];
pixel_value=[];
sample_number=0;
k=0;
for j=1:N_train
for i=1:M_train
str=strcat('Images\',num2str(i),'_',num2str(j),'.bmp'); %读取图像,连接字符串形成图像的文件名。
img= imread(str);
[rows cols]= size(img);%获得图像的行和列值。
img_edge=edge(img,'Sobel');
k=k+1;
subplot(M_train,N_train,k)
imshow(img_edge)%显示灰度图
%由于在分割图片中我们可以看到这个人脸的眼睛部分也就是位于分割后的第二行中,位置变化比较大,而且眼睛边缘检测效果很好
sub_rows=floor(rows/6);%最接近的最小整数,分成6行
sub_cols=floor(cols/8);%最接近的最小整数,分成8列
sample_num=M_train*N_train;%5个是第一幅人脸的5个角度
sample_number=sample_number+1;
for subblock_i=1:8 %因为这还在i,j的循环中,所以不可以用i
block_num=subblock_i;
pixel_value(sample_number,block_num)=0;
for ii=sub_rows:(2*sub_rows)
for jj=(subblock_i-1)*sub_cols+1:subblock_i*sub_cols
pixel_value(sample_number,block_num)=pixel_value(sample_number,block_num)+img_edge(ii,jj);
end
end
end
end
end
%将特征值转换为小于1的值
max_pixel_value=max(pixel_value);
max_pixel_value_1=max(max_pixel_value);
for i=1:3
mid_value=10^i;
if(((max_pixel_value_1/mid_value)>1)&&((max_pixel_value_1/mid_value)<10))
multiple_num=1/mid_value;
pixel_value=pixel_value*multiple_num;
break;
end
end
%T 为目标矢量
t=zeros(1,sample_number);
%因为有五类,所以至少用3个数表示,5介于22次方和23次方之间
for i=1:sample_number
% if((mod(i,5)==1)||(mod(i,5)==4)||(mod(i,5)==0))
if(i<=M_train)
t(1,i)=1;
end
if(i>M_train&&i<=2*M_train)
t(1,i)=2;
end
if(i>2*M_train&&i<=3*M_train)
t(1,i)=3;
end
if(i>3*M_train&&i<=4*M_train)
t(1,i)=4;
end
if(i>4*M_train&&i<=5*M_train)
t(1,i)=5;
end
end
% NEWFF——生成一个新的前向神经网络
% TRAIN——对 BP 神经网络进行训练
% SIM——对 BP 神经网络进行仿真
%  定义训练样本
% P 为输入矢量
P=pixel_value'
% T 为目标矢量
T=t
size(P)
size(T)
% size(P)
% size(T)
%  创建一个新的前向神经网络
net_1=newff(minmax(P),[10,1],{'tansig','purelin'},'traingdm')
%  当前输入层权值和阈值
inputWeights=net_1.IW{1,1}
inputbias=net_1.b{1}
%  当前网络层权值和阈值
layerWeights=net_1.LW{2,1}
layerbias=net_1.b{2}
%  设置训练参数
net_1.trainParam.show = 50;
net_1.trainParam.lr = 0.01;
net_1.trainParam.mc = 0.9;
net_1.trainParam.epochs = 60000;
net_1.trainParam.goal = 1e-3;
%  调用 TRAINGDM 算法训练 BP 网络
[net_1,tr]=train(net_1,P,T);
%BP 网络进行仿真
A = sim(net_1,P);
%  计算仿真误差
E = T - A;
mse(E)
%BP神经网络测试
%加载保存好的神经网络
A = sim(net_1,p)
%四舍五入结果
result=round(A)
%显示判断结果
num3=0;
direction='方向';
s=struct('direction',direction);
for num0=1:sample_num
if (num0<=2)
if result(num0)==1
s(num0).direction='右';
end
end
if (num0>2&&num0<=4)
if result(num0)==2
s(num0).direction='中右';
end
end
if (num0>4&&num0<=6)
if result(num0)==3
s(num0).direction='中间';
end
end
if (num0>6&&num0<=8)
if result(num0)==4
s(num0).direction='中左';
end
end
if (num0>8&&num0<=10)
if result(num0)==5
s(num0).direction='左';
end
end
end
%显示结果
for num1=1:N_train
for num2=1:M_train
num3=num3+1;
consequence=sprintf('图%d-%d人脸朝%s方向',num2+8,num1,s(num3).direction)
str=strcat('D:\复习教材\神经网络\3 BP神经网络\program\Images\',num2str(num2+8),'_',num2str(num1),'.bmp'); %读取图像,连接字符串形成图像的文件名。
str1=consequence;
img= imread(str);
[rows cols]= size(img);%获得图像的行和列值。
img_edge=edge(img,'Sobel');
k=k+1;
subplot(M_train,N_train,k);
imshow(img_edge);%显示灰度图
title(consequence);
end
end
%显示正确率
correct_rate=[];
for num4=1:sample_num
if s(num4).direction~=0
correct_rate(num4)=1;
else
correct_rate(num4)=0;
end
end
sum1=sum(correct_rate(:));
correct_rate1=sum1/sample_num*100;
sprintf('识别正确率为 %d%%',correct_rate1)

三、结果展示
在这里插入图片描述
可以看到整个人脸朝向识别为100%。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于BP神经网络的人脸朝向识别 的相关文章

  • CondaEnvException: Pip failed 或 Could not find a version that satisfies the requirement 问题

    1 错误实例 xff08 Could not find a version that satisfies the requirement imageio 61 61 2 27 0 xff09 2 解决方法 2 1 若对imageio的版本要
  • Linux中系统盘空间不足和显存没有释放问题

    1 系统盘空间不足 以下两个是可以直接删除 xff0c 不影响系统运行的目录 xff0c 所以首先直接删除 du sh root miniconda3 pkgs amp amp rm rf root miniconda3 pkgs cond
  • Ubuntu KCF 代码运行

    最近刚接触kcf xff0c 在Ubuntu上运行代码 xff0c 碰到一些问题 xff0c 借鉴了网上其他人的方法 xff0c 简单记录一下过程 KCF代码下载 KCF的代码可以去作者的网站去下载 xff1a http www robot
  • PADS学习笔记之绪论

    学习目的 在学校里的时候使用一直都是AD xff0c 现在即将毕业了 xff0c 来公司实习之后发现基本不用AD xff08 可能是怕收到律师函 xff09 xff0c 公司主要用的是PADS xff0c 某些项目也会用到cadence 虽
  • 软件工程中的框架

    什么是框架 框架 Framework 是构成一类特定软件可复用设计的一组相互协作的类 框架规定了你的应用的体系结构 它定义了整体结构 xff0c 类和对象的分割 xff0c 各部分的主要责任 xff0c 类和对象怎么协作 xff0c 以及控
  • Python argparse模块详解

    argparse是python用于解析命令行参数和选项的标准模块 xff0c 用于代替已经过时的optparse模块 官方文档中讲到的 xff0c 本文基本都提到了 xff0c 但只是简要记录 xff0c 如果需要深入理解 xff0c 可查
  • Linux下实现C语言的http请求实现

    该文件为转载文章 xff0c 作为学习和个人笔记使用 xff08 原文地址 xff09 https blog csdn net songfeihu0810232 article details 54892149 前言 Linux下的http
  • float a=1.0f在内存中的表示

    http zhidao baidu com question 314282772 html 3f800000H 61 0 01111111 00000000000000000000000B xff08 注意我分成了三段 xff09 符点型数
  • 图片返回状态码403

    在public index html 头部加一行代码 在这里插入图片描述 https img blog csdnimg cn 20200323202225328 png x oss process 61 image watermark ty
  • ROS学习笔记_01:工作空间及功能包

    1 ROS安装 xff1a 每个ROS版本对应一个Ubuntu版本 UBUNTUROSEnd of time14 04 LTSindigo IglooApril xff0c 201916 04 LTSKinetic KameApril xf
  • ROS学习笔记_02: Topic 和 msg

    1 ROS通信方式 ROS有四种通信方式 xff1a Topic 主题Service 服务Parameter Service 参数服务器Actionlib 动作库 其中 xff0c topic是最常用的一种 2 Topic Topic xf
  • Ubuntu20 + KVM虚拟机

    1 命令汇总 span class token comment 查看一下linux是32位还是64位 xff1a span span class token function file span bin ls span class toke
  • 基于PX4、树莓派和Mocap(Optitrack)的室内飞行环境搭建

    基于PX4 树莓派和Mocap Optitrack的室内飞行环境搭建 前言系统结构和原理软硬件要求Mocap环境设置主机 gt 工作站设置wifiMotive设置 Mocap gt Pixhawk硬件要求 xff1a 软件要求 xff1a
  • STL map的基本用法

    begin 返回指向map头部的迭代器 clear 删除所有元素 count 返回指定元素出现的次数 empty 如果map为空则返回true end 返回指向map末尾的迭代器 equal range 返回特殊条目的迭代器对 erase
  • 自己动手写操作系统(高清图书+源代码)分享

    很喜欢 自己动手写操作系统 这本书 xff0c 但现在这本书已经绝版了 在这里分享一下这本书的高清电子版和源代码 xff0c 感兴趣的人可以下载一下 链接 xff1a https pan baidu com s 1lPXg Airu2NFj
  • 四旋翼飞行器控制pid学习笔记

    PID控制学习笔记 凡事必躬亲 xff0c 身体而力行 xff0c 化理论为实践 xff0c 方得始终 研究PID xff0c 首先应当把PID拆解开来 xff0c 便是P xff08 比例控制 xff09 I xff08 积分控制 xff
  • Ubuntu使用终端命令安装谷歌Chrome浏览器

    sudo wget http www linuxidc com files repo google chrome list P etc apt sources list d wget q O https dl google com linu
  • 为什么C/C++很多内部函数由下划线开头?关于VS中的CRT_SECURE

    以下摘自compatibility 兼容性 通用 C运行时库 UCRT 支持实现 C 43 43 一致性所需的大多数 C 标准库 它实现 C99 xff08 ISO IEC 9899 1999 xff09 库 xff0c 但有一些例外情况
  • 实现快速全自动Ubuntu批量安装的步骤

    随着使用ubuntu系统的用户越来越多 xff0c 对于一台PC机安装ubuntu系统来说并不是难事 xff0c 但是如果对于企业里新增的几十台几十台服务器 xff0c 一台一台安装 xff0c 实在是太累 xff0c 通过以下方法 xff
  • ESP32基础应用之FreeRTOS使用

    文章目录 前言1 FreeRTOS 任务的使用1 1 任务状态1 2 任务优先级1 3 创建任务 2 FreeRTOS 事件标志组的使用 参考资料 xff1a STM32F103 FreeRTOS开发手册V1 1 pdf 前言 1 Free

随机推荐

  • STM32CubeMX之FreeRTOS

    文章目录 1 STM32CubeMX参数配置及其说明1 1 FreeRTOS Mode1 2 Config parameters1 2 1 Kernel setting1 2 2 Memory management setting1 2 3
  • 数据分析学习之:如何均衡样本——使用 imblearn 库实现重采样(resampling),过采样(over-sampling) + 欠采样(under-sampling))

    文章目录 什么是样本不平衡如何平衡数据集的样本 重采样欠采样 xff08 也叫 undersampling xff09 将大的样本集的数据全部筛选出来通过随机采样操作采样固定个数的样本留下和少样本的样本集拼合成最终的样本集样本均衡了 过采样
  • 数学之美:e^x 是如何得到的

    文章目录 背景如何构造为什么 f 0 61 1
  • 暗影精灵4电脑win10系统重装+linux双系统安装

    暗影精灵4电脑win10系统重装 43 linux双系统安装 文章目录 重装系统的目的准备工作重装win10百度之后找到几个方法1 用win10的恢复功能重置2 用u盘制作win10系统3 电脑恢复到出厂设置 具体步骤 分区安装linux
  • Gazebo仿真记录 Turtlebot3 + D435i

    在Gazebo环境中在Turtlebot3上添加深度相机D435和IMU 步骤 1 准备工作 创建ROS工作空间 xff0c 下载turtlebot3相关代码和realsense2 description 模型文件放到工作空间下 Turtl
  • Vicon轨迹topic转tum格式

    rostopic span class token function echo span span class token operator span xx gt gt xx span class token punctuation spa
  • Realsense d435i启动双目并关闭IR结构光(保证管用)

    想要采集一些双目的数据 上手了一下实验室闲置的stereolab zed2 xff0c 发现连官网都上不去 xff0c 而且环境配置麻烦的要死 xff0c 遂放弃 想起手里还有一个d435i也可以开双目 xff0c 果然还是realsens
  • 读取rosbag中的IMU信息并转为tum格式的csv和txt

    rostopic span class token operator span b xx span class token punctuation span bag span class token operator span p span
  • git中常用命令

    span class token number 1 span 安装 xff1a GitLens span class token number 2 span 快捷键打开终端 xff1a ctrl span class token opera
  • 镜像tag、push、pull、load等相关操作

    一 本身PaaS环境不能访问外网的操作 1 首先准备好镜像tar包 xff0c 上传到镜像服务器的 root目录下 执行命令为 xff1a docker load i 镜像 tar xff0c 如图所示 2 给镜像重新打上标记 xff0c
  • SNMPv3实验与报文分析

    一 SNMPv3工作原理 1 1 SNMPv3工作模式 SNMPv3采用客户机 服务器模式 如下图1所示 由图可知SNMP管理站可向代理发送普通请求 如GetRequest GetNextRequest等 xff0c 代理收到请求之后返回一
  • ACLLib图形库的基本使用

    ACLLib图形库的基本使用 使用环境 xff1a Dev C 43 43 5 7 1ACLLib图形库的下载 xff1a github上ACLLib的下载链接打开Dev C 43 43 xff0c 新建项目 xff0c 自定义你的文件名称
  • HBase Java Api

    任务目标 1 了解HBase语言的基本语法 2 了解HBase开发的原理 3 了解HBase Java API的使用 相关知识 HBase与Hadoop一样 xff0c 都是用Java编写的 xff0c 所以HBase对Java支持是必须的
  • 浅谈jQuery属性获取

    浅谈jQuery的属性获取 基本标签设置与基本css xff0c 附图下所示 上述代码如下图 xff1a 一 js的一些属性获取 1 var div 61 document getElementById first 这时候找到第一个div
  • 使用RGB-D摄像机的机器人目标跟踪和避障控制设计

    Control Design for Robotic Human Following and Obstacle Avoidance Using an RGB D Camera 摘要1 介绍2 系统总体架构3 算法介绍3 1 用户识别和定位3
  • Linux网络编程之PHP聊天室Workerman-chat

    云服务器上搭建 34 PHP聊天室框架 34 一 简介 xff1a 在服务器上搭建PHP聊天室框架 workerman chat 具体步骤 1 准备云服务器 购买阿里云服务器 可选购买其他云服务器 xff0c 如 xff1a 腾讯云 华为云
  • keil 下载安装 保姆级教程

    一 前言 最近被安排开发一个单片机的项目 xff0c 回头想了一下 xff0c 自己上次弄单片机的时候 xff0c 还都是在大学期间 xff0c 到现在也有三四年没有碰过了 xff0c 大部分的知识点都忘了 xff0c 所以又重新的把以前的
  • 从CSDN博客下载的图片如何无损去水印

    如果你想下载别人CSDN博客文章中很好看的图片 xff0c 但却有水印 想要下载去水印的图片 xff0c 可以先鼠标右击该图片 xff0c 选择复制图片地址 https img blog csdnimg cn 202009161408079
  • 不要再使用 Gitee 当图床了,官方已经开启防盗链了

    如果你正在使用或打算使用 Gitee 作为图床 xff0c 那么请不要这么做或打消该念头 近日 xff0c Gitee 官方已经开启防盗链 正在使用 Gitee 当图床的小伙伴或许已经发现所有的图片都已经变成了 Gitee 的 Logo 了
  • 基于BP神经网络的人脸朝向识别

    一 数字图像处理 1 1 问题假设 所给的全部人脸图像都未出现损坏等问题 xff1b 人脸的朝向仅分为5类 xff1a 左 中左 中间 中右 右 xff0c 其他朝向不予考虑 xff1b 对于题目中所给的人脸图像 xff0c 不考虑人脸的复