HOG特征

文章目录HOG特征1. 图像预处理1.1 图像灰度化,gamma矫正2. 计算梯度图HOG特征HOG特征( Histogram of Oriented Gradients 方向梯度直方图)是一种在图像上找到特征描述子,主要通过计算和统计图像局部区域的梯度方向直方图来构成特征。来源于cvpr 2015 年论文。算法流程1 进行图像预处理2 计算梯度1. 图像预处理1.1 图像灰度化,gamma矫正我们先读入彩色图像,然后转换成灰度图像,采用gamma校正对输入的图像进行颜色空间的归一化,主要作

HOG特征

HOG特征( Histogram of Oriented Gradients 方向梯度直方图)是一种在图像上找到特征描述子,主要通过计算和统计图像局部区域的梯度方向直方图来构成特征。来源于cvpr 2015 年论文。
算法流程
1 进行图像预处理
2 计算梯度

1. 图像预处理

1.1 图像灰度化,gamma矫正

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

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校正之后的图片。
HOG特征
其中我们将一张灰度图片表示以下的矩阵
HOG特征
np.max(img)=203,img/float(np.max(img))是以下结果。
HOG特征
那么什么是gamma校正?就是将归一化之后的像素值,也就是将0.15763547 的1/1.5,1.5次方,例如0.15763547的1/1.5 次方就等于0.29181165,依次可以计算得出以下值。
HOG特征

2. 计算梯度图

我们需要计算图像的水平和垂直方向的梯度,以刚开始图片为主。
HOG特征
我们以下面像素为例,计算图像的梯度。HOG特征
计算中心点0.078431375的梯度大小,其中0.078431375(A)的坐标点为(x,y):
水平梯度计算公式是:
HOG特征
垂直梯度计算公式:
HOG特征
那么梯度幅度计算公式:
HOG特征
梯度方向计算公式:
HOG特征 梯度方向范围是[0,180].
根据上面的计算,我们可以调用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特征
这是其中的计算得出的结果。
HOG特征
上面是整个的HOG特征的计算公式,但是因为是整张图片计算的,计算量大,等等一些缺点,所以我们可以选用8×8,4×4的小的cell可以用于计算HOG特征。
这里以16×16作为例子进行展示;
HOG特征
原图是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通道彩色;

版权声明:本文为博主xiaoxiao_2446xuxu原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/xiaoxiao_2446xuxu/article/details/122545893

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2022年1月19日 上午12:03
下一篇 2022年1月19日 上午1:27

相关推荐