前面介绍分类器检测过程的示例中是以HOG特征为例,那LBP和HAAR特征在xml中是如何表达和测试的呢?

2.3    LBP与HAAR特征

HAAR特征的计算和表达方式与HOG很类似,在OpenCV的haartraining.exe中,feature保存在每个weakclassifier中,而之后的traincascade.exe中则是以LBP、HOG、HAAR三种统一的方式——在stages后面用features节点来统一存储——来保存features的pool。

     2.3.1    HAAR特征

在haar特征的训练中(无论是老版本的haartraining还是现在的traincascade),都是有BASIC/CORE/ALL三种特征组合待选的,默认情况为BASIC。三种情况下对应的特征选取分别如下:

BASIC:

对于最后一种point型特征,在ALL类型中有看到,BASIC中没有看到,但不知是否被选入这种特征

CORE中的增加项:

ALL中的增加项:

最后,HAAR特征的表达形式是以不止一个rect来表示的。比如

表达的是下图中的特征,tilted表达是否倾斜。

其中第一个矩形是外部最大的矩形,第二个为中间的红色矩形。

其他特征都是以类似的形式表达,矩形后的-1和3是该矩形的weight,也就是3*rect2-rect1;它的统一形式是sumof( rect[i]*weight[i] )。当然这里的rect同样是在维护一系列指向积分图中的指针。

    2.3.2    LBP特征

LBP特征的计算与HAAR、HOG有很大不同,在判断某个矩形的LBP特征应当属于左叶子还是右叶子的时候,HAAR和HOG只是用当前节点的threshold来判定就可以了;而LBP的节点结构是图6所示:

图6. LBP节点示意图

节点中同样是有0和-1来做左右节点代码,33是feature ID,也就是所在的矩形,而后面紧跟的8个数将会被保存在vector<int> subset结构中,每个节点有8个这样的数,因而最终subset的size = nodes.size()* 8。

就以上面的这个节点来描述下判定规则:

首先33对应的是下面的矩形

这个矩形将对应到积分图中的16个int型指针,他们的对应关系如图7所示,ID号33中给出的矩形位置就是图中的A矩形。根据图中的关系可以得到9个矩形中的16个指针,每个指针存储的是积分图中该点右上方矩形内的灰度和。这样利用积分图能够快速计算出A~I共9个矩形内的灰度和,然后除E之外的其他矩形与E矩形内的结果作对比,大小将被标记为0或1,这样8个矩形将得到一个8位数c。

图7. Rect与LBP特征计算位置的关系示意图

接下来就是关键的如何根据c判断当前矩形应当走向左节点还是右节点了。

sum += cascadeLeaves[subset[c>>5]& (1 << (c & 31)) ? leafOfs : leafOfs+1];

c中的8个位由高到低分别来自于矩形A-B-C-F-I-H-G-D,因而c>>5得到的是上面ABC三个位所代表的0~7范围的一个数,根据此数将得到subset(也就是每个节点中都会存储的8个数)中的一个值,这里命名为X。1<<(c & 31)得到的是2^n,n是F-I-H-G-D共5个矩形的位,这里将2^n这个值命名为Y,可见Y的范围是1~2^31,(它想表达的就是在这5个矩形中的对比情况,因为他们是一一对应的)。最后X和Y做“按位与”运算如果是0就进入右节点,否则进入左节点。

这里的判定规则应该是有更好的诠释的,暂时还没有找到相关资料,以上仅仅是在代码中解析的一些内容。

相比其他两种,LBP的判定规则似乎有点复杂了。

