关于HOG的认识基本是参考Dalal的Histograms of Oriented Gradients for Human Detection这篇论文得来的,并且参照了网上的静止图像上的HOG行人检测代码改成了基础的视频上的行人检测。

HOG特征提取的基本思想:

局部目标的外表和形状可以被局部梯度或边缘方向的分布很好的描述,即使我们不知道对应的梯度和边缘的位置。

数据集:INRIA

我自己也下载了INRIA数据集然后进行简单的训练,样本集数较少时正确率简直惨不忍睹,后来加入难例后正确率稍好一点,但是在后来进行视频中的行人检测还是果断下载了网上的别人已经训练好的xml文件进行检测,在不出现遮挡的情况下正确率还是相当可观的。

HOG的流程:

 

hog行人检测Python 基于hog特征的行人检测_hog行人检测Python

(1)个人认为第一步灰度化是不必要的,灰度化反而会降低检测的性能,我用我自己训练的结果进行检测时相当明显。

(2)计算梯度时选择最简单的(-1,0,1)算子,不必进行平滑。

(3)对细胞单元和分块的操作OpenCV已经有函数可以进行操作。

(4)然后使用分类器进行分类,画出矩形,如果矩形出现重合则取外面的矩形并再画出时适当缩小

我自己加上的视频中的行人检测则是最简单的将视频分为视频帧,对每一帧进行行人的检测,并存下当前行人数量到帧上显示,则得到了标出行人位置和行人数量的每一帧,然后将帧序列存入新视频中,可以实现最简单的视频行人检测。个人认为可以结合运动目标检测和HOG达到更好的行人检测效果。

下面给出我的检测结果图两张:

hog行人检测Python 基于hog特征的行人检测_行人检测_02

hog行人检测Python 基于hog特征的行人检测_hog行人检测Python_03

可以明显看到在遮挡情况下的行人检测效果,但是如果没有出现遮挡还是可以接受的。