统的结构设计的流程以及系统各模块的功能及相关原理。
(一) 应用程序的总体结构设计流程图如图3-1所示:
图3-1总体结构设计流程图
(二) 图像预处理的层次图如图3-2所示:
图3-2 预处理的层次图
第一节 各模块功能概述
以上是该系统的总体结构设计图以及图像预处理模块的层次图。下面介绍系统中的各模块的功能及算法:
图像获取模块
该模块主要是从摄像头拍照后进行获取图片,也可以从图片库中获取,获取后的图片可以在软件的界面中显示出来以便进行识别。
人脸区域获取
该系统中图像里人脸区域的获取,主要是根据肤色来进行获取,通过肤色非线形分段色彩变换来实现。这一非线性分段色彩变换得到的肤色模型属于色彩空间中的聚类模型,这一类肤色模型的建立首先要选取一种合适的色彩空间。
图像预处理模块
图像预处理就是对获取得来的图像进行适当的处理,使它具有的特征能够在图像中明显的表现出来。该模块中的子模块有如下5个,下面对它们进行概述:
·光线补偿[3]
因为系统得到的图片可能会存在光线不平衡的情况,这会影响我们对特征的提取,同时系统中要用到YcrCB色彩空间,所以有必要对图像进行光线补偿。尽可能将它的特征在图像中表现出来。YcrCB是一种色彩空间,它用于视频系统中,在该色彩空间中,Y分量表示像素的亮度,Cr表示红色分量,Cb表示蓝色分量,通常把Cr和Cb称为色度。YcrCB色彩空间是以演播室质量标准为目标的CC601编码方案中采用的彩色表示模型。
·灰度变化[4]
图像灰度化的过程就是把彩色图像转换为黑白色图像的过程,它也是为了将图像的信息更加具体、简单的表现出来,但是,这样做也将会丢失图像信息。因此,尽可能在转化的过程中用简单的方式表现图像复杂的信息。
·高斯平滑处理[5]
高斯平滑将对图像进行平滑处理,在图像采集过程中,由于各种因素的影响,图像往往会出现一些不规则的噪声,入图像在传输、存储等都有可能产生数据的丢失。从而影响图像的质量。处理噪声的过程称为平滑。平滑可以降低图像的视觉噪声,同时出去图像中的高频部分后,那些本来不明显的低频成分更容易识别。平滑可以通过卷积来实现。经过卷积平滑后的水平投影后,二值化提供了较好的图像效果。
·对比度增强[6]
对比度增强,就是对图像的进一步处理,将对比度再一次拉开。它针对原始图像的每一个像素直接对其灰度进行处理的,其处理过程主要是通过增强函数对像素的灰度级进行运算并将运算结果作为该像素的新灰度值来实现的。通过改变选用的增强函数的解析表达式就可以得到不同的处理效果。
·二值化[7]
二值化的目的是将采集获得的多层次灰度图像处理成二值图像,以便于分析理解和识别并减少计算量。二值化就是通过一些算法,通过一个阈值改变图像中的像素颜色,令整幅图像画面内仅有黑白二值,该图像一般由黑色区域和白色区域组成,可以用一个比特表示一个像素,"1"表示黑色,"0"表示白色,当然也可以倒过来表示,这种图像称之为二值图像。这便有利于我们对特征的提取。该设计中采用组内方差和组外方差来实现二值化。
·直方图均衡[8]
直方图均衡化的目的是使一输入图像转换为在每一灰度级上都有相同的象素点数,它的处理的中心思想是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布,它的研究思路是:通过直方图变换式来进行直方图的均衡处理,直方图变换式是
但是直方图均衡化存在着两个缺点:
1)变换后图像的灰度级减少,某些细节消失;
2)某些图像,如直方图有高峰,经处理后对比度不自然的过分增强。
人脸定位模块
人脸定位是将典型的脸部特征(如眼睛,鼻尖,嘴唇等等)标记出来,在本系统中,定位的特征是眼睛,鼻尖和嘴巴三个。由于眼睛具有对称性,因此可以很快就能标记出来,而鼻子是在眼睛下面,且嘴巴在鼻子下面,所以只要眼睛标记好,鼻子和嘴巴也能相应的标记出来。
特征提取模块
特征提取按以下4个步骤进行:
(1)、提取两只眼睛的距离
(2)、眼睛的倾角度
(3)、眼睛、嘴巴的重心
(4)、用一个矩形标出每一个特征
在特征提取完之后将会得到相应的特征值以便存入后台数据库。
识别模块
该模块通过与库存中的特征向量进行比较,找出与特征最相近的参数,再对该参数进一步分析。如果分析在我们所确认的范围内,我们就认为该人就是我们所要找的。然后从库存中提取出该人相关的信息,并显示出来。如果库存中没有,则给出提示是否对存库作为样本。
第四章 系统的详细设计
本章主要对图像处理这一模块进行详细介绍,对其子模块所用到的算法及具体实现进行详细讲述。
第一节 系统的运行流程图
图6-1 系统的运行流程图
第二节 图像处理详细设计
一 位图详细设计
1 设备无关位图(DIB)
VC++没有提供使用十分方便的DIB绘制方法,只好自己去创建一个实用的DIB类了。本系统中建立了一个专门的类DIB来处理设备无关位图,表4-1列出了对位图的操作函数。
函 数 功 能 ClearMemory() 释放内存 CopyHandle() 拷贝内存块 LoadDIB() 加载位图信息 ReadDIBFile() 读取位图文件信息 LightingCompensate() 进行光线补偿 PixelOffset() 修正像素值 PaintDIBTrue() 绘制DIB对象 GetColorNumber() 获取颜色总数 GetHeight() 获取DIB高度 GetWidth() 获取DIB宽度 GetSize() 获取图像数据缓冲区中的字节数 GetBitCount() 获取颜色位数 GetBiBitCount() 获取字节数
表6-1 Dib类的部分功能
二 图像点处理详细设计
图像点运算是一种既简单又重要的技术,它能让用户改变图像数据占据的灰度范围,一幅输入图像经过点运算后将产生一幅新的输出图像,由输入像素点的灰度值决定相应的输出像素点的灰度值,点运算与局部运算的差别在于:后者每个输出像素的灰度值由对应输入像素的一个领域内几个像素的灰度值决定。所以,点运算不可以改变图像内的空间关系。
点运算可以按照预定的方式改变一幅图的灰度直方图。除了灰度级的改变是根据某种特定的灰度变换函数进行之外,点运算可以看作是"从像素到像素"的复制操作。如果输入图像为A(x,y),输出图像为B(x,y),则点运算可表示为:
B(x,y) = f[A(x,y)] (式2)
其中函数f(D)被称为灰度变换(Gray Scale Transformation ,GST)函数,它描述了输入灰度值和输出灰度值之间的转换关系,一旦灰度变换函数确定,该点运算就完全被确定下来了。
点运算有时又称为对比度增强、对比度拉伸或灰度变换,它是图像数字化软件和图像显示软件的重要组成部分。下面将对本设计解决各图像点处理模块运用进行到的理论和编程实现进行详细讲述。
1、光线补偿
(1)算法思想:
光线补偿的想法的提出主要是考虑到肤色等色彩信息经常受到光源颜色、图像采集设备的色彩偏差等因素的影响,而在整体上偏离本质色彩而向某一方向移动,即我们通常所说的色彩偏冷、偏暖、照片偏黄、便蓝等等。这种现象在艺术照片中更为常见。所以Anil K.Jain等提出,为了抵消这种整个图像中存在着的色彩偏差,我们将整个图像中所有像素亮度(是经过了非线形r-校正后的亮度)从高到低进行排列,取前5%的像素,如果这些像素的数目足够多(例如,大于100),我们就将它们的亮度作为"参考白"(Reference White),也即
上一篇:
西班牙文酷第三课动词
下一篇:
超市进销存管理系统的开发