MatlabCode

本站所有资源均为高质量资源,各种姿势下载。

您现在的位置是:MatlabCode > 资源下载 > 一般算法 > 基于Haar特征与Adaboost的人脸检测系统

基于Haar特征与Adaboost的人脸检测系统

资 源 简 介

本项目是一个在MATLAB环境下实现的完整人脸检测与识别解决方案,核心在于应用了经典的Haar-like特征提取技术结合Adaboost算法进行分类器训练。系统详细展示了计算机视觉中目标检测的经典流程,主要功能包括:1. 图像预处理与积分图(Integral Image)构建,利用积分图技术将矩形特征的计算复杂度降至常数级别,显著提高处理速度;2. Haar-like特征提取,计算多种类型的矩形特征以捕捉人脸的边缘、线条和中心环绕结构信息;3. 强分类器训练,实现Adaboost算法,从大量弱分类器中筛选出区分能力最强的特征,并将其级联成层级结构的强分类器;4. 人脸检测模块,利用训练好的级联分类器在待测图像上进行多尺度滑动窗口扫描,自动定位并标记人脸区域。该项目不仅提供了可以直接运行的人脸检测演示,还包含了完整的训练代码,允许用户使用自定义的数据集重新训练模型,非常适合用于深入理解Viola-Jones算法原理、模式识别课程设计以及相关领域的算法研究。

详 情 说 明

基于Haar-like特征训练的人脸检测与识别系统

项目简介

本项目是一个在MATLAB环境下实现的端到端人脸检测与识别演示系统。该项目旨在通过代码形式深入解析经典的Viola-Jones人脸检测算法核心流程。系统不依赖外部数据集,而是内置了合成数据生成模块,实现了从数据准备、特征提取、分类器训练到最终目标检测的完整闭环。

本代码主要演示了如何利用积分图加速Haar-like特征计算,并通过Adaboost算法训练强分类器,最终在测试图像上通过滑动窗口和非极大值抑制(NMS)技术定位目标。

功能特性

  • 自包含环境:无需下载外部数据集(如ORL或Yale),代码内置生成合成训练样本(模拟人脸特征)和负样本(随机噪声)的功能,确保直接运行即可复现结果。
  • 高效特征计算:实现了积分图(Integral Image)构建算法,支持O(1)时间复杂度的矩形特征求和。
  • Haar-like特征提取:实现了两类基础Haar特征(垂直特征和水平特征)的自动生成与响应计算。
  • Adaboost训练引擎:包含完整的Adaboost算法实现,支持多轮迭代,能够自动筛选最具区分度的弱分类器并加权组合成强分类器。
  • 训练过程可视化:实时计算并绘制训练过程中的加权误差收敛曲线。
  • 滑动窗口检测:在较大的测试图像上应用训练好的级联分类器进行步进扫描。
  • 结果后处理:实现简单的非极大值抑制(NMS)算法,去除重叠的检测框,输出最终检测结果。

系统要求

  • MATLAB R2016a 或更高版本
  • Image Processing Toolbox(推荐,用于图像显示,非核心计算必须)

使用方法

  1. main.m 文件保存至MATLAB当前工作目录。
  2. 在MATLAB命令行窗口输入 main 并回车,或直接在编辑器中点击运行。
  3. 系统将依次执行以下步骤:
* 命令行输出:显示初始化、数据生成、特征计算、训练进度(每一轮的误差和Alpha值)。 * 图形窗口1:弹出“Adaboost训练误差”窗口,显示随迭代轮数下降的误差曲线。 * 图形窗口2:弹出“人脸检测结果”窗口,左侧显示包含随机植入目标的测试原图,右侧显示经过检测和NMS处理后的最终标记结果(绿色矩形框)。

代码逻辑与实现细节

本项目核心逻辑均在 main.m 中实现,主要分为五个核心处理阶段和辅助函数库。

