MATLAB【数字图像处理】 大作业:人脸表情识别

这篇具有很好参考价值的文章主要介绍了MATLAB【数字图像处理】 大作业:人脸表情识别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、课程设计任务

运用已掌握的知识以及查阅相关资料,设计方案能够识别人脸表情中的高兴、厌恶、生气、悲伤、面无表情这五类表情。

二、课程设计原理及设计方案

2.1整体原理

本系统是基于PCA算法的人脸特征提取。运用PCA算法来实现人脸特征提取,然后通过计算欧式距离来判别待识别测试人脸。
整个系统的流程是首先是人面部的提取,这个人脸库里的人脸图像必须是格式及像素统一的,然后然后针对库里的人脸进行人脸训练,利用PCA进行人脸特征提取,获取特征矩阵向量组,将测试人脸投射到特征子空间中,运用欧氏距离,在人脸库里查找相应的人脸图像。并认为:与人脸库中欧氏距离最短的图像的标签所表示的表情为待测试图像所表示的表情,并输出。

2.2 PCA的基本原理

PCA中文全称主成分分析法(Principal Component Analysis)。掌握事物间主要区别的,运用统计学的分析方法,它可以使复杂的问题得到简化,找到物质之间的本质区别,用事物的主要影响因素来解决问题。计算主成分的主要目的是用来降维,也就把将高维空间数据降到低维空间中去。这种线性变化经常被用到数据的压缩和分析中。它就是以K-L变换为基础,运用它的正交变换可以降低数据的运算量。
在这个系统中,数据集内人脸读入后被变成为灰度数值图像,把这些数值矩阵按行或者按列排练构成一个原始图像空间,运用K-L变换有效的提取人脸图像的特征,这是为下面的小空间模式匹配奠定基础,这个原始图像空间是维数较高的矩阵,通过K-L变换后获得一组新的正交基。分析比较人脸训练样本中的一些统计特征,保留主要的特征向量,减少向量矩阵的维数,获得了维数较小的人脸空间。在参与训练的人脸样本中,一种是不一样人脸组成的总体散分布矩阵,另一种是同个人脸的不同表情的平均图片或者说是类间散布矩阵。第一种的运用对人脸图像的背景光线的要求很高,后者可以很好的避免光线带来的的干扰,且有减少计算量的作用。选择的正交基的原则是取大去小,所谓的大、小就是特征值的的大小,特征值的数值反应一个人脸的基本特征轮廓,在主要成分分析中就是以它主要能量特征值对应的向量来做基底,用这个方法可以很好的进行人脸重构,重构的人脸必须是参与算法的人脸图像,否则实现重建的效果较差。
通过降维后,就可以获得特征空间,将待识别人脸图像进行旋转变换,可以有效的降低维数。也就是用特征空间的向量的线性代数运算来表示。这样就可以把人脸识别这个过程转换成维空间坐标系数分类问题,至于如何分类可以采用简单的距离进行判断。在本实验中,采用欧氏距离进行判断。

2.3基于PCA的特征提取

PCA人脸识别特征提取有几个过程:人脸图像获取和处理;构造人脸库并且训练形成特征子空间;提取特征值和特征向量。下面对整个PCA提取特征过程中的步骤做一个详细的描述。

2.3.1人脸图像获取和处理,构造人脸库

通过拍照的方式,在背景设定的环境下,拍取人脸图像,然后对人脸样本采取前期的处理,其中包括人脸图像格式的变换,是否需要灰度处理等等。这些都要根据算法需求来对图像进行前期的预处理。PCA算法运用的统计学原理中的K-L变换的原理,对图像背景要求一致,而对光线的要求也一般,前期只要保证图像像素和格式一致就可以。最后保存图像,建立人脸库。

2.3.2 训练人脸库

人脸图像获取后,要放进人脸库,把人脸库统一配置后,选取每个人若干图片参与训练,变成训练矩阵。假定格式统一的人脸图像的像素为 n m nm nm,采取变换转化为一维矩阵,然后按行相连构成 N = n m N=nm N=nm维数的的矢量,每个人脸图像都可以视为 N N N维空间中的一点,运用K-L变换可以将这个图像转换到底维的空间当中去,这样描述更加具体。

