1、弄清楚scale的过程
double scale = 1.;
int levels = 0;
vector<double> levelScale;
for( levels = 0; levels < nlevels; levels++ )
{
levelScale.push_back(scale);
if( cvRound(img.cols/scale) < winSize.width ||
cvRound(img.rows/scale) < winSize.height ||
scale0 <= 1 )
break;
scale *= scale0;
}
由代码可以看出,hog会根据用户传递进来的scale0这个缩放参数,得到1到多个缩放级别,保存在levelScale这个vector里。计算的原理是:
第一个缩放参数固定等于1,
下一个缩放参数在上一个缩放参数的基础上乘于scale0,
直到原图像的宽或高除于这个最后的缩放参数的值,比扫描窗口小的时候,就停止。
如果用户指定的scale0<=1,就只有一级缩放参数:1,也就是不进行任何缩放,就将原图像进行处理。
从上面的scale的就算过程得到的缩放图片的过程可以由这张图表示:
最底下的就是原图,然后逐层往上缩小。这个图所设定的scale0=2。
我们也可以知道,扫描窗口的大小,最终决定了可以缩小的最小的图片,也就是不能检测到比扫描窗口更小的图片。
训练的时候有一个扫描窗口,测试时也有一个扫描窗口,是否要