第14节:传统图像特征提取 - 形状特征(HOG、SIFT与SURF)
一、引言
在计算机视觉领域,图像特征提取是许多高级任务(如目标检测、图像识别、三维重建等)的基础环节。
形状特征作为图像特征的重要组成部分,能够有效描述物体的轮廓、边缘和结构信息,具有旋转、尺度、光照变化等鲁棒性。
本文将详细介绍三种经典的形状特征提取方法:方向梯度直方图(HOG)、尺度不变特征变换(SIFT)和加速稳健特征(SURF),分析它们的原理、实现步骤、优缺点及应用场景。
二、方向梯度直方图(HOG)
2.1 HOG特征概述
方向梯度直方图(Histogram of Oriented Gradients, HOG)是由Navneet Dalal和Bill Triggs于2005年提出的一种用于行人检测的特征描述子。HOG特征通过计算和统计图像局部区域的梯度方向直方图来构成特征,能够很好地描述图像的局部形状信息。
2.2 HOG特征提取原理
HOG特征的核心思想是:图像中局部物体的外观和形状能够通过梯度或边缘方向的分布很好地描述。具体实现步骤如下:
-
图像预处理:
-
通常将图像转换为灰度图
-
进行伽马校正(可选),减少光照影响
# 示例:伽马校正 import cv2 import numpy as npdef gamma_correction(img, gamma=1.0):inv_gamma = 1.0 / gammatable = np.array([((i / 255.0) ** inv_gamma) * 255for i in np.arange(0, 256)]).astype("uint8")return cv2.LUT(img, table)
-
-
计算梯度:
-
使用简单的梯度算子(如[-1,0,1])计算水平和垂直方向梯度
-
计算每个像素的梯度幅值和方向
# 计算梯度 gx = cv2.Sobel(img, cv2.CV_32F, 1, 0, ksize=1) gy = cv2.Sobel(img, cv2.CV_32F, 0, 1, ksize=1)# 计算幅值和方向 mag, angle = cv2.cartToPolar(gx, gy, angleInDegrees=True)
-
-
空间分块(Block)和细胞单元(Cell)划分:
-
将图像划分为小的空间区域(称为细胞单元,如8×8像素)
-
将多个细胞单元组成一个块(Block,如2×2个细胞单元)
-
-
计算细胞单元的梯度方向直方图:
-
将360度(或180度)的方向范围划分为若干个bins(通常9个)
-
根据像素梯度方向将幅值加权投影到各个bin中
-
-
块内归一化:
-
对块内所有细胞单元的直方图进行归一化,提高光照不变性
-
常用归一化方法:L2-Hys、L1-sqrt等
-
-
组合所有块的HOG特征:
-
将所有块的归一化直方图串联起来形成最终的HOG特征向量
-
2.3 HOG特征参数选择
-
细胞单元大小:通常8×8像素
-
块大小:通常2×2或3×3个细胞单元
-
块滑动步长:通常为细胞单元大小的一半(重叠块)
-
方向bins数:通常9个(0-180度)或18个(0-360度)
-
归一化方法:L2-Hys、L1-sqrt、L1-norm等
2.4 HOG特征优缺点
优点:
-
对几何和光学形变保持一定不变性
-
通过局部梯度描述,对局部形状表征能力强
-
特别适合刚性物体的形状描述(如行人)
缺点:
-
计算复杂度较高
-
对非刚性物体形变敏感
-
需要固定大小的输入图像
三、尺度不变特征变换(SIFT)
3.1 SIFT特征概述
尺度不变特征变换(Scale-Invariant Feature Transform, SIFT)由David Lowe于1999年提出,2004年完善。SIFT特征具有尺度、旋转、光照不变性,对视角变化、仿射变换、噪声也保持一定稳定性。
3.2 SIFT特征提取步骤
-
尺度空间极值检测:
-
构建高斯金字塔:通过不同σ的高斯核卷积图像,形成多组(octave)多层(scale)图像
-
构建高斯差分金字塔(DoG):相邻尺度高斯图像相减
-
检测DoG空间局部极值点(与同尺度和相邻尺度的26个邻域点比较)
# OpenCV中的SIFT检测 sift = cv2.SIFT_create() keypoints = sift.detect(img, None)
-
-
关键点定位:
-
通过三维二次函数拟合精确定位关键点位置和尺度
-
去除低对比度和边缘响应点(基于Hessian矩阵)
-
-
方向分配:
-
在关键点邻域计算梯度幅值和方向
-
生成梯度方向直方图(36 bins,每10度一个bin)
-
取直方图峰值作为主方向,大于80%峰值的作为辅方向
-
-
关键点描述符生成:
-
将关键点邻域旋转至主方向
-
将16×16邻域划分为4×4子区域
-
对每个子区域计算8方向梯度直方图(共4×4×8=128维向量)
-
归一化描述符增强光照不变性
-
3.3 SIFT特征匹配
SIFT特征通常通过最近邻距离比(NNDR)进行匹配:
-
对于特征A,在另一幅图像中寻找最近邻特征B和次近邻特征C
-
如果d(A,B)/d(A,C) < 阈值(通常0.7-0.8),则认为A和B匹配
# SIFT特征匹配示例
sift = cv2.SIFT_create()
kp1, des1 = sift.detectAndCompute(img1, None)
kp2, des2 = sift.detectAndCompute(img2, None)bf = cv2.BFMatcher()
matches = bf.knnMatch(des1, des2, k=2)good = []
for m,n in matches:if m.distance < 0.75*n.distance:good.append([m])
3.4 SIFT特征优缺点
优点:
-
尺度、旋转、光照不变性
-
对视角变化、仿射变换、噪声具有鲁棒性
-
特征独特性强,匹配准确率高
缺点:
-
计算复杂度高,实时性差
-
对非刚性物体和严重遮挡情况效果不佳
-
专利限制(2020年3月已过期)
四、加速稳健特征(SURF)
4.1 SURF特征概述
加速稳健特征(Speeded Up Robust Features, SURF)由Herbert Bay等人于2006年提出,是对SIFT的改进,在保持相似性能的同时显著提高了运算速度。
4.2 SURF特征提取原理
-
积分图像:
-
SURF使用积分图像加速卷积运算
-
积分图像中任意一点的值为原图像左上角到该点的像素和
-
-
尺度空间构建:
-
使用盒式滤波器近似LoG(Laplacian of Gaussian)检测斑点特征
-
通过增大滤波器尺寸而非下采样图像构建尺度空间
-
-
关键点检测:
-
在尺度空间中检测Hessian矩阵行列式的极值点
-
通过非极大值抑制确定最终关键点
# OpenCV中的SURF检测 surf = cv2.xfeatures2d.SURF_create(hessianThreshold=400) keypoints, descriptors = surf.detectAndCompute(img, None)
-
-
方向分配:
-
统计关键点邻域内Haar小波响应的主方向
-
使用滑动扇形窗口(60度)统计向量和
-
-
描述符生成:
-
将关键点邻域旋转至主方向
-
划分为4×4子区域
-
对每个子区域计算Haar小波响应(dx, |dx|, dy, |dy|)
-
形成64维(或128维)描述向量
-
4.3 SURF与SIFT的比较
特性 | SIFT | SURF |
---|---|---|
尺度空间构建 | 高斯金字塔+下采样 | 盒式滤波器+增大尺寸 |
关键点检测 | DoG极值 | Hessian矩阵行列式 |
方向分配 | 梯度直方图 | Haar小波响应统计 |
描述符 | 梯度方向直方图 | Haar小波响应统计 |
计算速度 | 较慢 | 较快(约快3倍) |
专利状态 | 已过期 | 部分版本仍受专利保护 |
4.4 SURF特征优缺点
优点:
-
计算速度比SIFT快数倍
-
对光照、旋转、尺度变化具有鲁棒性
-
使用积分图像加速运算
缺点:
-
对模糊和视角变化的鲁棒性略逊于SIFT
-
高版本OpenCV中因专利问题需单独编译
4.5 SURF特征应用
-
实时物体识别
-
增强现实
-
图像配准
-
视频分析
五、三种特征的比较与选择
5.1 性能比较
特征 | 计算效率 | 尺度不变性 | 旋转不变性 | 光照不变性 | 独特性 |
---|---|---|---|---|---|
HOG | 中 | 弱 | 中 | 中 | 弱 |
SIFT | 低 | 强 | 强 | 强 | 强 |
SURF | 高 | 强 | 强 | 强 | 强 |
5.2 应用场景选择
-
HOG:适合固定大小物体的形状描述(如行人检测)
-
SIFT:需要高精度匹配的场景(如图像拼接)
-
SURF:需要兼顾速度和精度的场景(如实时目标跟踪)
5.3 与传统角点特征的比较
与Harris、FAST等角点特征相比,HOG/SIFT/SURF:
-
不仅包含位置信息,还有丰富的局部形状描述
-
对尺度、旋转等变化具有更好不变性
-
特征维度更高,描述能力更强
六、总结与展望
HOG、SIFT和SURF作为传统图像形状特征提取的代表方法,在计算机视觉发展史上发挥了重要作用。
尽管深度学习特征在许多任务上取得了更好的性能,但这些传统方法因其理论清晰、可解释性强、无需大量训练数据等优势,仍在特定场景下有应用价值。未来发展方向可能包括:
-
与传统深度学习方法的融合
-
在资源受限设备上的优化应用
-
与三维视觉任务的结合
-
在特定领域(如医学图像)的针对性改进
理解这些传统形状特征的工作原理和特性,不仅有助于解决实际问题,也为学习和研究更先进的视觉算法奠定了坚实基础。