2.3.3 计算人脸图像的生成矩阵

采用训练后的人脸图像构成样本集,产生协方差矩阵可以用以下几种方法求出来。这三种方法是等价的。
{ 1. C A = ( ∑ k = 1 M χ ⋅ χ T ) / M − m x ⋅ m x T 2. C A = ( A ⋅ A T ) / M 3. C A = [ ∑ i = 1 m [ ( χ i − m x ) ( χ i − m x ) T ] / M \begin{cases} 1.C_A=(\sum_{k=1}^M\chi ·\chi^T)/M-m_x·m_x^T\\ 2.C_A=(A·A^T)/M\\ 3.C_A=[\sum_{i=1}^m[(\chi_i-m_x)(\chi_i-m_x)^T]/M \end{cases} 1.CA=(k=1MχχT)/MmxmxT2.CA=(AAT)/M3.CA=[i=1m[(χimx)(χimx)T]/M
协方差矩阵是一个大小为 N ∗ N N*N NN的合成矩阵,其中 N N N表示维数。 A A A表示每个人脸灰度图像减去平均人脸图像后按列构成的的矩阵,也是平均人脸图像。 M M M表示人脸库内参与训练的人脸数。
鉴于公式的复杂性,一般选择第二个公式来计算人脸特征值和特征向量。

2.3.4 提取特征值和特征向量

在我们获得协方差矩阵后,需要求出其特征值和特征向量,由于PCA的理论基础是K-L变换,而我们所求的K-L变换的新坐标系是由 N ∗ N N*N NN维的矩阵的特征值和特征量组成,直接求这两个参数难度高计算量非常大,下面介绍两种方法:
(1)奇异值分解原理
A ∈ R r m ∗ n ( r > 0 ) A\in R_r^{m*n}(r>0) ARrmn(r>0),则存在 m m m阶正交矩阵 U U U n n n阶正交矩阵 V V V,使得:
U T A V = ( Σ 0 0 0 ) U^TAV=\begin{pmatrix}\Sigma&0\\0&0\end{pmatrix} UTAV=(Σ000)
其中 Σ = d i a g ( σ 1 , σ 2 , . . . , σ r ) , σ i = ( 1 , 2 , . . . , r ) \Sigma=\rm diag\it (\sigma_1,\sigma_2,...,\sigma_r),\sigma_i=(\rm 1,2,...,\it r ) Σ=diag(σ1,σ2,...,σr),σi=(1,2,...,r)为矩阵 A A A的全部非零奇异值,满足 σ 1 ≥ σ 2 ≥ . . . ≥ σ γ ≥ 0 \sigma_1\ge \sigma_2\ge...\ge\sigma_{\gamma}\ge 0 σ1σ2...σγ0
前几个值较大,包含了矩阵 A A A的大部分信息, U U U的列向量(左奇异向量)是 A A T AA^T AAT的特征向量, V V V的列向量(右奇异向量)是 A T A A^TA ATA的特征向量。
(2)小矩阵计算大矩阵特征向量原理
在求高维矩阵特征向量时,可以用统计学的方法,将它变换为求转化为求低维矩阵的特征向量:
设: A A A是一个秩为 r r r m n ( m ≫ n ) mn(m\gg n) mn(mn)维矩阵,是一个矩阵,现在要求的特征值以及特征向量,可通过先求小矩阵的特征向量和特征值 ,两者之间有以下关系:
A T A ⋅ v i = λ i ( A ⋅ v i ) A A T ( A ⋅ v i ) = λ i ( A ⋅ v i ) A^TA·v_i=\lambda_i(A·v_i)\\ AA^T(A·v_i)=\lambda_i(A·v_i) ATAvi=λi(Avi)AAT(Avi)=λi(Avi)
显然, C A = A A T C_A=AA^T CA=AAT的特征向量是 A ⋅ v i A·v_i Avi(没有单位化), [ λ 1 , λ 2 , . . . λ r − 1 ] [\lambda_1,\lambda_2,...\lambda_{r-1}] [λ1,λ2,...λr1]是它的特征值。
注意:以上两种求解协方差矩阵的特征值和特征向量的方法,结果是一致的。
2.3.5 相似性测度
人脸样本在用PCA算法获取人脸特征后,转换为特征空间内的一点。所以样本之间的区分性可以运用角度或者距离的计算来比较实现。常见的匹配的算法有夹角余弦、街区距离和欧式距离等等,下面具体的描述下欧式距离这个测度。
欧式距离的定义:欧式距离(Eudidean distance)是一个普遍使用的距离定义,它说明某种物质在多维空间的真实距离。欧式距离看作是衡量物质的相似程度的依据,两个点的距离差越小就越一样。
假如 x , y x,y x,y是两幅维数一样的图像,它们的维数都是 M N MN MN,则它在一个设定空间的表示如下:
x = ( x 1 , x 2 , . . . , x k N + 1 , . . . , x M N ) , k = [ 1 , 2 , . . . , M ] y = ( y 1 , y 2 , . . . , y k N + 1 , . . . , y M N ) , k = [ 1 , 2 , . . . , M ] x=(x_1,x_2,...,x_{kN+1},...,x_{MN}),k=[1,2,...,M]\\ y=(y_1,y_2,...,y_{kN+1},...,y_{MN}),k=[1,2,...,M] x=(x1,x2,...,xkN+1,...,xMN),k=[1,2,...,M]y=(y1,y2,...,ykN+1,...,yMN),k=[1,2,...,M]
其中, x k N + 1 , y k N + 1 x_{kN+1},y_{kN+1} xkN+1,ykN+1为图像 x , y x,y x,y的第 ( k , 1 ) (k,1) (k,1)个像素点。则图像间的欧氏距离可表示如下为:
d E ( x , y ) = [ ∑ k = 1 M N ( x k − y k ) 2 ] 1 2 d_E(x,y)=[\sum_{k=1}^{MN}(x_k-y_k)^2]^{\frac 12} dE(x,y)=[k=1MN(xkyk)2]21
在测试时,将测试图片与训练集图片一一比较,选用与训练集图片中欧氏距离最短的图片的标签(表情)为测试图片的表情。

三、课程设计步骤和结果

3.1步骤

3.1.1 整体步骤

1)找出表情为Neutral的图,根据LabelFile.txt识别。
2)读取文件,并将图像都压缩存储到一个变量之中。
3)提取脸部,去除背景,并把脸部区域存在img中。
4)求img每列均值meanImage=mean(img,2)。
5)PCA降维,提取特征(保留30个维度)。
6)对测试集同样提取均值(保留30个维度)。
7)根据这30个维度计算与面无表情训练图像的欧氏距离。
8)分别对比每个图像与训练集每个图像的欧式距离,欧氏距离最短的训练集图像的表情即为需要测试的图像的表情

