OpenCV中未记录的groupRectangles变体

5
在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参数。第三个变量甚至都没有提到。
请问有人可以解释weightsrejectLevelslevelWeights的含义吗?
1个回答

4

我阅读了 groupRectangles 的源代码并在一定程度上理解了这些参数的含义。

groupRectangles 定义在 cascadedetect.cpp 中,被 OpenCV 中的 traincascade 项目使用。该项目使用 viola-jones 的级联 adaboost 框架来检测对象,因此它有几个级联阶段,每个阶段都是一个强分类器。级联分类器默认只在输入样本通过每个阶段时输出正结果,但您也可以将其设置为输出样本被拒绝的阶段索引,以便绘制 ROC 曲线。

因此,rejectLevels 表示矩形被拒绝的阶段索引。根据源代码,weight 的效果与 rejectLevels 相同。

以上两个参数可能对我们不太实用,但 levelWeights 有时很有用。它最初是被该阶段拒绝的矩形得分(无论其来源在哪里),但我们可以将其用于更一般的目的。如果每个矩形都有得分(无论其来自何处),并且我们想要获取分组矩形的得分,则文档化的 groupRectangles 变体不能帮助我们。我们必须使用第三个参数,将 rejectLevels 设置为零:

vector<int> levels(wins.size(), 0);
groupRectangles(wins, levels, scores, groupThreshold, eps);

scores是指wins的分数。它们具有相同的大小。


太棒了!你能解释一下参数“eps”的含义吗?谢谢。 - BonderWu
@BonderWu,参数“eps”的解释可以在官方文档中找到。 - whenov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接