第三节 编程时的问题解决
1、光线补偿
由于要改变每一个像素的亮度,开始,我通过对数幅图像使用一个固定的值进行测试,得到的效果都满理想,但是当对更多的图像处理时,该固定值就出现了明显的不足,最后不得不采用全局统计的方法,才能得到比较理想的效果。
2、高斯平滑
高斯平滑用于消除图片噪音,为了实现此功能,我们使用了模板操作,因此模板参数的选择是最重要的。高斯平滑效果的好坏取决与模板参数。在编程的时候,试探性的进行参数的选择,然后进行比较,看那组参数可以达到最好的效果。模板参数是 原先采用了
1/9 1/9 1/9 1/9 1/9 1/9 1/9 1/9 1/9
形式,但是,得到的效果却是令人失望。 后来又用了
1/10 1/10 1/10 1/10 1/5 1/10 1/10 1/10 1/10
形式,但是,结果仍然是未能达到预期的效果。 直到最后采用的
1/16 2/16 1/16 2/16 4/16 2/16 1/16 2/16 1/16 形式,才得到了比较合理的效果。
3、 均衡直方图
开始时,图像的会度一直都处于很散的状态,而且图像的特征不明显,原本想经过高斯平滑后进行灰度变换,但是并未能成功。经过了一翻苦战,最终找到均衡直方图的办法,经过多次尝试,效果一直处于比较理想的状态。
26
第五章 结构设计
在本系统中,起至关重要的类列举如下,并将它们的成员函数及其成员函数的功能和参数都一一简述:
1、CFaceDetectView :该类是在编程的过程中自动生成的。菜单项中的事件处理程序都是在该类对应的CFaceDetectView.h文件和CFaceDetectView.cpp文件中声明和实现的。表7-1列出了该类所封装的成员函数及其功能:
表7-1 类 CfaceDetectView的成员
函 数 IncreaseContrast () FixeEyes () FixeNose() FixeMouth () GetEyesParameter () GetPartParameter() GetmouthParameter 获取嘴巴参数 () Centerofgravity() 获取眼、鼻子、嘴巴的重心 AverageDeviation () Template() DrawCrossX ()
各成员函数解析 函数名称 : IncreaseContrast
参数 : int pByte ---- 图像的灰度值 int n ---- 用于调节对比度的参数 返回值 : int ---- 新的灰度值
说明 : 该函数通过修图像的灰度值来增强图像的对比度
27
功 能 增强图像对比度 眼睛定位 鼻子定位 嘴巴定位 获取眼睛参数 获取脸部特征 获取平均值的标准偏差 对图像进行模板操作 画十字标记
函数名称 : FixeEyes 参数 : 无 返回值 : bool
说明 : 该函数判断图片中是否有人脸,并对人脸图片进行眼睛定位
函数名称 : FixeNose 参数 返回值 说明
函数名称 参数 返回值 说明
函数名称 参数 返回值 说明
函数名称 参数 返回值 说明
函数名称 参数 返回值 说明 函数名称 参数 double OldData ----
: 无
: void
: 该函数是在眼睛定位之后的前提下进行鼻子的定位 : FixeMouth : 无
: void
: 该函数是在眼睛和鼻子都定位之后的前提下再进行嘴巴的定位 : GetEyesParameter : 无
: void
: 该函数分别获取了眼睛、鼻子、嘴巴的重心之后,再根据两眼
间的角度、鼻眼鼻所形成的角、鼻嘴鼻所形成的角、两个眼睛中心距与脸宽的比例来获取眼睛参数。
: GetPartParameter : 无
: void
: 该函数的功能是用于获取整个脸部的特征 : Centerofgravity : 无
: void
: 该函数的功能是找出眼睛、鼻子、嘴巴的重心并用十字将它们
标记出来
: AverageDeviation
: double NewData ---- 新获取的数据 以前的数据
28
返回值 : double ----平均值的标准偏差 说明 : 该函数用于计算平均值的标准偏差
函数名称 : Template
参数 : double * tem ---- 指向模板的指针 HDIB hDIB ---- 图像的句柄 int tem_w ---- 模板的宽度 int tem_h ---- 模板的高度 double xishu ---- 模板的系数 返回值 : 无
说明 : 该函数对图像进行模板操作,但为了方便起见,模板的高度和
宽度都是用奇数。
函数名称 : DrawCrossX 参数 : int x
int y 返回值 : 无
说明 : 该函数对已经做好预处理的人脸图像中的特征(眼睛、鼻子、
嘴巴)用十字标记出来
2、类ClikelyHood ,表7-2列出了该类所封装的成员函数及其功能
表7-2 类ClikelyHood的成员
函 数 CalLikeHood () 计算相似度 CalBinary () filter()
二值化图像 实现滤波功能 功 能 CalParameter () 训练参数 各成员函数解析
函数名称 : CalLikeHood 参数 : 无 返回值 : 无
说明 : 该函数用于计算相似度
29
函数名称 : CalBinary 参数 : 无 返回值 : bool
说明 : 该函数用于将图像二值化
函数名称 : filter
参数 : double** source 返回值 : bool
说明 : 该函数的功能是实现中值滤波
函数名称 : CalParameter
参数 : DirectPath —— Bmp文件路径 返回值 : bool
说明 : 该函数的功能是对参数进行训练
3 类CFaceDetectDoc
表7-3 类CFaceDetectDoc的成员
函 数 CopyBitMap () MakeBitMap () DrawCross () Likehood () 拷贝位图 生成新的位图 画十字形标记 计算相似度 功 能
各成员函数解析
函数名称 : CopyBitMap
参数 : dest —— 目标位图指针 Source —— 源位图指针 返回值 : bool
说明 : 该函数的功能是拷贝位图
30