3.1.2 脸部ROI提取步骤

本流程为章节3.1中整体步骤中第三步的展开。
1)转换颜色空间RGB为亮度色度空间YCbCr。
2)把10<Cr<255初步认为是脸,可能会识别到多个区域。
3)去噪:用形态学操作填补连通区域中的空洞,可能会识别到多个区域。
4)对于每一个连通域,提取轮廓,认为轮廓面积最大的连通区域才是人脸,其余区域舍弃。
5)将第2、第3、第4步骤中获取得到的掩膜与输入图像原图相乘,得到需要在后续步骤中识别表情的人脸区域。

3.1.3 步骤优化

在3.1章节的步骤中,每次需要测试新的图像时,都需要将训练集中的图像重新读取、重新进行训练,在matlab环境中此训练存在一定的耗时且不必要。本课程设计使用到的特征提取类似于机器学习/深度学习但又不是机器学习/深度学习,可以用matlab工作区文件的形式将训练得到的结果与“模型”存储下来,在测试时直接读取该文件中存储的“模型”。因此,可以对3.1章节的步骤进行适当的修改与优化处理,将训练与测试的流程进行分离。
训练的流程如下:
1)找出表情为Neutral的图,根据LabelFile.txt识别。
2)读取文件,并将图像都压缩存储到一个变量之中。
3)提取脸部,去除背景,并把脸部区域存在img中。
4)求img每列均值meanImage=mean(img,2)。
5)PCA降维,提取特征(保留30个维度)。
6)将特征提取完毕并将训练结果以matlab工作区文件的形式进行存储。
测试的流程如下:
1)读取文件,并将图像都压缩存储到一个变量之中。
2)提取脸部,去除背景,并把脸部区域存在img中。
3)读取由训练流程第6)步所得到的matlab工作区文件。
4)对测试集同样提取均值(保留30个维度)
5)根据这30个维度计算与面无表情训练图像的欧氏距离。
6)分别对比每个图像与训练集每个图像的欧式距离,欧氏距离最短的训练集图像的表情即为需要测试的图像的表情。
对步骤进行优化后的函数调用关系如下图所示:
MATLAB【数字图像处理】 大作业:人脸表情识别
流程图如下图所示:
MATLAB【数字图像处理】 大作业:人脸表情识别

