opencv特征检测 HOG特征算法

1 HOG特征简介

Hog 算法的工作原理是创建图像中梯度方向分布的柱状图,然后以一种非常特殊的方式对其进行归一化。这种特殊的归一化使得Hog 能够有效地检测物体的边缘,即使在对比度很低的情况下也是如此。这些标准化的柱状图被放在一个特征向量(称为 HOG 描述符)中,可以用来训练机器学习算法,例如支持向量机(SVM),以根据图像中的边界(边)检测对象。由于它的巨大成功和可靠性,HOG 已成为计算机视觉中应用最广泛的目标检测算法之一。

特征描述符是图像或图像补丁的表示形式,它通过提取有用信息并丢弃无关信息来简化图像。

  • 通常,特征描述符将大小W x H x 3(通道)的图像转换为长度为n的特征向量/数组。对于 HOG 特征描述符,输入图像的大小为 64 x 128 x 3,输出特征向量的长度为 3780。
  • 在HOG特征描述符中,梯度方向的分布(直方图)被用作特征。图像的渐变(x和y导数)很有用,因为边缘和角落(强度突然变化的区域)周围的梯度大小很大,我们知道边缘和角落比平面区域包含更多关于物体形状的信息。
  • HOG(Histogram of Oriented Gridients的简写)特征检测算法,最早是由法国研究员Dalal等在CVPR-2005上提出来的,一种解决人体目标检测的图像描述子,是一种用于表征图像局部梯度方向和梯度强度分布特性的描述符。其主要思想是:在边缘具体位置未知的情况下,边缘方向的分布也可以很好的表示行人目标的外形轮廓。

2 HOG算法实现

2.1 实现流程

HOG特征提取的大致流程

本文将通过hog特征来识别人像

通过HOG特征提取+SVM训练,可以得到很好的效果

2.2 实现代码

import cv2 as cv

# 主程序入口
if __name__ == '__main__':
    # 读取图像
    src = cv.imread("people.png")
    cv.imshow("input", src)
    # HOG + SVM
    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()

实现结果如下:

原图

结果

猜你喜欢

转载自blog.csdn.net/apple_52030329/article/details/131325512
今日推荐