1、HOG: HOG(Histogram of Oriented Gradient),即方向梯度直方图,是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。其依据是所检测的局部物体外形能被光强梯度和边缘方向的分布所描述,本质就是梯度的统计信息,而梯度总是存在于图像的边缘(边缘是由图像中亮度变化明显的点组成的)
2、流程:
3、步骤:
3.1 灰度化图像。对HOG特征提取来说第一步是对输入的彩色图像转换为灰度图像。
RGB->Gray
Gray = (R+G+B)/3
3.2、计算图像梯度
计算图像的X方向梯度dx与Y方向梯度dy,根据梯度计算mag与角度,计算梯度时候可以先高斯模糊一下(可选步骤),然后使用sobel或者其它一阶导数算子计算梯度值dx、dy、mag、angle:
3.3、Cell分割与Block
对于图像来说,分成8x8像素块,每个块称为一个Cell,每个2x2大小的Cell称为一个Block,每个Cell根据角度与权重建立直方图,每20度为一个BIN,每个Cell得到9个值、每个Block得到36个值(4x9), 图像如下:
3.4、生成描述子
对于窗口64x128范围大小的像素块,可以得到8x16个Cell, 使用Block在窗口移动,得到输出的向量总数为7x15x36=3780特征向量,每次Block移动步长是八个像素单位,一个Cell大小
python 实现检测:
import cv2 as cv if __name__ == '__main__': src = cv.imread("pedestrian.png") cv.imshow("input", src) hog = cv.HOGDescriptor() hog.setSVMDetector(cv.HOGDescriptor_getDefaultPeopleDetector()) # Detect people in the image (rects, weights) = hog.detectMultiScale(src, winStride=(4, 4), padding=(8, 8), scale=1.25, useMeanshiftGrouping=False) for (x, y, w, h) in rects: cv.rectangle(src, (x, y), (x + w, y + h), (0, 255, 0), 2) cv.imshow("hog-detector", src) cv.waitKey(0) cv.destroyAllWindows()