网学网为需要VC与C++类别的朋友们搜集整理了vc人脸识别程序的开发相关资料,希望对各位网友有所帮助!
客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn | |
单帧图像的人脸定位 我们之所以能通过眼睛和大脑把单帧图像中的人脸从背景区域中区分出来,很重要的一点原因就是人脸和背景之间存在着可以区分的色彩差异,这种差异同样可以成为程序区分人脸和背景的依据。因此,本文采用 人脸中最大块,最集中的不变特征――肤色作为从背景中区分人脸的依据。 2.1彩色空间,以及彩色空间的转换 本文是通过WebCam和AVICap提供的视频采集函数来采集单帧图像的,它是以32位真彩色的色彩实现方式存放的。图像中每个像素都是由3个字节24个二进制位来表示的,每个字节(8位)代表一个不同的颜色分量。这三个分量依次是蓝色分量 B 、绿色分量 G 、红色分量 R ,而这三个字节存储的实际内容就是这三个分量的值。根据存储单位的大小,我们不难得出这三个分量的取值范围都是在 (0,255) 之间,其中三个分量的值全取 0 表示黑色,全取 255 表示白色,而其他颜色也可以通过对 B 、 G 、 R 三个分量取不同的数值来得到。这种被大多数图像格式所采用的彩色空间,称之为 RGB 彩色空间。在 RGB 彩色空间中,颜色的表达是由红、绿、蓝三种颜色按不同比例混合而成,这样的表达方式并不能准确地反映出颜色本身的特征。因为,人眼看到的任何一种彩色光都是彩色三要素:亮度( Brightness )、色调( Hue )、饱和度( Saturation )综合而成的效果。其中,亮度是光作用于人眼时所引起的明亮程度的感觉,它与被观察事务的发光强度有关;色度反映颜色的种类,是当人眼看到一种或多种波长的光时所生产的彩色感觉,它与光的波长有关,是决定颜色的基本特征;饱和度是指颜色的深浅程度,即各种颜色混入白光的程度。由此可见,这三个要素才是对颜色本身最准确地诠释。而且,据研究表明,人的视觉对亮度细节的敏感程度远大于对色度细节的敏感程度,此外,经过统计证明,不同人种,不同环境下的肤色区别主要受亮度影响,受色度影响较小,可见, RGB 彩色空间并不适合人类的视觉特征。因此,我们完全可以选择更能突出颜色特征的彩色空间来分析人脸肤色和背景色,并为人脸肤色建模。 本文选择 YCrCb 彩色空间(即 YUV ),其中的 Y 分量是表示像素的亮度, Cr 和 Cb 称为色度,其中 Cr(U) 分量表示红色色差分量, Cb(V) 表示蓝色色差分量,这两个色差信号分别传送红基色分量 R 和蓝基色分量 B 与亮度分量 Y 的差值信号,即 和 ,其中 、 为加权系数。对于黑白图像有: R=G=B ,则 Cb=0 , Cr=0 。而对于彩色图像, 决定了图像的色调, 代表图像的饱和度。在多媒体计算机中采用的 YCrCb 彩色空间,数字化后 Y:Cb:Cr 为 8:4:4 或 8:2:2 。具体的实现方法是处理亮度分量时,每个像素数字化为 8bit ( 256 级亮度),而 Cb 、 Cr 色差分量则是每四个像素用一个 8bit 数据表示,这样以来,将一个像素用 24bit 表示压缩为用 12bit 表示,对这种变化人眼是感觉不到的。但是,在本文中,从 RGB 彩色空间转换到 YCrCb 彩色空间,每个像素的存放位数未做压缩,经过如下公式: ( 1 ) ( 2 ) ( 3 ) 转换的单帧图像,仍以 24bit 表示一个像素值,其中第 1 个字节(前 8 位)表示 Y 分量,第 2 个字节(中间 8 位)表示 Cr 分量,第 3 个字节(后 8 位)表示 Cb 分量。在程序代码中,用 RGB 彩色空间表示的单帧图像是存放在以 DIBINFO类型定义的变量m_dibinfo的buffer数据成员中,而经过彩色空间转换后的单帧图像是存放在m_ycc_buffer缓冲区中(有关DIBINFO类型、变量m_dibinfo和m_ycc_buffer的说明详见本文的第三部分)。这样一来,当我们需要将人脸定位后的单帧图像以DIB位图方式绘制出来时,就无需再将彩色空间转换回RGB彩色空间,而只需要根据计算得到人脸定位信息,在原来的、以RGB彩色空间表示的单帧图像中勾勒人脸的位置。 本文选择 YCrCb 彩色空间,主要原因是从 RGB 彩色空间到 YCrCb 彩色空间的转换相当于对 RGB 空间做了一个解相关的线性变化,其计算过程相对于 RGB 彩色空间到 YIQ 彩色空间和 HIS 彩色空间的转换过程要简便得多,而尽可能少而简单的计算可以减少转换过程的失真率。此外,转换彩色空间而不做压缩操作的原因是毕业设计中采集的单帧图像的数据容量( 144 × 176 )较小,所需要的内存空间足够,而且对不做压缩的图像像素地访问也更为便捷。 2.2人脸肤色模型,二值化 将单帧图像转换到 YCrCb 空间后,要检测该单帧图像中某一像素是否属于人脸像素,可以通过“阈值处理”的方法对该像素的灰度值进行判断,然后把符合“阈值处理”公式的像素标识出来,从而实现图像的二值化。其中,阈值处理就是指,对于输入图像的各像素灰度值属于某定值(称为阈值, threshold )范围内时,赋予对应输出图像的像素为白色或黑色。 要通过“阈值处理”的方法实现对单帧人脸图像的二值化,必须先解决的问题是确定适合的人脸肤色模型。虽然人脸的肤色看起来是变化的,但是人脸肤色的变化多数情况是因为肤色亮度值的差异造成的。因此,在确定人脸肤色模型时,我们可以把这种由肤色亮度值造成的差异忽略掉,即只采用肤色的色度值来确定人脸的肤色模型。根据《 Detection and Tracking of Faces in Real-Time Environments 》一文中的介绍,忽略肤色亮度值将不会影响对人脸肤色的成功检测,反而可以减少对大容量的三维 YCrCb 彩色空间的处理,转而对易处理的二维 CrCb 图进行研究,同时还有助于减少对单帧图像的计算处理。 在试图寻找适合的人脸肤色模型的过程中,笔者首先尝试了 《Detection and Tracking of Faces in Real-Time Environments 》一文中介绍的人脸肤色模型。现介绍如下:
| |
本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT | |
本文选自计算机毕业设计http://myeducs.cn |