今天要完成haar特征的鼻子分类器的不同参数设置,在ARM11上运行的性能测试。最近情绪不稳,可能有不太对的地方,仅供参考吧。
一、opencv 的haar分类器
noses = cvHaarDetectObjects(
pGray,
cascade_n,
noseStorage,
1.5,3, CV_HAAR_DO_CANNY_PRUNING,
cvSize(36,30),
cvSize(48,45)
);
参数说明:
1)、pGray—— 被检图像,注意可能被定义了ROI,也就是检测区域
2)、cascade——haar 分类器级联的内部标识形式 e.g:cascade_n = "haarcascade_mcs_nose.xml"。
3)、noseStorage——用来存储检测到的一序列候选目标矩形框的内存区域,程序中竟然没用。(对具体存多少个,以及怎么存的,待具体调研)
4)、scale_factor——在前后两次相继的扫描中,搜索窗口的比例系数,是个多尺度放缩比例系数,定义这个可以在一定程度上减小因物体与摄像头变换而引起的物体尺度变化,暂且认为是按一个比例系数搜索,再进行下一次搜索。这里定义1.5 即1.5 1.5^2 1.5^3 .........(具体放缩过程待调研)
5)、min_neighbors——构成检测目标的相邻矩形的最小个数(缺省-1)。如果组成检测目标的小矩形的个数和小于 min_neighbors-1 都会被排除。如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框,这种设定值一般用在用户自定义对检测结果的组合程序上。(待调研)
6)、 CV_HAAR_DO_CANNY_PRUNING——操作方式。当前唯一可以定义的操作方式是 CV_HAAR_DO_CANNY_PRUNING。如果被设定,函数利用Canny边缘检测器来排除一些边缘很少或者很多的图像区域,因为这样的区域一般不含被检目标。人脸检测中通过设定阈值使用了这种方法,并因此提高了检测速度。(不同的设置会有较大的检测时间差距)。 7)、min_size 检测窗口的最小尺寸。缺省的情况下被设为分类器训练时采用的样本尺寸(人脸检测中缺省大小是~20×20)。 8)、max_size 检测窗口的最大尺寸。这里设置为只放缩一次,为了节省时间,但尺度上的鲁棒性不行。 9)、nose返回值——CvSeq* noses 存的备选,程序中只取了第一个,如果没检测到会是空的。(具体怎么回事,待调研) 二、测试
首先,检测面积,函数执行速度影响很大,基本是线形关系。当前是250+ms
然后,测试放缩参数:scale_factor,
最后,步长测试。即搜索步长。
1)、用了ihaar,时间缩短了一些220ms左右,出现了180+ms的情况。
2)、调整后效果不行。
分析:里面x轴貌似有一个保护机制,应该把那个保护机制的步长改一下,需要分析haar函数的运行流程。