当前位置: 首页 > news >正文

基于MATLAB的HOG+GLCM特征提取与SVM分类实现

一、核心流程

  1. 数据准备:组织训练集/测试集文件夹结构
  2. 图像预处理:灰度化、归一化、尺寸统一
  3. 特征提取:HOG(梯度方向直方图) + GLCM(灰度共生矩阵)
  4. 特征融合:串联HOG与GLCM特征向量
  5. SVM分类:训练多类分类模型并评估性能

二、MATLAB代码实现

1. 数据预处理与特征提取
%% 参数设置
imgSize = [64,64];      % 统一图像尺寸
cellSize = [8,8];       % HOG单元尺寸
distances = [1];        % GLCM计算距离
angles = [0, pi/4, pi/2, 3*pi/4]; % GLCM方向%% 加载数据集
trainingSet = imageSet('train_data/', 'recursive');
testSet = imageSet('test_data/', 'recursive');%% 特征提取函数
function features = extractFeatures(img)% 灰度化与尺寸调整grayImg = rgb2gray(imresize(img, imgSize));% 提取HOG特征hogFeat = extractHOGFeatures(grayImg, 'CellSize', cellSize);% 提取GLCM特征glcmFeat = [];for i = 1:length(angles)glcm = graycomatrix(grayImg, 'Offset', [0, distances(i)*sin(angles(i)), 0, distances(i)*cos(angles(i))]);glcmFeat = [glcmFeat, graycoprops(glcm, {'Contrast', 'Energy', 'Correlation', 'Homogeneity'})];end% 特征融合features = [hogFeat, glcmFeat];
end%% 构建特征矩阵与标签
trainingFeatures = [];
trainingLabels = [];
testFeatures = [];
testLabels = [];for i = 1:trainingSet.Countimg = read(trainingSet, i);label = trainingSet(i).Description;features = extractFeatures(img);trainingFeatures = [trainingFeatures; features];trainingLabels = [trainingLabels; repmat(label, size(features,1), 1)];
endfor i = 1:testSet.Countimg = read(testSet, i);label = testSet(i).Description;features = extractFeatures(img);testFeatures = [testFeatures; features];testLabels = [testLabels; repmat(label, size(features,1), 1)];
end
2. SVM分类模型训练
%% 数据标准化
scaler = fitcecoc(trainingFeatures, trainingLabels, 'Learners', 'svm', ...'Coding', 'onevsall', 'CrossVal', 'on', 'KFold', 5);%% 模型训练
svmModel = fitcecoc(trainingFeatures, trainingLabels, ...'Learners', templateSVM('KernelFunction', 'rbf', 'BoxConstraint', 10, 'KernelScale', 'auto'));%% 预测与评估
predictedLabels = predict(svmModel, testFeatures);
confMat = confusionmat(testLabels, predictedLabels);
accuracy = sum(diag(confMat))/sum(confMat(:));
disp(['分类准确率: ', num2str(accuracy*100, '%.2f'), '%']);

三、关键优化

1. 特征降维
% 使用PCA降维(保留95%方差)
[coeff, score, ~] = pca(trainingFeatures);
selectedFeatures = score(:,1:100); % 选择前100个主成分
2. 参数调优
% 网格搜索优化SVM参数
tuneModel = fitcsvm(trainingFeatures, trainingLabels, ...'KernelFunction', 'rbf', ...'OptimizeHyperparameters', 'auto', ...'HyperparameterOptimizationOptions', struct('AcquisitionFunctionName', 'expected-improvement-plus'));
3. 类别不平衡处理
% 添加类别权重
classWeights = [0.8, 0.2]; % 根据样本比例设置
svmModel = fitcecoc(trainingFeatures, trainingLabels, ...'ClassNames', unique(trainingLabels), ...'Cost', [0 1; 2 0], ... % 错误分类惩罚矩阵'ClassNames', classWeights);

四、性能评估

