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

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

时间:2023-11-26 22:34:51浏览次数:46  
标签:HOG end JAFFE title FF2 dt round 表情

1.算法运行效果图预览

 

2.算法运行软件版本

matlab2022a

 

3.算法理论概述

         该算法主要由两个部分组成: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数据集是一个标准和经典的表情识别数据集,对于研究表情识别算法的人来说是一个非常好的选择。

 

 

 

 

4.部分核心程序

%%
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('情绪识别率%');

  

标签:HOG,end,JAFFE,title,FF2,dt,round,表情
From: https://www.cnblogs.com/matlabworld/p/17858104.html

相关文章

  • Java 21增强对Emoji表情符号的处理了
    现一个Java21中有意思的东西!在java.Lang.Character类中增加了用于确定字符是否为Emoji表情符号的API,主要包含下面六个新的静态方法:publicstaticbooleanisEmoji(intcodePoint){returnCharacterData.of(codePoint).isEmoji(codePoint);}publicstaticbooleani......
  • Markdown语法使用表情符号
    语法代码使用语法:&#x符号编码;其中符号编码可以从EmojiUnicodeTables中获取到例如我要用下面这个小火箭图标它的编码是1F680,那么就是🚀![image-20211117154550545](Markdown内如何使用表情符号.assets/image-20211117154550545.png)也可以直接复制有......
  • mailpit MailHog 的替代者
    我以前介绍过MailHog一个方便的smtpmockserver,但是目前MailHog似乎缺少维护,mailpit属于MailHog一个很不错的替代者,mailpit包含了不少特性支持的特性静态二进制文件运行直至basicauth(web以及api)mobile以及平板预览高级邮件检索支持一个可选的基于webhook的消息......
  • PHP如何过滤Emoji表情?
    微信和QQ两大即时通讯软件已经培养了用户频繁使用Emoji表情的习惯,现在就连各大输入法都支持直接输入Emoji表情了。所以为了避免用户提交的信息中含有Emoji表情,我们在开发系统的时候,遇到需要用户填写信息,提交资料的情况,就需要在后端对用户提交的信息进行过滤。今天就给大家分享一......
  • 壁纸头像表情包插画流量主小程序开源版开发
    壁纸头像表情包插画流量主小程序开源版开发以下是壁纸头像表情包插画流量主小程序的功能列表:用户注册和登录:用户可以注册和登录自己的账号,可以使用账号保存自己的喜爱的壁纸、头像、表情包、插画等内容。壁纸浏览和下载:用户可以浏览并下载各种不同类型的壁纸,包括风景、动物、人物......
  • Stable Diffusion新玩法火了!给几个词就能生成动图,连动图人物的表情和动作都能随意控制
    作者|小戏单说大模型AI的发展对人们想象力释放的助力,基于StableDiffusion模型的方法首当其冲。透过文本描述到图像生成技术,大模型为我们的想象力打开了一个恢弘的梦幻世界。透过点滴文字,就有可能重现禁锢在我们脑海中无法释放的光怪陆离。而最近,StableDiffusion持续进化,......
  • 【玩转Python系列【小白必看】Python多线程爬虫:下载表情包网站的图片
    前言本文主要介绍了使用Python编写的多线程爬虫程序,用于下载表情包网站上的图片。通过解析网页内容和使用XPath定位,可以获取到图片的URL,并将其保存到本地。1.导入模块和库importrequestsfromlxmlimportetreefromthreadingimportThreadfromqueueimportQueueim......
  • AI 视觉的应用|ZegoAvatar ⾯部表情随动技术解析
    ​ 一、AI“卷”进实时互动2021年,元宇宙概念席卷全球,国内各大厂加速赛道布局,通过元宇宙为不同的应用场景的相关内容生态进行赋能。针对“身份”、“沉浸感”、“低延迟”、“随时随地”这四个元宇宙核心基础,ZEGO即构科技基于互动智能的业务逻辑,提出并落地了ZegoAvatar解决方......
  • centos上yum无法使用的问题以及无法用yum安装screen,iftop,nethogs等的解决办法
    大家可能都发现了centos8已经不在更新了。当我们使用yum安装某些工具的时候,会提示安装源失败解决方案:删除repo文件然后重新下载即可修复yum安装报错问题1.进入/etc/yum.repos.d/目录cd/etc/yum.repos.d/2.备份原来的yum.repos.d文件cd/etcmkdirbackupcdbackupmkdiryum.re......
  • HTML emoji整理 表情符号
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><title>测试</title></head><body><divstyle="font-size:50px;">......