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

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

1.算法运行效果图预览

1.jpeg
2.jpeg
3.jpeg
4.jpeg
5.jpeg
6.jpeg
7.jpeg
8.jpeg

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('情绪识别率%');
相关文章
|
24天前
|
搜索推荐 前端开发 算法
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
本文介绍了一个基于用户画像和协同过滤算法的音乐推荐系统,使用Django框架、Bootstrap前端和MySQL数据库构建,旨在为用户提供个性化的音乐推荐服务,提高推荐准确性和用户满意度。
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
|
9天前
|
安全 算法 Java
java系列之~~网络通信安全 非对称加密算法的介绍说明
这篇文章介绍了非对称加密算法,包括其定义、加密解密过程、数字签名功能,以及与对称加密算法的比较,并解释了非对称加密在网络安全中的应用,特别是在公钥基础设施和信任网络中的重要性。
|
22天前
|
机器学习/深度学习 算法 文件存储
【博士每天一篇文献-算法】 PNN网络启发的神经网络结构搜索算法Progressive neural architecture search
本文提出了一种名为渐进式神经架构搜索(Progressive Neural Architecture Search, PNAS)的方法,它使用顺序模型优化策略和替代模型来逐步搜索并优化卷积神经网络结构,从而提高了搜索效率并减少了训练成本。
25 9
|
19天前
|
算法
基于多路径路由的全局感知网络流量分配优化算法matlab仿真
本文提出一种全局感知网络流量分配优化算法,针对现代网络中多路径路由的需求,旨在均衡分配流量、减轻拥塞并提升吞吐量。算法基于网络模型G(N, M),包含N节点与M连接,并考虑K种不同优先级的流量。通过迭代调整每种流量在各路径上的分配比例,依据带宽利用率um=Σ(xm,k * dk) / cm来优化网络性能,确保高优先级流量的有效传输同时最大化利用网络资源。算法设定收敛条件以避免陷入局部最优解。
|
23天前
|
数据采集 算法 数据可视化
【优秀python算法设计】基于Python网络爬虫的今日头条新闻数据分析与热度预测模型构建的设计与实现
本文设计并实现了一个基于Python网络爬虫和机器学习模型的今日头条新闻数据分析与热度预测系统,通过数据采集、特征工程、模型构建和可视化展示,挖掘用户行为信息和内容特征,预测新闻热度,为内容推荐和舆情监控提供决策支持。
【优秀python算法设计】基于Python网络爬虫的今日头条新闻数据分析与热度预测模型构建的设计与实现
|
24天前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
77 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
24天前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
51 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
24天前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
51 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
4月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)

热门文章

最新文章

下一篇
云函数