西安石油大学人工智能实验人脸识别实验报告.docx

上传人:b****7 文档编号:9493149 上传时间:2023-02-04 格式:DOCX 页数:19 大小:482.42KB
下载 相关 举报
西安石油大学人工智能实验人脸识别实验报告.docx_第1页
第1页 / 共19页
西安石油大学人工智能实验人脸识别实验报告.docx_第2页
第2页 / 共19页
西安石油大学人工智能实验人脸识别实验报告.docx_第3页
第3页 / 共19页
西安石油大学人工智能实验人脸识别实验报告.docx_第4页
第4页 / 共19页
西安石油大学人工智能实验人脸识别实验报告.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

西安石油大学人工智能实验人脸识别实验报告.docx

《西安石油大学人工智能实验人脸识别实验报告.docx》由会员分享,可在线阅读,更多相关《西安石油大学人工智能实验人脸识别实验报告.docx(19页珍藏版)》请在冰豆网上搜索。

西安石油大学人工智能实验人脸识别实验报告.docx

西安石油大学人工智能实验人脸识别实验报告

实验报告

 

课程名称人工智能

实验名称人脸识别

姓名张文江

学号************

专业班级计科1201

成绩

指导教师程国建

一、实验目的

1、学会使用PCA主成分分析法。

2、初步了解人脸识别的特征法。

3、更熟练地掌握matlab的使用。

二、原理介绍

1、PCA(主成分分析法介绍)

引用一个网上的例子。

假设有一份对遥控直升机操作员的调查,用表示飞行员i的

飞行技能,表示飞行员i喜欢飞行的程度。

通常遥控直升飞机是很难操作的,只有那些非常坚持而且真正喜欢驾驶的人才能熟练操作。

所以这两个属性和相关性是非常强的。

我们可以假设两者的关系是按正比关系变化的。

如下图里的任意找的向量u1所示,数据散布在u1两侧,有少许噪声。

现在我们有两项数据,是二维的。

那么如何将这两项变量转变为一个来描述飞行员呢?

由图中的点的分布可知,如果我们找到一个方向的U,所有的数据点在U的方向上的投影之和最大,那么该U就能表示数据的大致走向。

而在垂直于U的方向,各个数据点在该方向的投影相对于在U上的投影如果足够小,那么我们可以忽略掉各数据在该方向的投影,这样我们就把二维的数据转化成了在U方向上的一维数据。

为了将u选出来,我们先对数据进行预处理。

先求出所有数据的平均值,然后用数据与平均值的偏差代替数据本身。

然后对数据归一化以后,再代替数据本身。

而我们求最大的投影和,其实就是求各个数据点在U上的投影距离的方差最大。

而XTu就是投影的距离。

故我们要求下式的最大值:

按照u是单位向量来最大化上式,就是求的特征向量。

而此式是数据集的协方差矩阵。

在实际应用中,我们不止面临二维的数据。

因此不能使用几何的形式呈现,但原理也是一样。

就是找到一组相互正交的单位向量,然后根据贡献率考虑选择其中的部分作为考量的维数,这也就实现了数据的降维。

三、实验步骤

1、将库里的400张照片分成两组。

一组作为训练,一组作为库。

每个人的前五张照片作为训练,后五张作为库。

训练的照片按照顺序的数字重命名。

库的照片名字不变。

2、库照片处理。

1将每一张库的照片转化成N维的向量。

(库里的照片是112*92,故将转化成的矩阵按列

或行展开,就是个10304维的向量)我们稍后要对如此多维的向量用PCA进行降维。

然后把这些向量存入一个矩阵里。

而我是将这200个向量以列的形式存在了矩阵里。

2将这200个向量的每个元素相加起来求出平均值。

再用Z里的每一个向量减去这个平均

值得到每个的偏差。

3接下来我们就要针对这些预处理后的数据进行降维。

我们要求的N个相互正交的向量就

是协方差矩阵的特征向量,而对应的特征值就是各个向量所占的比重。

但是Z是个10304*200的矩阵,那么就是个10304*10304的矩阵。

使用matlab直接求其特征值与特征向量不太实际。

