detectMultiScale中的参数scaleFactor如何影响人脸检测?

时间:2013-04-02 23:17:51

标签: opencv

我正在尝试从http://docs.opencv.org/2.4.4-beta/doc/tutorials/introduction/desktop_java/java_dev_intro.html

稍微改变一下这个例子
    CascadeClassifier faceDetector = new CascadeClassifier("/haarcascade_frontalface_default.xml");
    Mat image = Highgui.imread(originalFile.getAbsolutePath());
    MatOfRect faceDetections = new MatOfRect();
    double w = ((double)originalCrop.getWidth());
    double h = ((double)originalCrop.getHeight());
    faceDetector.detectMultiScale(image, faceDetections, 3, 1, 
                   Objdetect.CASCADE_DO_CANNY_PRUNING , new Size(w/16, h/16), new Size(w/2, h/2));

来自API:scaleFactor - 指定在每个图像比例下图像尺寸减少多少的参数。

更改scaleFactor会更改检测到的内容。例如,对于以下图像: http://graphics8.nytimes.com/images/2013/04/02/world/MOSCOW/MOSCOW-articleLarge-v2.jpg

scaleFactor of 3 - >没有检测到戈尔巴乔夫的脸 scaleFactor of 2 - >戈尔巴乔夫的脸部被检测到两次(一个较大的矩形包含较小的一个)
scaleFactor为1.01 --->戈尔巴乔夫的脸被检测到一次

这究竟是如何运作的?

1 个答案:

答案 0 :(得分:3)

opencv forum处回答:

  

基本上,比例因子用于创建比例金字塔。更多   可以找到here的解释。简而言之。你的模型有一个固定的   训练期间定义的大小。这意味着这个脸的大小是   在图像中检测到是否发生。但是,通过重新调整输入   图像,您可以调整较大的脸朝向较小的脸,然后制作它   可检测到算法。使用一小步调整大小   例子1.05意味着你减小了5%的尺寸,你增加了   找到与检测模型匹配大小的机会。