在OpenCV中的cascadeDetect.cpp中,有以下几种变体groupRectangles
功能:
void groupRectangles(std::vector<Rect>& rectList, int groupThreshold, double eps);
void groupRectangles(std::vector<Rect>& rectList, std::vector<int>& weights, int groupThreshold, double eps);
void groupRectangles(std::vector<Rect>& rectList, std::vector<int>& rejectLevels, std::vector<double>& levelWeights, int groupThreshold, double eps);
但在OpenCV 文档,仅清楚地记录了第一个变体,提到了第二个变体,但weights
论证没有解释。第三个甚至没有提到。
谁能解释一下的含义weights
, rejectLevels
, and levelWeights
?
我读了groupRectangles
看了源码,在一定程度上理解了这些参数的含义。
groupRectangles
定义在cascadeDetect.cpp中,OpenCV中的traincascade项目使用该文件。该项目使用viola-jones的级联adaboost框架来检测物体,因此它有多个级联阶段,每个阶段都是一个强分类器。默认情况下,级联分类器仅在输入样本通过每个阶段时输出正值,但如果您想绘制 ROC 曲线,您也可以将其设置为输出样本被拒绝的阶段索引。
So rejectLevels
表示矩形被拒绝的阶段索引。根据源码来看,效果是weight
与rejectLevels
.
上面两个参数对于我们来说可能不太实用,但是levelWeights
有时是有用的。它最初是拒绝它的阶段输出的矩形的分数,但我们可以将它用于更通用的目的。如果每个矩形都有一个分数(无论它来自哪里),并且我们想要获得分组矩形的分数,则记录的变体groupRectangles
不会帮助我们。我们必须使用第三个,rejectLevels
设置为零:
vector<int> levels(wins.size(), 0);
groupRectangles(wins, levels, scores, groupThreshold, eps);
其中scores
是分数wins
。它们具有相同的尺寸。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)