MATLAB 图像识别基础教程(附环境部署)


前言

MATLAB 的图像识别功能强大且易用,支持从基础算法到深度学习的全流程开发。以下是系统介绍和实战指南。


环境配置

MATLAB下载安装教程:https://blog.csdn.net/tyatyatya/article/details/147879353

MATLAB下载地址链接:https://pan.quark.cn/s/364584a880f7

一、核心功能与工具

MATLAB 提供了完整的图像识别工具箱,涵盖:

  • 预处理:图像增强、降噪、滤波、几何变换。
  • 特征提取:SIFT、SURF、HOG、CNN 特征。
  • 分类算法:传统机器学习 (SVM、决策树) 和深度学习 (CNN)。
  • 目标检测:基于 Faster R-CNN、YOLO 等预训练模型。
  • 分割技术:语义分割、实例分割。
  • 深度学习:支持自定义网络或迁移学习 (ResNet、VGG 等)。

二、图像识别工作流程

1. 数据准备与预处理

% 加载图像数据
imds = imageDatastore('path/to/images', ...
    'IncludeSubfolders', true, ...
    'LabelSource', 'foldernames');

% 数据增强(旋转、翻转等)
augmenter = imageDataAugmenter(...
    'RandRotation', [-15, 15], ...
    'RandXReflection', true, ...
    'RandYReflection', true);

augimds = augmentedImageDatastore([224 224 3], imds, ...
    'DataAugmentation', augmenter);

% 划分训练集和测试集
[imdsTrain, imdsTest] = splitEachLabel(imds, 0.7, 'randomized');

2. 特征提取与模型训练

  • 方法 A:传统机器学习(HOG 特征 + SVM)
% 提取HOG特征
numImages = numel(imds.Files);
features = zeros(numImages, 1764);
labels = zeros(numImages, 1);

for i = 1:numImages
    img = readimage(imds, i);
    img = imresize(img, [100 100]);
    features(i,:) = extractHOGFeatures(img);
    labels(i) = i;
end

% 训练SVM分类器
tbl = table(features, categorical(labels));
mdl = fitcecoc(tbl, 'Var1');
  • 方法 B:深度学习(自定义 CNN)
% 定义网络结构
layers = [
    imageInputLayer([224 224 3])
    
    convolution2dLayer(3, 16, 'Padding', 'same')
    batchNormalizationLayer
    reluLayer
    
    maxPooling2dLayer(2, 'Stride', 2)
    
    convolution2dLayer(3, 32, 'Padding', 'same')
    batchNormalizationLayer
    reluLayer
    
    maxPooling2dLayer(2, 'Stride', 2)
    
    fullyConnectedLayer(128)
    reluLayer
    dropoutLayer(0.5)
    
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer
];

% 训练网络
options = trainingOptions('sgdm', ...
    'InitialLearnRate', 0.001, ...
    'MaxEpochs', 10, ...
    'MiniBatchSize', 32, ...
    'ValidationData', imdsTest, ...
    'Verbose', false, ...
    'Plots', 'training-progress');

net = trainNetwork(imdsTrain, layers, options);

3. 模型评估与预测

% 在测试集上评估
YPred = classify(net, imdsTest);
YTest = imdsTest.Labels;
accuracy = mean(YPred == YTest);
fprintf('分类准确率: %.2f%%\n', accuracy*100);

% 混淆矩阵
cm = confusionmat(YTest, YPred);
figure
cmplot = confusionchart(cm, categories(YTest));
cmplot.Title = '混淆矩阵';
cmplot.RowSummary = 'row-normalized';
cmplot.ColumnSummary = 'column-normalized';

% 单张图像预测
I = imread('test_image.jpg');
I = imresize(I, [224 224]);
label = classify(net, I);
imshow(I)
title(string(label));

三、高级应用:目标检测与分割

1. 基于预训练模型的目标检测

% 加载预训练Faster R-CNN模型
net = fasterRCNNObjectDetector('resnet50');

% 检测图像中的对象
I = imread('street_scene.jpg');
[bboxes, scores, labels] = detect(net, I);

% 可视化结果
I = insertObjectAnnotation(I, 'rectangle', bboxes, labels);
imshow(I)
title('目标检测结果');

2. 图像分割

% 加载预训练U-Net模型
net = unetLayers([224 224 3], numClasses);

% 训练分割网络
pixelLabelID = trainingOptions('sgdm', ...
    'InitialLearnRate', 0.001, ...
    'MaxEpochs', 20, ...
    'MiniBatchSize', 16);

pixelLabelID = trainNetwork(pximds, net, options);

% 预测分割结果
I = imread('test_image.jpg');
[C, scores] = semanticseg(I, pixelLabelID);

% 可视化分割结果
B = labeloverlay(I, C);
imshow(B)
title('语义分割结果');

四、实战案例:手写数字识别

% 加载MNIST数据集
digitDatasetPath = fullfile(matlabroot, 'toolbox', 'nnet', ...
    'nndemos', 'nndatasets', 'DigitDataset');
digitData = imageDatastore(digitDatasetPath, ...
    'IncludeSubfolders', true, ...
    'LabelSource', 'foldernames');

% 创建简单CNN
layers = [
    imageInputLayer([28 28 1])
    
    convolution2dLayer(5, 20)
    reluLayer
    maxPooling2dLayer(2, 'Stride', 2)
    
    convolution2dLayer(5, 50)
    reluLayer
    maxPooling2dLayer(2, 'Stride', 2)
    
    fullyConnectedLayer(500)
    reluLayer
    dropoutLayer(0.5)
    
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer
];

% 训练网络
options = trainingOptions('sgdm', ...
    'InitialLearnRate', 0.001, ...
    'MaxEpochs', 10, ...
    'MiniBatchSize', 128);

net = trainNetwork(digitData, layers, options);

% 测试模型
I = imread('test_digit.png');
I = im2gray(I);
I = imresize(I, [28 28]);
I = imcomplement(I);  % 反转黑白

digit = classify(net, I);
imshow(I)
title(sprintf('识别结果: %d', digit));

五、性能优化与部署

GPU 加速:

options = trainingOptions('sgdm', ...
    'ExecutionEnvironment', 'gpu');

模型压缩:

% 量化模型
quantizedNet = quantizeNetwork(net, 'WeightPrecision', 8);

导出到其他平台:

% 导出为TensorFlow格式
exportONNXNetwork(net, 'model.onnx');

MATLAB 的图像识别能力兼具灵活性和高效性,适合快速原型开发和学术研究。通过内置的预训练模型和可视化工具,即使没有深厚的编程背景,也能快速实现复杂的图像识别任务。建议结合具体案例(如医学图像分析、自动驾驶场景)深入实践,进一步探索其强大功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值