opencv - HAAR 分类器说明

标签 opencv image-processing haar-classifier

我想了解 haar 分类器的工作原理。我在这里阅读 opencv 文档:http://docs.opencv.org/modules/objdetect/doc/cascade_classification.html看起来你基本上训练了一组数据以获得类似模板的东西。然后将模板放在要检查的实际图像上,检查每个像素,看看它是否可能是您要查找的内容。所以,假设这是对的,我开始看下面的照片,但我不明白。这些 block 是否应该代表“可能”和“不太可能”的区域?提前致谢

enter image description here

最佳答案

这些模式是为您的训练图像评估的特征。例如,对于特征 1a,训练过程会在所有训练图像中找到方形区域,其中左半部分通常比右半部分更亮(反之亦然)。对于特征 3a,训练找到中心比周围暗的正方形区域。

你描述的这些特殊特征被选择用于 haar 级联并不是因为它们是特别好的特征,而主要是因为它们是 extremely fast to evaluate .

更具体地说,haar 级联的训练找到了一个最有助于区分正面和负面训练图像的特征(粗略地说,这个特征对正面图像最正确,对负面图像最经常错误) .该功能将是生成的 haar 级联的第一阶段。第二好的特征将是第二阶段,依此类推。

训练后,haar 级联由一系列规则或阶段组成,如下所示:

  • 评估区域 (x1;y1)-(x2;y2) 的特征 1a。结果是否大于阈值z1?
    (意思是:该区域的左半部分是否比右半部分亮一定量?)
    • 如果是,返回'不匹配'
    • 如果否,执行下一阶段

在经典的 haar 级联中,每个这样的规则仅涉及具有单个阈值的单个位置的单个特征,代表级联的一个阶段OpenCV 实际上使用了一个boosted 级联,这意味着每个阶段都包含几个这些简单特征的组合。

原则仍然是:每个阶段 都是一个非常弱的分类器,其本身仅比胡乱猜测强一点点。选择每个阶段的阈值,使漏报的可能性非常低(因此一个阶段几乎永远不会错误地拒绝一个好的匹配,但会经常错误地接受一个坏的匹配)。

执行haar cascade时,所有阶段按顺序执行;只有通过第一和第二和第三...阶段的图片才会被接受。

训练期间,第一阶段也首先被训练。然后第二阶段仅使用将通过第一阶段的训练图像进行训练,依此类推。

关于opencv - HAAR 分类器说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25579225/

相关文章:

python - SURF 未绑定(bind)在 opencv-python 中?

ruby-on-rails - Ruby/Rails 图像处理库

matlab - Open-CV Haar教练应用程序

opencv - opencv上使用 'find'命令生成采集文件报错

opencv - 将 4 channel 图像转换为 3 channel 图像

opencv - 读取PNG文件时opencv和skimage的区别

python - 在 QLabel 中显示相机流

c# - 在.NET中读取佳能CR2原始图像文件

image-processing - 在空白的扫描申请表中查找数据输入点

c++ - Opencv-如何在Haar分类器串级中计算到摄像机的移动物体距离和速度?