基于MATLAB的图像分块与区域HOG特征提取系统
项目介绍
本项目是一个用于图像底层特征提取的专用工具,重点实现了方向梯度直方图(HOG, Histogram of Oriented Gradients)的计算流程。该系统能够对输入图像进行网格化分块,并从每一个细分区域内提取边缘方向和强度的统计规律。通过这种方式,图像的局部纹理特征被转化为具有鲁棒性的数值向量,为后续的物体识别、行人检测及图像匹配任务提供核心支撑。
功能特性
- 多样化输入支持:系统可直接读取指定路径的图像,并在文件缺失时自动生成合成的正弦波背景测试图。
- 自动化预处理:集成了灰度化处理、数据类型转换以及高斯平滑降噪功能,确保梯度计算不受高频噪声干扰。
- 精确的梯度建模:利用Sobel算子实时计算像素级的水平与垂直梯度,并自动将其映射至无偏的正向角度范围。
- 线性插值统计:在构建Cell直方图阶段,采用线性插值算法将梯度幅值分配到相邻的方向区间,显著增强了旋转鲁棒性。
- 局部对比度归一化:通过Block块对Cell进行组合,并应用L2范数归一化算法,有效抵消光照变化对特征的影响。
- 综合可视化:提供包含分块网格、梯度幅值图、局部Cell特征柱状图以及全局主梯度方向场的四合一展示界面。
实现逻辑与流程
- 环境配置与参数定义:
系统首先初始化Cell尺寸、Block尺寸、梯度方向量化等级(Bins)以及步长因子。这些参数决定了最终特征向量的维度和精细程度。
- 图像预处理链:
- 颜色空间转换:对于彩色图像进行灰度化。
- 平滑滤波:应用3x3高斯算子进行图像卷积,利用边缘填充(Replicate)模式处理边界,降低假边缘干扰。
- 图像梯度解析:
- 使用[-1 0 1]梯度算子及其转置,分别获取图像在X和Y轴上的空间导数。
- 根据各点的导数值计算梯度幅值:$Magnitude = sqrt{dx^2 + dy^2}$。
- 计算梯度相位角度,并利用模运算将角度统一映射至 [0, 180] 范围内。
- Cell级特征提取:
- 将图像划分为独立的矩形单元(Cell)。
- 遍历每个Cell内的像素,计算其在该区域所属的9个(或自定义数量)方向Bin的贡献度。
- 核心算法:通过计算像素角度在Bin宽度中的相对位置,根据线性权重将其梯度幅值按比例累加到最近的两个Bin中,避免硬切分带来的边界效应。
- Block级归一化:
- 以Cell为基本单位,通过设定好的Block步长滑动窗口。
- 提取每个Block内(如2x2个Cell)的所有直方图并拼接成高维向量。
- 执行L2-Norm计算:将向量长度缩放到单位范数,同时引入一个极小常数(0.01)以避免除零异常,从而增强对局部阴影和曝光的抗干扰性。
- 结果产出与展示:
- 计算并输出最终HOG特征向量的总维度信息。
- 绘制红色的分块网格线,叠加在原始灰度图上显示分块逻辑。
- 生成伪彩色梯度幅值图。
- 选取图像中心区域的Cell,展示其9方向梯度幅值的累积分布。
- 在网格坐标系中使用矢量箭头(Quiver)描绘出各区域能量最强的主梯度方向。
关键函数与算法细节说明
- 梯度计算:采用离散一阶微分算子,这是HOG算法中最基础且高效的边缘检测方式。
- 方向映射:采用无偏方向(Unsigned Gradients),将 [-180, 180] 的结果折算为 [0, 180],这对捕捉形状边缘而非色彩跳变方向更为有效。
- 线性插值Binning:通过计算
binIdx = ang / binWidth + 0.5,系统能够实现跨Bin的平滑过渡,确保特征分布的连续性。 - 归一化公式:代码严格执行了 $v = v / sqrt{||v||^2 + epsilon^2}$ 的对比度归一化方案,使得系统在不同对比度的图像下能保持稳定的特征表达。
- 可视化算法:利用主方向索引定位每个Cell中权重最大的Bin,并结合极坐标转换将其转化为笛卡尔坐标下的矢量箭头方向。
使用方法
- 启动环境:打开MATLAB开发环境。
- 配置参数:在脚本的“参数设置区”修改
imagePath 为您的目标图像路径,或根据需要调整 cellSize(默认8x8)和 numBins(默认9)。 - 执行系统:运行主程序脚本。
- 查看输出:系统将自动在命令行打印图像分块信息和特征长度,并弹出四联可视化结果窗口。
系统要求
- MATLAB R2016b 或更高版本。
- 建议安装 Image Processing Toolbox(图像处理工具箱)以获得最佳的算子卷积和颜色还原支持。