所以我们考虑一个简单的运算方法:

协方差矩阵的秩受到训练图像的限制:

如果有 N 个训练样本,则最多有 N − 1个对应非零特征值的特征向量,其他的特征向量对应的特征值都是0。

如果训练样本的数目比图像的维数低,则可以通过如下方法简化主成份的计算。

设 Z是预处理图像的矩阵,每一列对应一个减去均值图像之后的图像。

则,协方差矩阵为,并且对 S 的特征值分解为

然而, 是一个非常大的矩阵。

因此,如果转而使用如下的特征值分解。

此时,我们发现如果在等式两边乘以T,可得到

这就意味着,如果ui是TTT的一个特征向量,则 是S 的一个特征向量。

我们的库里有200张112 * 92像素的图像,则 TTT是一个200*200的矩阵,这就比原先的10304 *10304的协方差矩阵要容易处理许多。

需要注意的是,上面的特征向量  没有进行归一化,如果需要,应该在后面在进行处理。

4降维处理。

上面的步骤已经求到了所有的特征向量与特征值。

而特征值就是各数据点在该特

征向量上的方差。

跟据PCA,我们要选出占主要比重的特征向量即可,而判定标准就是特征值。

先把方差(特征值)降序排列,并把对应的特征向量也排列好。

依次选择方差,使选出的方差和占所有方差和大约95%左右。

然后选择对应的特征向量。

其余的特征向量与特征值可以抛弃不用了。

这就完成了降维。

(③中一共有200个不为零的方差(特征值))

5归一化处理。

数据归一化处理是数据挖掘的一项基础工作,不同评价指标往往具有不同的量

纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化处理,以解决数据指标之间的可比性。

原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价。

我使用的是Z-score法。

经过处理得数据符合标准正态分布,即均值为0,标准差为1,转化函数为

其中为所有数据的均值,为所有样本数据的标准差。

在③里求得的特征值就是方差。

所以我们要用乘上每一个对应的特征向量。

本来这个归一化处理应该放在第一步的数据预处理那里。

但由于那里的计算还没有涉及到协方差矩阵,而我们需要的方差在后面才出现,故把归一化处理放在这里。

即③中,

这些特征向量都是10304*1的大小,跟我们一开始处理后的照片向量的大小一样。

这些就是特征脸。

特征脸可以线性组合成所有库里的脸。

6用特征脸对库里的脸进行标示,也就是将库里的每张脸图数据转化成各个特征脸所占的比重。

7人脸识别。

先对训练的脸图进行预处理。

预处理即①②中所说的求偏差。

求到训练图的

偏差向量后,如⑥那样用特征脸对训练图进行标示。

即求得

然后求与的欧式距离,此距离表明两图的接近度。

该距离越小,则这两张图越接近,则越有可能是同一个人。

五、编程实现

1.ImageSize

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

usingSystem.Drawing;

usingSystem.Drawing.Imaging;

namespaceNormIllumMethods.Visual

{

classImageSize

{

///

///Resizethebitmaptopowerof2ifitisnecessary

///

///

///

publicstaticBitmapResizeToPower2(Bitmapbitmap)

{

intw=bitmap.Width;

inth=bitmap.Height;

intww=UpperPower2(w);

inthh=UpperPower2(h);

Bitmapoutbitmap=newBitmap(bitmap,ww,hh);

PixelFormatformat=PixelFormat.Format8bppIndexed;

BitmapDatabitmapData=outbitmap.LockBits(newRectangle(0,0,ww,hh),ImageLockMode.ReadWrite,PixelFormat.Format32bppArgb);

intstride=bitmapData.Stride;

IntPtrscan0=bitmapData.Scan0;

Bitmapbb=newBitmap(ww,hh,stride,format,scan0);

outbitmap.UnlockBits(bitmapData);

//ColorPalettepalette=outbitmap.Palette;

//for(inti=0;i<256;i++)

//{

//palette.Entries[i]=System.Drawing.Color.FromArgb(i,i,i);

//}

//outbitmap.Palette=palette;

return(IsPower2(w)&&IsPower2(h))?

bitmap:

bb;

}

///

///Returntrueifthenumberispowerof2

///

///

///

privatestaticboolIsPower2(intn)

{

return((n&(n-1))==0);

}

///

///Returnthesmallestpowerof2greaterthanorequaltothespecifiednumber

///

///

///

privatestaticintUpperPower2(intn)

{

return(int)Math.Pow(2,Math.Ceiling(Math.Log(n,2)));

}

}

}

