HoG特征

本文介绍了图像处理中的关键步骤,包括梯度计算、细胞和区块划分、梯度直方图统计、向量归一化以及特征向量整合,用于生成最终的特征表示。这种方法对于减弱光照影响和图像识别至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

① 梯度计算

Gh(x, y)=f(x+1, y) - f(x-1, y)

Gv(x, y) = f(x, y+1) - f(x, y-1)

梯度强度的计算:M(x,y)=sqrt(Gh(x,y)^2 + Gv(x,y)^2)

梯度方向的计算:arctan(Gh(x,y)/Gv(x,y))

经过计算,可以得到图像的梯度强度图和梯度方向图

② cell划分

对图像进行cell划分,如每8x8的像素分成一个cell

③ block划分

 

对图像进行block的划分,2x2的cell为一个block,在划分block的时候,有一个cell的overlap,如下图中,黑色的框表示cell,红色的框分别表示第一个block和第二个block:

 

④ 在cell内计算梯度直方图

以方向进行统计,有两个注意点:1)在0~180度内进行统计;2)直方图的bin数量为9,即20度一个bin

直方图统计的值为梯度强度,有一个注意点:在进行统计的时候,有插值处理,比如说,某一个像素值,其梯度方向为10,强度为4。因为统计的bin为[0, 20, 40, 60, ..., 160]。所以,该4的强度累计到bin0,2个强度;累计到bin20,2个强度。

⑤ 向量归一化

在block内,对梯度向量归一化,注意:由于一个block有4个cell,每个cell有一个长度为9的特征向量,因此一共为长度为36的特征向量。归一化的目的是削弱光照的影响。

⑥ 将每个block的特征向量整合起来,得到一个大的特征向量,即为最终的特征向量。

### HOG特征提取算法及其应用 #### 1. HOG特征的概念 方向梯度直方图(Histogram of Oriented Gradients, HOG)是一种用于目标检测的特征描述子。其核心思想是通过计算和统计图像局部区域的梯度方向直方图来构建特征,从而有效地捕捉物体边缘的信息[^3]。 HOG特征的主要特点在于它能够很好地表示对象的形状信息,尤其是在复杂的背景下仍然具有较强的鲁棒性。这种特性使得HOG成为行人检测领域的重要工具之一。 --- #### 2. HOG特征提取的过程 HOG特征提取通常分为以下几个阶段: - **图像分割** 首先将输入图像划分为若干个小的单元格(cell),并进一步组合成更大的区块(block)。每个单元格内的像素会被用来计算梯度方向和大小[^2]。 - **梯度计算** 计算每个像素点的梯度幅值以及对应的梯度方向。这一步可以通过卷积操作完成,常用的滤波器包括 Sobel 滤波器或其他类似的差分算子[^1]。 - **直方图统计** 在每个单元格内,按照预定义的角度范围(通常是 0° 到 180° 或者 0° 到 360°),统计梯度的方向分布情况,并形成一个直方图。该直方图反映了当前区域内主要的纹理结构和边界信息[^4]。 - **归一化处理** 为了减少光照变化的影响,在相邻的一组单元格组成的 block 上执行 L2 范数或者对比度归一化操作。这样可以增强算法对于不同环境条件下的适应能力。 最终得到的结果是一个高维向量形式的特征表达,它可以作为后续机器学习模型(如支持向量机 SVM)的输入数据进行分类任务。 --- #### 3. 实现方法示例 以下是利用 Python 和 OpenCV 库实现简单版本 HOG 提取功能的一个例子: ```python import cv2 from skimage import feature import numpy as np def extract_hog_features(image_path): img = cv2.imread(image_path) gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 使用 scikit-image 的 hog 函数获取特征与可视化的霍夫特征图 fd, hog_image = feature.hog(gray_img, orientations=9, # 定义角度间隔数量 pixels_per_cell=(8, 8), # 单元格尺寸 cells_per_block=(2, 2), # 块大小 visualize=True, channel_axis=None) return fd, hog_image if __name__ == "__main__": image_file = 'example_person.jpg' features, visualization = extract_hog_features(image_file) print(f"HOG Feature Vector Length: {len(features)}") # 显示结果图片 import matplotlib.pyplot as plt plt.imshow(visualization, cmap="gray") plt.show() ``` 上述代码展示了如何加载一张灰阶图像并通过 `skimage.feature.hog` 来生成相应的 HOG 特征向量及可视化效果。 --- #### 4. HOG的应用场景 HOG 特征最经典的用途是在行人检测方面取得突破性的成果。具体来说,法国研究团队 Dalal & Triggs 在 CVPR 2005 中首次提出了基于 HOG-SVM 的框架来进行实时高效的行人识别工作。除此之外,HOG 还被广泛应用到了其他类型的物体检测当中,比如车辆监测、动物追踪等领域。 当结合强大的监督式学习技术——例如线性核的支持向量机(Support Vector Machine),就可以达到非常高的精度水平。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值