人脸识别算法Word格式文档下载.docx
- 文档编号:22359571
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:45
- 大小:298.05KB
人脸识别算法Word格式文档下载.docx
《人脸识别算法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《人脸识别算法Word格式文档下载.docx(45页珍藏版)》请在冰豆网上搜索。
2.3成组算法..............................................13
2.4形状属性的计算........................................14
第三章预处理和几何匹配.......................................19
3.1预处理...............................................19
3.2几何匹配算法.........................................24
第四章软件的组成和操作.......................................28
4.1软件的组成...........................................28
4.2软件的操作...........................................30
第五章论文工作总结...........................................32
6.1关于几何匹配算法和分合算法的总结.....................32
6.2将来工作的展望.......................................34
6.3致谢.................................................34
参考文献.....................................35
这个毕设所涉及到的是人脸的定位和识别。
简单来说,所谓人脸的定位,就
是在照片(静态图像)或视频(动态图像)中标出人脸所在的位置,把人脸选取出来。
而人脸的识别就是把选取出来的人脸与数据库中已有的人脸进行比较,找出
匹配的档案来。
有的文献把人脸的定位和识别统称为人脸识别,定位和识别则是
两个主要的步骤。
完整的人脸识别系统涉及到决定照片或视频中有无人脸,并计
数,定位,定出大小,然后根据数据库识别出个人,可能的话还要识别表情,以
及根据脸的图像做出描述(瓜子脸,丹凤眼等等就是日常生活中“描述”的例子),
或者反过来根据描述挑选匹配的人脸图像。
在日常生活中,我们主要根据脸来识别一个人。
交谈中,我们往往看着对方
的脸,尤其是眼睛。
脸上的表情也是进行交谈的一个重要部分。
所以,人脸在人
与人的交流过程中起着极其重要的作用。
这就决定了在现代社会中,使用计算机
自动进行人脸的定位和识别工作有着重要的意义。
其应用领域包括很多方面,比
如身份鉴别,保安系统,人机交互界面等等。
人脸识别系统虽然有诱人的应用前景,但是在现实中却还没有开始大规模的
使用。
其主要原因之一就是用计算机自动进行人脸的定位和识别十分困难,目前
的识别效果(正确率,速度)不如其他的生物识别技术,如指纹识别,视网膜识
别等等。
人们在日常生活中就进行了大量的人脸定位和识别工作,当然全部是由
人的视觉系统和大脑“自动”进行的。
目前还不清楚人的视觉系统和大脑的工作
原理,因此这项人可以轻而易举完成的任务,对于目前还只会死板地执行程序指
令的计算机来说却是极端困难。
困难主要存在于两个方面:
1.人脸的图像数据具有高度的随机性。
光照条件,脸的偏向,表情,发型,胡
子,化妆,衣饰(眼镜,帽子)等等略有变化,就可以给识别系统带来巨大
的困难。
2.人脸的图像数据量巨大。
目前出于计算量的考虑,人脸定位和识别算法研究
大多使用尺寸很小的灰度图像。
一张64,64像素的256级灰度图像就有4096
个数据,每个数据有256种可能的取值。
定位和识别算法一般都很复杂,在
人脸库较大的情况下,计算量十分大,很多情况下速度令人难以忍受。
而灰
度数据事实上是丧失了象色彩,运动等等的有用信息的。
如果要使用全部的
有用信息,计算量就更大了。
因此,研究人脸的定位和识别不仅仅有实用上的考虑,而且对人们理解人脑
的工作方式、研究人工智能和数字图像处理有重要的意义。
从模型匹配的方法来看,目前的人脸定位算法可以粗略地分为两大类:
第一
类是利用人脸各器官之间的几何关系的方法;
第二类是利用标准人脸图像或者其
变换结果直接或者经特征提取后进行匹配的方法。
第一类方法利用了明显的先验
知识,因而方法简单明了,执行速度较快,对人脸的方向和表情有一定的适应性
(在一定的变化范围内面部特征的相对几何关系变化很小),但是准确率往往不高(漏判和误判),而且对预处理要求高,依赖于所有面部特征都完整地被提取,
所以对转角较大的侧脸,光照极度不均匀,部分脸被遮蔽(眼镜,围巾等)适应性不好。
第二类方法利用了更多的图像信息,准确率高,不易受欺骗;
缺点是
计算量大,而且使用的人脸模板受人脸库中已有资料的影响,可能会有通用性不
好的问题(比如不同人种的人脸模板不能通用)。
利用人脸各器官之间的几何关系的方法的典型例子可以参见Shi-HongJeng,
(1)HongYuanMarkLiao等人的文章。
而利用标准人脸图像或者其变换结果直接
或者经特征提取后进行匹配的方法的典型例子可以参见ToshiakiKondo和Hong
(2)Yan的工作。
我认为利用人脸各器官之间的几何关系的方法可以作为完整的人脸定位算
法的一个基础,就是说利用几何匹配先大致找到图像中的人脸(可能含有很多
错误),然后使用利用标准人脸图像或者其变换结果直接或者经特征提取后进行
匹配的方法来确证,剔除实际不是人脸的区域。
这样既可以利用第一类方法的速
度优势,又可以利用第二类方法的准确度优势。
从一幅图中,按一定规则划分出感兴趣的部分或区域叫做分割。
对于利用人
脸各器官之间的几何关系的人脸定位方法来说,分割算法是十分重要而关键的。
在这里,感兴趣的部分是人脸的器官(眼睛,嘴巴,眉毛,鼻子等等)。
分割算
法如果能够有效地把人脸器官和脸的其他部分分离开来,并且保持器官的完整性
(比如嘴巴没有破碎成几段),就是成功地达到了目的。
分割算法是数字图像处理中非常经典的课题,有着众多的算法可供选择。
这
些算法各有所长,但是没有哪一种是普适的。
最常见的几类方法是:
按像素或处
理过的像素的灰度值进行分割(其实就是取阈值做二值化);
提取边缘,利用边
缘进行分割;
区域生长方法。
区域生长方法寻找互相连接在一起,并有相同特征的像素所形成的区域(我
把这样的区域称作特征块或者“物体”),是实现图像分割的一种重要方法。
区
域是一个二维连通区,所以生成区域的办法大致有三类:
局部法:
这是根据像素
的性质或像素的临近像素的性质决定像素分在什么区域;
总体法:
这是根据遍及
整幅图中大量像素的性质决定把一群像素划分到一个区域中;
分裂合并法(简称
分合):
这是利用状态空间技术分裂或合并区域,用图结构表示区域和边界,这
时要利用局部和总体的合并与分裂准则。
我在毕业设计中采用的是区域生长方法中的分合算法。
分合算法70年代就
(3)提出,发展至今已经是一种非常成熟的经典算法,被由Horowitz和Pavlidis
广泛用于图像分割的应用,比如卫星遥感照片的自动分割等。
这种方法被证明效
果较好,但是计算和存储量大。
我的论文工作的目标是寻找一种切实可行的人脸定位算法,并且编制出演示
的软件。
我采用的是分合的分割算法和几何匹配的算法。
算法和软件的实现采用
的是BorlandDelphi3。
Windows位图的基本操作和一些数字图像处理的基本操
作来自钟立晨老师所编制的模块,其余的各模块是由我自己编写的,包括:
演示
软件主程序;
图像的预处理;
分合算法;
几何人脸匹配算法;
基本的链表,堆栈
和队列的数据结构。
在引言中已经说明了图像分割的基本概念和常见的算法类型。
这里更加详细
地讨论在人脸定位中图像分割的方法。
图像分割的目的是把人脸的器官与脸的其他部分分离开来,并保存每个器官
的完整性。
在照片中,人脸比较明显而易辨别的特征主要是面部器官:
眼睛,嘴
巴,鼻子和眉毛。
鼻子往往与脸的反差不大,因此通常用鼻孔代替。
这几个面部
特征在灰度图像中一般比周围区域暗。
尤其是眼睛和嘴巴在绝大部分情况下都清
晰可见。
因此图像分割可以利用的特征就是:
灰度比周围区域暗的区域。
在我的
毕业设计中,为了减少图像分割这一步的运算量,预处理的时候就对图像做了二
值化。
因此事实上分割的对象已经是黑白图像,分割简化为找出所有黑色的连通
区域,它们都成为人脸器官的候选者。
对分割算法有两个要求:
1.一定的抗噪声能力。
经过二值化的黑白图像中,难免会有很多与主旨无关的
细碎黑色像素连接了本应分开的特征,而某些单一的特征也可能会破碎成几
块。
要求分割算法具有一定的能力抵抗这些噪声,将应该分开的特征分开,
应该成为整体的部分连起来。
2.运行速度要快。
人脸定位和识别系统常常作为实时应用,在这些场合要求系
统的运行不能耗时过长,否则就失去意义了。
从几何匹配方法来看,最耗时
的步骤就是图像分割这一步。
所以这一步的速度决定了整个人脸定位方法的
运行速度。
由于我们需要的是能够把黑色连通的区域分别标记出来的分割算法,选择区
域生长法就是最自然的了。
在区域生长法中,有两类算法最常见:
分合算法和运行长度表方法。
分合算
法抗噪声能力好一些,所以它成为了我首选的算法。
但是经过实践发现它的最大
弱点是计算量大,而且计算量随问题规模的增长是非线性的,这就导致对大的或
者复杂图像的处理时间很长。
运行长度表方法优点是速度快,缺点则是没有多少
抗噪声能力。
下面具体描述分合算法和我在它的实现中的一些考虑。
具体的模块组织见
4.1“软件的组成”。
要事先说明的一点是,现在个人计算机的内存一般都有几十M以上,对于人脸定位的应用绰绰有余,所以运行在个人计算机上的算法完全不必为了节省内存
空间而做专门的考虑。
但是如果希望算法能够运行在数字图像处理芯片上,就需
要做改写以适应节省内存的要求了。
分合算法的目的是把图像分割为许多这样的区域:
具有某种共同特征并且相
互连通的像素分在同一个区域,而特征不同或者不相互连通的像素分在不同的区
域。
(我使用的连通性定义是四连通。
关于四连通和八连通的概念参见Kenneth
(4))。
R.Castleman
判定区域R内的像素是不是具有共同的特征需要均匀性判据H(R),H(R)为True表示区域均匀(从而可以认为像素具有共同的特征),否则表示不均匀。
一般应用的均匀性判据往往是区域内的灰度比较均匀,比如区域内最大和最小的
(5)灰度值之差不超过一定阈值。
在我的应用中,因为图像已事先做了二值化,
所以均匀性的判定有所不同。
我只关心黑色的区域,因为只有黑色区域可能代表
人脸特征。
当一个区域中黑色像素占了绝大部分时,我就认为它是均匀的。
具体
的判据将在算法中给出。
分合算法采用金字塔数据结构。
首先讨论以像素计的边长是2的整数次幂的正方形图像。
塔的底层(第0层)是原始图像(在我的应用中是已经过二值化的
图像)。
用相邻排作正方形的四个像素作为子结点,计算上一层相应像素的取值。
这样每上溯一层(层编号加1),像素数目成为原来的1/4。
当整幅图只剩下一个像素时,金字塔构造完毕(见图1)。
数据结构某一层中的一个像素事实上代
j表了第0层中2个像素组成的一个数据方块(j是该层编号)。
为
图1金字塔数据结构
了表示和计算方便起见,用编码来代表这样的一个数据块。
设数据结构中最高一
层的编号为n,则这个编码共有n位。
把一个方块内的四个子方块按照图2顺时针标记为1,2,3,4。
为了表示一个数据块,我们首先把原始图像划分成四个
正方形,第一位编码就描述该数据块落在了1,2,3,4中哪个正方形里。
然后
对包含该数据块的正方形再划分为四个小正方形,第二位编码就描述该数据块落
在了哪个小正方形里。
如此反复,直到某个小正方形恰好是该数据块,此后的编
码就全部取0,表示不必再细分。
例如图2所示的3层金字塔结构:
图2数据块编码规则
对于一幅普通的图像,一般都不会恰好是正方形,边长也不会恰好是2的整数次幂。
我便以128×
128的方块作为基本单位,用m×
n个这样的方块对图像做
覆盖。
遇到图像中某个部分填不满一个方块的情形,就补上白色(白色不作为特
征,看成空白)。
每个方块都产生自己的一个7层金字塔数据结构,相互独立地
运行分裂算法和合并算法。
在相邻归并算法中,不处于同一个128×
128划分块
但是相邻的数据块应该被归入同一个特征块,所以数据块编码需要在全图像内唯
一。
我使用的数据块编码是在每个金字塔7位编码的基础上再加两位,分别表示
在m×
n个128×
128划分块中该数据块所处的划分块的x和y位置。
因此完整的编码是9位。
根据子结点像素计算父结点像素时常用的是灰度平均法。
我的应用中有所不
同:
如果四个像素中白色占了3块以上则父结点像素赋值为白色;
如果黑白2:
2对角分布也赋值为白色;
如果黑色占了三块以上则赋值为黑色;
2各占据一侧则赋值为黑色。
这样的好处是可以消除一部分不紧密的连接(2:
2对角分布),而保留所有可能的紧密的连接(2:
2同侧分布)。
图32:
2对角和2:
2同侧分布
(5)分合算法的思路是:
1.任取一层数据结构,检验其均匀性H,若对于该结构中某一区域R有
H(R)=false,则分裂这个区域为4个子区;
若4个彼此相邻属于同一个
父结点的区域R,…,R满足H(R?
R?
R)=true,则合并它们成k1k4k1k2k3k4
为单一区域。
当不再有区域可分裂或合并时,停止分割。
2.如果二任意相邻区域R和R(可以不属于同一个父结点;
可以有不同的ij
大小)使得H(R?
R)=true,则合并它们。
ij
分割算法的描述如下:
1.把金字塔数据结构中起始某个中间层的数据块编码全部压入工作堆栈
RgStack。
2.从RgStack弹出一个数据块编码Code。
如果Code代表的数据块不均匀,
就把Code分裂为四个数据块,再把颜色为黑色的那些块的编码压入堆栈
如果均匀,或者Code代表的已经是不可分的像素,那么把Code
压入中间结果堆栈RgCode。
3.反复执行2,直至堆栈RgStack空。
有两点值得解释一下。
首先,我在程序中采用整形数来保存数据块编码,这
样较字符串而言更加方便了计算(子结点或父结点编码的计算,数据块坐标的计
算等等)。
其次,我使用了递归方法产生中间层所有数据块的编码,相对于多重循环而言,不仅使程序书写简洁,而且起始的中间层号可以方便地修改,而多重
循环结构要修改起始层则必须加或减循环的层数。
合并算法的描述如下:
1.把中间层里所有均匀的数据块的编码存入工作队列RgA。
2.从RgA出队一个编码Code。
在RgA中寻找和Code属于同一个父结点的其
他数据块。
如果找不齐所有四个,那么把Code和找到的都从RgA删除,
而压入中间接果数组RgCode。
如果找齐了,那么把这四个编码都从RgA
删除,而把父结点的数据块编码入队到RgA中。
3.反复执行2,直至队RgA空。
需要说明的一点:
步骤1虽然是属于合并这部分的,但是在执行分裂时就可
以方便地做掉,节省代码和时间。
相邻归并算法的描述如下:
1.从RgCode中弹出一个编码,压入工作堆栈RgStack。
2.从RgStack中弹出一个编码Code,将它入队到RgA。
扫描RgCode,把所
有与Code相邻的数据块的编码都压入堆栈RgStack。
3.反复执行2,直至栈RgStack空。
此时RgA里面存有的一系列数据块编码
就是属于同一个特征块的,可以用来计算这个特征块的形状属性并保存起
来。
具体计算方法见2.4“形状属性的计算”。
4.反复执行1-2-3,直至栈RgCode空。
这里有两点值得说明。
首先,相邻归并算法是三个算法中最耗时的,占去了
分合算法中绝大部分的运行时间(对一幅182×
248单人脸灰度图像做试验,分裂,合并,相邻归并共用3224毫秒,其中相邻归并占了3074毫秒)。
而且其耗时随问题规模是非线性增长的。
对于小而简单的图像,分合算法可以很快(3秒
钟),可是对于较大或较复杂的图像,分合算法往往耗时很长(20~40秒)。
这么大的差别就是来自于非线性增长的计算量。
其次,判断两个编码所代表的数
据块是否相邻的函数在相邻归并算法中被频频调用,它的效率会大大影响整个算
法执行的时间。
我曾经采用计算两个数据块中心的x向和y向距离,然后与半边长之和比较的方法来判断数据块是否相邻,方法直观,代码较少,但是由于涉及
了浮点运算,并且对每一个编码都要做完整的一套计算,导致运行速度很慢。
现
在采用的是分析两个编码在各位上的组合方式,从大尺度开始一位一位进行检
查,只要发现这两个数据块在某一尺度上不可能相邻,就马上做出不相邻的判断,
除非它们能够一直保留到被证实符合一种相邻的编码组合。
具体方法描述较繁,
这里省略。
采用这种方法之后,虽然代码长度增加了很多,但是执行效率却大大
提高了。
引入成组算法出于如下事实:
一些本属于同一个脸部器官的特征块在分合之
后仍然是分开的。
分开的特征块的中心、大小、取向等等参数相对于一个代表完
整的器官的特征块而言都是错误的,导致后面的几何匹配得不到正确结果。
成组
算法就是用来把挨得足够近的可能本属于同一个器官的特征块合并起来(尽管它
(1)们并不是连通的)。
算法实现参考了Shi-HongJeng,HongYuanMarkLiao等
的工作。
算法有两个特点:
1.合并半径取决于待合并的特征块的大小(一个重
要参数-最大合并半径N事先指定),特征块越大,则合并半径越小;
2.如max
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 识别 算法