2.Program.

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Windows.Forms;

namespaceNormIllumMethods.Visual

{

staticclassProgram

{

///

///Themainentrypointfortheapplication.

///

[STAThread]

staticvoidMain()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(newVisual());

}

}

3.Visual

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Text;

usingSystem.Windows.Forms;

usingSystem.Diagnostics;

usingSystem.Drawing.Imaging;

usingNormIllumMethods.Techniques;

usingComparisonGreyScaleImage;

namespaceNormIllumMethods.Visual

{

publicpartialclassVisual:

Form

{

Bitmapbitmap;//imageloaded

publicVisual()

{

InitializeComponent();

}

#regionFileOptions

//MenuFile/OpenImage

privatevoidmnuOpenImage_Click(objectsender,EventArgse)

{

OpenImage();

}

//MenuFile/SaveImage

privatevoidmnuSaveImage_Click(objectsender,EventArgse)

{

SaveImage();

}

//MenuFile/Exit

privatevoidmnuExit_Click(objectsender,EventArgse)

{

Exit();

}

//ShortcutOpen

privatevoidtoolStripOpen_Click(objectsender,EventArgse)

{

OpenImage();

}

//ShortcutSave

privatevoidtoolStripSave_Click(objectsender,EventArgse)

{

SaveImage();

}

///

///Openanimage

///

publicvoidOpenImage()

{

if(ofd.ShowDialog()==DialogResult.OK)

{

bitmap=(Bitmap)Image.FromFile(ofd.FileName);

if(bitmap.PixelFormat!

=PixelFormat.Format8bppIndexed)

bitmap=BitmapGrey.GrayScale8bpp(bitmap);

picOriginal.Image=bitmap;

SetVisibleMethods();

}

}

///

///Savetheimage

///

publicvoidSaveImage()

{

sfd.RestoreDirectory=true;

if(sfd.ShowDialog()==DialogResult.OK)

{

Bitmapcopy=(Bitmap)picFiltered.Image.Clone();

switch(sfd.FilterIndex)

{

case1:

copy.Save(sfd.FileName,ImageFormat.Bmp);

break;

case2:

copy.Save(sfd.FileName,ImageFormat.Gif);

break;

case3:

copy.Save(sfd.FileName,ImageFormat.Jpeg);

break;

case4:

copy.Save(sfd.FileName,ImageFormat.Png);

break;

}

}

}

///

///Closeapplication

///

publicvoidExit()

{

this.Close();

}

///

///Setvisiblethemethodstoapplytotheimage

///

privatevoidSetVisibleMethods()

{

mnuMethods.Visible=//EnablethemenuMethodsinmainwindow

labInitial.Visible=true;//Viewtheinitiallabel

}

///

///Setvisibletheoptionstosavetheimagefiltered

///

privatevoidSetVisibleSave()

{

mnuSaveImage.Visible=//EnablethemenuSaveImageinmainwindow

toolStripSave.Visible=//EnabletheshortcutSaveImageinmainwindow

labNormalised.Visible=true;//Viewtheimagenormalised

}

#endregion

#regionNormalisationAlgorithms

//MenuMethods/MultiscaleRetinex

privatevoidmnuMultiscaleRetinex_Click(objectsender,EventArgse)

{

MultiscaleRetinex();

}

//MenuMethods/Isotrophic

privatevoidmnuIsotropic_Click(objectsender,EventArgse)

{

Isotropic();

}

//MenuMethods/Anisotrophic

privatevoidmnuAnisotropic_Click(objectsender,EventArgse)

{

Anisotropic();

}

//ContextMenu/AnisotropicSmoothing

privatevoidcontMnuAnisotropic_Click(objectsender,EventArgse)

{

Anisotropic();

}

//ContextMenu/MultiscaleRetinex

privatevoidcontMnuMultRetinex_Click(objectsender,EventArgse)

{

MultiscaleRetinex();

}

//ContextMenu/IsotropicSmoothing

privatevoidcontMnuIsotropic_Click(objectsender,EventArgse)

{

Isotropic();

}

///

///ApplyMultiscaleRetinexAlgorithm

///

publicvoidMultiscaleRetinex()

{

RetinexParameterparam=newRetinexParameter();

param.ShowDialog();

if(param.OK)

{

MultiscaleRetinexretinex=newMultiscaleRetinex(param.Sigmas,param.Widths,param.FilterSize);

picFiltered.Image=retinex.Apply((Bitmap)bitmap.Clone());

SetVisibleSave();

}

}

///

///ApplyIsotropicSmoothingAlgorithm

///

publicvoidIsotropic()

{

IsoAniParameterparam=newIsoAniParameter();

param.ShowDialog();

if(param.OK)

{

IsotropicSmoothingiso=newIsotropicSmoothing(param.Value);

picFiltered.Image=iso.Apply((Bitmap)bitmap.Clone());

SetVisibleSave();

}

}

///

///ApplyAnisotropicSmoothingAlgorithm

///

publicvoidAnisotropic()

{

IsoAniParameterparam=newIsoAniParameter();

param.ShowDialog();

if(param.OK)

{

AnisotropicSmoothinganis=newAnisotropicSmoothing(param.Value);

picFiltered.Image=anis.Apply((Bitmap)bitmap.Clone());

SetVisibleSave();

}

}

#endregion

}

}

