【SVM目标识别分类】基于MATLAB的SVM移动目标识别和分类仿真

1.软件版本

matlab2017b

2.部分核心代码

clc;
clear;
close all;
warning off;


video          = mmreader('vedios\test21.avi');
nFrames        = video.NumberOfFrames; %得到帧数
H              = video.Height;         %得到高度
W              = video.Width;          %得到宽度
Rate           = video.FrameRate;
mov(1:nFrames) = struct('cdata',zeros(H,W,3,'uint8'),'colormap',[]);




Npix           = [video.Width video.Height];
F_update       = [1 0 1 0; 
                  0 1 0 1; 
                  0 0 1 0; 
                  0 0 0 1];

Npop           = 5000;

Xstd_rgb = 50;
Xstd_pos = 25;
Xstd_vec = 5;

Xrgb_trgt = [255; 255; 255];

X = func_create_particles(Npix,Npop);





%%
%SVM预先训练
[svmModel1,svmModel2]=func_SVM_Train();






Xtrack=cell(1,nFrames);
Ytrack=cell(1,nFrames);
%read one frame every time

Xview=[];
Yview=[];





for i = 340:nFrames-10
    i
    Vedios       = read(video,i);
    
    
    P1           = im2double(rgb2gray(read(video,i)));
    P2           = im2double(rgb2gray(read(video,i+1)));
    P3           = im2double(rgb2gray(read(video,i+2)));

    [Pd,X]       = func_tracking(P1,P2,P3,X,F_update,Xstd_pos,Xstd_vec,Xstd_rgb,Xrgb_trgt);
    
    %跟踪效果显示
    [P3,Ss,Xd,Yd]= func_track(Vedios,Pd);
    
    %基于SVM进行分类
    %获得面积
    C1 = [];
    C2 = [];
    C  = [];
    
    if isempty(Ss) == 0;
       for jj = 1:length(Ss)
           %对面积进行识别
           C1 = svmclassify(svmModel1,Ss(jj),'showplot',false);  
           C2 = svmclassify(svmModel2,Ss(jj),'showplot',false);   
           if C1 == 'false'
              C(jj) = 1;
           end
           if C1 == 'true'
               if C2 == 'false'
                  C(jj) = 2;
               end
               if C2 == 'true'
                  C(jj) = 3;
               end    
           end    
       end
    end
    
%      Ss
%     C
    
    
    [P4,Ss,Xd,Yd,Xt,Yt] = func_track2(Vedios,Pd,Ss,C);
    
    Xtrack{i}=[Xd];
    Ytrack{i}=[Yd];
    

    figure(1);
    subplot(221);
    imshow(P1);
    title('原始视频');
    subplot(222);
    image(Vedios);
    hold on
    plot(X(2,1:1:end), X(1,1:1:end), '.')
    hold off
    title('粒子滤波跟踪');
    
    subplot(223);
    %跟踪效果
    imshow(Pd);
    title('跟踪效果');
    
    subplot(224);
    %跟踪效果
    imshow(P4);
    title('跟踪效果');  
    for jj = 1:length(C)
        if C(jj)==1
           text(Yt(jj),Xt(jj),'People');
        end
        if C(jj)==2
           text(Yt(jj),Xt(jj),'Electric');
        end
        if C(jj)==3
           text(Yt(jj),Xt(jj),'Car');
        end
    end
    hold on
 
    hold on
    
    
    
end










function [svmModel1,svmModel2]=func_SVM_Train();

M          = 3;
N          = 1000;
trainData  = M*rand(1,N);     
for i = 1:length(trainData);
    if trainData(i)<=0.5
       trainLabel1(i) = 0;%人
    end
    if trainData(i)>0.5
       trainLabel1(i) = 1;
    end         
end
trainLabel1s = nominal(ismember(trainLabel1,1));   

for i = 1:length(trainData);
    if trainData(i)<=1.8
       trainLabel2(i) = 0;
    end    
    if trainData(i)>1.8
       trainLabel2(i) = 1;
    end        
end
trainLabel2s = nominal(ismember(trainLabel2,1));   
           
svmModel1   = svmtrain(trainData, trainLabel1s,'kernel_function','rbf' ,'showplot',false);
svmModel2   = svmtrain(trainData, trainLabel2s,'kernel_function','rbf' ,'showplot',false);

3.操作步骤与仿真结论

 

4.参考文献 

A10-42

6.完整源码获得方式

方式1:微信或者QQ联系博主

方式2:订阅MATLAB/FPGA教程,免费获得教程案例以及任意2份完整源码

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个基于Matlab的车型识别代码示例,其中使用了HOG特征和SVM分类器: 1. 数据集准备: ``` % 导入车辆数据集 vehicleDataset = imageDatastore('vehicles', 'IncludeSubfolders', true, 'LabelSource', 'foldernames'); % 随机划分训练集和测试集 rng(0); [trainDataset, testDataset] = splitEachLabel(vehicleDataset, 0.8, 'randomize'); ``` 2. 特征提取: ``` % 定义HOG特征提取器 cellSize = [4 4]; hogFeatureSize = 144; hogFeatureExtractor = @helperExtractHOGFeatures; % 提取训练集和测试集的HOG特征 trainFeatures = helperExtractFeatures(trainDataset, hogFeatureExtractor, cellSize, hogFeatureSize); testFeatures = helperExtractFeatures(testDataset, hogFeatureExtractor, cellSize, hogFeatureSize); ``` 3. 特征选择: ``` % 使用PCA方法对训练集的特征进行降维 numFeatures = size(trainFeatures, 2); [coeff, score, ~, ~, explained] = pca(trainFeatures); numComponents = find(cumsum(explained) >= 95, 1); trainFeatures = score(:, 1:numComponents); testFeatures = bsxfun(@minus, testFeatures, mean(trainFeatures, 1)) * coeff(:, 1:numComponents); ``` 4. 训练分类器: ``` % 训练SVM分类SVMModel = fitcsvm(trainFeatures, trainDataset.Labels, 'KernelFunction', 'rbf', 'Standardize', true, 'ClassNames', unique(trainDataset.Labels)); ``` 5. 测试分类器: ``` % 使用测试集评估分类器的性能 predictedLabels = predict(SVMModel, testFeatures); accuracy = mean(predictedLabels == testDataset.Labels); ``` 6. 应用场景: ``` % 加载测试图像并进行车型识别 testImage = imread('test.jpg'); testImage = imresize(testImage, [64 64]); testFeatures = helperExtractHOGFeatures(testImage, cellSize, hogFeatureSize); testFeatures = bsxfun(@minus, testFeatures, mean(trainFeatures, 1)) * coeff(:, 1:numComponents); predictedLabel = predict(SVMModel, testFeatures); ``` 其中,`helperExtractHOGFeatures`和`helperExtractFeatures`是自定义函数,用于提取HOG特征和特征向量。 这是一个简单的车型识别实现示例,具体的实现方法和代码结构可能因应用场景和需求而异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值