基于肤色模型的人脸计数与人数统计系统
项目介绍
本系统是一款基于 MATLAB 环境开发的自动化人脸计数工具。它利用数字图像处理技术,通过肤色概率模型从复杂的背景中提取疑似人脸区域,并结合几何特征筛选,实现对静态图像中人数的准确统计。系统不仅提供了完整的后台处理逻辑,还配备了直观的图形用户界面(GUI),方便用户实时观察从图像输入到结果输出的每一个处理阶段。
功能特性
- 直观的 GUI 交互界面:集成三个显示区域,分别展示原始图像、肤色提取二值图以及最终的标记统计结果。
- 鲁棒的色彩空间转换:通过 RGB 转换至 YCbCr 空间,利用亮度与色度分离的特性,降低光照变化对识别的干扰。
- 精细化图像预处理:内置中值滤波算法和形态学组合运算(开运算、闭运算、孔洞填充),有效消除图像噪声和空洞。
- 智能特征筛选机制:基于区域面积和长宽比例双重过滤机制,能够剔除环境中类肤色的细小噪点或不规则物体。
- 实时结果标注:在最终识别结果中自动绘制绿色边界框并对检出的人脸进行编号,同步在界面底端更新总人数。
系统逻辑与实现细节
系统主要通过以下逻辑步骤在代码中实现:
1. 色彩空间转换与肤色分割
系统接收标准 RGB 彩色图像后,将其转化为 YCbCr 空间。核心识别逻辑基于肤色的先验分布规律:系统设定 Cb 分量在 77 至 127 之间,且 Cr 分量在 133 至 173 之间为肤色判定阈值。通过此范围生成的二值化掩膜能够初步定位人体外露皮肤区域。
2. 图像噪声抑制与平滑
为了减少摄像头采集过程中产生的椒盐噪声,系统采用 5x5 窗口的中值滤波(medfilt2)处理二值图。
3. 形态学后处理
为了使识别目标更加连贯完整,代码依次执行了以下形态学操作:
- 使用半径为 3 的圆形结构元素进行闭运算,填充人脸内部由于光影造成的细小空洞。
- 执行开运算,消除背景中细小的类肤色噪点。
- 调用孔洞填充算法,确保识别区域的连通性。
4. 连通区域标记与几何属性校验
系统采用 8 连通区域标记法识别图中所有独立的目标,并通过以下条件进行筛选:
- 面积筛选:只有当目标区域面积大于图像总像素的 200 分之一时,才会被视为潜在人脸。
- 长宽比校验:计算目标的边界框比例,要求高度与宽度的比值在 0.6 至 2.5 之间。这一步能有效区分人脸与细长的手臂或其他皮肤暴露部位。
5. 结果可视化输出
对于通过筛选的目标,系统会在原始图像的对应位置绘制绿色矩形框,并在中心位置标注红色数字序号,最后将统计总数反馈至 GUI 的文本组件。
关键算法说明
- YCbCr 颜色模型:利用 Cb(蓝色色度)和 Cr(红色色度)的聚类性进行肤色建模。
- 中值滤波:非线性平滑技术,在去除噪点的同时保留边缘特征。
- 连通域分析 (Connected Component Analysis):用于确定图像中物体的数量、位置及形状特征。
- 形态学运算:通过膨胀和腐蚀的组合(开/闭运算)优化二值图像的拓扑结构。
使用方法
- 启动 MATLAB,将工作目录切换至项目所在文件夹。
- 运行主程序函数,系统将弹出图形用户界面。
- 点击 加载图像 按钮,从本地磁盘选择一张包含人脸的静态图片(支持 jpg, png, bmp, jpeg 格式)。
- 点击 开始计数 按钮,系统将完成图像处理流程并显示识别结果和统计人数。
- 如需处理新图像,可点击 重置系统 清空当前显示区域或直接再次加载新图。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 必备工具箱:Image Processing Toolbox(图像处理工具箱)。
- 硬件配置:标准计算机配置即可,支持主流分辨率的图像输入。