OpenCV之HOG的相关函数

【原文:http://blog.csdn.net/antter0510/article/details/20565045

趁热打铁对opencv的源代码进行分析,这里仅在代码实现的角度进行分析,至于HOG的实现原理神马的就不在赘述了。

一般调用过程:初始化一个HOGDescriptor(各种参数及svmDetector系数),读入单幅图像,调用detector方法,得到行人可能存在矩阵集合hits。

在调用detect函数的内部:初始化实例化一个HOGCache(完成单幅图像的梯度幅度图及梯度方向图的计算,对blockData,pixData进行初始化工作);对指定扫描窗口或遍历所有扫描窗口(取决于locations是否为空)计算扫描窗口对应特征向量;将计算得到的特征向量与svmVec作乘累加;利用阈值对结果进行判定,如果超过阈值,则说明当前窗口内含有行人,将该扫描窗口的相关信息进行保留;继续计算下一个扫描窗口,直到结束。

关键函数:

HOGDescriptor:computeGradient,compute,detect,detectMultiScale;

HOGCache:init,getBlock;

HOGInvoker:operator


HOGDescriptor :: computeGradient():完成梯度幅度值及梯度方向值的计算。利用mapBuf计算扩展图像与原始图像位置映射关系(利用borderInterpolate函数);

创建连续内存空间_dbuf,完成对dx,dy,mag,angle的存放;利用angleScale系数将[0,2pi]划分为18个单元,之后取整并利用hidx -= nbins操作,将其归拢到九个单元中

HOGCache :: init():完成对HOGCache的初始化工作,包括对梯度幅值、方向值的计算,对blockData及pixData的计算过程。

通过调用computeGradient函数完成幅值方向值的计算;

//blockData中的内容是在单个滑动窗口内所有block的相对位置,及对应特征向量的相对位置。

//pixData中包含单个block中所有像素的信息,具体内容包括:当前像素距离所属block起点的grad距离、qangle距离;当前像素产生影响的cell的直方图相对偏移量(相对于block特征向量起点)及其影响因子;当前像素的在block中的权重(由位置决定)。

计算blockData及pixData的作用,利用blockData可以在一次滑动窗口的特征向量的计算过程中能够通过查询blockData直接定位每一个block在原始img中的位置(与当前滑动窗口位置相加),及对应产生特征向量的位置(同样进行加操作);利用pixData在计算单个block的特征向量是直接遍历所有像素点,对对应特征向量进行赋值,不需要再有额外的操作。(如若不然,没有清晰的分析)

HOGCache :: getBlock():完成指定block特征向量的快速计算。利用blockData、pixData数据。其中pixData的存储方式是连续的内存单元[...C1...C2...C4],所以可以经由变量k依次读取,完成对一个block中所有像素的遍历过程,通过C1、C2、C4界定不同影响力的像素,并完成相应的计算过程。

HOGDescriptor :: compute():完成对整幅图像中所有扫描窗口,或指定扫描窗口的特征向量的计算。首先初始化HOGCache,之后遍历所有扫描窗口,在每个扫描窗口内遍历所有block并通过调用getBlock函数进行特征向量的快速计算。

HOGDescriptor :: detect():过程与compute()基本类似,不同在于,在计算扫描窗口特征向量过程中利用svmVec进行计算,并最终判定当前扫描窗口内是否含有行人

HOGDescriptor :: detecMultiScale():这里的多尺度指的是将原始图像缩小不同的比例,保持扫描窗口大小不变。

这里的多尺度的处理过程使用了并行计算,parallel_for函数。在循环体内对原始图像进行不同比例的缩小,之后进行detec操作,再根据比例反推检测到的矩形在原始img中的信息,保存信息。结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值