3.2 结果

3.2.1 单个测试

【为保护个人隐私,用于测试的真人图像已略去】
如图,利用真实拍摄的人脸图像进行测试。上图为提取人脸部分的流程。对于输入图像,检测颜色。在YCbCr空间中,检测Cr>10的部分初步认为是人脸。此时,手与真正的脸部主体的颜色都被检测到,并被初步认为是人脸。接着,利用去噪并提取轮廓、增强轮廓信息、填充空洞等较为传统的形态学操作算法填补脸部空洞(如眼睛、眼睛等区域),并很好地填补、去除了噪声区域。检测连通域面积,认为连通域面积最大的部分才是人脸。如上图的第6个子图所示,人脸被提取出并返回给运行测试的主函数。
MATLAB【数字图像处理】 大作业:人脸表情识别
测试的结果以文件的形式输出,可以看到这一真实拍摄的照片的表情被认为是“neutral”(面无表情),分类较为正确。
【为保护个人隐私,用于测试的真人图像已略去】
使用另一张真实拍摄的图片进行测试,这一图片比上一张图片的情况更为简单,不存在多个YCbCr颜色空间中Cr>10的连通域。提取人脸的步骤不再赘述。
MATLAB【数字图像处理】 大作业:人脸表情识别
可以看到这一表情被正确地识别为“sad”,即不高兴。

3.2.2测试集结果

MATLAB【数字图像处理】 大作业:人脸表情识别
MATLAB【数字图像处理】 大作业:人脸表情识别
仅仅使用一两张测试图像不能很好地衡量表情识别的准确性。在下载训练集时,也附带了一些没有标签、待测试的数据集。测试结果如上图所示。数据范围较小,只有30张图片,我们可以人工地对数据集中的图片进行分类,并于测试结果比较。得到的混淆矩阵如下,并将查全率与查准率附在混淆矩阵中:

预测 预测 预测 预测 预测 查全率(recall)
面无表情 高兴 恶心 愤怒 沮丧
实际 面无表情 4 1 0 0 0 80%
实际 高兴 0 4 0 0 2 66.7%
实际 恶心 0 0 11 0 0 100%
实际 愤怒 0 0 0 4 0 100%
实际 沮丧 0 0 1 1 1 33%
查准率(precision) 100% 80% 91.6% 80% 33%

可以从混淆矩阵中看到,尽管存在一定误分类的情况,但对大多数类型的表情的识别都是较为准确的。

四、课程设计总结

五、设计体会

参考文献

[1]何东健.数字图像处理[M].西安电子科技大学出版社,2009年.
[2]阮秋琦.数字图像处理[M].电子工业出版社,2001年.
[3]徐建华.图像处理与分析[M].科学出版社,1999年.
[4]徐中立.数字图像的智能信息处理[M].科学教育出版社,2001年.

源代码与数据集

https://download.csdn.net/download/sinat_36321918/10742127文章来源地址https://www.toymoban.com/news/detail-455803.html

