没有合适的资源?快使用搜索试试~ 我知道了~
OpenCV之HaarTraining算法剖析-完全版
5星 · 超过95%的资源 需积分: 10 123 下载量 174 浏览量
2008-10-08
12:27:08
上传
评论 4
收藏 314KB PDF 举报
温馨提示
试读
12页
本次上传的是OpenCV之HaarTraining算法剖析的完全版,欢迎交流。
资源推荐
资源详情
资源评论
OpenCV 之 HaarTraining 算法剖析
作者:周明才
Email:
mingcai.zhou@ia.ac.cn
版权所有,未经作者授权,不得用于商业目的。
由于作者水平有限,文中还会有不妥甚至错误之处,欢迎大家批评指正,同时希望能与一起
交流探讨!QQ:4356176
2008.10.08 第二版
1.引言
通过前段时间阅读 OpenCV 的 HaarTraining 代码,基本掌握了 HaarTraining 算法。现将
其中的算法作一梳理,同时对 HaarTraining 的使用方法做一简要说明。
HaarTraining 算法总体上以 Friedman, J. H 等人的“Additive Logistic Regression: a
Statistical View of Boosting”为出发点,实现了其中 2 类分类问题的 4 种 Boost 算法:Discrete
AdaBoost, Real AdaBoost, LogitBoost 和 Gentle AdaBoost。同时实现了文中第 8 节 Additive
Logistic Trees 和第 9 节 Weight Trimming.
Friedman, J. H 等人只描述了如何训练一个强分类器,对于训练级联的强分类器(Cascade
of Classifiers),OpenCV 采用的是 Paul Viola 等人的“Robust Real-Time Face Detection”中所
述方法。
HaarTraining 采用的是 OpenCV 扩展的 Haar 特征,具体描述可参考 Rainer Lienhart 等人
的“An Extended Set of Haar-like Features for Rapid Object Detection”。
2.总体框架
要训练一个 Haar 分类器,总体上包括 3 步:1)准备正负样本;2)用 CreateSamples 程序
建正样本集;3)用 HaarTraining 程序训练,得到最终的分类器模型(xml 文件)。如图 2.1 所
示。
图 2.1 训练 Haar 分类器总器框架
1
3. 样本准备
HaarTraining 需要使用正样本和负样本进行训练。下面分别进行描述。
3.1 正样本
对于正样本,通常的做法是先把所有正样本裁切好,并对尺寸做规整(即缩放至指定大
小),如图 3.1 所示。
图 3.1 正样本集示意图
由于 HaarTraining 训练时输入的正样本是 vec 文件,所以需要使用 OpenCV 自带的
CreateSamples 程序将准备好的正样本转换为 vec 文件。转换的步骤如下:
1) 制作一个正样本描述文件,用于描述正样本文件名(包括绝对路径或相对路径),
正样本数目以及各正样本在图片中的位置和大小。典型的正样本描述文件如下:
face_100/face00001.bmp 1 0 0 20 20
face_100/face00002.bmp 1 0 0 20 20
face_100/face00003.bmp 1 0 0 20 20
…
可采用
Dos
命令结合
EditPlus
软件生成样本描述文件。具体方法是在
Dos
下的恰当
目录敲入
dir face_100 /b > samples.dat
,则会生成一个
samples.dat
,里面包含所有正
样本文件名列表,但没有相对路径名和正样本位置信息。在
samples.dat
文件各行行
首增加“
face _100/
”的方法是使用
EditPlus
,先选中所有行,然后按
Tab
键为每行
增加一个制表位,然后将制表位全部替换为“
face _100/
”即可。通过将“
bmp
”替
换为“
bmp 1 0 0 20 20
”即可在每行添加“
1 0 0 20 20
”。
2) 运行 CreateSamples 程序。如果直接在 VC 环境下运行,可以在 Project\Settings\Debug
属性页的 Program arguments 栏设置运行参数。下面是一个运行参数示例:
-info F:\FaceDetect\samples.dat -vec F:\FaceDetect\samples.vec -num 200 -w 20 -h 20
表示有 200 个样本,样本宽 20,高 20,正样本描述文件为 samples.dat,结果输出
到 samples.vec。
3) 运行完了会生成一个*.vec 的文件。该文件包含正样本数目,宽高以及所有样本图
2
像数据。
3.2 负样本
负样本图像可以是不含有正样本模式的任何图像,比如一些风景照等。训练时,OpenCV
需要一个负样本描述文件,该文件只需包含所有负样本的文件名及绝对(或相对)路径名。
以下是一个负样本描述文件内容示例:
nonface_200/00001.bmp
nonface_200/00002.bmp
nonface_200/00003.bmp
…
负样本描述文件的生成方法可参照正样本描述文件生成方法。
负样本图像的大小只要不小于正样本就可以,在使用负样本时,OpenCV 自动从负样本
图像中抠出一块和正样本同样大小的区域作为负样本,具体可查看函数
icvGetNextFromBackgroundData()。具体抠图过程为:
1) 确定抠图区域的左上角坐标(Point.x, Point.y)
2) 确定一个最小缩放比例,使得原负样本图像缩放后恰好包含选中负样本区域
3) 对原负样本图象按计算好的缩放比例进行缩放
4) 在缩放后的图像上抠出负样本,如图 3.2 左半部分的虚线框所示。
Reader->img
Reader->src
(Point.x,Point.y)
图 3.2 抠图示意图
3
剩余11页未读,继续阅读
pbda
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页