1. 参数设置与合成数据生成

  • 配置:设定训练样本尺寸为 24x24 像素,正负样本各50个,Adaboost迭代10轮。
  • 数据合成
* 正样本:通过 generateSyntheticData 函数生成。模拟人脸的简易灰度模式,即背景较亮,中间偏上区域(模拟眼睛/眉毛)有一条较暗的横向矩形带。 * 负样本:生成纯随机的灰度噪声图像。

2. 积分图与Haar特征构建

  • 积分图计算computeIntegralImage 函数利用 cumsum 快速计算图像的积分图,并进行边界补零(Padding),以便利用公式 D - B - C + A 快速计算任意矩形区域的像素和。
  • 特征原型生成generateHaarFilters 函数遍历24x24的窗口,生成两种基础特征:
* Type 1 (垂直):由上下两个矩形组成,特征值为(整个矩形和 - 2 * 下半部黑色区域和)。 * Type 2 (水平):由左右两个矩形组成,特征值为(整个矩形和 - 2 * 右半部黑色区域和)。 * *注*:为了演示效率,代码中设定了步长(Stride)和最小尺寸限制。

3. Adaboost 分类器训练

  • 特征预计算applyHaarFeatures 函数利用积分图预先计算所有训练样本在所有Haar特征下的响应值,生成特征响应矩阵,极大加速了后续的训练循环。
  • 训练循环 (adaboostTrain)
* 初始化样本权重,正负样本权重相等并归一化。 * 进行 numRounds (10) 轮迭代。 * 弱分类器选择:在每一轮中,遍历特征。对于每个特征,计算基于正负样本均值中点的简单阈值。通过比较加权误差率,选出当前轮次分类效果最好的特征及其阈值和极性。 * 权重更新:根据选出的弱分类器误差率计算 Alpha 权重,并增加被错误分类样本的权重(使算法在下一轮更关注难分样本)。 * 记录每一轮的选出的特征索引、阈值、极性和Alpha值。

4. 滑动窗口检测

  • 测试图生成:创建一个 120x160 的噪声背景图,并随机植入3个与训练集分布一致的合成“人脸”图块,记录真实位置(Ground Truth)。
  • 扫描机制
* 首先计算整张测试图的积分图。 * 使用固定窗口(24x24)和固定步长(4像素)在测试图上进行滑动。 * *注*:演示代码仅执行单尺度(训练尺度)检测,未构建图像金字塔。
  • 窗口分类 (classifyWindow)
* 对于每一个滑动窗口位置,调用训练好的Adaboost强分类器。 * 强分类器线性组合了10个弱分类器的加权投票结果。 * 为了提高召回率,代码设定级联阈值为总Alpha值的45%(sumAlpha * 0.45),超过该阈值即判定为人脸。

5. 非极大值抑制 (NMS)

  • 由于滑动窗口会在目标周围产生多个重叠的检测框,simpleNMS 函数被用于后处理。
  • 逻辑:根据检测框面积(此处固定)和重叠度(IOU思路)进行贪婪合并。如果两个框重叠度超过阈值(0.1),则抑制其中之一,保留最终的一个最佳检测结果。

关键算法函数说明

  • generateSyntheticData(nPos, nNeg, sz):数据生成器,构建具有特定“暗眼区域”模式的正样本。
  • computeIntegralImage(img): 核心加速模块,将二维图像转换为积分图。
  • generateHaarFilters(imgSz): 构造器,定义特征的几何结构(x, y, w, h, type)。
  • computeRectSum(ii, r, c, w, h): 利用积分图索引,以O(1)代价返回指定矩形区域的像素和。
  • adaboostTrain(featuresVals, labels, T): 训练主控,输出包含特征索引、阈值、极性和权重的分类器结构体数组。
  • classifyWindow(...): 检测执行单元,将强分类器应用于特定图像子窗口。
  • simpleNMS(boxes, threshold): 结果过滤器,通过剔除重叠框来净化最终输出。