到了这里,关于MATLAB【数字图像处理】 大作业:人脸表情识别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数字图像处理之matlab大作业:美图秀秀

    1、放大缩小 从变量上看,图片是放大缩小了,但显示出来有点问题,应该是显示设置的原因。缩小的这张图不就是马赛克么~  2、翻转和旋转    3、图像剪切  4、图像增强(提高对比度) 5、磨皮 6、美白 参考:【数字图像处理】实验(3)——图像综合应用:皮肤美化(

    2024年02月11日
    浏览(38)
  • 美颜算法--数字图像处理作业

    请为图中人做美肌处理,去痘或去皱纹。(2选1,或自选图片) 作业内容请包含所用的算法说明,效果图,主要算法的代码,以及对效果图的分析。所有内容用图片或文字的形式提交,不要用附件。 2.1 分析问题         图一可见大量痘点,痘点在途中属于噪声,考虑首先

    2024年02月03日
    浏览(44)
  • 数字图像处理大作业实验报告

         《数字图像处理》 期末大作业 班    级:数字媒体技术2020级1班 姓    名:快乐的小蓝 学    号:XXXXXXXXX XXXX大学信息学院 目录 一、任务描述 二、设计思路 三、功能模块 1 人脸定位 1.1 算法原理 1.检测最大连通域 2.基于肤色的检测 3.使用matlab自带的工具人脸识别

    2023年04月23日
    浏览(50)
  • 数字图像处理期末大作业-美图秀秀

    本项目是以matlab为主语言并设计GUI界面的一款简易美图秀秀,包含基础的图像处理和一些常见美颜算法 对于一些matlab较难实现的算法采用C++或python来实现 ⭐️ github地址:https://github.com/mibbp/MeituShow 里面有我完整的代码,你想直接运行记得看readme配置一下环境,本博客更多的

    2024年02月09日
    浏览(53)
  • 数字图像处理——大作业 基于车道信息的违法车辆车牌识别

    车牌识别系统广泛应用于交通管理、收费站、城市交叉口、港口和机场、机动车检测、停车场管理等不同的场所,对提高这些场所交通系统的管理水平和自动化程度具有重要的意义[1]。车牌自动识别系统主要包括车牌定位、车牌分割、车牌字符识别三部分。 其中,仅就车牌字

    2024年02月07日
    浏览(62)
  • 数字图像处理-matlab图像内插

    目标各像素点的灰度值代替源图像中与其最邻近像素的灰度值 参考博客 假设一个2X2像素的图片采用最近邻插值法需要放大到4X4像素的图片,右边该为多少? 最近邻插值法坐标变换计算公式: s r c X = d s t X ∗ ( s r c W i d t h / d s t W i d t h ) srcX=dstX*(srcWidth/dstWidth) src X = d s tX ∗

    2024年02月03日
    浏览(61)
  • 数字图像处理(实践篇)二十二 使用opencv进行人脸、眼睛、嘴的检测

    目录 1 xml文件 2 涉及的函数 3 实践 使用opencv进行人脸、眼睛、嘴的检测。 1 xml文件 方法① 下载  地址:https://github.com/opencv/opencv/tree/master/data/haarcascades 点击haarcascade_frontalface_default.xml文件 对着Raw右键,选择“链接另存为”,选择代码所在的路径即可,就可以下载这个文件啦

    2024年02月03日
    浏览(48)
  • 基于matlab的数字图像处理之彩色图像处理

    一、实验目的 (1)了解如何利用RGB分量生成简单的图像。 (2)熟练掌握RGB彩色模型转换到HIS彩色模型的过程。 (3)熟练掌握RGB图像的彩色分割。 (4)熟练掌握彩色图像如何在向量空间中进行边缘检测。 二、实验仪器(软件平台)     计算机、MATLAB软件 三、实验原理

    2024年02月06日
    浏览(48)
  • matlab数字图像处理之图像增强

    图像处理 基本目的之一是改善图像质量,而改善图像最常用的技术是图像增强的目的是为了改善图像的视觉效果,使图像更加清晰,便于人和计算机对图像进一步的分析和处理 图像质量 的基本含义是指人们对一幅图像视觉感受的评价。图像增强的目的就是为了改善图像显示

    2024年02月04日
    浏览(57)
  • 数字图像处理实验之Matlab对图像的基本处理

    1、提取Lena图像的左半上角部分,与原始Lena图像在同一个figure中显示,并做适当命名 效果图 2、利用 imnoise , 对原始Lena图像叠加高斯噪声,产生4幅、14幅、140幅的含噪图像。对这些含噪图像采用 相加  运算,来验证、比较图像相加消除叠加性噪声的效果。将原始图像、1幅噪

    2024年02月03日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包