‘壹’ java 实现人脸的动漫化 照片用数组存还是image对象提取人脸的什么特征人脸处理常用哪些特征
YOGUAI为保险柜,自动门,考勤等行业提供人脸识别方案。
随着计算机网络和通信技术的发展,信息安全、知识产权保护和身份认证等问题成了一个重要而紧迫的研究课题。身份认证是保证系统安全的必要前提,在多种不同的安全领域都需要准确的身份认证。传统的身份证、智能卡、密码等身份认证方法存在携带不便、容易遗失、不可读或密码易被破解等诸多问题。基于人脸识别技术的身份认证方法与传统的方法相比,具有更好的安全性、可靠性和有效性,因此正越来越受到人们的重视,并逐渐进入社会生活的各个领域。
人脸识别技术具有广泛的应用前景,可以应用到多种不同的安全领域,因其识别特征的独特性、惟一性和相对稳定性,逐渐成为一非常热门的研究课题。许多典型的人脸识别算法和应用系统都是针对标准或特定的人脸数据库,利用库内人脸进行训练,并在相同的库中实现人脸识别。但在软件保护、计算机安全等特殊应用中,身份认证仅针对单个对象进行人脸识别,现有的人脸识别方法并不能胜任这样的识别任务。为此,本文针对单对象人脸识别的特点,讨论了单对象人脸检测和识别的关键技术,在此基础上提出了一种单对象人脸识别算法,实验结果证明了该方法的有效性。
2单对象人脸识别的特点
与典型的人脸识别相比,单对象人脸识别有以下4个方面的特点:
应用领域人脸识别的应用领域很广,如刑侦破案、证件核对、保安监控等,而单对象人脸识别主要应用在软件保护、计算机安全锁、特定对象追踪等领域。
识别系统的目标单对象人脸识别的最终目标是系统必须具有高度的安全性和可靠性,即识别错误率趋于0。虽然降低识别错误率的同时识别率也会降低,但可以通过提示用户调整姿态(如注视摄像头等)加以改善。
肤色模型由于单对象人脸识别仅针对特定的对象,所以人脸检测的肤色模型可采用自适应的方法调整肤色范围。
分类方法单对象人脸识别不存在人脸数据库,常用的最小距离分类法不能够正确识别特定的对象,只能用阈值作为判据。因此,阈值的选取十分重要,阈值过大则容易出现错判,存在安全隐患;而阈值过小又会影响识别效率。
3人脸的检测和归一化
人脸检测是人脸识别的前提。对于给定的图像,人脸检测的目的在于判断图像中是否存在人脸,如果存在,则返回其位置和空间分布。利用人脸肤色和面部特征,将人脸检测分为两个阶段:外脸检测和内脸定位。外脸检测主要利用人脸肤色进行初步的脸区检测,分割出肤色区域;内脸检测是在外脸区域中利用面部几何特征进行验证和定位。
3.1外脸检测
外脸检测的任务是将待检图像中可能的人脸区域找出来并加以标记,其步骤如下:
(1)根据人类肤色在色彩空间中存在区域性的特点,将可能为人脸的像素检测出来。为更好地利用肤色特征,同时选用HSI和YcbCr两种色彩空间对图像进行二值化处理,肤色范围限定在H∈[0,46],S∈[0.10,0.72],Cb∈[98,130],Cr∈[128,170]内。将满足条件的像素标记为肤色像素,其余的均为非肤色像素。
(2)去噪处理。在以每一个肤色点为中心的5×5邻域内统计肤色像素的个数,超过半数时中心点保留为肤色,否则认为是非肤色。
(3)将二值图像中的肤色块作区域归并,并对目标区域进行比例、结构分析,过滤掉不可能的人脸区域。目标区域的高度/宽度比例限定在0.8~2.0。
3.2内脸检测和定位
将包含眼、眉、鼻和嘴的区域称为内脸区域。内脸区域能够很好地表达人脸特征,且不易受背景、头发等因素的干扰,因此内脸区域的检测和定位对后续的特征提取和识别至关重要。
在外脸区域的上半部,对二值图像进行水平方向和垂直方向的投影,确定两个包含黑点的矩形区域作为双眼的大致区域。在确定的两个区域中,对黑点进行区域膨胀,可以得到眼睛的基本轮廓和左石眼角,黑点坐标的平均值作为瞳孔的位置。
设左右瞳孔的坐标分别为(Lx,Ly)和(Rx,Ry),两个瞳孔之间的距离为d,根据人脸的几何特征,我们将内脸区域定义为:宽度=-d×1.6,高度=-d×1.8,左上角坐标为(Lx-d×0.3,(Ly Ry)/2-(-d)×0.3)。实验表明,该区域能够很好地表达人脸特征。
3.3内脸区域的归一化
由于各待测图像中的人脸大小具有很大的随机性,因此,有必要对内脸区域进行归一化操作。人脸归一化是指对内脸区域的图像进行缩放变换,得到统一大小的标准图像,实验中,我们规定标准图像的大小为128×128。归一化处理,保证了人脸大小的一致性,体现了人脸在图像平面内的尺寸不变性。
对归一化的人脸图像,采用小波变换与DCT相结合的方法提取人脸特征。首先对人脸图像进行3层小波分解,取低频子图像LL3作为人脸特征提取的对象,从而获得每幅训练样本或测试样本的低频子图像;然后对低频子图像进行离散余弦变换(DCT),DCT系数个数与子图像的大小相等(即256),由于图像DCT变换,能量集中在低频部分,因此只取其中的136个低频系数作为特征向量。
5人脸的识别
完成训练过程并获得待测样本的特征后,即可进行人脸识别,本文采用欧氏距离进行分类。
5.1计算样本与平均脸的欧氏距离
用m和x表示平均脸和样本的特征向量,则样本与平均脸的欧氏距离为:
其中mk表示平均脸的第k个特征向量,xk表示待测样本的第k个特征向量。身份认证时,计算待测样本与平均脸的欧氏距离,并与特定对象的自适应阈值进行比较,将小于阈值的样本判为该对象的人脸,即认证通过。
5.2自适应阈值的选取
与典型的人脸识别方法不同,单对象人脸认识没有人脸数据库,不能用距离最小作为判据,只能用阈值作为判别依据。阈值的选取应兼顾识别率和识别的准确性,实验中我们取训练样本与平均脸的欧氏距离平均值作为分类阈值,即:
其中,N为训练样本数,此值不宜太小;di为第i个样本与平均脸之间的欧氏距离。
莫士特科技有限公司提供模式识别主板及解决方案。
希望采纳
‘贰’ 《漫画算法》—— 【3】树
在树的结构中,树的定义如下。
树(tree)是n(n>=0)个节点的有限集,当n=0时,称为空树。在任意一个非空树中,有如下特点:
1、有且仅有一个特定的称为根的节点。
2、当n>1时,其余节点可分为m(m>0)个互不相交的有限集,每一个集合本身又是一个树,并称为根的子树。
【相关节点】
树的最大层级树,被称为树的高度或深度。
树的每个节点最多有2个孩子节点。
树的一种特殊形式。树的每个节点 最多有2个孩子节点 。
二叉树的两个孩子节点,一个被称为 左孩子 ,一个被称为 右孩子 。这两个孩子节点的顺序是固定的。
二叉树有两种特殊形式:满二叉树、完全二叉树。
满二叉树 :一个二叉树的所有非叶子节点都存在左右孩子,并且所有叶子节点都在同一层接上。简言之,满二叉树的每一个分支都是满的。
完全二叉树 :对一个有n个节点的二叉树,按层级顺序编号,则所有节点的编号为从1到n。如果这个树所有节点和同样深度的满二叉树的编号为从1到n的节点位置相同,则这个二叉树为完全二叉树。
一棵树,若为满二叉树,那么一定是完全二叉树。反之,不一定。
在内存中存储 :
为什么这么设计?可以更方便的定位孩子节点、父节点。
若父节点的下标是parent,那么左孩子节点下标是2 parent+1,右孩子节点下标是2 parent+2。
反之,若左孩子节点下标是leftChild,那么父节点下标是(leftChild - 1)/2。
稀疏二叉树,用数组表示会很浪费空间。
二叉树的应用:查找操作、维持相对顺序。
1、查找
二叉查找树在二叉树的基础上增加了以下几个条件:
如果左子树不为空,则左子树上所有节点的值均小于根节点的值;
如果右子树不为空,则右子树上所有节点的值均大于根节点的值;
左、右子树也都是二叉查找树。
对于一个节点分布相对均衡的二叉查找树来说,如果节点总数是n,那么搜索节点的 时间复闹液杂度都是O(logn) ,和树的深度是一样的。
2、维液模物持相对顺序(插入)
二叉查找树的特性保证了二叉树的有序码烂性,因此还有另外一个名字:二叉排序树。
插入的过程中,可能会出现需要二叉树进行自平衡,例如下图的情况:
如图所示,不只是树的外观看起来怪异,查询节点的时间复杂度也退化成了O(n)。
二叉树的自平衡的方式有很多种,如红黑树、AVL树、树堆等。
二叉树的遍历:
从节点之间位置关系的角度:
* 前序遍历:输出顺序:根节点、左子树、右子树
* 中序遍历:输出顺序:左子树、根节点、右子树
* 后序遍历:输出顺序:左子树、右子树、根节点
* 层序遍历:按照从根节点到叶子节点的层级关系,一层一层横向遍历各个节点。
从更宏观的角度:
* 深度优先遍历(前、中、后序遍历,前中后是相对根节点)
* 广度优先遍历(层序遍历)
二叉堆:本质上是一种完全二叉树。
二叉堆本质上是一种完全二叉树,分为2个类型:
最大堆 :任何一个父节点的值,都大于或等于它左、右孩子节点的值;
最小堆 :任何一个父节点的值,都小于或等于它左、右孩子节点的值。
二叉堆的根节点,叫作 堆顶 。最大堆的堆顶是整个堆中最大元素,最小堆的堆顶是整个堆中最小元素。
二叉堆虽然是一个完全二叉树,但它的存储方式并不是链式存储,而是顺序存储,如下图所示:
假设父节点的下标是parent,那么它的左孩子的下标就是 2 * parent + 1 ,右孩子的下标就是 2 * parent + 2 。
二叉堆的3种操作(假设是最小堆):
1、插入节点:时间复杂度O(logn)
插入节点是通过“上浮”操作完成的:当二叉堆插入节点时,插入位置是完全二叉树的最后一个位置,将该节点与它的父节点进行比较,如果该节点小于它的父节点,那么该与它的父节点交换位置,直到比较到堆顶位置。
2、删除节点:时间复杂度O(logn)
删除节点是通过“下沉”操作完成的:将要删除的节点看作是堆顶,只看该节点及它下面的部分。因为堆顶元素要进行删除,将最后一个节点元素替换堆顶元素,将替换后的元素与它的左、右子树进行比较,如果左、右孩子节点中最小的一个比该节点小,那么该节点“下沉”,直到叶子节点。
3、构建二叉堆:时间复杂度O(n)
构建二叉堆,也就是把一个无序的完全二叉树调整为二叉堆,本质就是让所有非叶子节点一次“下沉”。
优先队列不再遵循先入先出的原则,而是分为两种情况:
最大优先队列 ,无论入队顺序如何,都是当前最大的元素优先出队;
最小优先队列 ,无论入队顺序如何,都是当前最小的元素优先出队。
二叉堆节点的“上浮”和“下沉”的时间复杂度都是O(logn),所以优先队列入队和出队的时间复杂度也是O(logn)。
https://blog.csdn.net/qq_28958301/article/details/91590545