HOG特征和应用
概述
✔️ HOG(Histogram of Oriented Gradient)特征在对象识别与模式匹配中是一种常见的特征提取算法,是基于本地像素块进行特征直方图提取的一种算法,对象局部的变形与光照影响有很好的稳定性。
HOG应用-行人检测
✔️ 用HOG特征来来识别人像,通过HOG特征提取+SVM训练,可以得到很好的效果,Opencv也集成了HOG进行的行人检测算法。
OpenCV函数
hog = cv2.HOGDescriptor()
:创建HOG特征描述;hog.setSVMDetector(cv.HOGDescriptor_getDefaultPeopleDetector())
:创建HOG+SVM行人检测器;- 多尺度检测API:
rects, weights = hog.detectMultiScale(img, foundLocations,
hitThreshold = 0,
winStride, padding,
scale = 1.05,
finalThreshold = 2.0,
useMeanshiftGrouping = false)
输入
- Img --> 表示输入图像;
- foundLocations --> 表示发现对象矩形框;
- hitThreshold --> 表示SVM距离度量(特征与SVM分类超平面之间距离),默认0表示;
- winStride --> 表示窗口步长;
- padding --> 表示填充;
- scale --> 表示尺度空间;
- finalThreshold --> 最终阈值,默认为2.0;
- useMeanshiftGrouping --> 不建议使用,速度太慢;
PS:其中窗口步长与Scale对结果影响最大,特别是Scale,小的尺度变化有利于检出低分辨率对象,同时也会导致FP发生,高的可以避免FP但是会产生FN(对象漏检)。
行人检测代码示例
import cv2 as cv
src = cv.imread("people.png")
cv.imshow("input", src)
# hog特征描述
hog = cv.HOGDescriptor()
# 创建SVM检测器
hog.setSVMDetector(cv.HOGDescriptor_getDefaultPeopleDetector())
# 检测行人
(rects, weights) = hog.detectMultiScale(src,
winStride=(4, 4),
padding=(8, 8),
scale=1.25,
useMeanshiftGrouping=False)
for (x,