弦箭算法的c语言实现学士学位论文Word格式.docx
《弦箭算法的c语言实现学士学位论文Word格式.docx》由会员分享,可在线阅读,更多相关《弦箭算法的c语言实现学士学位论文Word格式.docx(31页珍藏版)》请在冰豆网上搜索。
Abstract:
Locatinghumanfaceinasingleandgraylevelimagewithclutteredbackgroundremainsadifficultproblemandneedstobecompletedorperfectedinrecentyear.AnovelellipsearrowmethodusingedgeinformationoftheimagetolocationtheareaoffacefasthasputforwardbyMr.wangandothers.Themethodcontractthespaceofthemanhuntofthefacedetection,raisethespeedandtheefficiencyofthefacedetection.Thearticleintroducethetheoriesoftheellipsearrowmethodthroughtheanalysistotheovalcharacteristic,andprogrammethemethodmakinguseofthelanguageofCundertheMicrosoftVisualC++6.0environments.
Keywords:
FaceDetectionEdgeEllipseTheellipsearrowmethod
目录
第一章绪论-2-
1、1引言-2-
1、2弦箭算法地提出-2-
1、3弦箭算法的应用-4-
1、4本文研究的主要内容和成果-4-
第二章弦箭算法的原理-5-
2、1椭圆特性分析-6-
2、2弦箭累加算法的原理-7-
第三章弦箭算法的编程实现-10-
3、1BMP图像文件格式-10-
3、2本文编程环境-12-
3、3弦箭累加的编程实现-13-
第四章实验检测与分析-25-
4、1图像测试集-25-
4、3评估准则-25-
4、4不同参数下的实验结果-26-
4、5算法中间结果示例-28-
4、6算法最终人脸区域估计结果示例-28-
4、7对算法及实验结果的分析总结-30-
后 记32
致谢32
参考文献32
弦箭算法的C语言实现
第一章绪论
1、1引言
人脸识别技术起源于上个世纪六十年代,发展到现在已经有了四十多年的历史,是当前模式识别和人工智能等领域的一个重要的研究课题。
人脸识别作为一种重要的个人身份鉴别方法,其研究前景十分广阔,无论是在商业还是法律仲裁领域等都拥有巨大的应用空间。
例如静态领域中的医学、档案管理、刑侦破案、证件验证、入口控制;
动态领域中的人群监控、视频会议、人机交互系统等。
人脸识别(FaceRecognition)是指对一个输入的图像或视频图形,判断其是否含有人脸图像,如果存在人脸图像,再进一步判断图像中人脸的大小,位置,以及面部各个主要器官的位置。
再从这些信息中提取人主要的身份信息,将这些信息与数据库中的信息相比较,从而得到人的一些授权信息。
人脸识别技术的主要内容可分为为:
输入图像----人脸检测----人脸跟踪-----人脸比对----输出结果。
人脸识别首先要对输入的图像进行人脸检测。
人脸检测(FaceDetection),是指在既有的图像中判断是否存在人脸并确定人脸的位置、大小等相关信息,进一步提供人脸的主要特征。
人脸检测作为人脸信息识别处理中的一项关键技术,其检测效率的高低将直接影响到后续模块的执行效果。
1、2弦箭算法地提出
人脸检测是一个复杂的具有挑战性的模式检测问题。
图像中的人脸往往随光线的改变、位置的移动、倾斜、旋转和缩放等外部变化而变化,而且人脸内部也具有复杂的变化,如表情、长相、胡须、眼睛闭合、眼镜等。
人脸的不确定性,对人脸检测算法的稳定性和鲁棒性提出了更高的要求。
目前,研究人脸检测的方法有很多,定位算法的精度在不断提高,也更加复杂。
各种人脸检测算法中,精度及鲁棒性好的算法,运算量都比较大,直接对图像进行计算,在时间上让人难以忍受。
Adaboost学习算法是目前最快的人脸检测算法之一。
Boosting是一种分类器融合算法。
Adaboost学习算法通过对一些弱的分类器的组合来形成一个强的分类器。
在Adaboost算法中,简单的分类算法被称为弱学习算法。
Adaboost算法通过一个迭代的训练过程来得到一个强的分类器。
在第一次训练出一个弱分类器后,训练样本的权重得到调整,从而使没有被第一次训练出的弱分类器正确分类的样本的权重增加。
如此迭代下去,最终得到的分类器是对每次训练得到的弱分类器的一个线性组合。
由于Adaboost算法,要通过迭代训练将弱的分类器组合成强的分类器,其运算很耗资源。
在实际应用中往往都是结合其他算法来提高运算效率。
人脸的边缘图富含大量的人脸特征信息,许多学者利用这些边缘信息来确定人脸的区域。
大多数学者使用Hough变换来检测人脸外边缘,但如果用标准的Hough变换检测人脸椭圆边缘需要在一个5维的参数空间做投票累加,这样的计算量是难以忍受和不切实际的。
Wang和Tan利用输入图像边缘梯度向量和椭圆模型的边缘梯度方向向量内积的大小来衡量匹配程度;
Li和Roeder在预先确定的人脸区域内使用简化的自适应Hough变换,检测垂直的脸颊直线边缘和下颚抛物线边缘;
Yuen分成两步检测椭圆:
利用椭圆边缘上任意两点的切线的交点和这两点的连线的中点的连线必然经过椭圆中心,首先确定椭圆的中心坐标,再确定剩下的三个参数,虽然比标准Hough变换运算量减少了不少,但运算量仍很大。
人脸含有众多的椭圆曲线边缘,如外层、内层头发边缘、嘴眼边缘、耳朵边缘、下颚边缘等,且曲线凹向均指向人脸内部。
王洪群等人通过对椭圆曲线的分析,提出的了一种特殊的椭圆弦箭累加算法。
该算法避免使用Hough变换等一些耗时的算法,具有大面积快速搜索的能力,确定的搜索范围较小,可以快速确定人脸主要特征(人眼和嘴)所在的大致位置和区域。
该算法利用图像的边缘快速确定搜索空间,并在搜索空间内使用虹膜网格采样矩阵进行纹理分析,采用在频域中按指数增长的分布方式设计Cabor滤波器,进一步提高了Cabor滤波器纹理分析效率,从而精确定位人眼和嘴。
该算法复杂度适中,运算量较小,定位精度较高,鲁棒性好,有很大的实用价值。
1、3弦箭算法的应用
弦箭算法的提出是在对椭圆曲线特性分析的基础上,根据人脸边缘中的椭圆曲线,来快速准确地确定人脸大概区域位置。
其原理主要是根据椭圆曲线的法线簇交点的包络线位于椭圆内部,从而确定椭圆大概区域,即人脸大概区域位置。
弦箭算法可以有效提高当前人脸检测算法的检测速度和检测正确率,在人脸识别与跟踪等领域有着重要的应用。
从椭圆曲线的一般性来看,弦箭算法还有更加广泛的应用。
弦箭算法主要是利用图像中人脸的边缘曲线,快速确定搜索空间。
实际上,任意一幅图像,其确定的是图像中类椭圆型形状物体的大概区域位置。
所以根据具体实际应用,通过对算法进行改进,在此基础上结合其他算法,可以有效实现对各种椭圆形物体的检测。
因此椭圆弦箭算法在计算机视觉技术,模式识别等领域可以实现更加广泛的应用。
1、4本文研究的主要内容和成果
本文的主要内容是对弦箭算法的原理进行分析与介绍,并用C语言进行编程,实现应用弦箭算法快速估计出人脸大概区域位置,以提高后序人脸算法的效率。
弦箭算法是研究在二维图像中检测正面人脸的快速算法。
通过对椭圆曲线特性的分析,可以知道,在椭圆上等间隔做法线,当椭圆长短轴长度相差不大时,椭圆法线簇包络线的交点必在椭圆内部,接近于椭圆中心。
人脸含有众多的椭圆边缘曲线,其凹向大都指向人脸内部,如果对这些边缘曲线做法线,进行累加投票,其累加和最大峰值的位置必接近于人脸内部,而图像背景中边缘曲线的凹向随机性很大,累加和最大峰值出现的概率就非常小,从而可以确定人脸大概区域位置。
本文编程所使用的环境是MicrosoftVisualC++6.0,用C语言编程实现弦箭算法。
对于读入的图像,首先进行间隔采样和高斯滤波,利用Canny算子对滤波后的图像进行边缘检测,得到图像中的边缘曲线。
再通过相应的算法对图像进行预处理:
割断分叉的边缘点,去除边缘曲线中大于某一阈值的直线和长度过短的曲线。
进而对剩下各条曲线依次应用弦箭算法,在各点进行累加投票,并记录最大箭长,根据累加和峰值和最大箭长来确定人脸大概区域位置。
本文研究弦箭算法的主要目的是快速估计出人脸大概位置区域,提高当前人脸检测算法的效率。
本文在一个现有程序中编程嵌入弦箭算法,实现了对于给定一张256色的二值灰度图像,快速估计出人脸大概位置区域,估计出人脸图像中眼睛或嘴巴所在的区域。
第二章弦箭算法的原理
人脸的边缘可以近似为一些椭圆曲线,如图2-1所示的人脸边缘模型。
通过观察,人脸边缘线的共同特点就是:
无论头发的边缘、脸颊的边缘以及下巴的边缘,其凹向总是指向人脸的内部。
通过对人脸边缘曲线及椭圆特性的分析,我们提出了椭圆弦箭累加算法,可以快速确定人脸主要特征(人眼和嘴)所在的大致位置和区域。
图2-1
2、1椭圆特性分析
如果在椭圆上等间隔做法线可得图2-2所示的星形包络线。
可以证明,当椭圆长短轴长度相差不大时,包络线的交点必在椭圆内部,接近于椭圆中心。
图2-2
分析如下:
设椭圆中心点在原点,a、b分别为椭圆长短轴长度,则椭圆参数方程可表示为:
则椭圆上任意点(acosθ,bsinθ)的法线的斜率为tanθ,法线簇的方程为:
化简得:
上式左边对θ求导(把x和y看作常数)可得:
根据微分几何原理,包络线的方程应同时满足式(2-3)和式(2-4),从式(2-3)和式(2-4)中可得包络线方程为:
由此可得,包络线与坐标轴的四个交点位置分别为:
(a-b,0),(0,-(a-b)),(-(a-b),0),(0,a-b),分别对应θ=0,π/2,π,3π/2。
当a≠b时,按参数方程绘制,可得星形包络线;
当a=b时,法线相交于中心点;
当a、b相差不大时,四个交点必接近于椭圆中心,位置在椭圆内部。
2、2弦箭累加算法的原理
从对椭圆特性的分析可以看出,如果将椭圆法线在二维累加平面上做累加的话,那么累加和峰值必然集中于上述包络线的四个交点或中心点的位置。
人脸含有众多的椭圆曲线边缘,如外层、内层头发边缘、嘴眼边缘、耳朵边缘、下颚边缘等,且曲线凹向均指向人脸内部,如果也做累加投票的话,累加和最大峰值的位置必接近于人脸内部。
相反,背景图像边缘的凹向随机性很大,形成累加和最大峰值的概率就很低。
椭圆弦箭累加算法就是利用这种特性,来实现人脸区域位置的估计。
通过弦箭算法计算人脸大概位置区域主要分为三步:
图像预处理、弦箭算法、确定人脸区域大概位置。
一、图像预处理
为减少运算量,对较大的源图像可进行间隔采样,并对