基于肤色模型与模板匹配的MATLAB人脸检测系统
项目简介
本项目是一个基于MATLAB环境开发的轻量级人脸检测系统。该系统采用了经典的计算机视觉算法,结合了
YCbCr色彩空间的肤色分割技术与
归一化互相关(NCC)模板匹配技术。通过多阶段的筛选策略(从颜色特征到几何特征,再到纹理结构),能够在复杂背景下快速定位人脸区域,并有效剔除类肤色的非人脸干扰物。
主要功能特性
- 多源图像输入支持:系统支持用户交互式选择图片文件;若取消选择,系统具备自适应回退机制,尝试加载内置演示图像或自动生成包含模拟人脸的合成测试图像。
- 自适应图像预处理:自动检测图像尺寸,对宽度超过800像素的图像进行等比例缩放,以平衡检测精度与运行速度。
- YCbCr肤色分割:利用肤色在YCbCr空间中聚类性强的特点,通过特定的经验阈值提取疑似皮肤区域。
- 形态学优化:通过填充孔洞、开运算去噪、闭运算连接断裂区域,生成高质量的二值化候选掩模。
- 几何特征初筛:基于连通域的长宽比、面积占比和实心度(Solidity)进行快速过滤,排除形状明显不符合人脸特征的区域。
- 合成模板匹配:内置数学生成的标准人脸拓扑模板,利用归一化互相关系数(NCC)对候选区域进行结构验证。
- 非极大值抑制(NMS):对重叠度高的检测框进行合并与筛选,保留置信度最高的结果。
- 可视化输出:直观展示原图检测结果、中间步骤的二值化掩模(肤色分割与形态学处理后),并输出检测统计数据。
系统要求
- MATLAB R2014a及以上版本(推荐)
- Image Processing Toolbox(图像处理工具箱)
- Computer Vision Toolbox(计算机视觉工具箱,用于特定绘图功能)
使用方法
直接运行主程序脚本即可。程序启动后会弹出文件选择对话框,用户可选择JPG、PNG、BMP或TIF格式的图片。程序运行结束后,将自动弹出结果窗口显示检测框、置信度及中间处理步骤,并在控制台打印耗时与统计信息。
---
核心算法与实现逻辑
系统处理流程严格遵循以下六个步骤,确保检测的准确性与鲁棒性:
1. 图像获取与预处理
程序首先尝试通过UI界面让用户选择图片。若用户取消或文件读取失败,程序会尝试读取工具箱自带的
visionteam.jpg。若仍不可用,系统会调用内置的生成器创建一个包含模拟肤色圆形(带眼嘴特征)和干扰色块的合成图像。
读取图像后,系统检查图像宽度。为了提升后续计算速度,若图像宽度超过800像素,将按照比例缩小图像。同时,若输入为灰度图,会将其转换为三通道RGB格式以兼容后续流程。
2. YCbCr 肤色模型检测
为了降低亮度对肤色检测的影响,系统将RGB图像转换至YCbCr色彩空间。根据代码中设定的经验阈值,提取色度分量 $Cb$ 和 $Cr$ 满足以下条件的区域:
- $77 le Cb le 127$
- $133 le Cr le 173$
该步骤生成初步的二值化掩模(SkinMask)。
3. 数学形态学滤波
初步的肤色掩模通常包含噪点和孔洞(如眼睛和嘴巴由于颜色较深可能被漏检)。系统按顺序执行以下操作:
- 填充孔洞:使用
imfill 填充二值图像中的封闭孔洞。 - 开运算:使用半径为3的圆盘结构元素进行腐蚀后膨胀,去除细小的背景噪点。
- 闭运算:使用半径为5的圆盘结构元素进行膨胀后腐蚀,连接断裂的肤色区域并平滑边界。
4. 连通域分析与几何筛选
系统对二值图像进行标记,提取每个连通域的边界框(BoundingBox)、面积、偏心率等属性,并依此进行几何规则筛选:
- 面积筛选:剔除面积小于全图0.1%(噪点)或大于全图50%(背景)的区域。
- 长宽比筛选:人脸一般接近正方形或长方形,系统只保留高宽比在 $0.8$ 到 $2.2$ 之间的区域。
- 实心度筛选:要求区域的 Solidity(区域面积/凸包面积)大于 $0.5$,以剔除形状极度不规则的物体。
5. 人脸模板匹配验证
对于通过几何筛选的候选区域,系统执行基于内容的验证:
- 特征提取:从原图中裁剪出候选区域并转为灰度图,缩放至64x64像素。
- 模板生成:系统并不加载外部人脸图片,而是通过数学公式动态生成一个 $64 times 64$ 的合成人脸模板。该模板利用高斯分布模拟脸部轮廓(亮部)以及眼睛和嘴巴位置(暗部)。
- 相关性计算:使用
corr2 函数计算候选区域与合成模板的归一化互相关系数。 - 阈值判定:仅保留相关系数大于 $0.4$ 的区域作为最终检测到的疑似人脸。
6. 非极大值抑制(NMS)与结果绘制
为了消除对同一张人脸的重复检测,系统应用非极大值抑制算法:
- 按匹配置信度对所有检测框排序。
- 计算重叠区域面积,若交并比(IoU)或重叠比例超过阈值(0.3),则抑制置信度较低的框。
- 最终在原图上绘制红色矩形框,并标注匹配置信度(Conf),同时显示中间处理阶段的掩模图像。
---
关键代码细节解析
合成人脸模板生成
系统不依赖外部模型文件,而是通过高斯函数的组合在内存中生成模板。
- 基底:利用
exp(-(x^2 + y^2)) 生成中心亮、四周暗的脸部轮廓。 - 五官消减:在特定的相对坐标位置减去高斯函数值,模拟左眼、右眼和嘴巴的阴影区域。
这种方法使得系统具有完全的独立性,无需附带额外的数据文件。
合成测试图像生成
当没有外部图片输入时,generateSyntheticImage 函数会创建一个白底图像,并在其中绘制:
- 符合肤色RGB值([255, 200, 170])的圆形区域。
- 在圆形区域内手动填充灰色的矩形以模拟眼睛和嘴巴,确保能通过模板匹配。
- 非肤色干扰物(如蓝色方块)和类肤色干扰物(如形状细长的条状物),用于验证几何筛选的有效性。
非极大值抑制(NMS)
实现了标准的贪心NMS算法。它通过计算候选框之间的相交面积与合并面积之比,有效地解决了滑动窗口或多尺度检测中常见的检测框重叠问题,确保每个人脸只保留一个最优的检测结果。