%% 分类报告
disp('分类报告:');
disp(classificationReport(testLabels, predictedLabels));%% ROC曲线(二分类示例)
[X,Y,T,AUC] = perfcurve(testLabels, predictedLabels, 'cat1');
figure;
plot(X,Y);
xlabel('False Positive Rate');
ylabel('True Positive Rate');
title(['AUC = ', num2str(AUC, '%.2f')]);

参考代码 对图片提取HOG、GLCM特征,利用SVM进行分类 www.youwenfan.com/contentcnq/60101.html

五、完整代码结构

Project/
├── data/
│   ├── train_data/  # 训练集(子文件夹为类别)
│   └── test_data/   # 测试集
├── src/
│   ├── feature_extraction.m  # 特征提取函数
│   └── svm_classifier.m      # SVM分类函数
├── results/
│   ├── confusion_matrix.png
│   └── roc_curve.png
└── main.m                    # 主程序入口

六、典型应用场景

  1. 工业质检:识别金属表面缺陷(划痕、斑点等)
  2. 医学影像:分类X光片中的病变区域(如肺炎检测)
  3. 交通标志识别:基于偏振特性的多角度分类

七、注意事项

  1. 数据集平衡:使用imbalancedData工具箱处理类别不均衡
  2. 特征可视化:通过t-SNE降维观察特征分布
  3. 实时性优化:使用parfor并行计算加速特征提取

八、扩展改进

  1. 多尺度特征融合:结合不同尺度的HOG特征
  2. 深度学习结合:使用预训练CNN提取高层特征
  3. 迁移学习:在小样本场景下微调预训练模型
http://www.jsqmd.com/news/322213/

相关文章:

  • 如何利用YashanDB提升信息安全与隐私保护
  • 湘潭英语雅思培训机构推荐、2026权威测评出国雅思辅导机构口碑榜
  • 语音播报功能 C# net4.5代码
  • 衡阳英语雅思培训机构推荐,2026权威测评出国雅思辅导机构口碑榜
  • MySQL用户口令加密设置
  • 理解vue中的ref
  • 衡水英语雅思培训机构推荐;2026权威测评出国雅思辅导机构口碑榜
  • 湘潭英语雅思培训机构推荐,2026权威测评出国雅思辅导机构口碑榜
  • 云计算网络基础:VPC、子网与安全组配置
  • 无人机螺旋桨运行专业的技术解析
  • 1 篇看懂:以太网多参量传感器为什么能适配所有工业场景?
  • zview3.1安装教程
  • 廊坊英语雅思培训机构推荐。2026权威测评出国雅思辅导机构口碑榜
  • 如何借助YashanDB实现高效的数据集成
  • 衡水英语雅思培训机构推荐。2026权威测评出国雅思辅导机构口碑榜
  • [特殊字符] 普通用户也能轻松搞定:使用微软官方工具 texconv 将图片转为 8.8.8.8 ARGB 32bpp 无压缩 DDS(无 MIP、2D 纹理)
  • 移动端跨平台方案对比:Flutter与React Native
  • 系列一:2D 游戏 UI 组件库 (Game UI Asset Kit)提示词详解
  • 如果一个公司要自建物联网平台,那么应该怎么搭建呢?
  • 华为笔记本电脑:接口配置与日常需求的完美匹配
  • 2026年路灯厂家哪家强? 优质生产厂家盘点及实用选型参考与选型指南
  • 如何借助YashanDB数据库构建弹性数据存储架构
  • 2026年全案落地终极选型指南:TOP5家具源头工厂交付确定性与整屋系统协同融合的广州深圳东莞深度解析
  • 廊坊英语雅思培训机构推荐;2026权威测评出国雅思辅导机构口碑榜
  • 湘潭英语雅思培训机构推荐;2026权威测评出国雅思辅导机构口碑榜
  • 微服务治理:服务发现与配置中心架构设计
  • 百考通文献综述写作功能:AI智能辅助,三步生成逻辑清晰、结构完整、引用规范的高质量学术综述
  • 如何借助YashanDB数据库构建数据驱动企业
  • IMU如何成为机器人自主移动的核心传感器
  • 权限控制操作流程验证:软件测试从业者的实用指南