分类器是如何做检测的?(2)——【续】检测中的LBP和HAAR特征计算过程相关推荐

  1. Haar特征和级联分类器目标检测介绍及应用

    文章目录 Haar特征和级联分类器目标检测介绍及应用 1. Haar特征 2. 级联分类器 3. 实现步骤 4.尝试训练自己的级联分类器 4. 应用示例 Haar特征和级联分类器目标检测介绍及应用 H ...

  2. Adaboost 人脸检测:Haar特征及积分图、分类器的级联

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 人脸识别功能实现的原理介绍与算法介绍 人脸识别:人脸数据集 A ...

  3. OpenCV中基于Haar特征和级联分类器的人脸检测

    使用机器学习的方法进行人脸检测的第一步需要训练人脸分类器,这是一个耗时耗力的过程,需要收集大量的正负样本,并且样本质量的好坏对结果影响巨大,如果样本没有处理好,再优秀的机器学习分类算法都是零. 今年3 ...

  4. OpenCV中基于Haar特征和级联分类器的人脸检测(三)

    使用机器学习的方法进行人脸检测的第一步需要训练人脸分类器,这是一个耗时耗力的过程,需要收集大量的正负样本,并且样本质量的好坏对结果影响巨大,如果样本没有处理好,再优秀的机器学习分类算法都是零. 今年3 ...

  5. 分类器是如何做检测的?——CascadeClassifier中的detectMultiScale函数解读

    原地址:http://blog.csdn.net/delltdk/article/details/9186875 在进入detectMultiScal函数之前,首先需要对CascadeClassifi ...

  6. 分类器是如何做检测的?(1)——CascadeClassifier中的detectMultiScale函数解读

    在进入detectMultiScal函数之前,首先需要对CascadeClassifier做初始化. 1.     初始化--read函数 CascadeClassifier的初始化很简单: cv:: ...

  7. 同r做一个窗口_目标检测(Object Detection):R-CNN/SPPnet/R-FCN/Yolo/SSD

    这篇文章我是Survey目标检测(Object Detection)系列论文的一个总结. 包括R-CNN系列.SPP-net.R-FCN.YOLO系列.SSD.DenseBox等. 基本概念 目标识别 ...

  8. 人脸检测:经典的VJ人脸检测器(类Harr特征,积分图加速法,级联的Adaboost强分类器)

    著名的VJ人脸检测算法就是一种基于Adaboost分类器的方法.该检测器由Paul Viola和Michael Jones在2001年的 Robust Real-Time Face Detection ...

  9. 照片美妆---基于Haar特征的Adaboost级联人脸检测分类器

    本文转载自张雨石http://blog.csdn.net/stdcoutzyx/article/details/34842233 基于Haar特征的Adaboost级联人脸检测分类器 基于Haar特征 ...

最新文章

  1. JQuery用户名无刷新验证
  2. VS cmake 远程开发 opencv报错:CMake was unable to find a build program corresponding to “Ninja“.(换个构建方式)
  3. go chan 缓存与阻塞
  4. [精品]CSAPP Bomb Lab 解题报告(一)
  5. S3C6410 裸机硬件JPEG解码(转)
  6. 深度学习之双线性插值(Bilinear interpolation)
  7. SpringMVC整合Redis2.9.0
  8. ListView的两种使用方法--Android学习笔记
  9. 圣诞限定快乐,送3本技术好书
  10. 相信大家看了这篇文章对Oracle如何工作有一个形象的了解!
  11. SQL Server-【知识与实战VII】存储过程(下)
  12. 网吧会员管理系统c语言,常用的网吧会员管理系统哪个比较好|纳客软件
  13. 使用Python批量抓取单词发音
  14. PS——图层的混合模式及图层蒙版
  15. Android 应用商店评分+APP分享
  16. 【慕课笔记】第一章 JAVA初体验 第3节 使用记事本编写JAVA程序
  17. 王者荣耀赛季更新服务器维护到什么时候,王者荣耀s9维护到几点 王者荣耀s10赛季上线时间一览...
  18. 计算机网络有哪些分类方式,计算机网络有哪些分类?
  19. 一起来学linux:磁盘与文件系统:
  20. python中tmp是什么函数_Python os.tmpfile()方法

热门文章

  1. 详解 Spring 3.0 基于 Annotation 的依赖注入实现--转载
  2. 基于R的信用评分卡模型解析
  3. on条件与where条件的区别
  4. 凭什么还能独吞iPhone 8的“芯”?
  5. 解读思科2014-19年全球移动互联网发展趋势报告(1)
  6. 比较简单的c语言编辑器,大佬们,小菜鸟想问一问用vc编译器做简易画图软件
  7. Linux makefile中的= := ?=操作符
  8. Algorithms_二叉树二分搜索树初探
  9. MySQL-主从架构探索
  10. Spring-AOP @AspectJ进阶之绑定抛出的异常