最简单的人脸识别算法讲解.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
最简单的人脸识别算法讲解

最简单的人脸识别算法 目标 目的:为了让大家了解图像识别和检索的算法开发过程,以及加深对特征和分类器的理解。 概要 对于图像分类和检索来说,最重要的有两个内容,一个是特征提取方法,另一个是分类方法。图像识别就是先提取图像的特征,然后根据图像的特征进行分类识别的过程。为了让大家最快的了解图像识别算法的开发过程,我特意使用“图像尺寸缩小+欧式距离”的思想编写了相应的程序。算法实现的流程图如下图所示。 下面简单介绍一下哦。首先,说一下提取特征的方法。图像的每个像素都表征了图像某个位置的灰度值,可以作为图像的识别特征。但是,考虑到对于一幅100x100的图像来说,图像的像素数是10000,如果直接使用所有像素作为图像的特征,一方面肯定存在很多的冗余信息,另一方面计算量也很大。缩小图像尺寸是解决这个问题的不错方法。将100x100的图像缩小到10x10,特征点数就从10000将到100了,大大的降低了运算量。 本文使用ORL数据库为例,详细资料请baidu一下。 基础之matlab函数 为了便于便于理解程序和算法,先介绍一些基本的东西。 本文使用的MATLAB函数:zeros()、strcat()、num2str()、imread()、imresize()、reshape()以及转置运算。为了大家能比较容易的读懂“最简人脸识别程序”,先对这几个函数进行简单的介绍。 ①zeros() 创建全0矩阵。一般用来创建固定尺寸的变量。如果在程序运行过程中,一个变量的尺寸发生了变化,那么程序会暂停来为变量重新分配内存;假如一个变量尺寸在for循环中始终变化,会很浪费时间。因此,我编写的程序中,先预计变量最后的尺寸,然后预定义这个尺寸的全零变量。这样子做会节省程序的运行时间。不信的话,可以试一试!帮助文件中的例子如下所示: x = zeros(2,3,int8); 以上代码是创建尺寸为2x3的int8型的变量x。默认创建的是double型。想了解更多吗?请doc一下~~~。运行结果如下所示: ②strcat() 字符粘连。简单说,该函数参数必须是字符,它的作用就是将各个参数按次序粘连起来。例如: a = hello ; b = goodbye; string = strcat(a, b) 以上代码是定义2个字符变量a和b,然后将这2个字符变量粘连起来。运行结果如下所示: ③num2str() 将数值型数据转换成字符型。例如,像1是数值型数据,而‘1’就是字符型数据。该函数就是实现从1到‘1’的转换。帮助文件中的一个例子: num2str(pi); 以上代码是将数值型 转换成字符的形式。运算结果如下所示: 想了解更多的话,请打命令“doc num2str”,回车,查看帮助文件。或者baidu or google一下,或者去Matlab中文论坛查询帮助。 ④imread() 读入图像文件。以前给大家讲过了,这里再说一点研一不知道的东东。原来使用这个命令,参数就是文件的名字,这样做有个前提,就是该图像文件必须在当前工作路径或搜索路径(what is it ? go to baidu for answer!),否则程序报错,说没有该文件。现在就有一个问题,如果我想导入一个图像,它不在当前路径下,也不再搜索路径下,而我还不想切换工作路径, ?imread函数本身就可以解决这个问题。imread的参数改成“路径+文件名+格式”,如下所示: I = imread(‘F:\科研\人脸识别\人脸数据库\ORL\1_1.pgm’); 以上代码就解决图像文件不在当前路径或搜索路径下的问题。注意:文件夹之间的分割符是反斜杠“\”,而不是斜杠“/”。想了解更多,doc一下!!! ⑤imresize() 图像尺变化。即原图像尺寸是100x100,但是我们现在需要10x10的图像,使用该函数就可以实现。即,该函数可以将100x100的图像变换为10x10的图像。 I = imread(rice.png); J = imresize(I, [128,128]); 以上代码的功能是,’先读入rice.png’图像,原图像的尺寸是256x256的,然后将原图像的尺寸变换为128x128,然后存储在J变量中。运算的结果是: 当然imresize还有其它的调用形式,想了解的话,请doc一下。(养成一个doc的习惯,就提高了自学的能力哦!) ⑥reshape() 变换矩阵的形状。假如一个矩阵为10x10的尺寸,现在想将这个矩阵变换为100x1的列向量,但是原矩阵的数据都保留下来。例如: a=[1,2,3;4,5,6]; b=reshape(a,[1,6]); 以上代码功能是,先建立一个2x3的矩阵a,然后将它变为一个1x6的行向量并存储在b中。程序

文档评论(0)

zhanghc + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档