我试图了解 haar 分类器是如何工作的。我在这里阅读opencv文档:http: //docs.opencv.org/modules/objdetect/doc/cascade_classification.html,看起来你基本上训练了一组数据来获得类似模板的东西。然后将模板放在要检查的实际图像上,然后检查每个像素以查看它是否可能是您要查找的内容。所以,假设这是正确的,我站起来看下面的照片,我不明白。这些块是否应该代表“可能”和“不太可能”的区域?提前致谢
1 回答
这些模式是为您的训练图像评估的特征。例如,对于特征 1a,训练过程会在所有训练图像中找到正方形区域,其中左半边通常比右半边亮(反之亦然)。对于特征 3a,训练会找到中心比周围更暗的方形区域。
您描述的这些特定特征被选择用于 haar 级联不是因为它们是特别好的特征,而是主要是因为它们的评估速度非常快。
更具体地说,haar 级联的训练会找到最有助于区分正面和负面训练图像的一个特征(大致上,该特征对于正面图像最常见,而对于负面图像最常见错误)。该功能将是由此产生的 haar 级联的第一阶段。第二好的功能将是第二阶段,依此类推。
训练后,haar 级联由一系列规则或阶段组成,如下所示:
- 评估区域 (x1;y1)-(x2;y2) 的特征 1a。结果是否大于阈值 z1?
(意思是:该区域的左半部分是否比右半部分亮一定量?)
- 如果是,则返回“不匹配”
- 如果否,执行下一阶段
在经典的 haar 级联中,每个这样的规则,仅涉及具有单个阈值的单个位置的单个特征,代表级联的一个阶段。OpenCV 实际上使用了增强的级联,这意味着每个阶段都由这些简单特征中的几个组合而成。
原则仍然存在:每个阶段都是一个非常弱的分类器,其本身仅比疯狂猜测好一点。选择每个阶段的阈值以使假阴性的机会非常低(因此一个阶段几乎不会错误地拒绝一个好的匹配,但会经常错误地接受一个坏的匹配)。
执行haar级联时,所有stage按顺序执行;只有通过第一、第二和第三阶段的图片才会被接受。
在训练期间,第一阶段也被首先训练。然后仅使用将通过第一阶段的训练图像训练第二阶段,依此类推。