matlab LBP+SVM 模型转C语言的格式

clc; 
clear all; 
close all;
%%   使用SVM做识别,测试准确率
% Files = dir(fullfile('.\Car','*.jpg'));
file_path =  'E:/matlab_0808/0816/people1/';% 图像文件夹路径
img_path_list = dir(strcat(file_path,'*.jpg'));%获取该文件夹中所有jpg格式的图像
CarNum = length(img_path_list);%获取图像总数量
% Files = dir(fullfile('.\Car2','*.png'));
% CarNum = length(Files);
CarFea=[];
for i = 1:CarNum
    image_name = img_path_list(i).name;% 图像名
    Img =  imread(strcat(file_path,image_name)); 
    imggray = rgb2gray(Img);
    [m,n] = size(imggray);
    H2=lbp(imggray);
    H2fea = (H2-min(H2))/(max(H2)-min(H2));
    CarFea=[CarFea;H2fea];
end

%Files = dir(fullfile('.\Tank3','*.jpg'));
file_path =  'E:/matlab_0808/0816/other/';% 图像文件夹路径
img_path_list = dir(strcat(file_path,'*.jpg'));%获取该文件夹中所有jpg格式的图像
TankNum = length(img_path_list);%获取图像总数量
TankFea=[];
for i = 1:TankNum
    image_name = img_path_list(i).name;% 图像名
    Img =  imread(strcat(file_path,image_name)); 
    %Img = imread([Files(i).folder '\' Files(i).name]);   
    %自己写图像处理函数 ImgProc(Img);
    imggray = rgb2gray(Img);
     
    [m,n] = size(imggray);
%     imshow(I)
    H2=lbp(imggray);
    H2fea = (H2-min(H2))/(max(H2)-min(H2));
    TankFea=[TankFea;H2fea];
end
 
dataFea = [CarFea;TankFea]; 
Group = [0*ones(CarNum,1); 1*ones(TankNum,1)];

%classifer = fitcecoc(dataFea,Group);  


% SVM train
svmStr = svmtrain(dataFea,Group,'kernel_function','linear','showplot',true);

fid = fopen('SVM_people_reg.txt', 'at+'); %-t模式按照文本而非二进制模式读写 


fprintf(fid,'%f\n',length(svmStr.Alpha));% 写入VecNum
fprintf(fid,'\n\n\n');

fprintf(fid,'%f\n',svmStr.Bias());% 写入Bias
fprintf(fid,'\n\n\n');

% 写入SupportVectors
for i=1:length(svmStr.Alpha)
    fprintf(fid,'{'); 
    fprintf(fid,'%f,',svmStr.SupportVectors(i,1:255));
    fprintf(fid,'%f',svmStr.SupportVectors(i,256:256));
    fprintf(fid,'},\n'); 
end
fprintf(fid,'\n\n\n');

% 写入Alpha
for i=1:length(svmStr.Alpha)
    fprintf(fid,'{'); 
    fprintf(fid,'%f',svmStr.Alpha(1));
    fprintf(fid,'},\n'); 
end
fprintf(fid,'\n\n\n');

% 写入shift
fprintf(fid,'{'); 
fprintf(fid,'%f,',svmStr.ScaleData.shift(1:255));
fprintf(fid,'%f',svmStr.ScaleData.shift(256:256));
fprintf(fid,'}\n'); 
fprintf(fid,'\n\n\n');

% 写入scaleFactor
fprintf(fid,'{'); 
fprintf(fid,'%f,',svmStr.ScaleData.scaleFactor(1:255));
fprintf(fid,'%f',svmStr.ScaleData.scaleFactor(256:256));
fprintf(fid,'}\n'); 

fclose(fid);

LBP(Local Binary Pattern)和SVM(Support Vector Machine)是两种常用的图像特征提取和分类算法,在表情识别中被广泛应用。 LBP是一种局部纹理特征描述符,用于描述图像局部区域的纹理信息。它的原理是将图像的每个像素与其周围邻域像素进行比较,根据比较结果生成二进制数,进而构建出一个LBP图像。LBP算法将图像分割成很多个小的局部区域,对于每个局部区域,采用相同的规则计算LBP值。这样在整个图像上,每个局部区域都有一个LBP值。最后,将所有局部区域的LBP值组合在一起,形成一个LBP特征向量,用来表示整个图像的纹理信息。 SVM是一种二分类模型,它通过在特征空间中找到一个最优的超平面,将训练样本划分为两个不同的分类。在表情识别中,我们可以使用SVM来训练分类器,将表情分为不同的类别,比如开心、悲伤等。训练过程中,需要提供一组带有标签的样本数据集,其中包含不同表情的图像和对应的标签。通过提取LBP特征向量,将其作为输入,通过训练SVM模型,得到一个用于表情分类的最优超平面。 当测试新的图像时,首先需要使用同样的LBP方法提取其纹理特征向量,然后将该特征向量输入到训练好的SVM分类器中,通过分类器输出的结果来判断该图像属于哪个表情类别。此时,我们可以将该输出结果与事先定义的表情类别标签进行对应,从而实现表情的识别。 综上所述,LBPSVM结合起来用于表情识别的代码,主要包含LBP特征提取和SVM分类器的训练与预测过程。通过提取图像的纹理信息,训练一个分类器,再进行表情分类的识别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值