基于HOG特征提取和GRNN神经网络的人脸表情识别算法matlab仿真,测试使用JAFFE表情数据库

news2024/12/24 2:16:34

目录

1.算法运行效果图预览

2.算法运行软件版本

3.部分核心程序

4.算法理论概述

1.HOG特征提取

2.GRNN神经网络

3.JAFFE表情数据库

5.算法完整程序工程


1.算法运行效果图预览

2.算法运行软件版本

matlab2022a

3.部分核心程序

...............................................................
%%
NAME = '悲伤';%测试则对所有图片进行测试

p0 = ['JAFFE\',NAME];
dt = dir(p0);
p  = [dt.name];
err=[];
correct1 = 0;
figure;
for k = 1:length(dt)-3
    k
    path = dt(k+3,1).name;
    I0      = imread([ 'JAFFE\',NAME,'\',path]); 
    [R,C,K] = size(I0);

    if K == 1
       I1 = I0; 
    else
       I1 = rgb2gray(I0);  
    end
    %特征提取
    Hog_Dat1 = func_feature(I1);
 
    FF2 = sim(net,Hog_Dat1);
 
    subplot(5,6,k);
    imshow(I0);
    
    if round(FF2) == 1
       title('悲伤');
       correct1 = correct1+1;
    end
    if round(FF2) == 2
       title('高兴');
    end
    if round(FF2) == 3
       title('害怕');
    end
    if round(FF2) == 4
       title('惊讶');
    end
    if round(FF2) == 5
       title('生气');
    end
    if round(FF2) == 6
       title('厌恶');
    end
    if round(FF2) == 7
       title('中立');
    end
    
    pause(0.2);
end
err=[err,correct1/(length(dt)-3)];
.......................................................................
%%
NAME = '中立';%测试则对所有图片进行测试

p0 = ['JAFFE\',NAME];
dt = dir(p0);
p  = [dt.name];

correct1 = 0;
figure;
for k = 1:length(dt)-3
    k
    path = dt(k+3,1).name;
    I0      = imread([ 'JAFFE\',NAME,'\',path]); 
    [R,C,K] = size(I0);

    if K == 1
       I1 = I0; 
    else
       I1 = rgb2gray(I0);  
    end
    %特征提取
    Hog_Dat1 = func_feature(I1);
 
    FF2 = sim(net,Hog_Dat1);
 
    subplot(5,6,k);
    imshow(I0);
    
    if round(FF2) == 1
       title('悲伤');
       
    end
    if round(FF2) == 2
       title('高兴');
    end
    if round(FF2) == 3
       title('害怕');
    end
    if round(FF2) == 4
       title('惊讶');
    end
    if round(FF2) == 5
       title('生气');
    end
    if round(FF2) == 6
       title('厌恶');
    end
    if round(FF2) == 7
       title('中立');
       correct1 = correct1+1;
    end
    
    pause(0.2);
end

err=[err,correct1/(length(dt)-3)];

figure;
bar(100*err)
xlabel('1:悲伤, 2:高兴, 3:害怕, 4:惊讶, 5:生气, 6:厌恶, 6:中立');
ylabel('情绪识别率%');
0062

4.算法理论概述

         该算法主要由两个部分组成:HOG特征提取和GRNN神经网络。下面将详细介绍这两个部分的原理和数学公式。

1.HOG特征提取

       HOG(Histogram of Oriented Gradients)是一种局部特征描述子,它通过对图像局部区域的梯度方向进行统计,提取出图像的结构信息。HOG特征提取主要分为以下几个步骤:

(1)图像预处理

首先,将图像转换为灰度图像,然后对其进行归一化处理,以提高特征的鲁棒性。

(2)计算梯度

使用[-1,0,1]的梯度算子在图像的x和y方向上进行卷积,计算图像的梯度和梯度方向。

(3)划分单元格

将图像划分为若干个小的单元格,并在每个单元格内统计梯度方向直方图。

(4)合并块特征

将相邻的单元格组成一个块,并将块内的特征进行合并,得到块特征。

(5)归一化特征

对块特征进行归一化处理,以提高特征的鲁棒性。

最终得到的HOG特征向量可以用于描述图像的结构信息。

2.GRNN神经网络

       GRNN(Generalized Regression Neural Network)是一种基于多层感知机的回归模型,它可以将输入映射到一个连续的输出空间。GRNN神经网络主要分为以下几个部分:

(1)输入层

输入层接收HOG特征向量作为输入。

(2)隐藏层

        隐藏层使用Sigmoid函数作为激活函数,将输入映射到一个非线性的隐藏层空间。隐藏层的输出可以表示为:

h=σ(Wx+b)

其中,W是权重矩阵,b是偏置向量,σ是Sigmoid函数。

(3)输出层

输出层使用线性函数将隐藏层映射到输出空间,输出层的输出可以表示为:

y=Wh+b

其中,W是权重矩阵,b是偏置向量。

(4)损失函数和优化算法

       GRNN神经网络的损失函数通常采用均方误差(MSE),可以使用梯度下降算法优化网络参数。对于每个样本,损失函数可以表示为:

L=21​(y−y^​)2

       其中,y是网络的输出,y^​是样本的真实标签。通过最小化损失函数,可以优化网络参数。在训练过程中,通常采用反向传播算法计算梯度并更新网络参数。

3.JAFFE表情数据库

         JAFFE表情数据库是一个用于表情识别的研究数据集,由日本女演员Jaffe于1998年捐赠给加州大学圣地亚哥分校。

        该数据集包含了213张面部图片,每个人做出了7类表情,包括愤怒、厌恶、恐惧、快乐、哀伤、惊讶和中性。每组大约有20张样图,可以用来训练和测试面部表情识别的算法。

        JAFFE数据集在计算机视觉领域的情感计算、表情识别和人机交互等方面有着重要的应用价值。它提供了一个标准化的面部表情数据集,可以用于研究表情识别算法的性能和可靠性,为实现面部表情识别的研究提供了基础。

       使用JAFFE数据集需要一些前置条件,如熟悉基本的Python编程和图像处理技术,研究者需要利用相关的机器学习和计算机视觉算法来识别和分类面部表情。

       总之,JAFFE数据集是一个标准和经典的表情识别数据集,对于研究表情识别算法的人来说是一个非常好的选择。

5.算法完整程序工程

OOOOO

OOO

O

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1004658.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决MySQL数据库拒绝远程计算机连接问题

错误信息:Host is not allowed to connect to this mysql server 以前MySQL数据库部署在云服务器上,程序服务端也部署在云服务器上,连接服务器从没出现过问题。最近有一次需要做一个完全局域网的环境部署,我把数据库和程序服务端…

python爬虫教程:用scrapy实现模拟登录

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 背景: 初来乍到的pythoner,刚开始的时候觉得所有的网站无非就是分析HTML、json数据,但是忽略了很多的一个问题&#xf…

Python第一次作业练习

题目分析: """ 参考学校的相关规定。 对于四分制,百分制中的90分及以上可视为绩点中的4分,80 分及以上为3分,70 分以上为2分,60 分以上为1分; 五分制中的5分为四分制中的4分,4分为3分&#…

Win10声音无法找到输出设备怎么办

近期有小伙伴反映在使Win10的过程中无法找到声音输出设备,从而导致电脑的声音无法正常的播放,这是怎么回事呢,遇到这种情况应该怎么解决呢,下面小编就给大家详细介绍一下Win10声音无法找到输出设备的解决方法,大家可以…

yolov5+Repulsion损失函数,解决密集遮挡问题(附带代码可用)

文章目录 1.RepLoss 设计思想2.RepLoss 主要工作2.1 吸引项2.2 排斥项(RepGT)2.3 排斥项(RepBox)2.4 总结 3. yolov5Repulsion3.1 rep_loss.py3.2 loss.py3.3 hyp.scratch.yaml 4. 总结 1.RepLoss 设计思想 物体遮挡问题可以分为…

为何付费?免费数据可视化软件的崭露头角

当今,数据可视化在各个领域都扮演着重要的角色。不过,对于一些个人用户、小型企业或教育机构来说,购买昂贵的数据可视化软件可能并不切实际。好消息是,有一些完全免费的数据可视化工具可以帮助你创建令人印象深刻的可视化图表和图…

一百七十四、Hive——Hive动态分区表加载数据时需不需要指定分区名?

一、目的 在Hive的DWD层和DWS层建立动态分区表后,发现动态插入数据时可以指定分区名,也可以不指定分区名。因此,研究一下它们的区别以及使用场景,从而决定在项目的海豚调度HiveSQL的脚本里需不需要指定动态分区的分区名&#xff…

数字孪生相关政策梳理,重点对各行业版块的指导和引领

前言 数字孪生技术作为新型智慧城市建设的创新引领性技术,有利于打造孪生城市运行空间,强化城市大脑基础能力,实现全域时空数据融合。数字孪生技术在推动智慧城市建设方面的作用已越来越受到重视。2021年3月,《国家“十四五”规划…

Java binLog日志监听

监听指定的表去做一些处理逻辑,首先是要开启M有SQL的配置,然后再撸代码。 一、Windows下开启MySQL binLog日志 首先要开启MySQL的BinLog 管理 show variables like %log_bin%; 如果发现是OFF,打开mysql文件夹下面的my.ini,修改一…

Linux创建进程 及父子进程虚拟空间 多进程GDB调试

父子进程的资源是读时共享,写时拷贝,用到某一个资源,比如说改变变量的值的时候才去拷贝这个变量到一个独立的空间 父子进程的关系: 区别: 1.fork()函数的返回值不同 父进程中:>…

c高级day5(9.12)宏和Makefile

1.宏定义 #include<stdio.h> #include<head.h> #define unit32_t unsigned int #define TYPE(a,b) a##b int main(int argc, const char *argv[]) {unit32_t i;TYPE(unit,32_t) j;return 0; } 2.宏函数与有参宏 #include<stdio.h> #include<head.h>…

软件设计师_备考笔记

考试介绍及考点分布情况 考试要求&#xff1a; &#xff08;1&#xff09;掌握数据表示、算术和逻辑运算&#xff1b; &#xff08;2&#xff09;掌握相关的应用数学、离散数学的基础知识&#xff1b; &#xff08;3&#xff09;掌握计算机体系结构以及各主要部件的性能和基…

【c++5道练习题】②

目录 一、验证回文串 二、字符串相加 三、杨辉三角 四、最小栈 五、栈的压入、弹出序列 一、验证回文串 思路&#xff1a; 1、注&#xff1a;for(auto ch : s) -》指将s中每一个字符赋值给ch&#xff0c;ch的改变并不会影响s 但写为for(auto& ch : s) -》指将ch是s中…

【部署】Nginx部署前后端JeecgBoot-Vue3

部署运维 前言前台部署配置服务器地址配置路由访问规则配置后端接口路由访问规则Linux 宝塔傻瓜式部署前台项目 Nginx 命令 前言 前面有提到使用 Window 的 IIS 管理器来部署打包后的前端项目&#xff0c;点击【原文】 跳转到前篇文章。感觉甲方爸爸的描述&#xff0c;似乎有些…

Smartbi吴华夫:后疫情时代,BI发展趋势的观察与应对

沿着旧地图找不到新大陆&#xff0c;“基于指标体系的可视化分析和增强分析”成为BI发展新阶段。Smartbi V11系列新品与时俱进&#xff0c;以指标为核心&#xff0c;同时融合BI应用&#xff0c;赋能管理者和业务&#xff0c;成为引领数字化运营的新航标&#xff01; ——思迈特…

Zabbix监控平台环境部署

Zabbix监控平台环境部署 1.Linux环境部署 hostnamectl set-hostname zabbix_server #修改主机名方便查看 hostnamectl set-hostname zabbix_agent ​ systemctl stop firewalld #关闭防火墙 systemctl disable firewalld #关闭防火墙开机自启 setenforce 0 #关闭SElinu…

微信怎么给自己发消息

前段时间看到一份数据调查&#xff0c;说是到目前为止&#xff0c;全球使用微信的用户已达到10亿多人次&#xff0c;天啊&#xff0c;多么强大的用户群体&#xff01; 这么多人喜欢使用微信&#xff0c;相信大家都知道&#xff0c;微信里面有一个特俗功能&#xff0c;可以自己…

逆向-attack之改写函数的返回地址

#include <stdio.h> #include <stdlib.h> #include <unistd.h> /* * 改写input()函数的返回地址&#xff0c;从而使得breakout()函数在没有直接调用的情况下获得执行 */ void breakout() { puts("Welcome. Have a shell..."); system(…

argparse--命令行参数解析库

文章目录 位置参数help ->描述信息type -> 被转换的类型 可选参数action ->动作基本类型 (store_true)短选项 结合位置参数和可选参数choiceaction ->动作基本类型 (count)default -> 默认值 argparse模块使编写用户友好的命令行变得容易 接口。程序定义了它需要…

6.网络编程套接字(下)

文章目录 4.TCP流套接字编程4.1ServerSocket API4.2Socket API4.3TCP中的长短连接4.4示例一&#xff1a;一发一收&#xff08;长连接&#xff09;4.4.1TCP服务端4.4.2TCP客户端 4.5示例二&#xff1a;请求响应&#xff08;短连接&#xff09;4.5.1TCP服务端4.5.2TCP客户端 4.6再…