1 引言
本文主要是通过给定图片中提取的正样本和自
己取得的负样本形成总样本,并由haar training程序
依 据 样 本 来 训 练 分 类 器 。 最 后 可 利 用
vs2010、opencv2.4.4和训练好的分类器进行目标检测,
实现基于opencv的大众车标定位。
2 基本思想
2.1 目标检测
目标检测方法最初由Paul Viola [Viola01]提出,
并由Rainer Lienhart [Lienhart02]对这一方法进行了改
善。该方法的基本步骤为: 首先,利用样本(大约
几百幅样本图片)的 harr 特征进行分类器训练,得
到一个级联的boosted分类器。分类器中的"级联"是
指最终的分类器是由几个简单分类器级联组成。在
图像检测中,被检窗口依次通过每一级分类器, 这
样在前面几层的检测中大部分的候选区域就被排除
了,全部通过每一级分类器检测的区域即为目标区
域。
分类器训练完以后,就可以应用于输入图像中
的感兴趣区域的检测。检测到目标区域分类器输出
为1,否则输出为0。为了检测整副图像,可以在图
像中移动搜索窗口,检测每一个位置来确定可能的
目标。 为了搜索不同大小的目标物体,分类器被设
计为可以进行尺寸改变,这样比改变待检图像的尺
寸大小更为有效。所以,为了在图像中检测未知大
小的目标物体,扫描程序通常需要用不同比例大小
的搜索窗口对图片进行几次扫描。
目前支持这种分类器的boosting技术有四种:
Discrete Adaboost, Real Adaboost, Gentle Adaboost and
Logitboost。"boosted" 即指级联分类器的每一层都可
以从中选取一个boosting算法(权重投票),并利用基
础分类器的自我训练得到。
根据上面的分析,目标检测分为三个步骤:
1)样本的创建
2)训练分类器
3)利用训练好的分类器进行目标检测。
2.2 adaboost算法
Adaboost 是一种迭代算法,其核心思想是针对同
一个训练集训练不同的分类器(弱分类器),然后把这
些弱分类器集合起来,构成一个更强的最终分类器
(强分类器)。
其算法本身是通过改变数据分布来实现的,它根
据每次训练集之中每个样本的分类是否正确,以及
上次的总体分类的准确率,来确定每个样本的权值。
本作业采用vs2010和opencv2.4.4完成
将修改过权值的新数据集送给下层分类器进行训练,
最后将每次训练得到的分类器最后融合起来,作为
最后的决策分类器。使用 adaboost 分类器可以排除
一些不必要的训练数据特征,并将关键放在关键的
训练数据上面。
目前,对 adaBoost 算法的研究以及应用大多集
中于分类问题,同时近年也出现了一些在回归问题
上的应用。就其应用 adaBoost 系列主要解决了: 两类
问题、多类单标签问题、多类多标签问题、大类单
标签问题,回归问题。它用全部的训练样本进行学
习。
2.3 haar 特征
haar 特征分为这几类:边缘特征、线型特、中
心特征和对角线特征。组合成特征模板库,特征模
板内有白色和黑色两种举行,并定义该模板的特征
值为白色举行像素,减去黑色举行像素和。在确定
了特征形式后,harr-like 特征的数量就取决于训练样
本图像和矩阵大学,特征模板在子窗口内任意放
置,,一种形态为一种特征,找出所有子窗口的特
征进行弱分类训练的基础。
haar 特征也是基于灰度图,首先通过大量的具
有比较明显的 haar 特征(矩形)的物体图像用模式
识别的方法训练出分类器,分类器是个级联的,每
级都以大概相同的识别率保留进入下一级的具有物
体特征的候选物体,而每一级的子分类器则由许多
haar 特征构成(由积分图像计算得到,并保存下位
置),有水平的、竖直的、倾斜的,并且每个特征
带一个阈值和两个分支值,每级子分类器带一个总
的阈值。识别物体的时候,同样计算积分图像为后
面计算 haar 特征做准备,然后采用与训练的时候有
物体的窗口同样大小的窗口遍历整幅图像,以后逐
渐放大窗口,同样做遍历搜索物体;每当窗口移动
到一个位置,即计算该窗口内的 haar 特征,加权后
与分类器中 haar 特征的阈值比较从而选择左或者右
分支值,累加一个级的分支值与相应级的阈值比较,
大于该阈值才可以通过进入下一轮筛选。当通过分
类器所以级的时候说明这个物体以大概率被识别。
3 设计流程及步骤
3.1程序工作步骤
本文采用vs2010和opencv2.4.4完成,从给定
图 片 取 出 正 负 样 本 , 通 过 OpenCV 自 带 的
CreateSamples程序和haartraining程序形成各种
强分类器,而后综合成data.xml文件。最后通过程
序调用分类器实现大众车标定位。
程序的主要工作步骤:
1)取出正样本,并通过CreateSamples程序
把正样本转换成vec.txt文件;