6、实验截图

1.打开软件,导入原始图片。

结果如图所示:

2.运用ISOtropicalsmoothing设置smoothnessconsyraint的值为1,结果如图所示:

3.运用Anisotrophicsmoothing设置smoothnessconsyraint的值为1,结果如图所示:

7、实验总结

实验中遇到的难题:

一开始最难理解的莫过于特征脸法的原理。

原理中涉及到许多的线性代数知识,需要花时间去回忆,并用已经掌握的初步的知识去理解更深刻的知识。

在咨询过程与上网查阅资料的过程中才慢慢解决了问题。

后来代码完成后,识别率一直非常低。

与完成了的同学对照时,发现代码的原理几乎一样,当时一直不知道怎么办。

后来经过旁人的提醒,发现协方差矩阵的特征向量没有按照特征值排序后的顺序重新排列。

这个小问题困扰了我很久。

细节很重要。

收获:

这次实验让我更加熟练地应用了matlab。

对矩阵的运算也理解地更加的透彻。

学习了PCA主成分分析法,这个方法在分析较多的数据时是非常有用的。

在如今的大数据时代,PCA是个非常实用的分析手段。

这次在做实验的过程中,上网查阅了许多关于人脸识别的资料,发觉虽然自己完成了初步的人脸识别的功能,但远远没有达到现实生活的需求。

我们做实验的orl库的像素不仅非常低,而且每张人脸的位置与大小也非常接近,这都大大降低了难度。

这个方向还有着许多可学习的东西。

参考文献

[1]祝磊,朱善安.人脸识别的一种新的特征提取方法[J].计算机学报,2007。

[2]何东风,凌捷.人脸识别技术综述[J].计算机学报,2003。

[3],YounusFazl-e-BasitJaved和UsmanQayyum”,采用直方图的人脸识别和处理”,第三阶段仅相关新兴技术研报告。

[4]何国辉,甘俊英.PCA-LDA算法在性别鉴别中的应用[J].中国图像图形学报,2006。

[5]王聃,贾云伟,林福严.人脸识别系统中的特征提取[J].自动化学报,2005。

[6]张俭鸽,王世卿,盛光磊.基于小波和DFB-PCA的人脸识别算法研究[J].自动化学报,2007。

[7]曹林,王东峰,刘小军,邹谋炎.基于二维Gabor小波的人脸识别算法[J].电子学报,2006

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1