




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
对OpenCV中Haar特征CvHaarClassifierCascade等结构理解首先说一下这个级联分类器,OpenCV中级联分类器是根据VJ 04年的那篇论文(Robust Real-Time Face Detection)编写的,查看那篇论文,知道构建分类器的步骤如下:1、根据haar-like特征训练多个弱分类器2、使用adaboost算法将多个弱分类器组合成一个强分类器3、最终的分类器是由多个强分类器级联而成下面这幅图是弱分类器组合成强分类器的示意图(图片来源于网络):下面这张是多个强分类器级联的示意图(图片来源于网络):在了解了级联分类器是怎么一回事后,我们来看一看OpenCV里面级联分类器的结构在调用OpenCV中的级联分类器对目标进行分类时,都会将一个训练好的分类器(一个训练好的.xml文件)读入到一个CvHaarClassifierCascade结构中,如下:1CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)cvLoad(haarcascade_frontalface_alt.xml,0,0,0);那么这个CvHaarClassifierCascade结构体里面的内容都有哪些呢? 1 typedef struct CvHaarClassifierCascade 2 3 int flags; /* 标志位 */ 4 int count; /* 分级分类器中强分类器的数量 */ 5 CvSize orig_window_size; /* 训练中原始目标的大小 */ 6 7 /* these two parameters are set by cvSetImagesForHaarClassifierCascade */ 8 CvSize real_window_size; /* 待检测物体的大小 */ 9 double scale; /* Haar块缩放的尺寸 */10 11 CvHaarStageClassifier* stage_classifier; /* 定义强分类器数组 */ 12 CvHidHaarClassifierCascade* hid_cascade;13 CvHaarClassifierCascade;第一个flags,还不是很清楚,在debug模式下,flags=1112539136(好吧,这个值很诡异),我也不是很清楚第二个count,表示整个分级分类器中强分类器的数量,即最后参与级联的强分类器的个数第三个orig_window_size,表示的是在训练时用的正样本的尺寸,OpenCV中的尺寸是20x20第四个和第五个,注释中说了,这两个参数需要自己设置,具体每个参数看注释第六个stage_classifier,是强分类器指针,指向一个强分类器数组,之前的count是多少,那么此处的强分类器就有多少最后一个hid_cascade,还不是很清楚下面来看上面第六个参数的强分类器结构体 1 typedef struct CvHaarStageClassifier 2 3 int count; /* number of classifiers in the battery 构成强分类器的弱分类器的数量*/ 4 float threshold; /* threshold for the boosted classifier 叠加分类器的阈值*/ 5 CvHaarClassifier* classifier; /* array of classifiers 定义分类器数组*/ 6 /* these fields are used for organizing trees of stage classifiers, 7 rather than just stright cascades */ 8 int next; 9 int child;10 int parent;11 CvHaarStageClassifier;第一个count,表示该强分类器中,弱分类器的数量,即该强分类器由多少个弱分类器组成第二个threshold,叠加分类器的阈值(好吧。这个我也不知道)第三个classifier,是一个指针,指向的是一个弱分类器数组,之前的count是多少,此处的弱分类器就有多少后面3个都不清楚。(望知道的网友给予帮助)下面是弱分类器的结构 1 typedef struct CvHaarClassifier 2 3 int count; /* number of nodes in the decision tree */ 4 /* these are parallel arrays. Every index i corresponds to a node of the decision tree (root has 0-th index). 5 lefti - index of the left child (or negated index if the left child is a leaf) 6 righti - index of the right child (or negated index if the right child is a leaf) 7 thresholdi - branch threshold. if feature responce is = threshold, left branch is chosen, otherwise right branch is chosed. 8 alphai - output value correponding to the leaf. */ 9 10 CvHaarFeature* haar_feature;11 float* threshold;12 int* left;13 int* right;14 float* alpha;15 CvHaarClassifier;第一个count,在opencv里,发现始终都是1,自己想了想,因为这个结构体记录的是一个弱分类器,自然弱分类器的个数就是1了。第二个haar_feature,也是一个指针,指向一个(因为count是1)特征结构体CvHaarFeature,这个结构体中记录的内容是弱分类器的类型(包括该haar-like特征的位置,大小,以及种类,这个结构体会在下面给出,再细说)第三个threshold,就是那个判别函数:h(x,f,p,theta) = (p*f(x) p*theta ? 1 : 0),中的阈值theta第四个left,第五个right不是很清楚(求知道的同学详解啊)第六个alpha,就是这个弱分类器的权重(每一个强分类器都是由多个弱分类器按照各自的权重进行表决,而得到的)特征的结构体如下 1 #define CV_HAAR_FEATURE_MAX 3 2 / 一个Haar特征由23个具有相应权重的矩形组成 3 typedef struct CvHaarFeature 4 5 int tilted; / 0 means up-right feature, 1 means 45-rotated feature 6 struct 7 8 CvRect r; 9 float weight;10 rectCV_HAAR_FEATURE_MAX; 11 / 2-3 rectangles with weights of opposite signs and with absolute values inversely proportional to the areas of the rectangles. if rect2.weight != 0, then the feature consists of 3 rectangles, otherwise it consists of 2.12 CvHaarFeature;第一个参数titled,0表示该特征是标准的haar-like特征,1表示旋转45后的特征标准的haar-like特征如下:而旋转45后的特征如下:第二个参数是个结构体数组,每个结构体中包括一个矩形和一个权重,这个数组的大小是CV_HAAR_FEATURE_MAX(3)(注释中说:此处可能有23个矩形,这里的矩形等看了下面的解释就知道了),这个矩形和权重有什么用呢?在debug模式下,查看第一个弱分类器数组内的元素第一个元素:1 rect0.r.x = 32 rect0.r.y = 73 rect0.r.width = 144 rect0.r.height = 45 rect0.weight = -1第二个元素:1 rect1.r.x = 32 rect1.r.y = 93 rect1.r.width = 144 rect1.r.height = 25 rect1.weight = 2第三个元素则全都是0这么看这些坐标,并不是很清楚,我们可以画个图:由图可见,第一个矩形表示的是A+B区域,第二个矩形表示的是B区域。此时再看一看每个元素的权重weight,结合积分图的概念,发现第一个矩形的积分图乘以其权重加上第二个积分图乘以其权重,恰好得到下述结果:(A+B)*(-1)+B*2=B-A看到这个公式,大家都不会陌生,这正式VJ论文中给出的众多haar-like模板中的其中一个模板的计算方法(此处不知如何表达,大家将就,看懂就行)我们继续考察第二个弱分类器的特征部分,其特征参数如下:1 rect0.r.x = 1, rect0.r.y = 22 rect0.r.width = 18, rect0.r.height = 43 rect0.weight = -14 5 rect1.r.x = 7, rect1.r.y = 26 rect1.r.width = 6, rect1.r.height = 47 rect1.weight = 3数组的第三个元素依然都是是0,对其绘图:第一块矩形区域是A+B+C,第二块矩形区域是B,积分图乘以权重,再相加,可得:(A+B+C)*(-1)+B*3 = 2*B-A-C也是haar-like特征模板之一(此处不知如何表达,大家将就,看懂就行)刚刚找了好久,找到一个第三个元素权重不为0的,该数组三个元素如下: 1 rect0.r.x = 0, rect0.r.y = 2 2 rect0.r.width = 20, rect0.r.height = 6; 3 rect0.weight = -1 4 5 rect1.r.x = 10, rect1.r.y = 2 6 rect1.r.width = 10,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学科学实践:自制净水装置在校园水资源保护中的应用与推广论文
- 高中校园垃圾分类智能化管理策略与实施路径探索论文
- 校园花卉观赏价值与城市绿地生态功能研究论文
- 艺考生口腔管理制度
- 苏泊尔专利管理制度
- 触电事故专项应急预案总结
- 财务管理模拟习题(附参考答案)
- 江南布衣女装服饰品牌策划方案
- 自动控制原理教学大纲 (自动化专业、电气工程及其自动化专业)
- 2025年android通知!2024中级Android开发面试解答最强技术实现
- 食堂菜品加工规范
- 孩子入学居间协议书模板
- 年度吊装合同协议
- 2025年CSCO胰腺癌诊疗指南解读
- 创业税收政策培训
- 高中主题班会 我命由我不由天课件-2025年高三百日励志班会课
- 2025高中学业水平考试生物重点知识点归纳总结(复习必背)
- 支气管镜操作流程
- 《战略资源稀土》课件
- 《基础护理学》第七版考试题库大全-上部分(600题)
- 科技在宠物健康监测中的应用
评论
0/150
提交评论