Simple Face and Eye Detection (R13 Release) 项目说明文档
项目介绍
本项目是一个专为 MATLAB 软件环境设计的轻量级人脸与眼睛检测工具。它利用计算机视觉中的颜色分割技术与几何形态分析,能够从复杂的彩色图像中自动识别并提取出人脸区域,并在人脸内部通过局部特征分析精准定位眼睛的位置。该系统针对 MATLAB 早期版本(如 R13)进行了优化,具有算法简洁、运行高效、不依赖深度学习库的特点,非常适合作为数字图像处理的教学示例或低算力环境下的预处理模块。
功能特性
- 交互式图像加载:支持用户通过图形界面选择多种格式(JPG, PNG, BMP, TIF)的图片文件。
- 肤色模型分割:利用 YCbCr 颜色空间进行亮度与色度的分离,通过经典的肤色分布阈值进行像素级提取。
- 形态学优化:集成中值滤波、空洞填充和闭运算等预处理技术,有效去除噪声并平滑检测结果。
- 人脸定位提取:基于连通域标记和面积比例,自动锁定图像中最大的肤色区域作为目标人脸。
- 眼部特征检索:在人脸区域的上半部建立搜索窗口,通过寻找低亮度特征并结合纵横比过滤,精确定位眼睛。
- 多维度可视化:提供四格视觉结果展示,包括原始检测框、皮肤分割图、提取的人脸 ROI 以及缩放后的眼睛样本图。
- 数据实时输出:命令行同步输出人脸与眼睛的精确坐标值。
运行环境与要求
- 软件平台:MATLAB R13 及以上版本。
- 工具箱依赖:Image Processing Toolbox(图像处理工具箱)。
- 硬件性能:低功耗环境亦可流畅运行,处理速度取决于输入图像的分辨率。
- 图像要求:需输入包含清晰人脸的 RGB 彩色图像。
核心实现逻辑与算法细节
#### 1. 颜色空间转换与肤色分割
程序首先将输入的 RGB 图像转换为 YCbCr 颜色空间。此步骤的关键在于 Y 轴(亮度)与误差色度(Cb, Cr)的分离。算法通过以下预定义范围对肤色进行过滤:
- Cb 偏置值范围:77 至 127
- Cr 偏置值范围:133 至 173
结果将生成一张二值化的掩膜图,其中肤色区域呈现为高亮。
#### 2. 图像预处理与噪声抑制
为了减少由于光照波动或背景杂点带来的干扰,程序执行了以下操作:
- 中值滤波:应用 5x5 的平滑窗口去除孤立的噪声点。
- 形态学闭运算:使用 8 像素半径的圆盘形结构元素进行闭运算,通过先膨胀后腐蚀的过程连接断裂的肤色块。
- 空洞填充:使用填充算法完善脸部内部的二进制像素,确保人脸区域的完整性。
#### 3. 候选区域分析与人脸锁定
利用 8 连通域标注算法对图像中的所有白色区域进行识别。程序通过计算每个区域的面积(Area)和外接矩形(BoundingBox),提取出面积最大的连通区域,将其判定为图像中的主要人脸对象。
#### 4. 眼睛搜索与几何约束
眼睛的检测被严格限制在人脸区域内部,以提高准确率:
- 垂直区域限定:搜索范围被限定在人脸高度的 20% 至 55% 之间。
- 灰度阈值化:在提取的局部区域内,通过 Otsu 自动阈值的 60% 进一步分割,利用眼睛通常比皮肤暗的物理特性寻找候选点。
- 几何过滤:计算每个候选点的纵横比。只有宽高比在 0.5 到 3.0 之间的暗点才会被识别为潜在的眼睛区域,以此过滤掉头发、眉毛或背景干扰。
#### 5. 结果反馈
系统通过双重方式展示结果:
- 图形界面:在主窗口中绘制红色框标出人脸,绿色框标出眼睛,并展示各个处理阶段的对比图。
- 坐标输出:控制台将打印人脸的 X、Y 坐标及宽高,同时输出两只眼睛相对于人脸区域的相对坐标,便于后续进行人脸对齐或特征跟踪。
使用方法
- 启动 MATLAB 并将工作路径切换至项目所在文件夹。
- 运行主程序脚本。
- 在弹出的文件选择窗口中,选取一张包含人脸的彩色图像。
- 程序将自动进行运算,并在新弹出的窗口中展示检测结果,对应的坐标数据将显示在命令窗口中。