您现在的位置是:首页 >学无止境 >CVPR目标检测经典作:HOG特征网站首页学无止境

CVPR目标检测经典作:HOG特征

深度之眼 2024-06-17 10:26:08
简介CVPR目标检测经典作:HOG特征

来源:投稿 作者:小灰灰
编辑:学姐

HOG特征

HOG特征( Histogram of Oriented Gradients 方向梯度直方图)是一种在图像上找到特征描述子,主要通过计算和统计图像局部区域的梯度方向直方图来构成特征。来源于cvpr2015 年论文。

算法流程

1、进行图像预处理

2、计算梯度

1. 图像预处理

1.1 图像灰度化,gamma矫正

我们先读入彩色图像,然后转换成灰度图像,采用gamma校正对输入的图像进行颜色空间的归一化,主要作用是调节图像的对比度,可以降低局部的阴影和光照变换的影响,可以抑制噪音。

图片one.png,是一个64*64的图片。

import cv2
import numpy as np

img = cv2.imread("one.png", 0) # 其中参数0表示以灰度图进行读取;
img1 = np.power(img/float(np.max(img)), 1/1.5)
img2 = np.power(img/float(np.max(img)), 1.5)
cv2.imshow('src', img)
cv2.imshow('gamma=1/1.5', img1)
cv2.imshow('gamma=1.5', img2)
cv2.waitKey()

这是原始图片,灰度图片,不同比例的gamma校正之后的图片。

其中我们将一张灰度图片表示以下的矩阵

np.max(img)=203,img/float(np.max(img))是以下结果。

那么什么是gamma校正?

就是将归一化之后的像素值,也就是将0.15763547 的1/1.5,1.5次方,例如0.15763547的1/1.5 次方就等于0.29181165,依次可以计算得出以下值。

2. 计算梯度图

我们需要计算图像的水平和垂直方向的梯度,以刚开始图片为主。

我们以下面像素为例,计算图像的梯度。

计算中心点0.078431375的梯度大小,其中0.078431375(A)的坐标点为(x,y):

水平梯度计算公式是:

垂直梯度计算公式:

那么梯度幅度计算公式:

梯度方向计算公式:

根据上面的计算,我们可以调用sobel算子,进行计算。

import cv2
import numpy as np
im = cv2.imread("one.png", 0)     # 其中,0表示将图片以灰度读出来。
img = np.float32(im) / 255.0      # 归一化
gx = cv2.Sobel(img, cv2.CV_32F, 1, 0, ksize=3)
gy = cv2.Sobel(img, cv2.CV_32F, 0, 1, ksize=3)

# 计算梯度幅度和方向
mag, angle = cv2.cartToPolar(gx, gy, angleInDegrees=True)
cv2.imshow('src', img)
cv2.imshow("absolute x-gradient",gx)
cv2.imshow("absolute y-gradient",gy)
cv2.imshow("gradient magnitude",mag)
cv2.imshow("gradient direction",angle)

可以看到下图,分别是gx,gy的图像显示,以及幅度和方向的可视化。

这是其中的计算得出的结果。

上面是整个的HOG特征的计算公式,但是因为是整张图片计算的,计算量大,等等一些缺点,所以我们可以选用8x8,4x4的小的cell可以用于计算HOG特征。

这里以16x16作为例子进行展示;

原图是64*64,其中pixels_per_cell=(16, 16),是用来设置cell的大小。

image = cv2.imread('one.png', 0)        # 读取图片,有0的话表示转变为灰度图;
image = np.float32(image) / 255.0       # 归一化
fd, hog_image = hog(image,
                    orientations=8,
                    pixels_per_cell=(16, 16),
                    cells_per_block=(1, 1),
                    visualize=True,
                    multichannel=False) # multichannel=True是针对3通道彩色;

关注下方《学姐带你玩AI》???

回复“CVPR”获取更多经典+前沿必读论文

码字不易,欢迎大家点赞评论收藏!

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。